Skip to content

Jev 429 Too Many Requests: Rate Limit Fixes

Last checked · Independent guide, not affiliated with TypeSafe AI

ANSWER

A 429 means you went over a rate limit. On TypeSafe's API the documented limits are 1,200 requests per minute and 250,000 tokens per second per account, adjusted dynamically during early access. On Vercel's free tier the per-model limit is far lower. Retry with exponential backoff (the official SDKs already do) and pack several questions into each request.

Channel Limit behind it What we observed
TypeSafe API 1,200 requests/minute and 250,000 tokens/second per account, “adjusting dynamically” None in 145 sequential questions, or in our other tests on Sep 19, 2026
Vercel AI Gateway, free tier Lower per-model limits than the paid tier A few questions went through, then requests were throttled; 131 questions took about 90 minutes
Vercel AI Gateway, paid tier Higher limits Not tested
OpenRouter OpenRouter’s own limits; documented message “Rate limit exceeded” Not tested

TypeSafe’s model page warns that its limits may change without notice while it absorbs launch demand, and that higher limits are available on custom and enterprise plans.

TypeSafe documents the status as 429 Too Many Requests and says to back off and retry after a short delay. Its SDKs honor a retry-after header when the response includes one. In our tests, successful responses carried no rate-limit headers, so do not count on reading your remaining quota from them.

On Vercel, the AI SDK raises a gateway rate-limit error; in our runs the HTTP status was not always exposed on the error object, so match on the error type or message as well. OpenRouter returns {"error": {"code": 429, "message": "Rate limit exceeded"}}.

1. Retry with exponential backoff. The official SDKs do this by default: two retries after the first attempt, starting at 0.5 seconds and doubling up to 5 seconds, with random jitter, and they honor Retry-After. If you call the HTTP API directly:

import random, time, requests
def call_jev(payload, key, attempts=4):
for i in range(attempts):
r = requests.post(
"https://api.typesafe.ai/v1/systemone",
headers={"Authorization": f"Bearer {key}"},
json=payload,
timeout=10,
)
if r.status_code not in (429, 529):
r.raise_for_status()
return r.json()
wait = float(r.headers.get("retry-after", 0)) or min(5, 0.5 * 2**i)
time.sleep(wait * random.uniform(0.75, 1.0))
r.raise_for_status()

2. Send fewer, bigger requests. Rate limits count requests, and Jev evaluates all the questions in a request in parallel. Asking 20 yes/no questions in one call took 332 ms in our test, the same as asking one. If you are looping over questions for the same input, put them in one request.

3. Limit concurrency. A worker pool of 5 to 10 concurrent requests is usually enough; 1,200 requests a minute is 20 per second.

4. On Vercel’s free tier, slow down or upgrade deliberately. Space requests out by a couple of seconds for batch jobs, or buy credits to move to the paid tier. Vercel’s docs note that buying credits ends the monthly free credit.

A 429 says you are sending too much. A 529 says TypeSafe is overloaded for everyone. If you see 529s or timeouts at low volume, check Is Jev down? and 529 Overloaded.

For the numbers behind the limits and how to plan capacity, see Jev rate limits.

Sources

  1. Models: rate limits (TypeSafe docs)
  2. API reference: handling rate limits (TypeSafe docs)
  3. Python SDK retries (TypeSafe docs)
  4. AI Gateway pricing: free tier rate limits (Vercel docs)
  5. Submit a Decisions request: 429 (OpenRouter API reference)