Caicaini
Начать

Справочник

Лимиты запросов

У каждого ключа есть тариф, контролирующий запросы в минуту, входные токены в минуту и количество одновременных стримов. Тариф зависит от пожизненного пополнения; повышение происходит автоматически.

Тарифы

ТарифКогда сюда попадаешьRPMTPMПараллельные стримы
freeНовые ключи до первого пополнения.520,0001
pay_as_you_goПосле первого подтверждённого пополнения.60100,0005
high_volumeПожизненное пополнение от $500.300500,00020
enterpriseКастомные лимиты, выдаются вручную.customcustomcustom

Повышение тарифа запускается каждые 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 в секундах. Запрос отбрасывается до любого вызова провайдера, поэтому кредитов не стоит.

ответ · 429
{
  "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 явно, оповещай оператора и ставь работу на паузу. Полная таблица типов ошибок — в Ошибках.