Conventions
Pagination
List responses share one envelope:limit defaults to 50 (max 100; search caps at 100). Pass
?limit=&page_token= to walk. Ordering is newest-first unless ascending=true.
Errors
code. Validation failures come back as validation_error with an
errors payload. Common codes: unauthenticated (401), missing_permission
(403), not_found (404), rate_limited (429 + Retry-After header).
Idempotency
- Sends:
Idempotency-Keyheader onPOST …/emails/send— replays return the original email. - Creates (inbox, draft, webhook, domain, project): pass
client_id— replays return the original object.
Rate limits
600 requests/minute per key. Exceeding it returns 429rate_limited with a
Retry-After header. Back off and retry.
Wire format
snake_case everywhere, ISO-8601 timestamps,200 on creates (not 201),
empty {} on deletes. The machine-readable route list lives at
GET /v0/openapi.json (138 entries).