Understand per-key request limits, response headers, and how to handle 429 errors.
Rate limits protect the platform and ensure fair capacity allocation across all accounts. Limits are enforced per API key and reset on a rolling per-minute window.
The default limit is 60 requests per minute per key. If you need a higher limit, you can configure it per key from your dashboard once your account is verified.
Keys created programmatically via POST /api/keys can also have a rate_limit_rpm set at creation time.
Chat conversations on opendunes.com/chat are limited to 30 messages per minute per account, on every model including free ones. The limit exists to keep free models responsive for everyone; normal conversation never approaches it.
Note. Limits are enforced at the gateway level, before a request reaches any model provider. A request that exceeds your limit returns immediately without consuming any credits.
Every response includes three headers that tell you your current limit state:
| Header | Description |
|---|---|
X-RateLimit-Limit-RPM | Your key's configured requests-per-minute ceiling |
X-RateLimit-Remaining-RPM | Requests you can still send in the current window |
X-RateLimit-Reset | Unix timestamp (seconds) when the window resets |
Read X-RateLimit-Remaining-RPM before sending bursts to avoid hitting the wall mid-batch.
When you exceed the limit, the server returns 429 Too Many Requests with a Retry-After header and a matching retry_after field in the JSON body:
Recommended strategy:
429, read retry_after (or Retry-After) from the response.retry_after + random(0, 2)).For high-throughput pipelines, pre-check X-RateLimit-Remaining-RPM from the prior response and proactively slow down before hitting 429.
The X-Balance-Available header is present on every successful response and reports your remaining balance in micro-DA (1 DA = 1,000,000 micro-DA):
4,832,000,000 micro-DA = 4,832 DA remaining. Use this to surface low-balance warnings in your application without polling a separate balance endpoint.
When the balance reaches zero, subsequent requests return 402 insufficient_credits. Top up via your dashboard using a CIB or Edahabia card.