Skip to main content
Kaer APIv1

Response headersReference


HeaderSent onMeaning
x-request-idEvery authenticated /v1 response, errors includedreq_ and 24 hex characters, the same as kaer.request_id. Quote it to support.
x-kaer-cost-usdChat (not streamed), maps (every answer from the maps service, 0 when not charged), mail send (not on an idempotent replay)The amount charged, in USD. Not sent on search, batch, images, streams or /v1/me: there the cost is only in the body (kaer.cost_usd, or the usage chunk of a stream).
x-ratelimit-limit-requestsAuthenticated responsesYour tier's requests per minute for one key.
x-ratelimit-remaining-requestsAuthenticated responsesRequests left in this window: the lower of the key's and the account's.
x-ratelimit-reset-requestsAuthenticated responsesSeconds until the window resets, such as 42s.
retry-after429, and 503 from the edgeSeconds to wait before retrying.
access-control-allow-originEvery /v1 response*. Preflights allow authorization, content-type and x-api-key.
cache-controlEvery /v1 responseno-store: answers are per key and never cached.

Errors raised before the rate check (401 and 403) carry only x-request-id. GET /v1/models needs no key and carries no request id. Streams are text/event-stream with x-accel-buffering: no.

Know how long to wait

CodeRetry-After
429 rate_limit_exceeded (tier)Until your 60-second window resets
429 rate_limit_exceeded (edge)Until the key's bucket refills, or for invalid keys, until the address may try again
429 mail_rate_limit60
429 mail_daily_limitUntil 00:00 UTC
503 upstream_unavailable5
HTTP/2 200
content-type: application/json
x-request-id: req_5f0c9a1e2b3d4c5f6a7b8c9d
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 41s
x-kaer-cost-usd: 0.0000048
cache-control: no-store

© 2026 Kaer Labs Ltd. All rights reserved.