MW BasicRouter
Консоль

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

Быстрый старт

BasicRouter предоставляет продакшен-командам единый стабильный API для доступа к моделям, маршрутизации, резерва, отслеживания использования и биллинга на основе кредитов. Поставка LLM-токенов осуществляется через доверенные корпоративные облачные аккаунты оригинальных провайдеров, с защитой конфиденциальности, высокой стабильностью и отслеживаемостью запросов, встроенными в шлюз.

Базовый URLhttps://api.basicrouter.ai/api
Совместимо с OpenAIhttps://api.basicrouter.ai/api/v1
Anthropic-messageshttps://api.basicrouter.ai/api/v1
АвторизацияAuthorization: Bearer <key>

Создание ключа API

Создайте ключ API BasicRouter в консоли. Храните ключ на сервере и никогда не раскрывайте его в коде браузера или мобильного клиента.

Рекомендуемая стратегия ключей:

Тип ключаРекомендуемое использование
Ключ для разработкиЛокальная разработка, staging, тестирование и прототипы.
Продакшен-ключТолько для бэкенд-нагрузок в продакшене.
Ключ интеграцииОтдельный ключ для таких инструментов, как Cursor, Claude Code, Codex, Hermes или OpenClaw.
Клиентский / тенантный ключОпциональная изоляция ключей для корпоративных клиентов, трафика тенантов или бизнес-подразделений.

Ротируйте ключи при изменении доступа команды. Отзывайте ключи, которые больше не используются.

Настройте SDK на BasicRouter

Большинству OpenAI-совместимых клиентов нужен только новый базовый URL и ключ API.

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.BASICROUTER_API_KEY,
  baseURL: "https://api.basicrouter.ai/api/v1"
});

Отправка chat completion

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/chat/completions \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "claude-sonnet-5",
    "messages": [
      { "role": "user", "content": "Explain BasicRouter in one sentence." }
    ]
  }'

Проверка использования и баланса

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/billing/balance \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Обзор моделей

Используйте страницу «Модели» или API моделей для просмотра доступных текстовых моделей. Метаданные модели включают производителя, обслуживающего провайдера, модальность, длину контекста, поддерживаемые семейства API, поддерживаемые возможности, доступность, ограничения на уровне аккаунта и цены в кредитах.

Конечная точка: GET /v1/models Назначение: Список моделей, доступных текущему аккаунту.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Матрица возможностей

ВозможностьОписаниеКто обычно использует
streamingПоддерживает потоковую передачу через server-sent events.Чат-приложения, кодинг-агенты, интерактивный UX.
tool_callingПоддерживает вызов инструментов или функций.Агенты, автоматизация рабочих процессов, помощники в кодинге.
structured_outputsПоддерживает вывод, ограниченный схемой, или JSON.Извлечение данных, автоматизация рабочих процессов, корпоративные приложения.
json_modeМожет возвращать вывод в формате JSON.Лёгкие структурированные ответы.
visionПринимает изображения на вход.Мультимодальный чат, анализ UI, скриншоты документов.
prompt_cachingПоддерживает кэширование входных данных или повторное использование контекста.Агенты с длинным контекстом, повторяющиеся системные промпты.
reasoningПоддерживает явное управление рассуждением там, где доступно.Сложное планирование, кодинг, аналитические рабочие процессы.
logprobsПоддерживает вывод вероятностей токенов.Оценка, ранжирование, продвинутые NLP-рабочие процессы.

Матрица совместимости семейств API

Семейство APIТекстВвод изображенийВызов инструментовСтруктурированный выводПотоковая передачаПримечания
OpenAI Chat CompletionsДаЗависит от моделиЗависит от моделиЗависит от моделиДаЛучший вариант по умолчанию для OpenAI-совместимых агентов и SDK.
OpenAI ResponsesДаЗависит от моделиЗависит от моделиЗависит от моделиДаРекомендуется для более новых агентских рабочих процессов в стиле OpenAI.
Anthropic MessagesДаЗависит от моделиЗависит от моделиЗависит от моделиДаЛучший вариант для Claude-совместимых клиентов и Claude Code.
Совместимость Gemini с OpenAIДаЗависит от моделиЗависит от моделиЗависит от моделиДаИспользуйте модели Gemini через OpenAI-совместимые клиенты.
Нативная совместимость GeminiДаЗависит от моделиЗависит от моделиЗависит от моделиДаЛучший вариант для существующих Gemini-native приложений.
Генерация изображений BasicRouterНетЗависит от моделиНетНетНетИспользует асинхронный опрос задач или webhook.
Генерация видео BasicRouterНетЗависит от моделиНетНетНетИспользует асинхронный опрос задач или webhook.

Аутентификация

Каждый API-запрос использует bearer-токен. Храните ключи в серверных переменных окружения, ротируйте их при изменении доступа команды и записывайте идентификаторы запросов для отладки.

ЗаголовокЗначениеПримечания
AuthorizationBearer YOUR_API_KEYОбязателен для каждого запроса.
Content-Typeapplication/jsonОбязателен для JSON-тел запросов.

Рекомендации по безопасности ключей

  1. Храните API-ключи на сервере. Не раскрывайте ключи в браузерном или мобильном клиентском коде.
  2. Используйте отдельные ключи для разработки, staging-окружения, продакшена и сторонних интеграций.
  3. Ограничивайте область действия ключей по окружению, сервису, клиенту или тенанту при наличии.
  4. Ротируйте ключи после ухода сотрудников, изменения доступа подрядчиков или при подозрении на утечку.
  5. Храните ключи в менеджерах секретов или переменных окружения, а не в исходном коде.

Кодинг-агенты

BasicRouter работает с кодинг-агентами и инструментами AI-разработки, которые поддерживают OpenAI-совместимые или Anthropic-совместимые конечные точки API. Используйте псевдонимы маршрутизации, такие как mwf/coding-auto, чтобы BasicRouter мог маршрутизировать запросы к лучшей доступной кодинг-модели без необходимости разработчикам менять конфигурацию инструмента.

Универсальная настройка, совместимая с OpenAI

Используйте эту настройку для Cursor, Codex, Hermes, OpenClaw, Continue, Aider, Cline, агентов на базе LangChain, агентов на базе LlamaIndex и пользовательских OpenAI-совместимых сред выполнения агентов.

export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"

Универсальная настройка, совместимая с Anthropic

Используйте эту настройку для клиентов, совместимых с Claude, и инструментов, ожидающих формат Anthropic Messages.

export ANTHROPIC_BASE_URL="https://api.basicrouter.ai/api/anthropic"
export ANTHROPIC_API_KEY="$BASICROUTER_API_KEY"
export ANTHROPIC_MODEL="mwf/coding-auto"
Сценарий использованияРекомендуемый псевдонимТребования
Общее программированиеmwf/coding-autoВызов инструментов, потоковая передача, сильные способности к программированию.
Быстрый кодинг-чатmwf/coding-fastНизкая задержка и потоковая передача.
Анализ больших репозиториевmwf/coding-longДлинный контекст и стабильный вывод.
Помощник в программировании с ограниченным бюджетомmwf/low-costБолее низкая цена и приемлемое качество кодинга.
Скриншоты UI / визуальный кодингmwf/vision-chatВвод изображений и текстовый вывод.

Краткое руководство по Cursor

Используйте конечную точку, совместимую с OpenAI.

Base URL: https://api.basicrouter.ai/api/v1
API Key:  BASICROUTER_API_KEY
Model:    mwf/coding-auto

Рекомендуемые шаги:

  1. Откройте настройки Cursor.
  2. Добавьте или включите конфигурацию OpenAI-совместимого API-ключа.
  3. Установите переопределение базового URL OpenAI на https://api.basicrouter.ai/api/v1.
  4. Добавьте пользовательскую модель, например mwf/coding-auto, mwf/coding-fast или mwf/coding-long.
  5. Используйте модель с поддержкой потоковой передачи и вызова инструментов для наилучшего поведения агента.

Устранение неполадок:

ПроблемаРекомендованное решение
Модель не отображаетсяДобавьте имя модели вручную как пользовательскую модель.
Сбой вызова инструментовИспользуйте модель с tool_calling: true на странице «Модели».
Потоковая передача прерванаПовторите с экспоненциальной задержкой или используйте псевдоним маршрутизации с резервом.
Ошибка 401Проверьте API-ключ и базовый URL.
Ошибка модели 404Убедитесь, что модель включена для аккаунта.

Краткое руководство по Claude Code

Используйте Anthropic-совместимую конечную точку шлюза.

export ANTHROPIC_BASE_URL="https://api.basicrouter.ai/api/anthropic"
export ANTHROPIC_API_KEY="$BASICROUTER_API_KEY"
export ANTHROPIC_MODEL="mwf/coding-auto"

BasicRouter поддерживает этот Anthropic-совместимый путь для совместимости с Claude Code и Anthropic SDK:

POST /api/v1/messages

Рекомендуемые требования:

ТребованиеПричина
Формат запроса, совместимый с Anthropic MessagesClaude Code ожидает сообщения в стиле Anthropic.
Поддержка потоковой передачиClaude Code полагается на UX потоковой передачи.
Поддержка вызова инструментовТребуется для агентных кодинг-рабочих процессов.
Длинный контекстПолезно для задач на уровне репозитория.
Стабильный резервПолезно для длительных кодинг-сессий.

Краткое руководство по Codex

Используйте BasicRouter как пользовательского OpenAI-совместимого провайдера моделей.

Пример конфигурации провайдера:

[model_providers.basicrouter]
name = "BasicRouter"
base_url = "https://api.basicrouter.ai/api/v1"
env_key = "BASICROUTER_API_KEY"
wire_api = "responses"

model_provider = "basicrouter"
model = "mwf/coding-auto"

Переменная окружения:

export BASICROUTER_API_KEY="br_xxx"

Рекомендуемые модели:

МодельСценарий использования
mwf/coding-autoМодель кодинг-агента по умолчанию.
mwf/coding-longКонтекст больших репозиториев.
mwf/coding-fastБыстрая итерация и небольшие изменения.

Устранение неполадок:

ПроблемаРекомендованное решение
Ошибка авторизацииУбедитесь, что env_key указывает на BASICROUTER_API_KEY.
Модель не найденаДобавьте псевдоним в консоли BasicRouter или используйте прямой ID модели.
Ошибка Responses APIИспользуйте wire_api = "responses" только для моделей и конечных точек, поддерживающих Responses.
Модель только для Chat CompletionsПереключитесь на wire API, совместимый с чатом, если клиент поддерживает это.

Краткое руководство по Hermes

Используйте OpenAI-совместимую конечную точку, если только ваше развертывание Hermes не настроено для другого протокола.

export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"

Рекомендуемая политика моделей:

Рабочая нагрузка HermesМодель
Общая генерация кодаmwf/coding-auto
Выполнение задач с низкой задержкойmwf/coding-fast
Сканирование репозитория с длинным контекстомmwf/coding-long
Фоновые задачи с ограниченным бюджетомmwf/low-cost

Краткое руководство по OpenClaw

Используйте OpenAI-совместимую конечную точку для конфигурации среды выполнения агента в стиле OpenAI.

export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"

Если OpenClaw поддерживает нескольких провайдеров, настройте BasicRouter как OpenAI-совместимого провайдера и используйте псевдонимы маршрутизации BasicRouter для выбора модели.

{
  "provider": "openai-compatible",
  "base_url": "https://api.basicrouter.ai/api/v1",
  "api_key_env": "BASICROUTER_API_KEY",
  "model": "mwf/coding-auto"
}

Контрольный список совместимости агента

ВозможностьТребуется для
Потоковая передачаХороший UX в терминале/редакторе.
Вызов инструментовАгентный кодинг, редактирование файлов, выполнение команд.
Длинный контекстБольшие репозитории и многофайловые изменения.
Структурированные выводыПланирование, декомпозиция задач, автоматизированные рабочие процессы.
Ввод изображенийАнализ скриншотов UI и рабочие процессы «дизайн в код».
РезервСтабильность в продакшене и длительные задачи.

Использование консоли

Консоль BasicRouter — это операционная плоскость управления для доступа к API, доступности моделей, политик маршрутизации, мониторинга использования и администрирования биллинга. Она предоставляет администраторам аккаунта централизованное представление ключей, моделей, запросов, кредитов и средств управления на уровне аккаунта для продакшен-трафика моделей.

Управление ключами API

Создавайте, ротируйте, отзывайте и помечайте API-ключи из консоли. Используйте отдельные ключи для разработки, staging-окружения, продакшена и отдельных сервисов, чтобы использование можно было аудировать и изолировать по окружению или приложению.

ПрактикаОписание
Раздельные окруженияИспользуйте разные API-ключи для разработки, staging-окружения и продакшен-трафика.
Используйте описательные меткиПомечайте ключи по приложению, сервису, окружению или интеграции.
Регулярная ротацияРотируйте ключи при изменении доступа или возможном раскрытии учетных данных.
Избегайте раскрытия на стороне клиентаХраните API-ключи только на серверных системах. Не раскрывайте ключи в браузерном или мобильном клиентском коде.
Мониторинг использования ключейПросматривайте объём запросов, потребление кредитов и шаблоны ошибок по ключам.

Список моделей

Используйте страницу «Модели» для просмотра моделей, доступных аккаунту. Каждая запись о модели может включать вендора, обслуживающего провайдера, модальность, поддерживаемые семейства API, длину контекста, флаги возможностей, статус доступности и информацию о ценах.

ФильтрНазначение
ВендорФильтр по вендору модели, такому как OpenAI, Anthropic, Google, Qwen, DeepSeek, или другим провайдерам.
ПровайдерФильтр по обслуживающему или облачному провайдеру.
МодальностьФильтр по поддержке текста, изображений, видео, эмбеддингов, аудио или мультимодальности.
ВозможностьФильтр по потоковой передаче, вызову инструментов, структурированным выводам, зрению, кэшированию промптов или поддержке рассуждений.
ДоступностьОпределяйте модели, которые в настоящее время доступны аккаунту.

Для продакшен-приложений проверяйте возможности моделей перед включением трафика. Некоторые параметры и функции зависят от модели и могут не поддерживаться во всех семействах API.

Использование и журналы

Представление «Использование и журналы» обеспечивает оперативную видимость API-трафика. Команды могут проверять объём запросов, выбранные модели, разрешённые цели маршрутизации, потребление кредитов, задержку, коды ошибок и идентификаторы запросов.

  • Устранение неполадок неудачных запросов.
  • Выявление дорогостоящих рабочих нагрузок.
  • Сравнение использования моделей между приложениями и окружениями.
  • Проверка поведения маршрутизации и резерва.
  • Исследование проблем задержки или доступности провайдера.
  • Предоставление идентификаторов запросов при обращении в поддержку.

Каждый ответ API включает или раскрывает идентификатор запроса BasicRouter. Сохраняйте этот идентификатор в журналах вашего приложения для повышения эффективности отладки в продакшене и эскалации поддержки.

Резерв

Резерв (fallback) — это механизм отказоустойчивости BasicRouter. Когда основная модель или политика маршрутизации даёт сбой, система автоматически переключается на резервную модель, чтобы продолжить обработку запроса. Это сохраняет отзывчивость приложения и минимизирует риск нарушения работы сервиса.

Гарантия высокой доступности
Резерв действует как страховка, поддерживая бесперебойную работу приложения даже при сбое модели, достижении лимита квоты или колебаниях сети.

Почему важен резерв

В продакшене сервисы моделей могут столкнуться с рядом непредсказуемых проблем:

  • Сбой сервиса модели: вышестоящий API временно недоступен или превышает время ожидания.
  • Колебания производительности: высокая нагрузка на модель приводит к медленным или неудачным ответам.
  • Сбой маршрутизации: все модели-кандидаты, выбранные умной маршрутизацией, становятся недоступными.

Резерв поддерживает доступность вашего приложения, предоставляя надёжный резервный путь.

Ключевые преимущества

ПреимуществоОписание
Высокая доступностьАвтоматическое переключение при сбое поддерживает работу сервиса и снижает влияние простоев.
Прозрачное переключениеСистема переключает модели автоматически — изменения кода приложения не требуются.
Гибкая конфигурацияПоддерживается конфигурация как на уровне запроса, так и на уровне аккаунта для разных сценариев.
Оптимизация затратВыберите более экономичную модель в качестве резерва для контроля затрат в экстренных случаях.
Централизованное управлениеНастройте один раз на уровне аккаунта, и это автоматически применяется к каждому запросу.

Глобальная конфигурация резервной модели

BasicRouter поддерживает настройку глобальной резервной модели из бэкенда консоли. Все запросы автоматически используют эту модель в качестве резерва при сбое.

Как настроить:

  1. Перейдите на страницу настроек стратегии BasicRouter.
  2. Найдите настройку Модель резерва по умолчанию.
  3. Выберите вашу глобальную резервную модель из выпадающего списка.
  4. Сохраните настройку, чтобы применить её немедленно.

Преимущества глобальной конфигурации:

  • Изменения кода не требуются: настройте один раз, и это применяется глобально, без необходимости повторять настройку в каждом запросе.
  • Централизованное управление: управляйте политикой резерва в одном месте для более удобной корректировки и мониторинга.
  • Упрощённое обслуживание: снижает сложность кода и вероятность ошибок конфигурации.
  • Гибкое переопределение: конфигурация резерва на уровне запроса имеет приоритет и может переопределять глобальную настройку для конкретных сценариев.

Конфигурация резерва на уровне запроса

Для конкретных бизнес-сценариев можно указать резервную модель в отдельном запросе, чтобы переопределить глобальную конфигурацию.

Укажите резервную модель с помощью параметра router.fallBackModels:

{
  "model": "claude-sonnet-4",
  "messages": [
    {
      "role": "user",
      "content": "Explain what quantum computing is"
    }
  ],
  "router": {
    "fallBackModels": ["glm-5.2"]
  }
}

Правила приоритета

При наличии нескольких конфигураций резерва приоритет распределяется от высшего к низшему:

  1. router.fallBackModels на уровне запроса: резервная модель, указанная в отдельном запросе.
  2. Глобальная модель резерва по умолчанию: глобальная резервная модель, настроенная в консоли.
  3. Без резерва: если ни одна из них не настроена, запрос возвращает ошибку при сбое.
⚠ Важные примечания
  • Если все резервные модели дают сбой, система возвращает причину сбоя последней испробованной модели.
  • При срабатывании резерва ответ указывает фактически использованную модель, что облегчает мониторинг и анализ.

Администрирование аккаунта

В зависимости от типа аккаунта консоль может включать включение моделей на уровне аккаунта, элементы управления реселлером или дистрибьютором, конфигурацию биллинга и настройки доступа. Администраторы могут использовать эти элементы управления для согласования доступа к моделям, видимости использования и ответственности за биллинг с приложениями, клиентскими аккаунтами или бизнес-подразделениями.

Контрольный список производственных операций

ПунктРекомендация
API-ключиИспользуйте выделенные продакшен-ключи с понятными метками.
МоделиПодтвердите доступность модели, цены, длину контекста и требуемые возможности.
МаршрутизацияНастройте псевдонимы маршрутизации или политики резерва для критически важных рабочих нагрузок.
ЖурналыУбедитесь, что идентификаторы запросов фиксируются в журналах приложения.
БиллингПодтвердите баланс кошелька, статус тарифа и правила списания кредитов.
Ограничения скоростиПросмотрите RPM, TPM, параллелизм и лимиты медиазадач на уровне аккаунта.
ОповещенияОтслеживайте рост использования, баланс кредитов, ошибки и доступность провайдера.

Биллинг и кредиты

BasicRouter использует модель биллинга на основе кредитов для текстовых, графических, видеоматериалов и других поддерживаемых рабочих нагрузок моделей. Кредиты предоставляют единую единицу измерения для использования нескольких моделей и провайдеров, что позволяет командам согласованно управлять потреблением между модальностями и семействами API.

Подробная информация о ценах на модели доступна на странице «Модели» или через API метаданных моделей. Цены могут различаться в зависимости от модели, провайдера, модальности, разрешения, типа токенов, длины вывода, длительности задачи, типа аккаунта и коммерческого соглашения.

Пополнение и кошелёк

Аккаунты могут добавлять кредиты на кошелёк с оплатой по факту использования для гибкого использования. Кредиты кошелька используются после того, как кредиты месячного тарифа и пакеты ресурсов будут израсходованы, если к аккаунту не применяется пользовательское правило биллинга.

Кредиты кошелька не истекают, если иное не указано в применимых коммерческих условиях. При пополнении кошелька с оплатой по факту использования взимается сервисный сбор.

Месячные тарифы и пакеты ресурсов

Каждый пользователь или аккаунт может выбрать один активный месячный тариф. Месячные тарифы предоставляют определённый объём пропускной способности использования, коммерческие условия и конфигурацию доступа на уровне аккаунта для расчётного периода.

Пользователи также могут покупать несколько пакетов ресурсов для дополнительной пропускной способности. Пакеты ресурсов позволяют отделить обязательное использование от баланса кошелька с оплатой по факту и полезны для интенсивного использования текста, изображений, видео или выделенных рабочих нагрузок.

Порядок списания

Если не настроены пользовательские правила биллинга, кредиты списываются в следующем порядке:

ПриоритетИсточник кредитовОписание
1Месячный тарифВключённая месячная пропускная способность использования расходуется первой.
2Пакеты ресурсовДополнительно приобретённые пакеты расходуются после кредитов месячного тарифа.
3Кошелёк с оплатой по фактуБаланс кошелька расходуется после кредитов тарифа и пакетов ресурсов.

Для аккаунтов с пользовательскими коммерческими условиями порядок списания, правила истечения срока действия, включённое использование и цены могут отличаться. Специфичные для аккаунта правила отображаются в консоли или предоставляются через коммерческое соглашение.

Индивидуальное ценообразование

Ценообразование может быть настроено для каждого пользователя или аккаунта. Корпоративные клиенты, аккаунты реселлеров, аккаунты дистрибьюторов и клиенты с большим объёмом использования могут иметь право на индивидуальное ценообразование. Свяжитесь с отделом продаж для получения предложения.

Индивидуальное ценообразование может быть настроено по аккаунту, модели, провайдеру, модальности, региону, объёму использования или коммерческому соглашению. Когда включено индивидуальное ценообразование, консоль и API биллинга отражают специфичные для аккаунта цены и правила списания там, где это доступно.

Единицы ценообразования

Разные модальности моделей используют разные единицы измерения. BasicRouter конвертирует эти единицы в кредиты в соответствии с правилами ценообразования модели.

МодальностьОбычная основа ценообразования
ТекстВходные токены, выходные токены, кэшированные токены чтения, кэшированные токены записи, токены рассуждений или специфичные для модели категории токенов.
ИзображениеМодель, разрешение, количество сгенерированных изображений, использование входных изображений, режим редактирования или настройка качества.
ВидеоМодель, разрешение вывода, сгенерированные секунды, соотношение сторон, использование входных изображений или видео и тип задачи.
ЭмбеддингиВходные токены или количество записей эмбеддингов.
АудиоДлительность ввода, длительность вывода, длина транскрипции или специфичные для модели единицы аудио.

Единицы ценообразования могут различаться в зависимости от модели. Всегда обращайтесь к странице сведений о модели или метаданным цен перед включением модели в продакшене.

Атрибуция использования

Использованием BasicRouter можно просматривать по аккаунту, API-ключу, модели, модальности или диапазону времени. Это позволяет командам относить затраты к приложениям, окружениям, клиентам или внутренним бизнес-подразделениям.

ИзмерениеОписание
API-ключГруппировка использования по приложению, сервису или окружению.
МодельСравнение затрат и объёма по выбранной модели.
Разрешённая модельПросмотр фактически использованной модели после маршрутизации или резерва.
МодальностьРазделение использования текста, изображений, видео, эмбеддингов и аудио.
Диапазон времениПросмотр дневных, месячных или пользовательских отчётных периодов.
МетаданныеГруппировка использования по пользовательским метаданным запроса, таким как ID клиента, ID тенанта, ID пользователя или окружение.

Баланс кредитов

Проверьте, сколько кредитов доступно на вашем аккаунте. Баланс разделён на три кошелька, которые списываются по порядку: месячный лимит тарифа, приобретённые пакеты ресурсов и кошелёк с оплатой по факту. Также доступен общий ресурсный итог (месячный тариф + пакеты ресурсов, без учёта оплаты по факту) для отслеживания включённого использования отдельно от расходов на пополнение.

Чтобы получить эти данные программно, см. GET /v1/billing/balance в Справочнике API.

Сведения об использовании

Просматривайте постраничный хронологический список отдельных записей об использовании для отчётности, мониторинга и внутреннего распределения затрат. Каждая запись показывает модель, тип модели (текст, изображение или видео), списанные кредиты и разбивку того, из какого кошелька было произведено каждое списание. Результаты можно фильтровать по конкретному диапазону времени.

Чтобы получить эти данные программно, см. GET /v1/usage в Справочнике API.

История транзакций

Используйте историю транзакций для просмотра движений кредитов, включая пополнения, распределения по тарифам, предоставления пакетов ресурсов, списания за использование, корректировки и административные исправления.

Чтобы получить эти данные программно, см. GET /v1/billing/transactions в Справочнике API.

Неудачные запросы и возвраты

Ошибки валидации, ошибки аутентификации и ошибки разрешений, как правило, не оплачиваются, поскольку выполнения модели не происходит. Запросы, достигающие вышестоящей модели или генерирующие частичный вывод, могут потреблять кредиты в зависимости от модели, провайдера и состояния ответа.

Для асинхронных задач генерации изображений и видео поведение биллинга зависит от того, была ли задача принята, начата, завершена, выполнена с ошибкой или отменена. Ответ с деталями задачи включает информацию об использовании, когда кредиты были потреблены.

Пополнения, месячные тарифы, пакеты ресурсов и потреблённые кредиты возврату не подлежат, если иное не предусмотрено применимым коммерческим соглашением или не требуется по закону.

Справочник API

Общие соглашения

Базовый URL

Все конечные точки обслуживаются с префиксом /v1.

Аутентификация

Вызовы к конечным точкам /v1/* используют аутентификацию API Key (не JWT). API-ключ передаётся через следующий заголовок:

ЗаголовокФорматОписание
AuthorizationBearer <api_key>В стиле OpenAI. Anthropic-совместимая конечная точка также принимает x-api-key с anthropic-version: 2023-06-01.

Отсутствующие или недействительные ключи возвращают 401.

Предварительная проверка баланса

Все конечные точки вызова моделей выполняют предварительную проверку баланса перед выполнением:

  • Недостаточный баланс возвращает Insufficient credit, что соответствует:
    • Протокол OpenAI: HTTP 400, code = insufficient_quota
    • Протокол Anthropic: HTTP 402, type = billing_error
  • Некоторые конечные точки также оценивают минимальную стоимость по модели для второй предварительной проверки.

POST https://api.basicrouter.ai/api/v1/chat/completions

Конечная точка, совместимая с OpenAI Chat Completions. Поддерживает потоковый и непотоковый режимы, вызовы инструментов, режим JSON и мультимодальный ввод.

ПолеТипОбязательноОписание
modelStringДаИмя модели.
messagesMessage[]ДаСообщения диалога.
streamBooleanНетПотоковый режим, по умолчанию false.
temperatureDoubleНетТемпература выборки.
max_tokensIntegerНетМаксимальное количество выходных токенов.
top_pDoubleНетЯдерная выборка (nucleus sampling).
presence_penaltyDoubleНет
frequency_penaltyDoubleНет
toolsTool[]НетОпределения инструментов.
tool_choiceString|ObjectНетauto / none / required / конкретная функция.
response_formatObjectНет{type, json_schema:{name,schema,strict}}; text/json_object/json_schema.
parallel_tool_callsBooleanНет
metadataMapНетПрокси-метаданные.

Поля Message:

ПолеТипОписание
roleStringsystem / user / assistant / tool.
contentString|ArrayПростой текст или массив блоков мультимодального содержимого ([{type:"text",text},{type:"image_url",image_url:{url}}]).
tool_call_idStringСвязь с tool_calls при role=tool.
tool_callsToolCall[]Присутствует, когда role=assistant совершает вызовы инструментов.
ПолеТипОписание
typeStringФиксированное значение function.
functionObjectОпределение функции.
function.nameStringИмя функции.
function.descriptionStringОписание функции.
function.parametersObjectJSON Schema для входных данных.
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/chat/completions \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "glm-5.2",
    "messages": [{"role": "user", "content": "Describe Hangzhou in one sentence."}],
    "stream": false,
    "temperature": 0.7
  }'
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "created": 1721380000,
  "model": "glm-5.2",
  "choices": [
    {
      "index": 0,
      "message": {"role": "assistant", "content": "Hangzhou is ..."},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 12, "completion_tokens": 18, "total_tokens": 30}
}

Поля ответа (непотоковый):

ПолеТипОписание
idStringИдентификатор завершения.
objectStringФиксированное значение chat.completion.
createdLongМетка времени создания (в секундах).
modelStringИмя модели.
choicesChoice[]{index, message:{role, content, tool_calls?}, finish_reason}.
usageObject{prompt_tokens, completion_tokens, total_tokens}.
ПолеТипОписание
idStringИдентификатор вызова инструмента.
typeStringФиксированное значение function.
functionObjectСведения о вызове функции.
function.nameStringИмя функции.
function.argumentsObjectАргументы функции.

Пример потокового ответа:

data: {"object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant","content":"..."}}]}

data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"..."}}]}

data: [DONE]

POST https://api.basicrouter.ai/api/v1/responses

Конечная точка, совместимая с OpenAI Responses. Использует input вместо messages, instructions вместо системного сообщения и блок text вместо response_format.

ПолеТипОбязательноОписание
modelStringДаИмя модели.
inputString|ArrayДаПростая строка (сообщение пользователя) или массив объектов сообщений.
instructionsStringНетСистемный промпт.
streamBooleanНетПо умолчанию false.
max_output_tokensIntegerНетМаксимальное количество выходных токенов.
temperatureDoubleНетПо умолчанию 1.
top_pDoubleНет
toolsTool[]НетВерхнеуровневые {type, name, description, parameters}.
tool_choiceString|ObjectНетauto/none/required/{type,name}.
textObjectНет{format:{type, name, schema, strict}}; text/json_object/json_schema.
metadataMapНет
previous_response_idStringНетИдентификатор предыдущего ответа для многоходового диалога.
parallel_tool_callsBooleanНет
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/responses \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "glm-5.2",
    "input": "Describe Hangzhou in one sentence.",
    "instructions": "Be concise.",
    "stream": false
  }'
{
  "id": "resp_xxx",
  "object": "response",
  "model": "glm-5.2",
  "status": "completed",
  "created_at": 1721380000,
  "output": [
    {
      "id": "msg_xxx",
      "type": "message",
      "role": "assistant",
      "content": [{"type": "output_text", "text": "Hangzhou is ..."}],
      "status": "completed"
    }
  ],
  "usage": {"input_tokens": 12, "output_tokens": 18, "total_tokens": 30}
}

Поля ответа (непотоковый):

ПолеТипОписание
idStringИдентификатор ответа.
objectStringФиксированное значение response.
modelStringИмя модели.
statusStringнапример, completed.
created_atLongМетка времени создания (в секундах).
outputArrayЭлементы вывода. Элементы сообщений: {id, type:"message", role, content:[{type:"output_text", text}], status}. Элементы вызова инструментов: {type:"function_call", id, name, call_id, arguments, status}.
usageObject{input_tokens, output_tokens, total_tokens}. Для моделей Claude input_tokens включает cache_read, а output_tokens включает cache_write.

Потоковая передача следует событиям Responses API:

СобытиеОписание
response.createdНачало потока ответа.
response.output_text.deltaИнкрементное обновление текстового вывода.
response.completedКонец потока ответа.

POST https://api.basicrouter.ai/api/v1/messages

Конечная точка, совместимая с Anthropic Messages. Принимает заголовки x-api-key и anthropic-version: 2023-06-01. Блоки содержимого поддерживают text, image, tool_use, tool_result, thinking и redacted_thinking.

ПолеТипОбязательноJSON-полеОписание
modelStringДаmodelИмя модели.
messagesMessage[]ДаmessagesСообщения диалога.
systemString|ArrayНетsystemСистемный промпт, строка или [{type,text}].
maxTokensIntegerДаmax_tokensМаксимальное количество выходных токенов.
streamBooleanНетstreamПотоковая передача.
temperatureDoubleНетtemperature
topPDoubleНетtop_p
topKIntegerНетtop_k
toolsTool[]НетtoolsОпределения инструментов (input_schema).
toolChoiceObjectНетtool_choice
metadataMapНетmetadata
thinkingObjectНетthinkingКонфигурация расширенного мышления.
stopSequencesObjectНетstop_sequences
anthropicBetaObjectНетanthropic_betaЗаголовок бета-функции.
ПолеТипОписание
roleStringРоль сообщения, например user / assistant.
contentString|ContentBlock[]Простой текст или массив блоков содержимого.
ПолеТипОписание
typeStringОдно из text, image, tool_use, tool_result, thinking, redacted_thinking.
textStringПрисутствует, когда тип — text.
sourceObjectПрисутствует, когда тип — image.

Примеры блоков изображений:

{ "type": "image", "source": { "type": "base64", "media_type": "...", "data": "..." } }
{ "type": "image", "source": { "type": "url", "url": "..." } }
ПолеТипОписание
nameStringИмя функции.
descriptionStringОписание функции.
input_schemaObjectJSON Schema для входных данных.
cache_controlObjectНеобязательное управление кэшем.
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/messages \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "anthropic-version: 2023-06-01" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "claude-sonnet-4.6",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Describe Hangzhou in one sentence."}]
  }'
{
  "id": "msg_xxx",
  "type": "message",
  "role": "assistant",
  "model": "claude-sonnet-4.6",
  "content": [{"type": "text", "text": "Hangzhou is ..."}],
  "stop_reason": "end_turn",
  "usage": {"input_tokens": 12, "output_tokens": 18}
}

Поля ответа (непотоковый):

ПолеТипОписание
idStringИдентификатор сообщения.
typeStringФиксированное значение message.
roleStringФиксированное значение assistant.
modelStringИмя модели.
contentContentBlock[]Блоки содержимого ответа (например, {type:"text", text}, {type:"tool_use", ...}).
stop_reasonStringнапример, end_turn, tool_use, max_tokens.
usageObject{input_tokens, output_tokens}.
СобытиеОписание
message_startНачало потока сообщений.
content_block_startНачало нового блока содержимого.
content_block_deltaИнкрементное обновление для блока содержимого.
content_block_stopКонец блока содержимого.
message_deltaИнкрементное обновление для сообщения.
message_stopКонец потока сообщений.

GET https://api.basicrouter.ai/api/v1/models

Возвращает все онлайн-модели API, которые включены.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "glm-5.2",
      "object": "model",
      "display_name": "glm-5.2",
      "created": 1721380000,
      "owned_by": "Zai",
      "input_modalities": ["text", "image"],
      "output_modalities": ["text"],
      "context_length": 128000
    }
  ]
}

Поля каждой записи модели (data[]):

ПолеТипОписание
idStringИдентификатор модели.
objectStringФиксированное значение model.
display_nameStringОтображаемое имя.
createdLongМетка времени создания (в секундах).
owned_byStringВладелец / вендор.
input_modalitiesString[]например, ["text","image"].
output_modalitiesString[]например, ["text"].
context_lengthIntegerМаксимальная длина контекста.

GET https://api.basicrouter.ai/api/v1/models/{model}

Возвращает одну модель с той же структурой, что и элемент списка. Возвращает HTTP 404, если модель не существует.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/models/gpt-5.5 \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Ответ при успешном выполнении: один объект модели с теми же полями, что и элемент списка /v1/models.

Если модель не существует, возвращается HTTP 404:

{"error": {"message": "The model 'xxx' does not exist", "type": "invalid_request_error", "code": "invalid_model_error"}}

GET https://api.basicrouter.ai/api/v1/image-models

Запросите поддерживаемые разрешением, соотношения сторон и максимальные количества для модели генерации изображений перед вызовом /v1/image-generations. Аутентификация не требуется.

ПолеТипОписание
idStringИдентификатор модели.
objectStringФиксированное значение image_model.
displayNameStringОтображаемое имя.
descriptionStringОписание модели.
iconStringURL иконки.
createdLongМетка времени создания (в секундах).
maxCountIntegerМаксимум изображений за запрос.
fileMaxIntegerМаксимум референсных изображений.
resolutionsString[]Поддерживаемые разрешения, например, ["720p","1080p"].
ratiosString[]Поддерживаемые соотношения сторон, например, ["1:1","3:2"].
curl --request GET \
  --url https://api.basicrouter.ai/api/v1/image-models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "gpt-image-2",
      "object": "image_model",
      "displayName": "GPT Image 1",
      "description": "...",
      "icon": "...",
      "created": 1721380000,
      "maxCount": 4,
      "fileMax": 10,
      "resolutions": ["720p", "1080p"],
      "ratios": ["1:1", "3:2"]
    }
  ]
}

GET https://api.basicrouter.ai/api/v1/video-models

Запросите поддерживаемые значения videoType, диапазон длительности, разрешения и соотношения сторон для видеомодели перед вызовом /v1/video-generations. Аутентификация не требуется.

ПолеТипОписание
idStringИдентификатор модели.
objectStringФиксированное значение video_model.
displayNameStringОтображаемое имя.
descriptionStringОписание модели.
iconStringURL иконки.
createdLongМетка времени создания (в секундах).
allowedVideoTypesVideoTypeOption[]Список поддерживаемых videoType.
videoDurationMinIntegerМинимум секунд на клип.
videoDurationMaxIntegerМаксимум секунд на клип.
videoDurationSuggestInteger[]Рекомендуемые шаги длительности, например [5,8,10].
resolutionsString[]Поддерживаемые разрешения.
ratiosString[]Поддерживаемые соотношения сторон.
resolutionOptionsResolutionOption[]Структурированные комбинации разрешение+соотношение+размер.
fileMaxIntegerМаксимум референсных ресурсов.

Поля VideoTypeOption:

ПолеТипОписание
codeIntegerЗначение videoType для передачи в /v1/video-generations.
nameStringЛокализованное имя типа (text-to-video / image-to-video / ...).
curl --request GET \
  --url https://api.basicrouter.ai/api/v1/video-models \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "object": "list",
  "data": [
    {
      "id": "sora-2",
      "object": "video_model",
      "displayName": "Sora 2",
      "description": "...",
      "icon": "...",
      "created": 1721380000,
      "allowedVideoTypes": [
        {"code": 1, "name": "text-to-video"},
        {"code": 2, "name": "image-to-video"},
        {"code": 3, "name": "image-to-video (first/last frame)"}
      ],
      "videoDurationMin": 5,
      "videoDurationMax": 10,
      "videoDurationSuggest": [5, 8, 10],
      "resolutions": ["1080p", "720p"],
      "ratios": ["16:9", "9:16"],
      "fileMax": 5
    }
  ]
}

POST https://api.basicrouter.ai/api/v1/image-generations

Асинхронно отправьте задачу генерации изображений. Немедленно возвращает taskId; получите результат опросом GET /v1/image-generations/{taskId} или через вебхук callbackUrl.

Значения model, поддерживаемые значения resolution / ratio, верхний предел count и лимит загрузки референсных изображений (fileMax) необходимо сначала получить из GET /v1/image-models. Принимаются только значения, заявленные в спецификации модели.

ПолеТипОбязательноОписание
textStringДаПромпт.
modelStringДаИмя модели.
imageUrlsString[]НетURL референсных изображений (image-to-image).
countIntegerНетКоличество изображений (≥0).
resolutionStringНетРазрешение (см. /v1/image-models).
ratioStringНетСоотношение сторон.
callbackUrlStringНетURL вебхука на уровне задачи.
curl --request POST \
  --url https://api.basicrouter.ai/api/v1/image-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "model": "seedream-4.5",
    "text": "A cat drinking water by the river",
    "count": 1,
    "resolution": "2k",
    "ratio": "1:1",
    "imageUrls": []
  }'
{
  "code": 200,
  "message": "image task is commit",
  "data": {"taskId": "img_xxx"}
}

Ответы при ошибках:

// Insufficient credit
{ "code": 500, "message": "Insufficient credit" }

// Model not found
{ "code": 404, "message": "Model not found: xxx" }

GET https://api.basicrouter.ai/api/v1/image-generations/{taskId}

Опрос задачи генерации изображений. status имеет значение pending / success / failed. images — это JSON-строка массива URL изображений; text содержит любое текстовое описание, добавленное моделью (например, мультимодальный вывод Gemini), иначе null.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/image-generations/img_xxx \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "img_xxx",
    "status": "success",
    "errorMessage": null,
    "images": "[\"https://.../1.png\"]",
    "text": null
  }
}

Поля data ответа:

ПолеТипОписание
taskIdStringИдентификатор задачи.
statusStringpending / success / failed.
errorMessageStringПричина ошибки, null при успехе.
imagesStringJSON-строка массива URL изображений, например, "[\"https://.../1.png\"]".
textStringТекстовое описание, добавленное моделью (например, мультимодальный вывод Gemini); иначе null.

Задача не найдена:

{ "code": 500, "message": "task not found" }

Если при отправке был предоставлен callbackUrl, сервер отправляет окончательный результат success / failed через вебхук с той же структурой data.

Полный пример (отправка + опрос)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class ImageGenerationExample {
  private static final String BASE = "https://api.basicrouter.ai/api/v1";
  private static final String API_KEY = System.getenv("BASICROUTER_API_KEY");

  public static void main(String[] args) throws Exception {
    HttpClient http = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(10)).build();

    // 1. Submit the task.
    String body = "{"
        + "\"model\":\"seedream-4.5\","
        + "\"text\":\"A cat drinking water by the river\","
        + "\"count\":1,"
        + "\"resolution\":\"2k\","
        + "\"ratio\":\"1:1\","
        + "\"imageUrls\":[]"
        + "}";
    HttpResponse<String> submit = http.send(
        HttpRequest.newBuilder(URI.create(BASE + "/image-generations"))
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body)).build(),
        HttpResponse.BodyHandlers.ofString());

    String taskId = extract(submit.body(), "taskId");
    System.out.println("taskId = " + taskId);

    // 2. Poll until terminal status.
    String status = "pending";
    while ("pending".equals(status)) {
      Thread.sleep(15_000L);
      HttpResponse<String> poll = http.send(
          HttpRequest.newBuilder(URI.create(BASE + "/image-generations/" + taskId))
              .header("Authorization", "Bearer " + API_KEY).GET().build(),
          HttpResponse.BodyHandlers.ofString());
      status = extract(poll.body(), "status");
      System.out.println("status = " + status);
    }

    if (!"success".equals(status)) {
      throw new RuntimeException("image generation failed: " + status);
    }
    // images is a JSON-stringified array of URLs.
    String images = extract(pollResult(http, taskId), "images");
    System.out.println("images = " + images);
  }

  // Minimal JSON field extractor — use Jackson/Gson in production.
  private static String extract(String json, String field) {
    int i = json.indexOf("\"" + field + "\":");
    if (i < 0) return null;
    i += field.length() + 3;
    if (json.charAt(i) == '\"') {
      int end = json.indexOf('\"', i + 1);
      return json.substring(i + 1, end);
    }
    int end = i;
    while (end < json.length() && "0123456789.".indexOf(json.charAt(end)) >= 0) end++;
    return json.substring(i, end);
  }

  private static String pollResult(HttpClient http, String taskId) throws Exception {
    return http.send(HttpRequest.newBuilder(URI.create(BASE + "/image-generations/" + taskId))
        .header("Authorization", "Bearer " + API_KEY).GET().build(),
        HttpResponse.BodyHandlers.ofString()).body();
  }
}
import os
import time
import requests

BASE = "https://api.basicrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BASICROUTER_API_KEY']}"}

# 1. Submit the task.
resp = requests.post(
    f"{BASE}/image-generations",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "model": "seedream-4.5",
        "text": "A cat drinking water by the river",
        "count": 1,
        "resolution": "2k",
        "ratio": "1:1",
        "imageUrls": [],
    },
)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"taskId = {task_id}")

# 2. Poll until terminal status.
while True:
    time.sleep(15)
    poll = requests.get(f"{BASE}/image-generations/{task_id}", headers=HEADERS)
    poll.raise_for_status()
    data = poll.json()["data"]
    status = data["status"]
    print(f"status = {status}")
    if status != "pending":
        break

if status != "success":
    raise RuntimeError(f"image generation failed: {data.get('errorMessage')}")

# images is a JSON-stringified array of URLs.
import json
images = json.loads(data["images"])
print(f"images = {images}")

POST https://api.basicrouter.ai/api/v1/video-generations

Асинхронно отправьте задачу генерации видео. Немедленно возвращает taskId; получите результат опросом GET /v1/video-generations/{taskId} или через вебхук callbackUrl.

Значения model, разрешённые значения videoType, диапазон длительности (videoDurationMin/Max), поддерживаемые resolution / ratio и лимит загрузки референсных ресурсов (fileMax) необходимо сначала получить из GET /v1/video-models. Принимаются только коды videoType, перечисленные в allowedVideoTypes этой модели.

ПолеТипОбязательноОписание
textStringДаПромпт.
modelStringДаИмя модели.
videoTypeIntegerДа1 text-to-video / 2 image-to-video (первый кадр) / 3 image-to-video (первый+последний кадр) / 4 image-to-video (референс) / 5 все референсы.
imageUrlsString[]НетURL изображений.
videoUrlsVideoUrl[]|String[]НетURL видеоресурсов.
audioUrlsString[]НетURL аудиоресурсов.
resolutionStringНетРазрешение.
ratioStringНетСоотношение сторон.
durationLongНетСекунды (>0).
callbackUrlStringНетURL вебхука на уровне задачи.

Примеры для каждого videoType:

1. Текст в видео (videoType=1)

Генерация видео только из текстового промпта; референсные ресурсы не требуются.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 1,
    "text": "A cat jumping on a bed",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "seedance-2.0"
  }'
2. Изображение в видео — первый кадр (videoType=2)

Предоставьте один начальный кадр в imageUrls; модель генерирует видео, начиная с этого кадра.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 2,
    "text": "Happily shaking head",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "seedance-2.0",
    "imageUrls": ["https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/first-frame.png"]
  }'
3. Изображение в видео — первый и последний кадр (videoType=3)

Предоставьте и первый, и последний кадр в imageUrls (порядок: [первый, последний]); модель генерирует переходное видео между двумя кадрами.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 3,
    "text": "Put on the hat",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "seedance-2.0",
    "imageUrls": [
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/first-frame.png",
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/last-frame.png"
    ]
  }'
4. Изображение в видео — референс (videoType=4)

Предоставьте одно или несколько референсных изображений в imageUrls; модель использует их стиль/содержимое как референс (не как обязательный первый/последний кадр) для генерации видео.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 4,
    "text": "Two cats playing together",
    "resolution": "480p",
    "ratio": "16:9",
    "duration": 4,
    "model": "kling-v3-omni-video",
    "imageUrls": [
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/ref-1.png",
      "https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/ref-2.png"
    ]
  }'
5. Все референсы (videoType=5)

Смешанные референсы изображений / видео / аудио. Указывайте референсные ресурсы по позиции в промпте: 1-й элемент в imageUrls — это @图片 1, 1-й в videoUrls@视频 1, 1-й в audioUrls@音频 1. videoUrls также принимает простые строки URL.

curl --request POST \
  --url https://api.basicrouter.ai/api/v1/video-generations \
  --header "Authorization: Bearer $BASICROUTER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "videoType": 5,
    "text": "Use the first-person framing of @视频 1 and @音频 1 as background music. First-person tea ad; start frame is @图片 1 ... end frame is @图片 2.",
    "model": "seedance-2.0",
    "imageUrls": [
      "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg",
      "https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg"
    ],
    "videoUrls": ["https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4"],
    "audioUrls": ["https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3"],
    "resolution": "1080p",
    "ratio": "16:9",
    "duration": 11
  }'

Ответ при отправке (для всех пяти типов):

{
  "code": 200,
  "message": "success",
  "data": {"taskId": "vid_xxx"}
}

GET https://api.basicrouter.ai/api/v1/video-generations/{taskId}

Опрос задачи генерации видео. status имеет значение pending / success / failed; videoUrl — URL сгенерированного видео, а lastFrameUrl — URL последнего кадра (для сценариев image-to-video).

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/video-generations/vid_xxx \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "code": 200,
  "message": "success",
  "data": {
    "status": "success",
    "videoUrl": "https://.../out.mp4",
    "lastFrameUrl": null,
    "message": null
  }
}

Поля data ответа:

ПолеТипОписание
statusStringpending / success / failed.
videoUrlStringURL сгенерированного видео.
lastFrameUrlStringURL последнего кадра (для сценариев image-to-video); иначе null.
messageStringПричина ошибки, null при успехе.

Если при отправке был предоставлен callbackUrl, сервер отправляет окончательный результат через вебхук с той же структурой data.

Полный пример (отправка + опрос)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

public class VideoGenerationExample {
  private static final String BASE = "https://api.basicrouter.ai/api/v1";
  private static final String API_KEY = System.getenv("BASICROUTER_API_KEY");

  public static void main(String[] args) throws Exception {
    HttpClient http = HttpClient.newBuilder()
        .connectTimeout(Duration.ofSeconds(10)).build();

    // 1. Submit the task (videoType=1: text-to-video).
    String body = "{"
        + "\"videoType\":1,"
        + "\"text\":\"A cat jumping on a bed\","
        + "\"resolution\":\"480p\","
        + "\"ratio\":\"16:9\","
        + "\"duration\":4,"
        + "\"model\":\"seedance-2.0\""
        + "}";
    HttpResponse<String> submit = http.send(
        HttpRequest.newBuilder(URI.create(BASE + "/video-generations"))
            .header("Authorization", "Bearer " + API_KEY)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body)).build(),
        HttpResponse.BodyHandlers.ofString());

    String taskId = extract(submit.body(), "taskId");
    System.out.println("taskId = " + taskId);

    // 2. Poll until terminal status. Video tasks take longer — poll every 20s.
    String status = "pending";
    String lastBody = null;
    while ("pending".equals(status)) {
      Thread.sleep(20_000L);
      HttpResponse<String> poll = http.send(
          HttpRequest.newBuilder(URI.create(BASE + "/video-generations/" + taskId))
              .header("Authorization", "Bearer " + API_KEY).GET().build(),
          HttpResponse.BodyHandlers.ofString());
      lastBody = poll.body();
      status = extract(lastBody, "status");
      System.out.println("status = " + status);
    }

    if (!"success".equals(status)) {
      throw new RuntimeException("video generation failed: " + status);
    }
    String videoUrl = extract(lastBody, "videoUrl");
    System.out.println("videoUrl = " + videoUrl);
  }

  // Minimal JSON field extractor — use Jackson/Gson in production.
  private static String extract(String json, String field) {
    int i = json.indexOf("\"" + field + "\":");
    if (i < 0) return null;
    i += field.length() + 3;
    if (json.charAt(i) == '\"') {
      int end = json.indexOf('\"', i + 1);
      return json.substring(i + 1, end);
    }
    int end = i;
    while (end < json.length() && "0123456789.".indexOf(json.charAt(end)) >= 0) end++;
    return json.substring(i, end);
  }
}
import os
import time
import requests

BASE = "https://api.basicrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BASICROUTER_API_KEY']}"}

# 1. Submit the task (videoType=1: text-to-video).
resp = requests.post(
    f"{BASE}/video-generations",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "videoType": 1,
        "text": "A cat jumping on a bed",
        "resolution": "480p",
        "ratio": "16:9",
        "duration": 4,
        "model": "seedance-2.0",
    },
)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"taskId = {task_id}")

# 2. Poll until terminal status. Video tasks take longer — poll every 20s.
while True:
    time.sleep(20)
    poll = requests.get(f"{BASE}/video-generations/{task_id}", headers=HEADERS)
    poll.raise_for_status()
    data = poll.json()["data"]
    status = data["status"]
    print(f"status = {status}")
    if status != "pending":
        break

if status != "success":
    raise RuntimeError(f"video generation failed: {data.get('message')}")

print(f"videoUrl = {data['videoUrl']}")
if data.get("lastFrameUrl"):
    print(f"lastFrameUrl = {data['lastFrameUrl']}")

GET https://api.basicrouter.ai/api/v1/billing/balance

Возвращает баланс аккаунта, разделённый на три кошелька: месячный тариф, пакеты ресурсов и кредиты с оплатой по факту.

curl --request GET \
  --url https://api.basicrouter.ai/api/v1/billing/balance \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"
{
  "totalCredit": 128.50,
  "totalResourceCredit": 30.00,
  "wallets": {
    "monthlyPlan": {"id": "pkg_xxx", "credit": 50.00, "name": "Monthly plan"},
    "resourcePacks": [
      {"id": "rp_xxx", "credit": 30.00, "name": "Video resource pack"}
    ],
    "payAsYouGo": 48.50
  }
}

Поля ответа:

ПолеТипОписание
totalCreditBigDecimalОбщий баланс.
totalResourceCreditBigDecimalСумма балансов пакетов ресурсов.
wallets.monthlyPlanWalletDetailМесячный тариф (null, если отсутствует).
wallets.resourcePacksWalletDetail[]Список пакетов ресурсов.
wallets.payAsYouGoBigDecimalБаланс с оплатой по факту.

Поля WalletDetailVO::

ПолеТипОписание
idStringИдентификатор кошелька.
creditBigDecimalКредиты на балансе.
nameStringНазвание кошелька.

GET https://api.basicrouter.ai/api/v1/usage

Постраничные детали биллинга вызовов моделей, снимок по цене (priceSnapshotId), упорядоченные по времени создания заказа в порядке убывания. Возвращаются только обычные записи списания (reason = model usage).

Параметры запроса:

ПараметрТипОбязательноПо умолчаниюОписание
pageIntegerНет1Номер страницы, начиная с 1.
sizeIntegerНет20Размер страницы (пагинация по priceSnapshotId).
startTimeLocalDateTimeNoВремя начала, формат yyyy-MM-ddTHH:mm:ss, фильтрует по снимку orderCreatedAt.
endTimeLocalDateTimeNoВремя окончания, формат yyyy-MM-ddTHH:mm:ss.
curl --request GET \
  --url "https://api.basicrouter.ai/api/v1/usage?page=1&size=20&startTime=2026-07-01T00:00:00&endTime=2026-07-31T23:59:59" \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Обёртка ответа:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}
ПолеТипОписание
recordsUsageDetailVO[]Записи текущей страницы.
totalLongОбщее количество.
currentLongТекущая страница.
sizeLongРазмер страницы.
pagesLongВсего страниц.

Поля UsageDetailVO:

ПолеТипОписание
priceSnapshotIdStringИдентификатор снимка цены.
taskIdStringИдентификатор задачи.
creditBigDecimalСписанная сумма.
modelStringИмя модели.
modelTypeStringtext / image / video.
inputTokensLongВходные токены; null для image/video.
outputTokensLongВыходные токены.
totalTokensLongВсего токенов.
cacheReadTokensLongТокены чтения из кэша.
cacheWriteTokensLongТокены записи в кэш.
imageCountIntegerКоличество изображений; задаётся для моделей изображений.
imageResolutionStringРазрешение изображения, например 720P.
imageRatioStringСоотношение сторон изображения, например 1:1.
videoResolutionStringРазрешение видео, например 1080p.
videoRatioStringСоотношение сторон видео, например 16:9.
videoDurationSecLongДлительность видео в секундах.
orderCreatedAtLocalDateTimeВремя создания заказа (снимок orderCreatedAt).
creditDetailsCreditDetailItem[]Детали заказов под этим снимком (из credit_order_t).

Поля CreditDetailItem:

ПолеТипОписание
creditBigDecimalСумма, списанная этим заказом.
deductionSourceStringИсточник списания (Balance / Monthly Package / Resource Package).
packageNameStringИмя пакета; null, если пакета нет.

Соглашение о null-значениях: заполняются только поля, относящиеся к каждому modelType; остальные равны null. Для text заполняются поля токенов; для imageimageCount/imageResolution/imageRatio; для videovideoResolution/videoRatio/videoDurationSec.

Пример ответа:

{
  "code": 200,
  "message": "success",
  "data": {
    "records": [
      {
        "priceSnapshotId": "snap_9f3c1a2b",
        "taskId": "task_5e8a1c33",
        "credit": 0.0342,
        "model": "glm-5.2",
        "modelType": "text",
        "inputTokens": 1280,
        "outputTokens": 642,
        "totalTokens": 1922,
        "cacheReadTokens": 0,
        "cacheWriteTokens": 0,
        "imageCount": null,
        "imageResolution": null,
        "imageRatio": null,
        "videoResolution": null,
        "videoRatio": null,
        "videoDurationSec": null,
        "orderCreatedAt": "2026-07-18T14:23:11",
        "creditDetails": [
          {
            "credit": 0.0342,
            "deductionSource": "balance",
            "packageName": ""
          }
        ]
      },
      {
        "priceSnapshotId": "snap_a12f77c0",
        "taskId": "task_c71e44a2",
        "credit": 1.8000,
        "model": "seedance-2.0",
        "modelType": "video",
        "inputTokens": null,
        "outputTokens": null,
        "totalTokens": null,
        "cacheReadTokens": null,
        "cacheWriteTokens": null,
        "imageCount": null,
        "imageResolution": null,
        "imageRatio": null,
        "videoResolution": "1080p",
        "videoRatio": "16:9",
        "videoDurationSec": 8,
        "orderCreatedAt": "2026-07-17T22:41:09",
        "creditDetails": [
          {
            "credit": 1.5000,
            "deductionSource": "Monthly Package",
            "packageName": "基础月度套餐"
          },
          {
            "credit": 0.3000,
            "deductionSource": "Resource Package",
            "packageName": "byteplus视频资源包"
          }
        ]
      }
    ],
    "total": 128,
    "current": 1,
    "size": 20,
    "pages": 7
  }
}

GET https://api.basicrouter.ai/api/v1/billing/transactions

Постраничный список оплаченных (status=2) транзакций пополнения текущего пользователя, отсортированных по created_at по убыванию.

ПараметрТипОбязательныйПо умолчаниюОписание
pageIntegerНет1Номер страницы.
sizeIntegerНет20Размер страницы.
startTimeStringНетНачальное время, yyyy-MM-dd HH:mm:ss, включительно.
endTimeStringНетКонечное время, yyyy-MM-dd HH:mm:ss, включительно.
curl --request GET \
  --url "https://api.basicrouter.ai/api/v1/billing/transactions?page=1&size=20&startTime=2026-07-01%2000:00:00&endTime=2026-07-31%2023:59:59" \
  --header "Authorization: Bearer $BASICROUTER_API_KEY"

Обёртка ответа:

{
  "code": 0,
  "message": "success",
  "data": { ... }
}
ПолеТипОписание
recordsTransactionVO[]Транзакции текущей страницы.
totalLongОбщее количество.
currentLongТекущая страница.
sizeLongРазмер страницы.
pagesLongВсего страниц.

Поля TransactionVO:

ПолеТипОписание
orderNoStringНомер заказа.
thirdPartyOrderNoStringНомер заказа третьей стороны.
amountBigDecimalСумма заказа.
actualAmountBigDecimalФактически оплаченная сумма.
discountBigDecimalСумма скидки.
paymentMethodStringСпособ оплаты (wechat / alipay / ustd / stripe / wallyt и т. д.).

Поля TransactionVO:

ПолеТипОписание
serviceFeeAmountBigDecimalСумма сервисного сбора.
paymentChannelStringПлатёжная платформа.
sourceStringИсточник заказа (recharge / package_purchase и т. д.).
packageNameStringИмя пакета (задаётся при покупке пакета; null для обычных пополнений).
createdAtLocalDateTimeВремя создания.
{
  "code": 200,
  "message": "success",
  "data": {
    "records": [
      {
        "orderNo": "R20260718abc123",
        "thirdPartyOrderNo": "wx_pay_xxx",
        "amount": 50.00,
        "actualAmount": 48.50,
        "discount": 1.50,
        "paymentMethod": "wechat",
        "serviceFeeAmount": 0.00,
        "paymentChannel": "wechat",
        "source": "recharge",
        "packageName": null,
        "createdAt": "2026-07-18T14:23:11"
      }
    ],
    "total": 28,
    "current": 1,
    "size": 20,
    "pages": 2
  }
}

Эксплуатация

Ошибки

BasicRouter возвращает стабильные коды ошибок, чтобы приложения могли единообразно обрабатывать повторы, резервирование, проблемы с биллингом и отладку.

Совместимые с провайдерами конечные точки по возможности сохраняют форму ошибок исходного семейства API. Собственные конечные точки BasicRouter используют объект ошибок BasicRouter.

Соответствие HTTP-статусов и кодов ошибок

HTTP-статусТип ошибкиПримеры кодовПовтор
400invalid_request_errorinvalid_request, unsupported_parameter, invalid_messages, invalid_image_urlНет
401authentication_errormissing_api_key, invalid_api_keyНет
402billing_errorinsufficient_credits, payment_required, quota_exceededНет
403permission_errormodel_access_denied, endpoint_access_denied, key_scope_deniedНет
404not_found_errormodel_not_found, response_not_found, task_not_foundНет
408timeout_errorgateway_timeout, provider_timeoutДа
409conflict_erroridempotency_conflict, task_already_cancelledЗависит
422validation_errorschema_validation_failed, unsupported_modalityНет
429rate_limit_erroraccount_rpm_exceeded, account_tpm_exceeded, provider_rate_limitedДа
500internal_errorinternal_errorДа
502provider_errorprovider_bad_gateway, provider_invalid_responseДа
503service_unavailablemodel_unavailable, provider_unavailable, insufficient_capacityДа
504timeout_errorprovider_timeout, gateway_timeoutДа

Частые коды ошибок

КодЗначениеРекомендуемое действие
missing_api_keyAPI-ключ не предоставлен.Добавьте заголовок Authorization.
invalid_api_keyAPI-ключ недействителен или отозван.Создайте или смените API-ключ.
model_not_foundИдентификатор модели не существует или не включён для аккаунта.Проверьте страницу «Модели» или вызовите GET /v1/models.
model_access_deniedAPI-ключ или аккаунт не имеет доступа к модели.Включите модель или обратитесь к администратору.
unsupported_parameterЗапрос содержит параметр, не поддерживаемый выбранной конечной точкой или моделью.Удалите параметр или выберите совместимую модель.
unsupported_modalityМодальность ввода или вывода не поддерживается выбранной моделью.Выберите модель, поддерживающую эту модальность.
account_rpm_exceededПревышен лимит запросов аккаунта в минуту.Повторите с backoff или запросите большие лимиты.
account_tpm_exceededПревышен лимит токенов аккаунта в минуту.Повторите с backoff, уменьшите количество токенов или запросите большие лимиты.
provider_rate_limitedВышестоящий провайдер ограничил частоту запросов.Повторите или включите резервирование.
insufficient_creditsНа аккаунте недостаточно кредитов.Пополните кошелёк, купите пакет или повысьте тариф.
provider_timeoutВышестоящий провайдер не ответил вовремя.Повторите или включите резервирование.
model_unavailableМодель временно недоступна.Повторите или используйте алиас маршрутизации.
content_policy_errorЗапрос или вывод заблокированы политикой безопасности.Измените ввод или выберите подходящий рабочий процесс.
Типы моделей

claude-fable-5

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入10 积分
输出50 积分
缓存读取1 积分
缓存写入12.50 积分

claude-opus-4.6

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-4.7

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-4.8

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-5

AWS · Anthropic · 1M 上下文

Text 输入Image 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-sonnet-4.6

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入3 积分
输出15 积分
缓存读取0.30 积分
缓存写入6 积分

claude-sonnet-5

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入2 积分
输出10 积分
缓存读取0.20 积分
缓存写入4 积分

deepseek-v3.2

TencentCloud · Alibaba Cloud · Deepseek · 128K 上下文

Openai chatOpenai responsesAnthropic
可用
输入0.57 积分
输出1.71 积分
缓存读取0.11 积分
缓存写入0.11 积分

deepseek-v4-flash

TencentCloud · Deepseek · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.14 积分
输出0.28 积分
缓存读取0.03 积分
缓存写入0.03 积分

deepseek-v4-pro

TencentCloud · Deepseek · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.74 积分
输出3.48 积分
缓存读取0.14 积分
缓存写入0.14 积分

dola-seed-2-0-mini

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.20 积分
输出0.80 积分
缓存读取0.04 积分
缓存写入0.01 积分

dola-seed-2-0-mini-white

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.20 积分
输出0.80 积分
缓存读取0.04 积分
缓存写入0.01 积分

dola-seed-2-1-turbo

BytePlus · Bytedance · 262K 上下文

Image 输入Text 输入Video 输入Openai chatOpenai responses
可用
输入0.50 积分
输出2.50 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-code

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.50 积分
输出3 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-lite

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.50 积分
输出4 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-pro

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入1 积分
输出6 积分
缓存读取0.20 积分
缓存写入0.01 积分

doubao-seed3d-1.0

即将推出

gemini-3-flash-preview

Google · Gemini · 1.0M 上下文

Image 输入Video 输入Text 输入Openai chat
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.05 积分

gemini-3.1-pro-preview

Google · Gemini · 1.0M 上下文

Image 输入Text 输入Video 输入Openai chat
可用
输入4 积分
输出18 积分
缓存读取0.40 积分
缓存写入0.40 积分

gemini-omni-flash-preview

Google · Gemini

文生视频按秒
即将推出
单价 / 秒0.10 积分 / 秒

glm-5

TencentCloud · Zai · 200K 上下文

Openai chatAnthropic
可用
输入1 积分
输出3.20 积分
缓存读取0.20 积分
缓存写入0.20 积分

glm-5-turbo

TencentCloud · Zai · 200K 上下文

Text 输入Openai chatAnthropic
可用
输入1.20 积分
输出4 积分
缓存读取0.24 积分
缓存写入0.24 积分

glm-5.1

TencentCloud · Zai · 200K 上下文

Text 输入Openai chatAnthropic
可用
输入1.40 积分
输出4.40 积分
缓存读取0.26 积分
缓存写入0.26 积分

glm-5.2

TencentCloud · Zai · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.40 积分
输出4.40 积分
缓存读取0.26 积分
缓存写入0.26 积分

glm-5v-turbo

TencentCloud · Zai · 200K 上下文

Image 输入Openai chatAnthropic
可用
输入1.20 积分
输出4 积分
缓存读取0.24 积分
缓存写入0.24 积分

gpt-5-nano

MicrosoftAzure · Openai · 400K 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入0.05 积分
输出0.40 积分
缓存读取- 积分
缓存写入- 积分

gpt-5.4

MicrosoftAzure · Openai · 1.1M 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入5 积分
输出22.50 积分
缓存读取0.50 积分
缓存写入0.50 积分

gpt-5.5

MicrosoftAzure · Openai · 1.1M 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入5 积分
输出30 积分
缓存读取0.50 积分
缓存写入0.50 积分

gpt-5.6-luna

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入2 积分
输出9 积分
缓存读取0.20 积分
缓存写入2.50 积分

gpt-5.6-sol

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入10 积分
输出45 积分
缓存读取1 积分
缓存写入12.50 积分

gpt-5.6-terra

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入5 积分
输出22.50 积分
缓存读取0.50 积分
缓存写入6.25 积分

gpt-image-2

MicrosoftAzure · Openai

图像生成1K/2K/4K按张
可用
单价 / 张0.41 积分

HappyHorse-1.0-i2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-i2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-r2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-r2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-t2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.24 积分 / 秒

HappyHorse-1.0-t2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

imagen 4 fast

Google · Gemini

图像生成2K按张
可用
单价 / 张0.02 积分

imagen 4 standard

Google · Gemini

图像生成2K按张
可用
单价 / 张0.04 积分

imagen 4 ultra

Google · Gemini

图像生成2K按张
可用
单价 / 张0.06 积分

kimi-k2.5

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatAnthropic
可用
输入0.60 积分
输出3 积分
缓存读取0.10 积分
缓存写入0.10 积分

kimi-k2.6

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Text 输入Openai chatAnthropic
可用
输入0.86 积分
输出3.57 积分
缓存读取0.14 积分
缓存写入0.14 积分

kimi-k2.7-code

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatAnthropic
可用
输入0.95 积分
输出4 积分
缓存读取0.19 积分
缓存写入0.19 积分

kimi-k2.7-code-highspeed

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatOpenai responsesAnthropic
可用
输入1.90 积分
输出8 积分
缓存读取0.38 积分
缓存写入0.38 积分

kimi-k3

TencentCloud · Moonshot AI · 1M 上下文

Image 输入Text 输入Video 输入Openai chatOpenai responsesAnthropic
可用
输入3 积分
输出15 积分
缓存读取0.30 积分
缓存写入0.30 积分

kling-image-o1

Kling · Kling

图像生成2K/3K按张
可用
单价 / 张0.03 积分

kling-v3-omni-image

Kling · Kling

图像生成1K/2K/4K按张
可用
单价 / 张0.03 积分

kling-v3-omni-video

Kling · Kling

文生视频按秒
可用
单价 / 秒0.13 积分 / 秒

minimax-m2.5

TencentCloud · MiniMax · 200K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.30 积分
输出1.20 积分
缓存读取0.03 积分
缓存写入0.03 积分

minimax-m2.7

TencentCloud · MiniMax · 200K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.30 积分
输出1.20 积分
缓存读取0.06 积分
缓存写入0.06 积分

minimax-m3

TencentCloud · MiniMax · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.60 积分
输出2.40 积分
缓存读取0.12 积分
缓存写入0.12 积分

nano banana 2

Google · Gemini

图像生成1K/2K/4K按张
可用
单价 / 张0.07 积分

nano banana pro

Google · Gemini

图像生成1K/2K按张
可用
单价 / 张0.14 积分

qwen-image-2.0-pro

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-2.0-s-white

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-3.0-pro

Alibaba Cloud · Qwen

图像生成1K/2K按张
即将推出
单价 / 张0.07 积分

qwen-image-max

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-max-white

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-plus

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.03 积分

qwen3-max

Alibaba Cloud · Qwen · 256K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.20 积分
输出6 积分
缓存读取- 积分
缓存写入- 积分

qwen3-max-white

Alibaba Cloud · Qwen · 256K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入2.40 积分
输出12 积分
缓存读取- 积分
缓存写入- 积分

qwen3-vl-flash

Alibaba Cloud · Qwen · 256K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.07 积分
输出0.60 积分
缓存读取0.01 积分
缓存写入0.10 积分

qwen3-vl-plus

Alibaba Cloud · Qwen · 256K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.60 积分
输出4.80 积分
缓存读取- 积分
缓存写入- 积分

qwen3.5-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.63 积分

qwen3.5-plus-white

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.40 积分
输出0.24 积分
缓存读取0.04 积分
缓存写入0.50 积分

qwen3.6-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.63 积分

qwen3.7-max

Alibaba Cloud · Qwen · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入2.50 积分
输出7.50 积分
缓存读取0.50 积分
缓存写入0.50 积分

qwen3.7-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.40 积分
输出1.60 积分
缓存读取0.08 积分
缓存写入0.50 积分

qwen3.8-max

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入2 积分
输出6 积分
缓存读取0.25 积分
缓存写入0.25 积分

seedance-1-5-pro

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

seedance-1-5-pro-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

seedance-2.0

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.15 积分 / 秒

seedance-2.0-fast

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.06 积分 / 秒

seedance-2.0-fast-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.06 积分 / 秒

seedance-2.0-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.07 积分 / 秒

seedance-2.5

BytePlus · Bytedance

文生视频按秒
即将推出
单价 / 秒0.11 积分 / 秒

seedream-4.5

BytePlus · Bytedance

图像生成2K/4K按张
可用
单价 / 张0.04 积分

seedream-4.5-white

BytePlus · Bytedance

图像生成2K/4K按张
可用
单价 / 张0.04 积分

seedream-5.0

BytePlus · Bytedance

图像生成2K/3K按张
可用
单价 / 张0.04 积分

seedream-5.0-white

BytePlus · Bytedance

图像生成2K/3K按张
可用
单价 / 张0.04 积分

veo 3.1

Google · Gemini

文生视频按秒
可用
单价 / 秒0.40 积分 / 秒

veo 3.1 lite

Google · Gemini

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.5-i2v-preview

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.6-i2v-flash

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.6-r2v-flash

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.6-t2v

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.6-t2v-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-i2v

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-i2v-s-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.26 积分 / 秒

wan2.7-i2v-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-image

Alibaba Cloud · Wan

图像生成2K按张
可用
单价 / 张0.03 积分

wan2.7-image-pro

Alibaba Cloud · Wan

图像生成2K按张
可用
单价 / 张0.07 积分