API quickstart

Create your first pass over the REST API in a few minutes - get a key, call the endpoint, and get back an install link you can send to a customer.

Updated 7/26/2026

PocketPass is API-first: everything the dashboard does, the API does. This guide gets you from nothing to a real pass in a few minutes.

The full interactive reference, with every parameter and response, lives at the API reference. This article is the orientation.

Base URL

https://api-prod.getpocketpass.com

All endpoints are under /api/v1.

Step 1 - Create an API key

Open Settings → API keys, create a key and give it a name that says where it'll be used - "Booking system", "Staging".

The key is shown once. Copy it into your secret store there and then. If you lose it, revoke it and create another. See API keys and authentication.

Step 2 - Check it works

Every request carries the key as a bearer token.

curl https://api-prod.getpocketpass.com/api/v1/pass-templates \
  -H "Authorization: Bearer pk_live_your_key_here"

You'll get back your templates. If you get a 401, the key is wrong or revoked; if 403, check the account isn't suspended.

Note the id of the template you want to issue from - you'll need it next.

Step 3 - Create a pass

The template is passed as a query parameter, and the field values go in the body.

curl -X POST "https://api-prod.getpocketpass.com/api/v1/passes?passTemplate=TEMPLATE_ID&extId=member-10248" \
  -H "Authorization: Bearer pk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "passContent": {
      "memberName": { "value": "Jane Doe" },
      "tier": { "value": "Gold" }
    },
    "groupTags": ["vip", "london"]
  }'

passTemplate is required on create. Without it you get a 422 - there's no default template, because guessing which design a pass should use is not a decision the API should make for you.

The keys inside passContent are the field ids from your template, not the labels. You can see them in the template builder under Show advanced, or in the response from GET /api/v1/pass-templates/{id}.

Step 4 - Send the customer their pass

The response includes the pass id. The install page is:

https://getpocketpass.com/p/{passId}

Send that link, or render its QR code. That's the whole customer journey - see How customers add a pass.

Step 5 - Update it later

Because you set extId on create, you can address the pass by your own reference rather than storing ours:

curl -X PATCH https://api-prod.getpocketpass.com/api/v1/passes/member-10248 \
  -H "Authorization: Bearer pk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "passContent": { "tier": { "value": "Platinum" } } }'

The pass in the customer's wallet updates by itself. See Live pass updates.

The response shape

Success:

{ "data": { "id": "...", "type": "pass", "attributes": { } } }

Failure:

{ "error": { "code": "invalid_request", "message": "..." } }

Both are consistent across every endpoint, so you can write one handler. See API errors and rate limits.

What else you can do

You want toEndpoint
List or create templates/api/v1/pass-templates
List, create, update or void passes/api/v1/passes
Push a message to one passPOST /api/v1/passes/{id}/notification
Manage webhook endpoints/api/v1/webhook-subscriptions

Full detail in the API reference.

Where to go next

More in Developers