Account
Rate limits
Limits keep Synaps fast and fair for everyone. Here is every one of them.
| Where | Limit | Applies to |
|---|---|---|
| API | 60 requests / minute | Each API key |
| API, free models | 100 requests / day | Each API key, on :free models |
| API, your own cap | Your daily USD limit | Keys you gave a daily limit |
| Chat app | 30 messages / minute | Each wallet, or each IP when signed out |
| Chat app, free models | 20 messages / day | Each browser and each IP address (whichever runs out first) |
| Free models, everyone | A shared daily total | All free traffic together, so free models stay up for everyone |
Free models in the chat only work on the Synaps website. To use free models from code, create an API key.
Daily limits reset at midnight UTC. Per-minute limits use a fixed one-minute window.
When you hit a limit
The request returns HTTP 429 with a message saying which limit was reached:
{ "error": { "message": "Rate limit: 60 requests per minute per key. Slow down and retry." } }Handling 429 well
Retry with exponential backoff and a little randomness, and stop after a few attempts:
import random, time
from openai import OpenAI, RateLimitError
def ask(messages, tries=5):
for attempt in range(tries):
try:
return client.chat.completions.create(model="deepseek/deepseek-chat", messages=messages)
except RateLimitError:
time.sleep(min(30, 2 ** attempt) + random.random())
raise RuntimeError("Still rate limited after retries")Provider limits
Model providers have their own capacity limits. If a provider is overloaded you may get a 429 or 503 passed through from them even under your Synaps limits. Retrying after a short wait, or switching to another model, usually works.