Timestamps in responses
Every timestamp returned by the API is formatted:Z (denoting UTC) is always present. The API never emits offsets like -03:00.
Parsing
All mainstream languages parse this format natively:Display
Format with the user’s locale on the client side:Timestamps in requests
Most request bodies do not carry timestamps — those are server-assigned. The single exception is the signedX-Access-Timestamp header carrying the request time.
X-Access-Timestamp: milliseconds, not seconds
The signing protocol uses Unix epoch milliseconds, not seconds. A 2026-era timestamp is 13 digits, not 10:
Clock-skew tolerance: ±10 seconds
The Access Protocol rejects any request whoseX-Access-Timestamp is more than ±10 seconds from server time. This is tighter than typical cloud SDKs (which allow minutes), and it is non-negotiable.
Why so strict?
Tight clock-skew tolerance reduces the window in which a captured request can be replayed. Combined with the 1-hour deduplication ofX-Access-Request-Id, the protocol is robust against replay attacks without requiring nonce challenges or session tokens.
Common failure modes
Server time as a fallback
If you cannot run NTP (e.g., shared CI runners), you can approximate by reading server time once and computing an offset. The server time is conveyed in theDate response header on every response — including error responses — so you can extract it from a previous call.
Time zones
The API contract has no notion of time zones. Every absolute moment is UTC. Convert at the edges:- Server → User: UTC timestamp → user’s local time on the client.
- User → Server: parse user input in their local timezone → UTC ISO 8601 → send.
filter expression:
Next
Sign a request
Where
X-Access-Timestamp fits in the canonical request.Filtering
How to filter list endpoints by date ranges.