Rate limits

Per-partner weight budgets, weights by endpoint, and the public bucket for XML feeds.

Your default budget: about 50 orders per minute. Lighter calls (poll, quote, QR) barely touch it. Hit the cap → { code: 5, msg: "RATE_LIMIT" } with HTTP 429 and a Retry-After header. The exact weight per endpoint is in the table below.

Weights by endpoint

EndpointWeightNotes
POST /v1/currencies1Auth optional. 30-second server-side cache; safe to poll. Anonymous callers are not charged against any bucket.
POST /v1/pairs1Auth optional. 30-second server-side cache; safe to poll. Anonymous callers are not charged against any bucket.
POST /v1/price1Auth optional. Authenticated callers receive per-partner afftax applied server-side; anonymous callers see the base rate.
POST /v1/create50Auth required. ~50 creates/minute at the default 2500 wu/min budget.
POST /v1/order1Auth required. Recommended polling cadence: every 30–60 seconds.
POST /v1/emergency1Auth required. One call per emergency resolution.
POST /v1/qr5Auth required. 1-hour server-side cache per order.
POST /v1/keys/rotate1Auth required. Use sparingly — rotation invalidates the prior secret immediately.
POST /v1/codes1Auth required. Up to maxRefCodes per partner (default 50).
GET /api/rates(*).xml0Public, unauthenticated. ETag-cached snapshots; no per-partner accounting.

How the window works

  • Accounting is atomic. Concurrent calls cannot race past the cap. A request whose weight alone exceeds the per-minute cap is always denied.
  • Retry-After tells you when enough weight will have aged out for your next call, rounded up to whole seconds.

Unsigned calls

/v1/currencies, /v1/pairs, and /v1/price accept callers without an X-API-KEY header. Unsigned traffic is not charged against any partner bucket but still has guard-rails:

  • /v1/currencies and /v1/pairs are served from a 30-second server-side cache. The cache is the throttle: the underlying catalog query runs at most twice per minute regardless of caller volume.
  • /v1/price is recomputed on every request (no response cache). Unsigned callers from the same /24 (IPv6: /48) share 60 calls per minute by default. Exceeding the bucket returns the same code=5 RATE_LIMIT envelope as the authenticated path.
  • Authenticated price calls do not consume the unsigned bucket. Once you send a valid X-API-KEY, you run on your partner budget.

XML rate feed

The XML rate routes (/api/rates.xml and /rates/float.xml, byte-identical aliases) are public and unauthenticated. They serve from a background-refreshed snapshot. ETag handling lets listing aggregators 304 their polls when the snapshot has not changed. No per-partner accounting on this surface.

Increasing your cap

Default budget: 2500 wu/min, set at provisioning. To raise it, send your projected per-endpoint call rate to your onboarding contact.

Partner API.
Same engine as 0trace.

A private partner integration surface. Signed quotes, server-side pricing, webhook delivery, multiple reference codes, and a self-serve cabinet — all backed by the production exchange engine.

Support

Questions? Answers.

Get the latest updates

Follow us on X

The 0trace team will never ask for KYC or AML. We retain no logs, metadata, or tracking cookies.

Learn more