Маршруты API
Base URL для OpenAI-совместимых клиентов — https://go2llm.tech/v1, для Anthropic SDK и Claude Code — https://go2llm.tech (без /v1).
| Method | Endpoint | Авторизация | Назначение |
|---|---|---|---|
| GET | /status | нет | состояние шлюза |
| GET | /v1/models | нет | опубликованные модели, модальности и endpoints |
| GET | /v1/models/{id} | нет | одна модель в той же форме, что элемент массива /v1/models |
| GET | /api/pricing | нет | публичные цены и версия каталога |
| POST | /v1/messages | API-ключ | Anthropic Messages, SSE и tools |
| POST | /v1/messages/count_tokens | API-ключ | оценка размера входа, без резерва и списания |
| POST | /v1/chat/completions | API-ключ | OpenAI Chat Completions, SSE и tools |
| POST | /v1/responses | API-ключ | OpenAI Responses API, адаптер поверх chat.completions |
| POST | /v1/images/generations | API-ключ | генерация изображений для опубликованных image-моделей |
| POST | /v1/images/edits | API-ключ | img2img: правка или склейка до 4 исходных картинок |
| GET | /v1/me | API-ключ | квота ключа, остаток баланса и лимиты |
Маршруты аккаунта, ключей, баланса и платежей под /api/ используют браузерную сессию кабинета и не заменяют model API.
Embeddings, video и audio сейчас не опубликованы.
Как выбрать маршрут под модель
Поле endpoints в GET /v1/models перечисляет, что продаётся на модели: messages, chat.completions, images.generations, images.edits. Неподходящая пара model ID и endpoint возвращает 400 model_protocol_mismatch.
responses в этом списке не появится, и это не упущение: endpoints описывает, что продаётся на модели, а не то, как с нами можно разговаривать. POST /v1/responses обслуживает ровно те же модели, что POST /v1/chat/completions — подробности на странице Responses API.
Одна модель: GET /v1/models/{id}
curl https://go2llm.tech/v1/models/claude-sonnet-4-5
Ключ не нужен. Алиас резолвится, но в ответе id канонический: запрос claude-sonnet-5 вернёт "id": "claude-sonnet-4-5" — подстановку видно сразу, а не в тексте ошибки при первом платном запросе. Неизвестный ID даёт 404 model_not_found тем же текстом, что отказ на /v1/messages.
Оценка входа: POST /v1/messages/count_tokens
Тело совпадает с POST /v1/messages (model, messages, system, tools). Ключ обязателен — иначе это бесплатный CPU для кого угодно, — но резерва и списания нет: вызов ничего не стоит. Отдельный лимит 60 RPM на ключ, независимый от основного.
curl https://go2llm.tech/v1/messages/count_tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5","messages":[{"role":"user","content":"Ответь: OK"}]}'
{
"input_tokens": 14,
"go2llm": { "exact": false, "method": "byte_estimate", "typical_error_pct": null }
}
Это оценка по байтам, а не вендорский токенайзер, и блок go2llm говорит об этом прямо: exact: false. Тем же оценщиком шлюз считает резерв под запрос. Годится, чтобы решить, влезает ли контекст в окно, и прикинуть стоимость; фактические токены и фактическую цену смотрите в usage настоящего ответа модели.
typical_error_pct приходит null: типичное отклонение оценки от факта мы ещё не измерили и поэтому не публикуем. Когда оценщик будет откалиброван по накопленному расходу, в поле появится число.
Request ID
Каждый ответ /v1/* — успешный, потоковый и любой ошибочный — несёт заголовок x-go2llm-request-id. У ошибок тот же идентификатор дублируется в теле как error.request_id. В обращение в поддержку нужен именно он; полный API-ключ не отправляйте.
curl -sD - -o /dev/null https://go2llm.tech/v1/models | grep -i x-go2llm-request-id
Неизвестный маршрут под /v1/
Промах по маршруту возвращает JSON того же формата, что и остальные ошибки шлюза, а не плейн-текст:
- неизвестный путь →
404 endpoint_not_foundсо списком опубликованных маршрутов вerror.message; - известный путь с другим методом →
405 method_not_allowedи заголовокallowс допустимым методом.
curl -i https://go2llm.tech/v1/embeddings # 404 endpoint_not_found
curl -i -X GET https://go2llm.tech/v1/messages # 405, allow: POST
Разбор кодов — на странице Ошибки API.
CORS: читать из браузера можно, тратить — нет
Access-Control-Allow-Origin: * стоит ровно на четырёх публичных маршрутах чтения: GET /v1/models, GET /v1/models/{id}, GET /api/pricing, GET /status. Их можно дёргать из браузерного кода — например, чтобы собрать селектор моделей с актуальными ценами.
На маршрутах, которые берут API-ключ, CORS нет намеренно. Ключ в браузерном бандле читает каждый посетитель сайта, и запрет «не кладите ключ в клиентский JavaScript» должен быть исполнимым, а не только написанным в документации. OPTIONS к таким маршрутам отвечает не тишиной, а 405 с объяснением: вызывайте go2llm со своего сервера.
Актуальные model ID и цены — в каталоге моделей и на странице цен. Ключ и первый запрос — на go2llm.tech.