REST API v1 · MCP

Нейро в вашем коде

Всё, что умеет кабинет: загрузить фото, посчитать смету, запустить задачу, получить готовые файлы. Кредиты списываются только за форматы, принятые 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

POST/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.
POST/assets/{id}/completeFinish a signed upload
POST/estimateEstimate the cost before starting
POST/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).
GET/jobs/{id}Job status and results
POST/jobs/{id}/answerAnswer Neuro's question
POST/jobs/{id}/cancelCancel a job and refund
GET/jobs/{id}/zipZIP of accepted formats
GET/formatsFormat catalog
GET/outputsResult files
GET/brand-kitsBrand kits of the workspace
GET/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 пространства: цвета, шрифты, тон, стоп-слова.