/v1, JSON in and JSON out.
$API for that base. The playground on each
endpoint page already points at it.
Requests
Content-Type: application/json on anything with a body. Bodies are capped at
1 MiB; an oversized one fails at the reader rather than being buffered into memory
first.
Credentials ride Authorization: Bearer:
The active organization
Session-authenticated routes act on one organization. Which one comes from a header:Responses
Success is a2xx with a JSON body, except 204, which has none.
202 is not “queued”. On forgot-password, the magic link and the email code it
means “accepted, and the answer would be the same either way” — the API does not
reveal whether an address has an account.code. See Errors.
Timestamps
RFC 3339, UTC:null, never an empty string or a zero date.
Identifiers
UUIDs, except for two:- organization public code —
org_<32 hex>, what goes in URLs and theX-Organization-Idheader; - credential prefixes —
uk_sk_,uk_pk_,uk_st_,uk_ct_, and the one-time token families.
Pagination
Collection reads takelimit and offset:
The cap is deliberate: enough for a screen, small enough that nobody accidentally
downloads their whole audience.
Out-of-range values are not an error — they fall back to the default. Do not
rely on a
400 to catch a bad page size.Environments
On the machine surface, the environment is the key’s environment, resolved from the stored row on every request. There is no parameter for it. On the panel surface, reads take?environment=live|test, defaulting to live.
Both are covered in Environments.
Rate limits
Public and credential endpoints are throttled per IP; boot is additionally throttled per publishable key. The machine surface is throttled per API key — 1000 a minute, 3000 across an environment’s keys — and reports where you stand inRateLimit-* headers on every response, not just on the refusal. See
Rate limits.
Retrying a write
Every write on the machine surface accepts anIdempotency-Key header. Send one
and a repeat gets the same response back — the same status, the same body,
Idempotent-Replay: true — instead of running twice.
The surfaces
Staff plane
uk_st_…. Sign-in, account, organizations, members, roles, keys, and the panel
view of contacts.Machine surface
uk_sk_…. /v1/me and /v1/contacts — your backend talking about your own
users.Customer plane
Publishable key in the body.
/v1/boot and /v1/contact-auth/*, called from
your pages.Contact surface
uk_ct_…. /v1/contact/me — one of your users reading their own record.