Errors and Limits
Protected/api/v1/* endpoints share a stable error envelope:
Limits at a glance
Pro+ API keys currently include:- 60 requests per minute
- 100,000 requests per calendar month
- Monthly quota reset on the 1st day of each month at
00:00 UTC
X-RateLimit-* and X-Quota-* headers. Treat these headers as the effective source of truth for your current limits, remaining requests, and reset timestamps.
Shared error codes
invalid_api_key: the Bearer token is missing, invalid, or revokedsubscription_required: the key belongs to a user without activePro+rate_limit_exceeded: the per-minute request budget was exhaustedmonthly_quota_exceeded: the current monthly request budget was exhaustednot_found: the requested resource does not exist or is not exposed publicly, including unpublished or delisted resourcesvalidation_error: query or path parameters failed validationservice_unavailable: a required internal dependency failed closedinternal_error: unexpected unhandled server failure
Usage-limit headers
Successful authenticated/api/v1/* responses include:
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetX-Quota-LimitX-Quota-RemainingX-Quota-Reset
Retry behavior
429 and some availability errors can include Retry-After.
When present:
- Respect
Retry-Afterbefore retrying - Use the reset timestamps from
details.reset_atand theX-*-Resetheaders to schedule the next attempt
Important notes
- Limit values can be environment-configured, so treat the response headers as the source of truth instead of hard-coding numeric assumptions.
- Published but unavailable/inactive offers are still public data. They can be returned with
available: falsefor earn oris_active: falsefor borrow and collateral. GET /api/v1/collateral/{id}/historyreturns404 not_foundby design because collateral history is not persisted.

