Docs

Authentication

Last updated: 26 Oct 2026

All Admin API requests are authenticated with an organization-scoped API key passed as a Bearer token.

Bearer token

Authorization: Bearer YOUR_API_KEY

The key fully determines which organization the request can read. There is no organization or location parameter; a key can only ever access its own organization's data.

If the header is missing, malformed, expired, or the key has been revoked:

  • Status: 401 Unauthorized
  • Body:
{ "error": { "code": "unauthorized", "message": "Invalid or missing API key" } }

Permissions

Each key reads only what it was granted. Every endpoint needs one permission:

PermissionGrants
orders:readGET /orders, GET /orders/{id}
bookings:readGET /bookings, GET /bookings/{id} (and the /appointments paths)
stays:readGET /stays, GET /stays/{id}
tickets:readGET /tickets, GET /tickets/{id}
customers:readGET /customers, GET /customers/{id}
events:readGET /events
customer_data:readAdds customer and billing personal data to what the other permissions return
user_data:readAdds staff members' names and emails to what the other permissions return

customer_data:read and user_data:read open no endpoint of their own. They widen every response the key can already read: see Conventions → Customer privacy for the fields. No response names staff members yet, so user_data:read adds nothing today.

A request to an endpoint the key lacks the permission for returns 403 forbidden, naming the missing permission (see Errors). Keys created before permissions existed keep the access they had: every endpoint, without personal data.

Key management

Organization owners and admins manage keys under Settings → API keys (/settings/api):

  • Create a key and choose its permissions. The full secret is shown once, at creation. Store it immediately; it cannot be retrieved later (we keep only a hashed digest).
  • Edit a key's name and permissions. The change applies from the key's next request; the secret stays the same.
  • Rotate a key. Creates a replacement secret with the same permissions and keeps the old key valid for a grace window (24 hours by default), so you can swap without downtime, then it expires automatically.
  • Revoke a key. Takes effect immediately on the next request.

Keys are secret

Admin API keys are always secret keys, prefixed admin_sk_…. They grant server-to-server read access to your organization, so keep them server-side and never expose one in a browser.

There is no publishable Admin API key. Publishable keys are a Storefront API concept, and Storefront API keys (store_pk_… and store_sk_…) are not accepted here: presenting one returns 401 unauthorized (see Errors).

Security recommendations

  • Grant each key only the permissions its integration uses, and customer_data:read or user_data:read only where personal data must be shared.
  • Treat keys as secrets; keep them server-side and out of client JavaScript.
  • Use HTTPS exclusively.
  • Roll keys on a schedule and immediately if you suspect exposure.