GET responses carry an ETag header. Send it back as If-None-Match and, if nothing has changed, the API answers 304 Not Modified with no body.
How it works
-
Make the request and keep the
ETag: -
Send it back on the next poll:
304, keep using your previous body. On 200, replace it and keep the new ETag. If-None-Match accepts a comma-separated list of tags or *, and compares weakly, so echo back exactly what you received.
Two kinds of ETag
Error responses carry no ETag.
POST routes don’t use ETags; use idempotency instead.
Rate limits
A304 still counts as one request against your rate limit. Conditional requests save bandwidth and work, not quota. If you need to watch trades closely, webhooks cost no quota at all.
Where ETags help most
The TypeScript SDK sends
If-None-Match for you when polling positions.
Cache-Control
GET /v1/portfolio/positions:private, no-cache(cache it yourself, revalidate every time).GET /v1/markets/{id}/quote:public, max-age=10./v1/openapi.jsonand/v1/docs:public, max-age=60, stale-while-revalidate=300./v1/health,/v1/readyand the webhook-secret rotation response:no-store.
Next
Webhooks
Push instead of polling.
Endpoint reference
Every endpoint and its reference page.