Документация для разработчиков

Справочник API

Эндпоинты, параметры, ответы и коды ошибок. Руководства и первый запрос — в документации.

Подключение

https://api.chinaapi.ai
1 API-ключ
OpenAI совместимость
40+ поставщиков
Совет Укажите в SDK базовый URL https://api.chinaapi.ai/v1 и используйте свой токен ChinaAPI как bearer-ключ.

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

Все запросы к API используют аутентификацию по bearer-токену. Создайте токен в личном кабинете и передавайте его в заголовке Authorization.

HTTP headers
Authorization: Bearer $CHINAAPI_KEY
Content-Type: application/json

OpenAI-совместимый чат

Большинство клиентов OpenAI работают после смены baseURL. Используйте имя модели, опубликованное в вашем личном кабинете ChinaAPI.

Ключевые параметры: model и messages обязательны. Поведение генерации задают temperature, top_p, max_tokens и stream. reasoning_effort может принимать значения low, medium, high или значение, специфичное для модели, если выбранная модель рассуждений это поддерживает.

curl
curl https://api.chinaapi.ai/v1/chat/completions \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      { "role": "user", "content": "Hello" }
    ]
  }'
Node.js
import OpenAI from "openai";

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

const result = await client.chat.completions.create({
  model: "deepseek-chat",
  messages: [{ role: "user", content: "Hello" }],
});

Форматы запросов

Три формата запросов покрывают весь каталог. Один ключ ChinaAPI и один Base URL работают со всеми, поэтому отправляйте тот, на котором ваш клиент уже говорит.

OpenAI

/v1/chat/completions

Подходит для OpenAI SDK, Cherry Studio, Cline, Open WebUI и большинства клиентов.

Claude

/v1/messages

Отправляйте сообщения в формате Claude, сохраняя тот же ключ шлюза и те же ограничения по квоте.

OpenAI

/v1/responses

Подходит для Codex и других клиентов, построенных на Responses API. В консоли отмечено, какие модели его принимают.

Только модели Gemini Нативные запросы Gemini отправляются на POST /v1beta/models/{model}:generateContent. Его поддерживают только модели gemini-*, и то не все — форматы, которые принимает каждая модель, указаны в её карточке в разделе «Модели». Всё остальное использует один из трёх форматов выше.

Многошаговые диалоги Responses ссылаются на предыдущий ответ через previous_response_id. Если следующий запрос вернулся с previous_response_not_found, предыдущий ответ не потерян: подождите десять–двадцать секунд и отправьте тот же запрос снова, вместо того чтобы собирать диалог заново.

Генерация видео

Модели видео отвечают задачами, а не одним ответом. POST /v1/videos возвращает идентификатор задачи со "status": "queued", а GET /v1/videos/{task_id} сообщает о ходе выполнения, пока задача не достигнет состояния completed или failed. По завершении готовый файл — это подписанный URL в metadata.url; он содержит параметр Expires, поэтому скачивайте файл, а не сохраняйте ссылку. Неудачная задача несёт код и текст вышестоящего сервиса в error.code и error.message, чего обычно достаточно, чтобы понять, какого поля не хватало в запросе. POST /v1/video/generations ведёт к тому же обработчику для клиентов, уже написанных под этот путь.

POST /v1/videos
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-i2v",
    "prompt": "the cat turns and walks toward the camera",
    "input_reference": "https://example.com/first-frame.jpg",
    "size": "1280*720",
    "duration": 5
  }'

# {"id":"task_9f2c...","task_id":"task_9f2c...","object":"video",
#  "model":"wan2.7-i2v","status":"queued","progress":0}
GET /v1/videos/{task_id}
curl https://api.chinaapi.ai/v1/videos/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"id":"task_9f2c...","object":"video","model":"wan2.7-i2v",
#  "status":"completed","progress":100,
#  "metadata":{"url":"https://.../output.mp4?Expires=..."}}
Текст в видео

wan2.7-t2v

model и prompt — единственные обязательные поля. Без size и duration шлюз отправляет 1280*720 на пять секунд.

Изображение в видео

wan2.7-i2v

Оживление неподвижного изображения. input_reference принимает публично доступный URL изображения и становится первым кадром; отправляйте вместе с ним size и duration.

Референс в видео

wan2.7-r2v

Построение видео по референсным материалам. input_reference принимает одно референсное изображение; чтобы передать несколько, используйте images, а video_url добавляет референсное видео — референсы считаются вместе, максимум пять. Не отправляйте input_reference и images одновременно: шлюз оставит только input_reference.

Редактирование видео

wan2.7-videoedit

Редактирование существующего ролика по промпту. video_url принимает исходное видео длительностью от 2 до 10 секунд в формате MP4 или MOV, а size задаёт результат.

30-секундное видео

doubao-seedance-2-5-260628

Референсные изображения передаются в images, а input_reference принимает одно; при отправке обоих сохраняются оба. Длительность указывается в seconds или duration, а параметры поставщика — в metadata, где resolution принимает значение 480p или 720p.

Seedance 2.0

doubao-seedance-2-0-260128

Та же форма запроса, что и у doubao-seedance-2-5-260628, включая правила role для metadata.content. doubao-seedance-2-0-fast-260128 и doubao-seedance-2-0-mini-260615 меняют качество на скорость и стоимость, а линейке 2.0 нужен хотя бы один референс — изображение или видео, тогда как 2.5 принимает и одно аудио.

Kling 3.0

kling-v3

Первый кадр передаётся в image; это семейство никогда не читает input_reference. mode по умолчанию равен std, а duration — 5 секунд. Остальное несёт metadata: image_tail для завершающего кадра, sound со значением on или off (off по умолчанию), а также negative_prompt, cfg_scale и camera_control.

Бюджетный уровень

kling-3.0-turbo

Отправьте prompt для генерации видео из текста или добавьте image — и шлюз соберёт массив contents, который ожидает вышестоящий сервис. Размеры задаются в metadata.settings: resolution принимает 720p или 1080p, duration — от 3 до 15 секунд, а aspect_ratio16:9, 9:16 или 1:1. Звук включается всегда и не имеет переключателя.

Референс из нескольких изображений

kling-v3-omni

Генерация по нескольким референсным изображениям сразу. Все параметры находятся в metadata, поля resolution нет — уровень качества задаёт mode. См. разобранный пример ниже.

Нативный звук

MiniMax-H3

Принимает собственные поля шлюза и собирает запрос для вышестоящего сервиса за вас: image или input_reference становится первым кадром, images — референсными изображениями, а video_url — референсным видео. size выбирает 768P или 2K, а duration — целое число от 4 до 15. Запросам только из текста нужен явный metadata.ratio, отличный от adaptive.

Hailuo

MiniMax-Hailuo-2.3

Вместе с MiniMax-Hailuo-2.3-Fast и MiniMax-Hailuo-02. Эти модели читают с верхнего уровня только prompt, duration и size; все изображения передаются через metadata — как first_frame_image, last_frame_image или subject_reference.

Уровень 480P

happyhorse-1.1-t2v

Вместе с happyhorse-1.1-i2v и happyhorse-1.1-r2v. Поля совпадают с семейством wan2.7prompt, input_reference, size, duration, — и 480P здесь имеет цену, поэтому 832*480 принимается там, где wan2.7 его отклоняет. Несколько референсов передаются в metadata.input.media, потому что автоматическая сборка, которую запускает поле images, характерна только для wan2.7-r2v.

Совет Записывайте size как ширину и высоту через звёздочку, например 1280*720. Буква x не принимается: 832x480 возвращается как invalid size: 832x480, example: 1920*1080. duration — целое число секунд. Для wan2.7-i2v, wan2.7-r2v и wan2.7-videoedit шлюз сводит size к уровню разрешения, а у вышестоящего сервиса их всего два, поэтому отправляйте 1280*720 для 720P или 1920*1080 для 1080P. Размер 480P, например 832*480, не имеет цены у этих трёх и либо отклоняется сразу, либо принимается и затем падает у вышестоящего сервиса с InvalidParameter; неудачная задача возвращает средства, но обращение в любом случае потрачено впустую. wan2.7-t2v принимает значение как есть.
Совет Семейство Kling читает соотношение сторон из size по фиксированной таблице, где размеры записаны через букву x — 1280x720, 1920x1080, 720x1280, 1080x1920, 1024x1024, 512x512, — и всё, что оно не распознаёт, становится 1:1 без ошибки. Поэтому отправка формы со звёздочкой 1280*720 в kling-v3 возвращает квадратное видео, а не жалобу: если кадрирование важно, задавайте metadata.aspect_ratio напрямую.
Совет MiniMax-Hailuo-2.3, MiniMax-Hailuo-2.3-Fast и MiniMax-Hailuo-02 молча отбрасывают image, input_reference, images и video_url верхнего уровня: запрос выполняется успешно, но работает как генерация из текста и тарифицируется соответственно. Помещайте изображение в metadata.first_frame_image, добавляйте metadata.last_frame_image для завершающего кадра и используйте metadata.subject_reference для референсов объекта. MiniMax-H3 — исключение в этом семействе: он читает поля верхнего уровня.
kling-v3-omni · multi-image reference
curl https://api.chinaapi.ai/v1/video/generations \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-v3-omni",
    "prompt": "the character from the references walks through a neon-lit street",
    "metadata": {
      "image_list": [
        {"image_url": "https://example.com/character.jpg"},
        {"image_url": "https://example.com/outfit.jpg"},
        {"image_url": "https://example.com/scene.jpg"}
      ],
      "mode": "std",
      "duration": "5",
      "aspect_ratio": "16:9",
      "sound": "off"
    }
  }'
GET /v1/video/generations/{task_id}
curl https://api.chinaapi.ai/v1/video/generations/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"code":"success",
#  "data":{"task_id":"task_9f2c...","status":"SUCCESS",
#          "progress":"100%","fail_reason":"",
#          "result_url":"https://.../output.mp4"}}
Совет Референсное изображение не несёт type; это поле нужно только чтобы отметить first_frame или end_frame, а aspect_ratio обязателен всегда, когда первого кадра нет. mode — это уровень качества (std, pro или 4k), и у вышестоящего сервиса по умолчанию стоит pro, который тарифицируется в 1,33 раза выше указанной цены, а 4k — в 5 раз; передавайте mode явно, чтобы списание было ожидаемым. duration — строка от "3" до "15", а sound по умолчанию равен off. Референсное видео передаётся в video_list и должно содержать "refer_type": "feature": режим редактирования base тарифицируется по длине переданного вами видео, не может быть оценён до отправки и потому отклоняется. У референсных изображений также есть минимальный размер у вышестоящего сервиса, и файл размером с иконку пройдёт отправку, но задача упадёт с Image pixel is invalid; неудачная задача возвращает средства, но обращение потеряно.
Совет Два пути сообщают результат в разных формах. GET /v1/videos/{task_id} отвечает в формате видео OpenAI, где файл — это metadata.url, а прогресс — число. GET /v1/video/generations/{task_id} отвечает {"code": "success", "data": {…}}, где файл — data.result_url, data.status — слово в верхнем регистре, например SUCCESS или FAILURE, data.progress — строка вида "100%", а причина неудачи объясняется в data.fail_reason. Опрашивайте тот путь, на который отправляли задачу.
doubao-seedance-2-5-260628 · first frame
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "the subject slowly turns toward the camera",
    "images": ["https://example.com/first-frame.jpg"],
    "seconds": "5",
    "metadata": {"resolution": "480p"}
  }'
doubao-seedance-2-5-260628 · reference mode
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "keep the subject from the reference image",
    "seconds": "5",
    "metadata": {
      "resolution": "480p",
      "ratio": "16:9",
      "content": [
        {
          "type": "image_url",
          "image_url": {"url": "https://example.com/reference.jpg"},
          "role": "reference_image"
        }
      ]
    }
  }'
Совет Изображение без role читается как первый кадр, а не как референс: результат наследует соотношение сторон этого изображения, отправка ratio вместе с ним отклоняется с InvalidParameter.TaskTypeConstraint, а seconds со значением 2 там тоже отклоняется, тогда как 5 работает. generate_audio у вышестоящего сервиса по умолчанию равен true, поэтому файл возвращается со звуковой дорожкой, если не выставить false в metadata. Помечайте каждую часть metadata.content полем role, чтобы получить полный референсный режим — до 30 изображений, 10 видео и 10 аудиофрагментов, ввод только из аудио и 30 секунд за один раз, — где ratio принимается.

Генерация изображений

POST /v1/images/generations отвечает одним ответом, а не задачей. model и prompt обязательны; n, size и quality необязательны, и модели используют собственные значения по умолчанию. Ответ имеет вид {"created": …, "data": [ … ]}, где каждая запись содержит url, а b64_json присутствует, но пуст, пока вы не запросите его через "response_format": "b64_json". Редактирование существующего изображения выполняется через POST /v1/images/edits с исходником в image. Тарификация идёт за каждое созданное изображение, поэтому n умножает списание.

POST /v1/images/generations
curl https://api.chinaapi.ai/v1/images/generations \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "image-01",
    "prompt": "a red paper crane on a white desk, soft daylight",
    "n": 1
  }'

# {"created":1786620000,
#  "data":[{"url":"https://.../image_inference_output/....jpg","b64_json":""}],
#  "metadata":{"success_count":"1","failed_count":"0"}}
Вывод в 4K

doubao-seedream-5-0-260128

Вместе с doubao-seedream-4-5-251128. Обе достигают 4K и обе принимают входное изображение для редактирования и композиции из нескольких изображений, поэтому size стоит задавать явно, а не полагаться на значение по умолчанию.

Универсальные

wan2.7-image

Вместе с wan2.7-image-pro, которая добавляет уровень 4K примерно по двойной цене. Поля запроса те же, что и у остальных на этом эндпоинте; вариант pro стоит выбирать, когда результат пойдёт в печать или на увеличение.

Редактирование и низкая цена

step-image-edit-2

Вместе с step-2x-large и image-01. step-image-edit-2 создана для редактирования переданного вами изображения и дешевле остальных двух; image-01 — самая дешёвая модель «текст в изображение» на этом эндпоинте.

Совет Этот эндпоинт тарифицируется за вызов, а не за токены, и цена уже включает одно изображение — журнал использования записывает один prompt-токен, что является бухгалтерской записью, а не мерой вашего промпта. Запрос "n": 4 стоит вчетверо дороже одного изображения. Цены здесь различаются более чем на порядок, поэтому сначала выбирайте модель и лишь затем настраивайте промпт.

Текст в речь

POST /v1/audio/speech возвращает само аудио, а не JSON: телом ответа является закодированный файл, а Content-Type следует за response_format, поэтому mp3 возвращается как audio/mpeg. Значимые поля — model, input и voice; speed и instructions необязательны, а имена голосов каждая модель публикует свои. Записывайте ответ сразу в файл — попытка декодировать его как текст его испортит.

POST /v1/audio/speech
curl https://api.chinaapi.ai/v1/audio/speech \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "step-tts-2",
    "input": "ChinaAPI text to speech verification.",
    "voice": "cixingnansheng",
    "response_format": "mp3"
  }' \
  --output speech.mp3

# HTTP 200, Content-Type: audio/mpeg
Клонирование голоса

step-tts-2

Вместе с step-tts-mini и stepaudio-2.5-tts. Все три клонируют голос примерно по десяти секундам референсного аудио и принимают указания по эмоции и подаче на естественном языке. step-tts-mini — вариант с низкой задержкой и низкой стоимостью.

Высокое качество

speech-2.8-hd

Вместе с speech-2.8-turbo. Вариант hd даёт наивысшую точность на этом эндпоинте и стоит соответственно; turbo частично меняет её на задержку примерно за половину цены.

Многоязычные

qwen3-tts-flash

Вместе с glm-tts. Обе многоязычны и стоят дешевле моделей с клонированием, что делает их разумным выбором по умолчанию, когда конкретный клонированный голос не нужен.

Совет Тарификация считает символы поля input, один символ за один токен, поэтому стоимость известна ещё до отправки запроса. Созданное аудио тоже измеряется и отображается как completion-токены из расчёта тысяча токенов на минуту, но тарифицируется по нулевой ставке: запрос из пятидесяти девяти символов, давший около пяти секунд речи, записал 59 prompt-токенов и 83 completion-токена, а списание прошло по 59. Знаки препинания и пробелы считаются символами.

Речь в текст

POST /v1/audio/transcriptions принимает multipart/form-data, а не JSON: передайте model как поле формы, а запись — как файловую часть с именем file. Ответ имеет вид {"text": "…"}. POST /v1/audio/translations устроен так же и возвращает английский текст. В отличие от эндпоинтов видео этот работает синхронно, поэтому длинная запись удерживает соединение открытым до завершения.

POST /v1/audio/transcriptions
curl https://api.chinaapi.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -F model=stepaudio-2.5-asr \
  -F file=@speech.mp3

# {"text":" China api text to speech verification."}
Самая низкая цена

stepaudio-2.5-asr

Вместе с step-asr, step-asr-1.1 и stepaudio-2-asr-pro. stepaudio-2.5-asr с большим отрывом самая дешёвая модель расшифровки на этом эндпоинте; варианты pro и 1.1 стоят примерно в пятнадцать раз дороже и оправданы лишь тогда, когда важна точность на сложном аудио.

Потоковые

stepaudio-2.5-asr-stream

Вместе с step-asr-1.1-stream. Они возвращают частичный текст по мере обработки аудио, а не одним блоком в конце, что и нужно для субтитров в реальном времени; обе стоят дороже за минуту, чем их непотоковые аналоги.

Многоязычные и диалекты

qwen3-asr-flash

Вместе с glm-asr-2512 и mimo-v2.5-asr. qwen3-asr-flash и glm-asr-2512 — многоязычные варианты, а mimo-v2.5-asr настроена на китайские диалекты.

Совет Тарификация считает длительность загруженного вами аудио из расчёта тысяча токенов на минуту, причём длительность округляется вверх до целой секунды перед пересчётом — так что пятисекундный фрагмент тарифицируется как 83 токена, а всё, что короче секунды, всё равно тарифицируется как одна. Сама расшифровка бесплатна. Поэтому стоимость растёт с длиной записи, а не с количеством речи в ней, и обрезать тишину имеет смысл.

Семейства моделей

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

DeepSeek Qwen GLM Kimi Doubao MiniMax Image Video

Управление из личного кабинета

Ключи, пользователи, группы, состояние каналов, журналы, квоты и тарификация описаны в документации. Эта страница посвящена контракту протокола: эндпоинтам, параметрам, ответам и ошибкам.