Документация
ApiHost.one — прокси-шлюз к LLM API с одним ключом на все модели. Ниже — всё, что нужно для подключения: адрес шлюза, авторизация, эндпоинты и формат ошибок.
1. Получи ключ
Ключ выпускается автоматически при первом входе — через Telegram-бота или веб-кабинет. Выпущенные ключи остаются доступны для просмотра и копирования в разделе API-ключей личного кабинета.
2. Подключи клиента
Base URL один для всех моделей — какую модель использовать, указывается в теле запроса, а не в адресе.
# Anthropic-формат (Claude Code и т.п.) ANTHROPIC_BASE_URL=https://api.apihost.one ANTHROPIC_API_KEY=sk-gw-... # OpenAI-формат (Cursor, Cline, свой SDK) OPENAI_BASE_URL=https://api.apihost.one/v1 OPENAI_API_KEY=sk-gw-...
3. Авторизация
Ключ передаётся одним из двух заголовков — какой поддерживает клиент:
x-api-key: sk-gw-... # либо Authorization: Bearer sk-gw-...
4. Эндпоинты
| Метод и путь | Формат | Назначение |
|---|---|---|
| POST /v1/messages | Anthropic | Основной вызов модели, с учётом токенов |
| POST /v1/chat/completions | OpenAI | Тот же вызов в OpenAI-совместимом формате |
| POST /v1/images/generations | JSON | Генерация PNG через модель image |
| POST /v1/images/edits | multipart/form-data | Редактирование картинки через image |
| GET /v1/models | OpenAI | Список доступных моделей |
| POST /v1/messages/count_tokens | Anthropic | Оценка входных токенов с учётом служебной обвязки |
| GET /v1/me | JSON | Статус ключа, лимит, расход и остаток токенов |
Оба формата проксируются на реальных провайдеров — конвертация между Anthropic и OpenAI на стороне шлюза.
5. Пример запроса
curl https://api.apihost.one/v1/messages \
-H "x-api-key: sk-gw-..." \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "привет"}]
}'6. Модели
Один тариф — 25 ₽ / 1 000 000 токенов — для любой модели ниже, независимо от того, какая модель дороже на стороне провайдера:
- claude-fable-5
- claude-opus-5
- claude-opus-4-8
- claude-opus-4-7
- claude-opus-4-8-1m
- claude-opus-4-7-1m
- claude-sonnet-4-6
- claude-sonnet-5
- claude-sonnet-5-0
- claude-haiku-4-5-20251001
- claude-haiku-4-5
- claude-sonnet-4-5
- claude-opus-4-6
- gpt-5
- gpt-5-mini
- gpt-5.6-sol
- gpt-5.4-mini
- gpt-5.6-terra
- gpt-5.5
- glm-5-2
- minimax-m3
- deepseek-v4-pro
- deepseek-v4-flash
- cursor-fable-5
- cursor-opus-5
- cursor-opus-4-8
- cursor-opus-4-7
- cursor-sonnet-4-6
- cursor-sonnet-5
- cursor-haiku-4-5
- cursor-gpt-5.6-sol
- cursor-gpt-5.4-mini
- cursor-glm-5-2
- cursor-minimax-m3
- cursor-deepseek-v4-pro
- cursor-deepseek-v4-flash
7. Генерация изображений
Для создания картинки используй модель image и метод POST /v1/images/generations. Подойдёт тот же API-ключ ApiHost.one из личного кабинета. Перед первым запросом проверь баланс в кабинете.
Настройка клиента
В приложении с поддержкой генерации изображений укажи следующие настройки. Если клиент запрашивает полный URL метода, используй адрес из последней строки.
Base URL: https://api.apihost.one/v1 API key: твой ключ ApiHost.one Model: image Response format: b64_json Timeout: 260 секунд Endpoint: https://api.apihost.one/v1/images/generations
Клиент должен поддерживать Images API и декодирование base64. Выбрать image в списке обычных чат-моделей недостаточно: вызовы через /v1/chat/completions или /v1/messagesс этой моделью вернут ошибку 400. Если нужного режима нет, используй примеры ниже.
Запрос через curl
На macOS или Linux замени значение переменной своим ключом и выполни команды в терминале. Ключ храни на своей машине или сервере; не вставляй его в публичный код сайта.
export APIHOST_API_KEY='вставь-свой-ключ-ApiHost'
curl --fail-with-body --max-time 260 https://api.apihost.one/v1/images/generations \
-H "Authorization: Bearer $APIHOST_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"image","prompt":"Синяя керамическая кружка на белом фоне","n":1,"response_format":"b64_json"}' \
-o image-response.jsonОтвет сохраняется в image-response.json. Картинка находится в data[0].b64_json: это PNG, закодированный в base64. Чтобы сохранить его рядом в файл image.png, выполни:
python3 - <<'PYTHON'
import base64
import json
from pathlib import Path
response = json.loads(Path("image-response.json").read_text())
if "error" in response:
raise SystemExit(response["error"]["message"])
Path("image.png").write_bytes(base64.b64decode(response["data"][0]["b64_json"]))
print("Сохранено: image.png")
PYTHONПолный пример на Python
Нужен Python 3, дополнительные библиотеки не требуются. Сохрани код в generate_image.py, задай APIHOST_API_KEY, как в примере выше, и запусти python3 generate_image.py.
import base64
import json
import os
from pathlib import Path
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
request = Request(
"https://api.apihost.one/v1/images/generations",
data=json.dumps({
"model": "image",
"prompt": "Петух с бананом и шоколадкой, яркая иллюстрация",
}).encode("utf-8"),
headers={
"Authorization": "Bearer " + os.environ["APIHOST_API_KEY"],
"Content-Type": "application/json",
},
method="POST",
)
try:
with urlopen(request, timeout=260) as response:
result = json.load(response)
except HTTPError as error:
print("Request ID:", error.headers.get("x-request-id", "—"))
raise SystemExit(f"HTTP {error.code}: {error.read().decode('utf-8')}")
except (URLError, TimeoutError) as error:
raise SystemExit(f"Ошибка соединения или таймаут: {error}")
Path("image.png").write_bytes(base64.b64decode(result["data"][0]["b64_json"]))
print("Сохранено: image.png")Параметры и ограничения
prompt— обязательное описание картинки, от 1 до 16 000 символов.model—image. За один запрос создаётся одна картинка:n: 1.- Формат ответа —
b64_json, файл PNG. Получение ссылки черезresponse_format: urlпока не поддерживается. - Размер и качество выбираются автоматически. Параметры
sizeиqualityможно опустить или задатьauto. Фиксированный размер, например1024x1024, вернёт 400. - Потоковый ответ пока не поддерживается. Для изменения готовой картинки используй метод /v1/images/edits из следующего раздела. Неизвестные параметры возвращают 400.
Время ожидания, оплата и ошибки
В проверке через публичный API одна генерация заняла около 26 секунд; время зависит от нагрузки и запроса. Установи таймаут клиента 260 секунд: шлюз ожидает результат до 240 секунд. При занятости всех слотов генерации вернётся 429 с заголовком Retry-After: 10 — повтори запрос позже.
Создание одной картинки стоит 2 ₽ за успешный запрос и учитывается под моделью image. При текущем тарифе 25 ₽ за миллион с токенного баланса списывается 80 000 токенов независимо от расхода провайдера. Поле usage содержит расход входных и выходных токенов; usage.image_generation уже входит в эти суммы, прибавлять его повторно не нужно. Это технический расход, а не сумма списания за создание картинки. Неуспешные генерации не оплачиваются. Для активного безлимитного тарифа сохраняются его условия.
При 400 проверь параметры; при 401/403 — API-ключ; при 429 — баланс, лимиты ключа и заголовок Retry-After. Код 502 означает ошибку генерации, 503 — временную недоступность провайдера, 504 — превышение времени ожидания. Подробности находятся в error.message. Для обращения в поддержку сохрани заголовок ответа x-request-id.
После обрыва соединения или таймаута не запускай немедленный автоматический повтор: предыдущая генерация могла уже начаться.
8. Редактирование изображений
Чтобы изменить готовую картинку, отправь её в POST /v1/images/editsс моделью image и описанием правки в prompt. Используй тот же API-ключ и Base URL. В клиенте нужен режим редактирования изображений с загрузкой файла; обычный чат для этого не подходит.
В отличие от генерации, тело запроса — multipart/form-data. Поле image содержит сам файл PNG или JPEG, а не ссылку на него. В примере замени blue-mug.png на путь к своей картинке. Переменная APIHOST_API_KEY задаётся, как в разделе генерации выше.
curl --fail-with-body --max-time 260 https://api.apihost.one/v1/images/edits \ -H "Authorization: Bearer $APIHOST_API_KEY" \ -F 'model=image' \ -F '[email protected]' \ -F 'prompt=Добавь металлическую чайную ложку рядом с кружкой. Сохрани кружку, фон и освещение.' \ -o image-response.json
Не задавай заголовок Content-Type вручную: curl сам добавит границу multipart. Ответ содержит PNG в data[0].b64_json. Сохрани результат в image.png тем же Python-кодом декодирования из раздела генерации выше; исходный файл не изменяется.
- Одна исходная картинка PNG или JPEG до 10 MiB, не более 16 миллионов пикселей и 8192 пикселей по каждой стороне.
prompt— от 1 до 16 000 символов. Укажи, что изменить и какие детали сохранить; небольшие изменения остальных деталей возможны.- Необязательные поля:
n=1,response_format=b64_json,size=auto,quality=auto. Размер и качество результата выбираются автоматически. - Маски, несколько исходных изображений, URL вместо файла и потоковый ответ пока не поддерживаются.
- Редактирование оплачивается по фактически использованным токенам; фиксированная цена 2 ₽ применяется только к созданию новой картинки. Оба метода используют общий баланс и общий лимит одновременных запросов. Токены исходной картинки входят в расход
usage.
При 400 проверь файл, его размер и поля формы; при 413 уменьши размер загружаемых данных. Остальные ошибки и рекомендуемый таймаут 260 секунд такие же, как у генерации. После таймаута избегай немедленного автоматического повтора.
9. Ошибки
Ошибки Anthropic-формата приходят как {"type": "error", "error": {"type": "...", "message": "..."}}, OpenAI-формата — как {"error": {"message": "...", "type": "...", "code": null}}.
| Код | Тип | Причина |
|---|---|---|
| 401 | authentication_error | неверный или несуществующий ключ |
| 403 | permission_error | ключ отозван |
| 429 | rate_limit_error | исчерпан баланс токенов — пополни в боте или кабинете |
10. Тарификация
Текстовые запросы и редактирование изображений оплачиваются по факту использованных токенов (вход + выход). Создание картинки — 2 ₽ за успешный запрос. Актуальные бонусы за пополнение и способы оплаты — на главной странице.
/v1/messages/count_tokens возвращает консервативную оценку входа вместе со служебной обвязкой. Точный объём cache-read заранее неизвестен и появляется только в usage завершённого ответа. Актуальный остаток всегда доступен через GET /v1/me.