Ошибки и лимиты

Формат ошибок, HTTP-коды, коды ошибок по категориям, заголовки лимитов и retry-логика.

Ошибки

Формат ошибки

Все ошибки возвращаются в едином формате с полями code, message и необязательным hint.

{ "detail": { "code": "DOCUMENT_FORMAT_UNSUPPORTED", "message": "The uploaded file format is not supported.", "hint": "Supported formats: PDF, DOCX, XLSX, TXT, CSV, JSON, HTML, MD" } }
ПолеТипОписание
codestringМашиночитаемый код ошибки (например, DOCUMENT_FORMAT_UNSUPPORTED)
messagestringЧеловекочитаемое описание ошибки
hintstring?Необязательная подсказка для исправления ошибки

HTTP-коды ответов

КодОписание
200Success
201Created — resource successfully created
204No Content — successful deletion
400Bad Request — invalid parameters or body
401Unauthorized — missing or invalid token
403Forbidden — token lacks required scope
404Not Found — resource does not exist
409Conflict — resource already exists (idempotency)
422Unprocessable Entity — validation error
429Too Many Requests — rate limit exceeded
500Internal Server Error
504Gateway Timeout — request took too long

Коды ошибок по категориям

Полный список кодов ошибок, сгруппированных по категориям.

Authentication

AUTH_TOKEN_EXPIREDAUTH_TOKEN_INVALIDAUTH_INSUFFICIENT_SCOPE

Documents

DOCUMENT_FORMAT_UNSUPPORTEDDOCUMENT_TOO_LARGEDOCUMENT_PASSWORD_PROTECTEDDOCUMENT_OCR_FAILEDDOCUMENT_EXTRACTION_FAILED

LLM

LLM_UNAVAILABLELLM_TIMEOUTLLM_ERRORLLM_RATE_LIMITED

Data

DATA_NOT_FOUNDDATA_ALREADY_EXISTSDATA_VALIDATION_ERROR

Service

SERVICE_SERVER_ERRORSERVICE_RATE_LIMITEDSERVICE_UNAVAILABLE

Network

CONNECTION_LOSTRATE_LIMITEDCIRCUIT_OPEN

Пример обработки ошибок

Рекомендуемый подход к обработке ошибок API на Python.

import requests response = requests.post(url, headers=headers, json=body) if response.status_code >= 400: error = response.json().get("detail", {}) code = error.get("code", "UNKNOWN") message = error.get("message", "An error occurred") hint = error.get("hint") if response.status_code == 429: # Rate limited — retry after delay retry_after = response.headers.get("Retry-After", "60") print(f"Rate limited. Retry after {retry_after}s") elif response.status_code == 401: # Authentication error print(f"Auth error: {message}") else: print(f"Error [{code}]: {message}") if hint: print(f"Hint: {hint}")

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

Заголовки лимитов

Каждый ответ API включает заголовки с информацией о текущих лимитах.

HTTP/1.1 200 OK X-RateLimit-Limit: 60 X-RateLimit-Remaining: 58 X-RateLimit-Reset: 1711540800
ЗаголовокОписание
X-RateLimit-LimitМаксимальное количество запросов в окне
X-RateLimit-RemainingОставшееся количество запросов
X-RateLimit-ResetUnix-время сброса окна лимита
Retry-AfterСекунды до повторной попытки (только при 429)

Лимиты по тарифам

Лимиты зависят от вашего тарифного плана. Командные тарифы имеют общий лимит на организацию.

ТарифЗапросыСтримингХранилище
Free10 req/min5 req/min20 MB total
Basic30 req/min15 req/min100 MB total
Pro60 req/min30 req/min500 MB total
Team120 req/min60 req/min2 GB total

Ответ при превышении лимита

При превышении лимита API возвращает статус 429 с информацией о времени ожидания.

{ "detail": { "code": "SERVICE_RATE_LIMITED", "message": "Rate limit exceeded. Please retry after the reset time.", "hint": "Check X-RateLimit-Reset header for the reset timestamp." } }

Повторные попытки

Реализуйте экспоненциальную задержку при получении 429-ответов.

import time import requests def request_with_retry(url, headers, max_retries=3): for attempt in range(max_retries): response = requests.get(url, headers=headers) if response.status_code == 429: retry_after = int(response.headers.get("Retry-After", "60")) print(f"Rate limited. Retrying in {retry_after}s...") time.sleep(retry_after) continue return response raise Exception("Max retries exceeded")

Лучшие практики

  • Кэшируйте ответы, которые не меняются часто (например, список моделей)
  • Используйте экспоненциальную задержку при повторных попытках
  • Следите за заголовками X-RateLimit-Remaining для предупреждения о приближении к лимиту
  • Для пакетных операций используйте batch-эндпоинты вместо множественных одиночных запросов