Skip to main content

Issue a pass

POST /passes/issue

Issues a pass to a member, or an event ticket to a non-member recipient. Requires the passes:issue permission.

Note

Use this endpoint for all pass issuing. For standard member passes, provide memberId and passTemplateId, plus optional expiryDate, customFields, and sendEmail. For non-member event tickets, omit memberId and provide recipientName and recipientEmail instead. Non-member recipients are only supported for event ticket templates.

For event tickets, include eventName, eventTime, and any seatInfo required by the selected template. eventTime is optional only when the selected template is configured as redeemable any time. Section, row, and seat are required when visible; hidden seat fields can be omitted. Gate is optional for backwards compatibility, even when it is visible on the template. If the template only uses custom fields, omit seatInfo and provide those values in customFields.

Set maxUses to issue a multi-use event ticket. If omitted, event tickets default to 1 use. Each successful ticket scan consumes one use and the ticket is automatically inactivated when no uses remain.

Authorization​

X-API-Key required

Request Body​

FieldTypeRequiredLimitsDescription
memberIdstringNoMember id to issue the pass to. Use the member _id returned by member endpoints, not your external memberId. Required for standard member passes.
passTemplateIdstringYesPass template id to issue. Use the id from the List pass templates endpoint.
expiryDatestring (date-time)NoOptional pass expiry date.
customFieldsobjectNoCompany-level custom field values to store on the issued pass. Unknown custom field keys are rejected.
sendEmailbooleanNoDefaults to true. Set to false to issue the pass without sending the pass email.
maxUsesintegerNomin 1, max 100Event tickets only. Maximum number of successful scans allowed before the ticket is automatically inactivated. Send as a top-level field, not inside customFields.
eventTimestring (date-time)NoEvent start time for event ticket templates. Required unless supplied by eventId or customFields.eventDateTime, or the template permits redemption at any time.
eventNamestringNomin length 1Event name for event ticket templates. Required unless supplied by eventId or customFields.eventName.
seatInfoobjectNoSeat details for event ticket passes. For event ticket templates, include values for visible built-in section, row, and seat fields. Gate is optional. Hidden fields can be omitted. Custom-only event ticket templates can omit seatInfo.
recipientNamestringNomin length 1Non-member event ticket recipient name. Use with recipientEmail instead of memberId.
recipientEmailstring (email)NoNon-member event ticket recipient email. Use with recipientName instead of memberId.
eventIdstringNoEvent tickets only. Organisation-owned, non-cancelled event _id. Uses the stored event name and start time and enforces event capacity. Find it through GET /events or GET /event-records/{id}.

Event Ticket Uses​

Event ticket passes support a top-level maxUses field. Use this for tickets that can be scanned more than once, such as family ride tickets.

If maxUses is omitted, the ticket is issued with 1 use. Each successful ticket scan atomically consumes 1 use, records a redemption, updates usesRemaining and redeemedCount, and automatically inactivates the ticket when usesRemaining reaches 0.

Repeat scans of the same ticket within the company's configured scan-ignore window are treated as duplicates: no use is consumed and the response indicates the scan was ignored.

maxUses must be sent as a top-level field, not inside customFields.

Event Ticket Custom Fields​

For event ticket templates, customFields can populate company-level custom fields configured on the pass design with a custom_ dynamic field.

Use a configured company custom field key in the API payload without the custom_ prefix. For example, a pass design field with dataField: "custom_guardianSpaces" is populated by customFields.guardianSpaces when guardianSpaces exists in the company's custom field definitions.

Built-in event ticket fields are supplied separately:

Pass design dynamic fieldAPI source
company_nameThe company name
event_nameeventName
event_timeeventTime
gateseatInfo.gate
screenseatInfo.section
rowseatInfo.row
seatseatInfo.seat
ticket_max_usesmaxUses
ticket_uses_remainingRemaining ticket uses after scans
ticket_redeemed_countNumber of redeemed ticket uses
ticket_uses_progressRedeemed/maximum uses, for example 1/4
custom_<key>customFields.<key> for a configured company custom field

Google Wallet stores row and seat as separate values (seatInfo.row and seatInfo.seat). Google may display them together as Row / Seat, but API payloads should continue to send them as separate row and seat fields. Do not send a combined row_seat field.

If a pass template hides one of the seat fields, omit the matching value from seatInfo. For example, when Gate is hidden, omit seatInfo.gate. When Row is hidden, omit seatInfo.row. If a template only uses custom fields in its information row, omit seatInfo entirely.

Issue Against an Existing Event​

Supply eventId to use an organisation-owned event's stored name and start time. This also enforces the event's ticket capacity. The event must not be cancelled. Find IDs with GET /events or GET /event-records/{id}.

An eventId is only valid with an event ticket template. Without it, supply the required event fields directly or through configured custom fields. Templates that allow redemption at any time do not require eventTime.

Request Examples​

curl -X POST "https://api.remypass.com/api/v1/public/passes/issue" \
  -H "Accept: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "memberId": "507f1f77bcf86cd799439011",
  "passTemplateId": "507f1f77bcf86cd799439012",
  "expiryDate": "2024-12-31T23:59:59.000Z",
  "customFields": {
    "membershipLevel": "Premium"
  },
  "sendEmail": true
}'

Use Case Examples​

Issue a pass to a member​

Use this for standard member pass templates.

curl -X POST https://api.remypass.com/api/v1/public/passes/issue \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberId": "507f1f77bcf86cd799439011",
"passTemplateId": "507f1f77bcf86cd799439012",
"expiryDate": "2030-12-31T23:59:59.000Z",
"customFields": {
"membershipLevel": "Premium",
"accessLevel": "VIP",
"issueDate": "2030-01-15"
},
"sendEmail": true
}'

Issue an event ticket pass to a member​

Use this when the ticket recipient is already a member. Requires a pre-created event ticket template.

curl -X POST https://api.remypass.com/api/v1/public/passes/issue \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberId": "507f1f77bcf86cd799439011",
"passTemplateId": "507f1f77bcf86cd799439012",
"eventTime": "2030-12-25T19:30:00.000Z",
"eventName": "The Matrix Reloaded",
"maxUses": 4,
"seatInfo": {
"seat": "A12",
"row": "A",
"section": "Screen 1"
},
"customFields": {
"guardianSpaces": "2",
"siblingSpaces": "1",
"under2s": "0"
},
"sendEmail": true
}'

Issue a custom-field event ticket without seats​

Use this when the selected event ticket template does not expose built-in Gate, Section, Row, or Seat fields.

curl -X POST https://api.remypass.com/api/v1/public/passes/issue \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberId": "507f1f77bcf86cd799439011",
"passTemplateId": "69fb31b35a479408bfa08e62",
"eventTime": "2030-06-14T10:00:00.000Z",
"eventName": "Summer Splash Day",
"expiryDate": "2030-06-14T23:59:59.000Z",
"customFields": {
"guardianSpaces": "2",
"siblingSpaces": "1",
"under2s": "0"
},
"sendEmail": true
}'

Issue an event ticket to a non-member​

Use this when the ticket recipient is not a RemyPass member. Requires a pre-created event ticket template.

curl -X POST https://api.remypass.com/api/v1/public/passes/issue \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"passTemplateId": "507f1f77bcf86cd799439012",
"recipientName": "John Doe",
"recipientEmail": "john@example.com",
"eventTime": "2030-12-25T19:30:00.000Z",
"eventName": "The Matrix Reloaded",
"maxUses": 1,
"seatInfo": {
"seat": "A12",
"row": "A",
"section": "Screen 1"
},
"sendEmail": true
}'

Issue a ticket for an existing event​

Uses the stored event name, start time and capacity

curl -X POST https://api.remypass.com/api/v1/public/passes/issue \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"memberId":"507f1f77bcf86cd799439011","passTemplateId":"507f1f77bcf86cd799439012","eventId":"507f1f77bcf86cd799439013","seatInfo":{"gate":"North","section":"Main","row":"A","seat":"12"}}'

Responses​

StatusDescription
201Pass issued.
400Bad request. The top-level message explains what is invalid and, where applicable, the errors array contains structured field details.
401Missing or invalid API key.
403The caller is not allowed to access this resource.
404Resource not found.
409Event ticket capacity reached
429Rate limit exceeded.
500Server error.

201 Response Example​

{
"success": true,
"message": "string",
"data": {
"passInstance": {
"_id": "507f1f77bcf86cd799439013",
"serialNumber": "string",
"status": "active",
"member": "string",
"pass": "string",
"recipientName": "string",
"recipientEmail": "user@example.com",
"expiryDate": "2026-01-01T12:00:00.000Z",
"issuedAt": "2026-01-01T12:00:00.000Z",
"walletUrls": {
"apple": "string",
"google": "string"
},
"maxUses": 1,
"usesRemaining": 1,
"redeemedCount": 1,
"lastRedeemedAt": "2026-01-01T12:00:00.000Z",
"passType": "generic",
"customFields": {},
"eventTime": "2026-01-01T12:00:00.000Z",
"eventName": "string",
"seatInfo": {
"seat": "string",
"section": "string",
"row": "string",
"gate": "string"
},
"recipientTitle": "string",
"voided": true,
"voidedAt": "2026-01-01T12:00:00.000Z",
"isNonMemberTicket": true,
"currentStamps": 1,
"lifetimeStampsEarned": 1,
"lastStampUpdate": "2026-01-01T12:00:00.000Z",
"createdAt": "2026-01-01T12:00:00.000Z",
"updatedAt": "2026-01-01T12:00:00.000Z",
"membershipManaged": true,
"memberMembershipId": "string"
},
"walletUrls": {
"apple": "string",
"google": "string"
},
"emailSent": true,
"message": "string"
}
}

Response Fields​

FieldTypeDescriptionAttributes
successboolean
messagestring
dataobject
Show child attributes
  • passInstance: object
    Show child attributes
    • _id: string
    • serialNumber: string
    • status: active, inactive, expired, void
    • member: string or object
      Show child attributes
      • _id: string
      • title: Mr, Ms, Mrs, Miss, Sir, Madam, Dr, Rev — Optional member title or honorific.
      • name: string — Member full name.
      • firstName: string — Member first name.
      • lastName: string — Member last name.
      • email: string (email) — Member email address. Used for pass delivery emails when a pass is issued.
      • address: object
      • contactPreferences: object — Optional marketing communication preferences. Essential service communications are unaffected.
      • memberId: string — External or organisation-defined member identifier.
      • memberSince: string (date-time) — Date the member joined. Defaults to the creation date when omitted.
      • type: Member, Visitor — Member category. Defaults to Member when omitted.
      • status: active, inactive — Member account status. Defaults to active when omitted.
      • location: string — Member location or branch.
      • phone: string — Member phone number.
      • dateOfBirth: string (date-time) — Member date of birth.
      • gender: male, female, other, prefer_not_to_say — Member gender.
      • notes: string — Internal member notes.
      • flagged: boolean — Whether the member is flagged for staff attention.
      • flagNote: string — Optional note shown when the member is flagged.
      • customFields: object — Organisation-defined custom field values keyed by custom field key. Use customFields only for fields configured by the organisation; use first-party fields such as phone, dateOfBirth, gender, and notes at the top level.
      • passes: array of object — Pass wrappers included by member list and lookup endpoints
      • createdAt: string (date-time)
      • updatedAt: string (date-time)
      • walletSummary: object — Included on member list responses
      • photo: string — Stored member photo URL
      • linkedMemberGroupId: string
    • pass: string or object
      Show child attributes
      • _id: string
      • name: string
      • description: string
      • type: generic, eventTicket, loyalty
      • approved: boolean
      • design: object — Visual design settings used when rendering Apple Wallet and Google Wallet passes.
      • loyalty: object — Loyalty pass configuration. Present for loyalty pass templates.
    • recipientName: string
    • recipientEmail: string (email)
    • expiryDate: string (date-time)
    • issuedAt: string (date-time)
    • walletUrls: object
      Show child attributes
      • apple: string (uri)
      • google: string (uri)
    • maxUses: integer — Maximum number of successful scans allowed for an event ticket. Defaults to 1 for tickets issued before multi-use support or when omitted.
    • usesRemaining: integer — Remaining successful scans available on an event ticket.
    • redeemedCount: integer — Number of successful event ticket redemptions.
    • lastRedeemedAt: string (date-time) — Timestamp of the latest successful event ticket redemption.
    • passType: generic, eventTicket, loyalty
    • customFields: object
    • eventTime: string (date-time)
    • eventName: string
    • seatInfo: object
      Show child attributes
      • seat: string
      • section: string
      • row: string
      • gate: string — Optional event ticket gate
    • recipientTitle: string
    • voided: boolean
    • voidedAt: string (date-time)
    • isNonMemberTicket: boolean
    • currentStamps: number
    • lifetimeStampsEarned: number
    • lastStampUpdate: string (date-time)
    • createdAt: string (date-time)
    • updatedAt: string (date-time)
    • membershipManaged: boolean — Included within member lookup pass wrappers
    • memberMembershipId: string — Managing membership _id, when included in a member lookup pass wrapper
  • walletUrls: object
    Show child attributes
    • apple: string (uri)
    • google: string (uri)
  • emailSent: boolean
  • message: string