Pass API
Reference

Endpoint reference

All 92 routes, grouped by the prefix that guards them.

Every route below already includes the /api context path. Paths are grouped by prefix because the prefix is the access rule — each one is guarded by a path-matched interceptor, so a route added under it later is protected by its URL rather than by someone remembering an annotation.

These tables are generated against the controllers and say what each route is for. They do not carry request and response schemas: those live in pass-service/api-tracker/, which is the contract of record and stays accurate in a way a hand-written mirror would not.

Credentials at a glance

SurfaceCredentialMissingWrong role
/api/partnerAuthorization: Bearer <tenant key>401—
/api/dashboardSession cookie401403 unless OWNER/MANAGER
/api/scanSession cookie from a paired device401any role admitted
/api/publicnone, or an unguessable id + ?t= token404—
/api/apple/v1Authorization: ApplePass <token>401—
/api/adminPlatform admin session401—

A scanner-credential session reaching /api/dashboard is a 403, even for an OWNER: a paired till phone is a durable secret sitting on a counter, and the dashboard gate checks the credential as well as the role.

Status codes

200Success, including idempotent writes that changed nothing
201A genuinely new resource. Note enrollment and partner issuance answer 200, not 201
202Accepted — notice sends, which queue
204Deletes and logouts
400Validation or a domain rule. Carries errors[]
401No session, or a bad credential
403Signed in, but not here
404Not found — also the answer for a wrong pass token, deliberately
409A conflict: already redeemed, already claimed, not published, slug taken

Pagination

Two lists paginate, both with the same shape: page (0-based, default 0) and size (default 20, 1–100, outside that a 400). Everything else returns a plain array.

  • GET /api/dashboard/customers
  • GET /api/dashboard/programs/{programId}/notices

On this page