tired/api/docs/authentication

docs

authentication & keys

bearer tokens. scoped. rotate them. we check the signature and the ip shape; nothing exotic.

the header

authorization: bearer sk_live_01HXYZ9KQ7W3M5N2…

present on every request. tls only. if you make an http request, we redirect once and then start refusing.

key formats

prefixscopewhere to use
sk_live_…full server-sideyour backend only. 32 bytes base32.
sk_test_…sandboxanywhere. no billing, no real sends.
pk_live_…publishablebrowser. can read public event data, create orders. can't read pii.
sk_restricted_…custom scopesper-resource acl. create in studio.

scopes (on restricted keys)

restricted keys take a list of scopes. useful for integrations where you want a vendor to only read scan events:

{
  "scopes": [
    "events:read",
    "scans:read",
    "scans:write"
  ]
}

available resources: events, tickets, orders, attendees, payouts, scans, webhooks, venues. verbs: read, write, *.

rotation

every key has a grace period. when you regenerate, the old key stays valid for 24 hours so your deploys don't strand pods on old secrets. you can shrink this to zero in settings → security.

idempotency

every POST accepts an idempotency-key header. sending the same key within 24 hours returns the original response. use a uuid per semantic operation:

idempotency-key: 9f8c2b0a-order-2026-05-17-evt-01HY

webhook signatures

separate from api keys: webhook signatures use an endpoint secret that is generated when you add the url. see webhooks for verification code.

heads up

we email you when a key hasn't been rotated in 180 days. not because it's compromised — just good hygiene. if you rotate on a schedule, you can mute this.