/api-reference/openapi.json), which is itself generated from the live route definitions, so it cannot drift from the API’s actual behavior.
Authentication
Every request needs an access token (plt_...), sent either way:
401 UNAUTHORIZED; requests whose token lacks the operation’s scope get 403 FORBIDDEN.
Scopes
Most operations require a scope, documented on their endpoint pages (and machine-readable asx-required-scopes in the spec): passes:read, passes:write, pass-notifications:read,
pass-notifications:write, templates:read, webhooks:read, webhooks:write, scans:read.
The connection-verification operation accepts any valid access token so integrations can test a
least-privilege credential without borrowing an unrelated resource scope.
Resources
Conventions
- JSON everywhere: request and response bodies are
application/json(UTF-8). - IDs are opaque strings; don’t parse them.
- Timestamps are ISO 8601 / RFC 3339 in UTC.
- Idempotent issuance:
externalPassIdis unique per workspace, so re-sending a create with the same external ID doesn’t create a duplicate pass. - Async lifecycle: issuing, updating, and voiding are queued and processed in the background. The API returns immediately with the pass in its transitional status. Subscribe to webhooks rather than polling.
- Errors use a stable machine-readable shape with
errorCode,message, andcorrelationId. See Errors. - Pagination and filtering are cursor-based, with one consistent filter grammar across list endpoints. See Pagination and filtering.