Start
Rate limits
120 requests a minute per key, and the daily cap you set on it. When either is reached, the answer says how long to wait.
Checked 26 October 2026
The limits
| Limit | Size | When it is reached |
|---|---|---|
| Requests per key | 120 a minute | 429 rate_limited |
| Daily cap per key | What you set, $0.10 to $1,000.00 | 429 daily_cap, until 00:00 UTC |
| Test key (sk-nokeep-test) | 20 a minute per address | 429 rate_limited |
| Messages per request | 2,000 | 400 invalid_messages |
| Request size | 12 MB | 413 too_large |
| Pictures per request | 10, DeepSeek only | 400 too_many_images |
Headers that say where you are
Every answer to a keyed call carries x-ratelimit-limit-requests and x-ratelimit-remaining-requests, for the current minute.
Every 429 and every 503 busy carries Retry-After, in seconds: until the minute frees up, until 00:00 UTC for a daily cap, or 5 for a busy model.
Retrying
OpenAI’s Python and JavaScript SDKs retry 429 and 5xx on their own and wait the Retry-After time. With plain HTTP, wait that long, then retry once.
import time
import requests
def call(body, key):
for _ in range(3):
res = requests.post(
"https://nokeep.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {key}"},
json=body,
)
if res.status_code not in (429, 503):
return res
time.sleep(int(res.headers.get("Retry-After", "5")))
return resA daily_cap waits until midnight UTC. Raise the cap in the console instead of retrying.