Коды ошибок
API PolyTest использует стандартные HTTP-коды статуса. Все ответы с ошибкой возвращают JSON с полем error, описывающим проблему.
"error", содержащим понятное человеку сообщение. Категорию ошибки показывает HTTP-код статуса.400Bad Request
Запрос составлен неверно или в нём отсутствуют обязательные параметры.
{ "error": "timestamp query parameter is required" }Частые причины
- Отсутствует обязательный параметр запроса
- Неверный формат параметра (например, метка времени не в формате ISO 8601)
- Значение параметра вне допустимого диапазона
401Unauthorized
Ошибка аутентификации — в запросе нет действительных учётных данных.
{ "error": "Invalid API key" }Частые причины
- Отсутствует заголовок X-API-Key или заголовок Authorization
- API-ключ не существует или недействителен
- API-ключ отозван
- Срок действия API-ключа истёк
- JWT-токен недействителен или истёк
403Forbidden
Учётные данные действительны, но у них нет прав на это действие.
{ "error": "Admin access required" }Частые причины
- Попытка обратиться к эндпоинтам только для администраторов (sync, seed) без прав администратора
- Область действия API-ключа не включает нужное разрешение
404Not Found
Запрошенный ресурс не существует.
{ "error": "Market not found" }Частые причины
- Рынок с таким ID не существует
- Slug рынка не соответствует ни одной записи
- Не найден снимок в пределах ±2 секунд от заданной метки времени
429Too Many Requests
Превышен лимит запросов. Сделайте паузу и повторите после указанного времени.
{ "error": "Rate limit exceeded" }Частые причины
- Превышен лимит запросов в минуту для вашего тарифа
- Превышен лимит всплесков (слишком много запросов за короткое время)
500Internal Server Error
На сервере произошла непредвиденная ошибка. Такое бывает редко — если ошибка повторяется, обратитесь в поддержку.
{ "error": "Internal server error" }Частые причины
- Проблема подключения к базе данных
- Сбой вышестоящего сервиса
- Непредвиденное исключение на стороне сервера
Обработка ошибок
Ошибки клиента (4xx)
Не повторяйте запрос автоматически. Прежде чем повторять, исправьте параметры запроса или аутентификацию либо проверьте, что ресурс существует.
Ошибки сервера (5xx)
Можно безопасно повторять с экспоненциальной задержкой. Начните с задержки в 1 секунду и удваивайте её при каждой попытке, максимум 3 повтора.
import time
import requests
def api_request(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 429:
wait = int(response.headers.get("Retry-After", 2 ** attempt))
time.sleep(wait)
continue
if response.status_code >= 500:
time.sleep(2 ** attempt)
continue
return response
raise Exception("Max retries exceeded")