Ошибки и лимиты
Ошибки возвращаются стандартными HTTP-кодами с JSON-телом { "error": "…" }.
Коды ответов
| Параметр | Тип | Описание |
|---|---|---|
401 | Unauthorized | Ключ отсутствует, имеет неверный формат или недействителен. Проверьте sk-pv-… и заголовок. |
402 | Payment Required | Недостаточно средств на балансе. Пополните баланс в личном кабинете. |
403 | Forbidden | IP не в белом списке ключа. Добавьте адрес или отключите ограничение. |
429 | Too Many Requests | Превышен лимит частоты. Повторите с задержкой (см. ниже). |
4xx / 5xx | прочие | Ошибки запроса или временные сбои. Тело очищено от служебной информации. |
Повтор запросов (retry)
При 429 уважайте заголовок Retry-After, если он есть; иначе используйте экспоненциальную задержку (1с, 2с, 4с…). Коды 401/402/403 повторять бессмысленно — сначала устраните причину (ключ, баланс, IP).
import time, requests
def call_with_retry(url, headers, payload, max_retries=5):
for attempt in range(max_retries):
r = requests.post(url, headers=headers, json=payload)
if r.status_code == 429:
# уважаем Retry-After, иначе экспоненциальная задержка
wait = int(r.headers.get("Retry-After", 2 ** attempt))
time.sleep(wait)
continue
return r
return r