Skip to main content
Successful 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

  1. Make the request and keep the ETag:
  2. Send it back on the next poll:
On 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

A 304 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.json and /v1/docs: public, max-age=60, stale-while-revalidate=300.
  • /v1/health, /v1/ready and the webhook-secret rotation response: no-store.

Next

Webhooks

Push instead of polling.

Endpoint reference

Every endpoint and its reference page.