ApiHost.oneОткрыть бота

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

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/messagesAnthropicОсновной вызов модели, с учётом токенов
POST /v1/chat/completionsOpenAIТот же вызов в OpenAI-совместимом формате
POST /v1/images/generationsJSONГенерация PNG через модель image
POST /v1/images/editsmultipart/form-dataРедактирование картинки через image
GET /v1/modelsOpenAIСписок доступных моделей
POST /v1/messages/count_tokensAnthropicОценка входных токенов с учётом служебной обвязки
GET /v1/meJSONСтатус ключа, лимит, расход и остаток токенов

Оба формата проксируются на реальных провайдеров — конвертация между 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 символов.
  • modelimage. За один запрос создаётся одна картинка: 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}}.

КодТипПричина
401authentication_errorневерный или несуществующий ключ
403permission_errorключ отозван
429rate_limit_errorисчерпан баланс токенов — пополни в боте или кабинете

10. Тарификация

Текстовые запросы и редактирование изображений оплачиваются по факту использованных токенов (вход + выход). Создание картинки — 2 ₽ за успешный запрос. Актуальные бонусы за пополнение и способы оплаты — на главной странице.

/v1/messages/count_tokens возвращает консервативную оценку входа вместе со служебной обвязкой. Точный объём cache-read заранее неизвестен и появляется только в usage завершённого ответа. Актуальный остаток всегда доступен через GET /v1/me.