Quotas & Errors
Rate limiting and common error codes for the Business API.
Rate limit headers
Business responses can include:
X-RateLimit-Limit/X-RateLimit-Remaining/X-RateLimit-ResetX-RateLimit-Weight-Limit/X-RateLimit-Weight-Remaining
Route weights
| Route family | Weight | Concurrency |
|---|---|---|
| Currencies | 1 | None |
| Route discovery | 2 | None |
| Route resolve | 3 | 1 |
| Onchain resolve | 4 | 1 |
| Onchain execution report | 4 | 1 |
| Onchain execution status | 1 | None |
| Quotes | 1 | 2 |
| Orders create | 10 | 1 |
| Order reads | 1 | None |
| Emergency | 2 | 1 |
| Notification email | 1 | 1 |
| QR | 1 | None |
| Callbacks & webhooks | 1 | 1 on mutations |
Common errors
| Code | Meaning | What to do |
|---|---|---|
INVALID_API_KEY | Key is invalid, inactive, or revoked | Verify the issued key and key status |
SIGNATURE_REQUIRED | Signature header missing | Send X-API-SIGN |
INVALID_SIGNATURE_FORMAT | Signature is not lowercase hex | Send a lowercase hex HMAC digest |
TIMESTAMP_REQUIRED | Timestamp header missing | Send X-API-TIMESTAMP |
TIMESTAMP_OUT_OF_RANGE | Timestamp outside tolerance window | Regenerate timestamp before sending |
NONCE_REPLAYED | Nonce already used | Generate a fresh nonce for every request |
RATE_LIMIT_EXCEEDED | Budget exhausted | Back off using the limit headers |
CONCURRENCY_LIMIT_EXCEEDED | Another mutation running | Retry later with same Idempotency-Key |
IDEMPOTENCY_BODY_MISMATCH | Same key, different body | Never reuse a key for a different request |
IDEMPOTENCY_REQUEST_IN_PROGRESS | Already processing | Retry later |
IDEMPOTENCY_PREVIOUSLY_FAILED | Earlier attempt failed | Use a new Idempotency-Key |
ORDER_NOT_FOUND | Unknown or unauthorized order | Verify order belongs to same principal |