Справочник
Лимиты запросов
У каждого ключа есть тариф, контролирующий запросы в минуту, входные токены в минуту и количество одновременных стримов. Тариф зависит от пожизненного пополнения; повышение происходит автоматически.
Тарифы
| Тариф | Когда сюда попадаешь | RPM | TPM | Параллельные стримы |
|---|---|---|---|---|
| free | Новые ключи до первого пополнения. | 5 | 20,000 | 1 |
| pay_as_you_go | После первого подтверждённого пополнения. | 60 | 100,000 | 5 |
| high_volume | Пожизненное пополнение от $500. | 300 | 500,000 | 20 |
| enterprise | Кастомные лимиты, выдаются вручную. | custom | custom | custom |
Повышение тарифа запускается каждые 5 минут и смотрит на подтверждённое пожизненное пополнение. Никакой ручной кнопки нет — как только сумма пересекает порог, на следующем прогоне ты уезжаешь на тариф выше. Нужно больше, чем high_volume, под запуск? Напиши нам через ссылки поддержки в подвале.
Заголовки на каждом ответе
В каждом ответе /v1/* отдаются актуальные значения счётчиков по твоему ключу. Используй их, чтобы троттлить на стороне клиента, а не ждать 429.
X-RateLimit-Tier— тариф, который дал эти лимиты.X-RateLimit-Limit-Requests— твой потолок RPM.X-RateLimit-Remaining-Requests— сколько запросов осталось в текущей минуте.X-RateLimit-Reset-Requests— секунды до сброса текущего минутного окна.Retry-After— выставляется только на 429. Сколько секунд спать перед повтором.
curl -i https://caicaini.com/v1/messages \
-H "Authorization: Bearer cai_api_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"caicaini/auto","max_tokens":50,"messages":[{"role":"user","content":"Hi"}]}'
# X-RateLimit-Tier: pay_as_you_go
# X-RateLimit-Limit-Requests: 60
# X-RateLimit-Remaining-Requests: 59
# X-RateLimit-Reset-Requests: 42 # seconds until the window resetsКогда превысил
Превышение возвращает 429 с типом rate_limit_error и заголовком Retry-After в секундах. Запрос отбрасывается до любого вызова провайдера, поэтому кредитов не стоит.
{
"type": "error",
"error": {
"type": "rate_limit_error",
"message": "Requests per minute exceeded for this key. Retry after 12s."
}
}Рекомендованный backoff
Заверни вызовы в небольшой ретрай-хелпер. Если есть Retry-After — читай его, иначе используй экспоненциальный backoff с джиттером. Не больше 4–6 попыток и около 30 секунд суммарного ожидания.
# bash one-liner that retries on 429 with exponential backoff
delay=1
for i in 1 2 3 4 5; do
status=$(curl -s -o /tmp/body -w "%{http_code}" \
-X POST https://caicaini.com/v1/messages \
-H "Authorization: Bearer cai_api_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"caicaini/auto","max_tokens":50,"messages":[{"role":"user","content":"Hi"}]}')
if [ "$status" != "429" ]; then cat /tmp/body; exit 0; fi
sleep "$delay"
delay=$((delay * 2))
done
echo "rate-limited after retries" >&2
exit 1Недостаток кредитов — отдельный сигнал
Кончились кредиты — 402 с типом insufficient_quota. Не повторяй — пока баланс не вырастет, не пройдёт. Лови 402 явно, оповещай оператора и ставь работу на паузу. Полная таблица типов ошибок — в Ошибках.