Быстрый старт
Первый ответ API
Создай аккаунт, выпусти ключ в разделе API ключи и нажми «Скопировать первый запрос». В код уже будет подставлен новый ключ. Он показывается только один раз.
Для генерации нужен доступ к выбранной модели и положительный баланс. Если тестовый доступ ещё не выдан, обратись в поддержку или пополни баланс в кабинете. Создание обычного ключа само по себе не начисляет бесплатные средства.
# Set your key locally before running this request.export NEXUS_API_KEY='YOUR_API_KEY'curl --fail-with-body --max-time 120 https://nexusapi.dev/v1/chat/completions \ -H "Authorization: Bearer $NEXUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-5.4-nano","messages":[{"role":"user","content":"Ответь одним словом: работает?"}],"max_tokens":32}'import jsonimport osimport urllib.request
request = urllib.request.Request( "https://nexusapi.dev/v1/chat/completions", data=json.dumps({ "model": "gpt-5.4-nano", "messages": [{"role": "user", "content": "Ответь одним словом: работает?"}], "max_tokens": 32, }).encode(), headers={ "Authorization": "Bearer " + os.environ["NEXUS_API_KEY"], "Content-Type": "application/json", },)with urllib.request.urlopen(request, timeout=120) as response: print(json.load(response)["choices"][0]["message"]["content"])Ответ находится в choices[0].message.content. Ошибка 401 означает проблему с ключом, 402 означает нехватку баланса, 403 может означать ограничения ключа. Все ошибки.
Скачать коллекцию Postman · OpenAPI JSON
В Postman задай NEXUS_API_KEY локально. Коллекция не содержит настоящих ключей; не публикуй свою заполненную копию. Видео и изображения создаются асинхронно: примеры ниже.
Самый короткий путь — через SDK
Если пишешь на Python или Node — это 5 строк кода. Polling, типы, ошибки уже встроены.
pip install nexusapi-sdkimport osfrom nexusapi import NexusClient
client = NexusClient(api_key=os.environ["NEXUS_KEY"])task = client.videos.create( model="veo-3-fast", prompt="Кот играет на пианино в джаз-баре", duration=8,).wait() # SDK сам опрашивает /tasks до завершенияprint(task.video_url)npm install nexusapi-sdkimport { NexusClient } from "nexusapi-sdk";
const client = new NexusClient({ apiKey: process.env.NEXUS_KEY! });const task = await client.videos.create({ model: "veo-3-fast", prompt: "Кот играет на пианино в джаз-баре", duration: 8,});await task.wait(); // SDK сам опрашивает /tasksconsole.log(task.videoUrl);Полный референс — SDK. На других языках — продолжай по гайду ниже, через прямые HTTP-запросы.
Полный flow через REST
-
Зарегистрируйся и получи ключ
Открой panel.nexusapi.dev, создай аккаунт по email, перейди в раздел API ключи и нажми «Выпустить новый ключ». Сохрани полный секрет — он показывается ровно один раз.
Пополни баланс в кабинете: картой, СБП или другим доступным способом.
-
Выбери модель
Все доступные модели и цены — на странице каталога. Для первого запроса возьмём
veo-3-fast. Время обработки зависит от модели и нагрузки; актуальную цену проверь перед отправкой. -
Отправь запрос на генерацию
POST
/generateпринимаетparamsс именем модели и её параметрами. В ответе —task_id.Окно терминала curl -X POST https://nexusapi.dev/generate \-H "Authorization: Bearer $NEXUS_KEY" \-H "Content-Type: application/json" \-d '{"params": {"model_name": "veo-3-fast","prompt": "Кот играет на пианино в джаз-баре","duration": 8,"aspect_ratio": "16:9"}}'import os, requestsresp = requests.post("https://nexusapi.dev/generate",headers={"Authorization": f"Bearer {os.environ['NEXUS_KEY']}"},json={"params": {"model_name": "veo-3-fast","prompt": "Кот играет на пианино в джаз-баре","duration": 8,"aspect_ratio": "16:9",}},timeout=30,)resp.raise_for_status() # 4xx/5xx → исключение, см. /concepts/errors/task_id = resp.json()["task_id"]print(task_id)const resp = await fetch("https://nexusapi.dev/generate", {method: "POST",headers: {"Authorization": `Bearer ${process.env.NEXUS_KEY}`,"Content-Type": "application/json",},body: JSON.stringify({params: {model_name: "veo-3-fast",prompt: "Кот играет на пианино в джаз-баре",duration: 8,aspect_ratio: "16:9",},}),});if (!resp.ok) {// см. /concepts/errors/ — формат тела ошибкиthrow new Error(`HTTP ${resp.status}: ${await resp.text()}`);}const { task_id } = await resp.json();console.log(task_id);body := strings.NewReader(`{"params": {"model_name": "veo-3-fast","prompt": "Кот играет на пианино в джаз-баре","duration": 8,"aspect_ratio": "16:9"}}`)req, _ := http.NewRequest("POST", "https://nexusapi.dev/generate", body)req.Header.Set("Authorization", "Bearer "+os.Getenv("NEXUS_KEY"))req.Header.Set("Content-Type", "application/json")resp, _ := http.DefaultClient.Do(req)defer resp.Body.Close() -
Дождись результата
Видео-задача идёт от ~30 секунд до нескольких минут. Опрашивай GET
/tasks/{task_id}каждые 3-5 секунд, покаstatusне станетcompleted(илиfailed).Окно терминала curl https://nexusapi.dev/tasks/$TASK_ID \-H "Authorization: Bearer $NEXUS_KEY"import timedeadline = time.time() + 600 # отказываемся ждать > 10 минутwhile time.time() < deadline:resp = requests.get(f"https://nexusapi.dev/tasks/{task_id}",headers={"Authorization": f"Bearer {os.environ['NEXUS_KEY']}"},timeout=30,)resp.raise_for_status()r = resp.json()if r["status"] in ("completed", "failed"):breaktime.sleep(3)else:raise TimeoutError(f"Task {task_id} did not finish in 10 minutes")if r["status"] == "completed":print(r["result"]["video_url"])else:print(f"Failed: {r['error']}")const deadline = Date.now() + 10 * 60 * 1000;let r;while (Date.now() < deadline) {const resp = await fetch(`https://nexusapi.dev/tasks/${taskId}`, {headers: { Authorization: `Bearer ${process.env.NEXUS_KEY}` },});if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${await resp.text()}`);r = await resp.json();if (r.status === "completed" || r.status === "failed") break;await new Promise((res) => setTimeout(res, 3000));}if (!r || (r.status !== "completed" && r.status !== "failed")) {throw new Error(`Task ${taskId} did not finish in 10 minutes`);}console.log(r.status === "completed" ? r.result.video_url : r.error); -
Используй результат
На
completedвresultлежит ссылка на сгенерированное видео в S3 — храни/скачивай по своему вкусу. Готово.
Без polling: webhook
Если не хочешь опрашивать — передай webhook_url прямо в params, и мы пришлём POST на твой эндпоинт, когда задача завершится. Подробнее — на странице Webhooks.