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

FieldTypeRequiredDescription
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.
maxUsesintegerNoEvent 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 pass templates. Required when issuing an event ticket pass.
eventNamestringNoEvent name displayed on event ticket passes. Required when issuing an event ticket pass.
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.
recipientNamestringNoNon-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.

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.

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 "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberId": "507f1f77bcf86cd799439011",
"passTemplateId": "507f1f77bcf86cd799439012",
"expiryDate": "2024-12-31T23:59:59.000Z",
"customFields": {
"membershipLevel": "Premium",
"accessLevel": "VIP",
"issueDate": "2024-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 "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberId": "507f1f77bcf86cd799439011",
"passTemplateId": "507f1f77bcf86cd799439012",
"eventTime": "2024-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 "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"memberId": "507f1f77bcf86cd799439011",
"passTemplateId": "69fb31b35a479408bfa08e62",
"eventTime": "2026-06-14T10:00:00.000Z",
"eventName": "Summer Splash Day",
"expiryDate": "2026-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 "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"passTemplateId": "507f1f77bcf86cd799439012",
"recipientName": "John Doe",
"recipientEmail": "john@example.com",
"eventTime": "2024-12-25T19:30:00.000Z",
"eventName": "The Matrix Reloaded",
"maxUses": 1,
"seatInfo": {
"seat": "A12",
"row": "A",
"section": "Screen 1"
},
"sendEmail": true
}'

Responses

StatusDescription
201Pass issued.
400Bad request or validation error.
401Missing or invalid API key.
403The caller is not allowed to access this resource.
500Server error.

Response Fields

FieldTypeAttributes
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
      • name: string
      • email: string (email)
      • memberId: string
      • type: Member, Visitor
      • status: active, inactive
      • customFields: object
      • passes: integer
      • createdAt: string (date-time)
      • updatedAt: string (date-time)
    • pass: string or object
      Show child attributes
      • _id: string
      • name: string
      • description: string
      • type: string
      • approved: boolean
      • design: object
      • loyalty: object
    • 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
    • usesRemaining: integer
    • redeemedCount: integer
    • lastRedeemedAt: string (date-time)
  • walletUrls: object
    Show child attributes
    • apple: string (uri)
    • google: string (uri)
  • emailSent: boolean
  • message: string