Справочник API
Авторизация
Передавайте API-ключ Aporto как Bearer-токен в каждом запросе:
Authorization: Bearer $APORTO_API_KEY
Content-Type: application/json
Базовый адрес API — https://api.aporto.tech. Для OpenAI SDK используйте базовый URL https://api.aporto.tech/v1. Храните ключи на сервере.
Совместимые пути
| Совместимость | Путь | Метка в каталоге моделей |
|---|---|---|
| Получение списка моделей | GET /v1/models | — |
| OpenAI Chat Completions | POST /v1/chat/completions | openai |
| OpenAI Responses | POST /v1/responses | openai-response |
| Нативный Gemini generateContent | POST /v1beta/models/{model}:generateContent | gemini |
Проверяйте метки эндпоинтов рядом с каждой моделью в разделе «Модели и цены». Не каждая модель поддерживает все пути.
Потоковые ответы
Для Chat Completions укажите "stream": true. Ответ придёт как поток Server-Sent Events и завершится маркером [DONE].
curl -N https://api.aporto.tech/v1/chat/completions \
-H "Authorization: Bearer $APORTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"'"$APORTO_MODEL"'","messages":[{"role":"user","content":"Привет"}],"stream":true}'
Модели, совместимые с Responses, передают события Responses API, когда параметр stream равен true. Для нативного потокового Gemini используйте :streamGenerateContent?alt=sse. Клиент должен читать тело ответа по мере поступления данных и закрывать его при отмене запроса.
Расход и списания
Совместимые ответы содержат данные провайдера о расходе, например число входных и выходных токенов. Списание рассчитывается по измеренному шлюзом расходу и действующему тарифу выбранной модели. Клиентские расчёты остаются оценочными; фактические значения указаны в балансе и истории использования аккаунта.
Источник тарифов и валютный расчёт описаны в разделе «Баланс и оплата».
Ошибки
| Статус | Значение | Действие |
|---|---|---|
| 400 | Некорректный запрос или неподдерживаемый параметр | Проверьте тело запроса и эндпоинт |
| 401 | API-ключ отсутствует или недействителен | Проверьте Bearer-токен |
| 404 | Неизвестная модель или путь | Обновите список моделей и проверьте совместимость эндпоинта |
| 429 | Лимит аккаунта, модели или вышестоящего провайдера | Учитывайте Retry-After, если он есть, и увеличивайте задержку между повторами |
| 5xx | Сбой шлюза или вышестоящего провайдера | Сохраните ID запроса и повторяйте его только когда это безопасно |
Тело ошибки может содержать более точные сведения от шлюза или провайдера. Не используйте формулировки провайдера как стабильный машиночитаемый контракт.
Если запрос отклонён из-за недостаточного баланса, следуйте сообщению ошибки и пополните счёт в личном кабинете. Код статуса может зависеть от совместимого пути.
Лимиты и повторные запросы
Единого опубликованного лимита запросов в минуту для всех моделей нет. Ограничения могут зависеть от аккаунта, модели и вышестоящего провайдера. Ответ 429 сообщает о действующем ограничении.
Для 429 и временных ошибок 5xx используйте экспоненциальную задержку со случайным разбросом. Не повторяйте запрос генерации автоматически, если первый запрос мог завершиться: это может создать дублирующий результат и повторное списание.