Документация API go2llm

Маршруты API

Base URL для OpenAI-совместимых клиентов — https://go2llm.tech/v1, для Anthropic SDK и Claude Code — https://go2llm.tech (без /v1).

MethodEndpointАвторизацияНазначение
GET/statusнетсостояние шлюза
GET/v1/modelsнетопубликованные модели, модальности и endpoints
GET/v1/models/{id}нетодна модель в той же форме, что элемент массива /v1/models
GET/api/pricingнетпубличные цены и версия каталога
POST/v1/messagesAPI-ключAnthropic Messages, SSE и tools
POST/v1/messages/count_tokensAPI-ключоценка размера входа, без резерва и списания
POST/v1/chat/completionsAPI-ключOpenAI Chat Completions, SSE и tools
POST/v1/responsesAPI-ключOpenAI Responses API, адаптер поверх chat.completions
POST/v1/images/generationsAPI-ключгенерация изображений для опубликованных image-моделей
POST/v1/images/editsAPI-ключimg2img: правка или склейка до 4 исходных картинок
GET/v1/meAPI-ключквота ключа, остаток баланса и лимиты

Маршруты аккаунта, ключей, баланса и платежей под /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.