Нейро в вашем коде
Всё, что умеет кабинет: загрузить фото, посчитать смету, запустить задачу, получить готовые файлы. Кредиты списываются только за форматы, принятые AI-контролем, — из баланса пространства.
# 1. Фото
curl https://api.neurobanner.com/v1/assets -H "Authorization: Bearer $NB_KEY" -F file=@mug.jpg
# 2. Смета
curl https://api.neurobanner.com/v1/estimate -H "Authorization: Bearer $NB_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"pack","packs":["rsya","vk"],"asset_ids":["<asset id>"]}'
# 3. Задача
curl https://api.neurobanner.com/v1/jobs -H "Authorization: Bearer $NB_KEY" \
-H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
-d '{"mode":"pack","packs":["rsya","vk"],"asset_ids":["<asset id>"],"webhook_url":"https://you.app/hooks/nb"}'
# 4. Статус и файлы
curl https://api.neurobanner.com/v1/jobs/<job id> -H "Authorization: Bearer $NB_KEY"
curl -o result.zip https://api.neurobanner.com/v1/jobs/<job id>/zip -H "Authorization: Bearer $NB_KEY"Ключи
Заголовок Authorization: Bearer nb_live_…. Ключи создаются в кабинете на странице «API и MCP» и показываются один раз. Тестовый ключ nb_test_… ничего не собирает и не списывает: отвечает сметой в том же формате, что и боевой.
Лимиты: 120 запросов в минуту на ключ, 300 — на пространство, 30 новых задач в минуту.
Получить ключМетоды
Базовый адрес: https://api.neurobanner.com/v1
/assetsUpload a photo or bannermultipart `file`, or JSON `{ url }`, or JSON `{ name, mime, bytes }` to get a signed upload URL. JPG, PNG, WEBP up to 20 MB, at least 600 px on the short side./assets/{id}/completeFinish a signed upload/estimateEstimate the cost before starting/jobsStart a jobAnswers at once with the job id. Credits are reserved now and charged only for accepted formats. With too few credits and `autostart: true` the job is saved as a draft (202)./jobs/{id}Job status and results/jobs/{id}/answerAnswer Neuro's question/jobs/{id}/cancelCancel a job and refund/jobs/{id}/zipZIP of accepted formats/formatsFormat catalog/outputsResult files/brand-kitsBrand kits of the workspace/balanceCredit balanceПоля задачи
{
"mode": {
"type": "string",
"enum": [
"create",
"adapt",
"pack",
"enhance",
"ctr",
"unify",
"card",
"video",
"html5",
"edit"
]
},
"tier": {
"default": "standard",
"type": "string",
"enum": [
"standard",
"pro"
]
},
"title": {
"type": "string",
"maxLength": 120
},
"asset_ids": {
"default": [],
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"brand_kit_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
]
},
"brief": {
"type": "string",
"maxLength": 2000
},
"lang": {
"type": "string",
"enum": [
"ru",
"en"
]
},
"packs": {
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9_]{2,32}$"
}
},
"format_keys": {
"maxItems": 200,
"type": "array",
"items": {
"type": "string",
"maxLength": 64
}
},
"from_photo": {
"type": "boolean"
},
"sizes": {
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"width": {
"type": "integer",
"minimum": 16,
"maximum": 4096
},
"height": {
"type": "integer",
"minimum": 16,
"maximum": 4096
},
"max_kb": {
"type": "integer",
"minimum": 10,
"maximum": 30000
}
},
"required": [
"width",
"height"
]
}
},
"goal": {
"type": "string",
"maxLength": 200
},
"marketplace": {
"type": "string",
"enum": [
"wb",
"ozon",
"ym",
"kaspi"
]
},
"characteristics": {
"type": "string",
"maxLength": 3000
},
"output_ids": {
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"instruction": {
"type": "string",
"minLength": 2,
"maxLength": 1000
},
"network": {
"type": "string",
"enum": [
"rsya",
"google"
]
},
"click_url": {
"type": "string",
"format": "uri"
},
"video_aspect": {
"type": "string",
"enum": [
"9:16",
"1:1",
"16:9"
]
},
"motion": {
"type": "string",
"maxLength": 300
},
"reference_asset_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"webhook_url": {
"type": "string",
"format": "uri"
},
"autostart": {
"type": "boolean"
},
"auto_pick": {
"type": "boolean"
}
}Режимы: create, adapt, pack, enhance, ctr, unify, card, video, html5, edit. Для create с auto_pick: true Нейро сам выбирает эскиз; иначе задача ждёт ответа в question — ответьте через /jobs/{id}/answer.
Вебхуки
События job.step, job.completed, job.failed. Подпись в заголовке NB-Signature: t=…,v1=… — HMAC-SHA256 от `${t}.${body}` секретом адреса. Повторы: 1, 5, 30 минут, 2 и 12 часов.
import { createHmac, timingSafeEqual } from 'node:crypto';
export function verify(secret, rawBody, header) {
const { t, v1 } = Object.fromEntries(header.split(',').map((p) => p.split('=')));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const mac = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return timingSafeEqual(Buffer.from(mac), Buffer.from(v1));
}Ошибки
Ответ { "error": { "code", "message" } } — message голосом Нейро, на языке из Accept-Language.
401 invalid_api_keyНе узнал ключ API.402 insufficient_creditsНе хватает кредитов; поле missing — сколько.422 invalid_requestОшибка в запросе; details — какие поля.429 rate_limitedСлишком часто; заголовок Retry-After.503 not_configuredСервис ещё настраивается.MCP
Streamable HTTP: https://mcp.neurobanner.com/mcp. Авторизация — тот же ключ API в заголовке Authorization. Долгие задачи сразу возвращают job_id.
list_formatsКаталог форматов: РСЯ, Директ, VK, Google/IAB, Meta, TikTok, Telegram Ads, Pinterest, Авито, WB, Ozon, Яндекс Маркет, Kaspi — размеры, лимиты веса, правила, популярные размеры.estimate_costСчитает стоимость задачи в кредитах до запуска. Принимает те же поля, что и задачи.create_bannerБаннер с нуля из фото товара: 3 эскиза по углам продажи, Нейро советует один, финал 2K. Задача долгая — сразу вернёт job_id; если auto_pick=false, Нейро спросит выбор эскиза (answer_question).adapt_bannerГотовый баннер в любые размеры: обрезка до пикселя и лимит веса.make_format_packПакет размеров площадок из фото или баннера: РСЯ 14, Директ 4, VK 4, Google 12, Meta 4, TikTok 6, Telegram 1, Pinterest 2, Авито 8, карточки маркетплейсов. Одинаковые размеры разных площадок Нейро делает один раз и не берёт за них дважды. Из фото сначала соберёт мастер 1080 × 1080.enhance_bannerРезкость, свет, чистый фон без изменения текста и товара.improve_ctrРазбор баннера по чек-листу «что мешает кликать» и 3 варианта A/B/C.unify_styleСерия из 2–100 изображений в одном стиле по эталону.make_marketplace_cardГлавное фото и 5 слайдов по правилам WB, Ozon, Яндекс Маркета или Kaspi.animate_to_videoВидео из баннера: 5 с (tier standard) или 8 с (tier pro, максимальное качество): текст, логотип и цена остаются на месте.make_html5HTML5 с анимацией для РСЯ (API Яндекса) или Google (clickTag), проверка кода и веса.get_jobСтатус, прогресс, вопрос Нейро и ссылки на готовые файлы.answer_questionОтвет на вопрос задачи (выбор эскиза, мастер-баннер): token из question, choice или text.list_outputsПринятые файлы задачи или пространства со ссылками на 1 час.get_balanceБаланс кредитов и тариф пространства.list_brand_kitsBrand Kit пространства: цвета, шрифты, тон, стоп-слова.