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
| Endpoint | Weight | Notes |
|---|---|---|
| POST /v1/currencies | 1 | Auth optional. 30-second server-side cache; safe to poll. Anonymous callers are not charged against any bucket. |
| POST /v1/pairs | 1 | Auth optional. 30-second server-side cache; safe to poll. Anonymous callers are not charged against any bucket. |
| POST /v1/price | 1 | Auth optional. Authenticated callers receive per-partner afftax applied server-side; anonymous callers see the base rate. |
| POST /v1/create | 50 | Auth required. ~50 creates/minute at the default 2500 wu/min budget. |
| POST /v1/order | 1 | Auth required. Recommended polling cadence: every 30–60 seconds. |
| POST /v1/emergency | 1 | Auth required. One call per emergency resolution. |
| POST /v1/qr | 5 | Auth required. 1-hour server-side cache per order. |
| POST /v1/keys/rotate | 1 | Auth required. Use sparingly — rotation invalidates the prior secret immediately. |
| POST /v1/codes | 1 | Auth required. Up to maxRefCodes per partner (default 50). |
| GET /api/rates(*).xml | 0 | Public, 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-Aftertells 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/currenciesand/v1/pairsare 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/priceis 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 samecode=5 RATE_LIMITenvelope 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.