Browse documentation
JSON envelopes, response headers, strict input, and pagination.
Envelopes
Single resource:
List:
Error: see errors and retries.
Headers
Response header | When |
|---|---|
| Always — quote it to support |
| Always |
| After quota admission: the tightest per-minute bucket; reset is a Unix timestamp (seconds) |
| On |
| When an idempotent request returns a stored response |
| On |
CORS: /v1/* allows any origin without credentials and exposes the headers above. /v1/api-keys* only allows approved application origins.
Data conventions
Timestamps are RFC 3339 UTC strings (
2026-10-26T12:00:00.000Z).All request schemas are strict: unknown fields give
400 unknown_fieldwithparamnaming the field.Free text is trimmed, control characters are stripped, and length is capped.
No serializer copies a database row wholesale; every field is named.
Credential-like columns (access_token,encrypted_app_pw,token_hash,config,embedding,raw_response, …) can never appear (enforced by tests).Request bodies are limited to 1 MB.
Pagination
There are three cursor styles. Always pass next_cursor back unchanged.
Style | Endpoints |
|
|
|---|---|---|---|
Keyset (opaque base64url) | All original list endpoints, API keys, | 1–100, default 25 | ≤ 512 chars; malformed → |
Offset (numeric string | Calendar, Results, Website changes/change detail, Local, image bank | 1–100, default 50 | e.g. |
Event ID (numeric string, ≤ 18 digits) |
| 1–100, default 50 | last event ID |
Keyset lists are sorted newest first (created_at desc, then id). Offset pagination does not exist on keyset endpoints. For current-product pages, has_more and next_cursor are inside data.data (see API reference).