Developer API

Generate assets straight from your code

Fire a request, keep working. Bruno does the heavy lifting on a queue and calls your webhook when each asset is ready — no long-polling, no blocked requests.

99.9% uptime signed webhooks billed per call in $ MCP server included
POST /v1/assets — fire & forget

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

Рекомендации перед первым запросом

1. Подготовьте ключ

Создайте API-ключ в аккаунте и храните его в BRUNO_KEY, не в коде.

2. Настройте webhook

Сделайте endpoint идемпотентным, проверяйте подпись и отвечайте 2xx как можно быстрее.

3. Работайте асинхронно

Сразу после 202 Accepted продолжайте процесс, не ждите результат в том же запросе.

4. Следите за балансом

Проверяйте /v1/balance и лимиты тарифа, чтобы избежать 402 payment_required.

5-minute Quick start

Get a key, POST a job, plug in a webhook. Full step-by-step in the docs.

How it works

Three steps, fully asynchronous

1 · Submit

POST a job with your prompt and settings. You instantly get a job id and a 202.

2 · We build

The pipeline runs each stage on the queue with retries. You stay unblocked.

3 · Webhook

We call your endpoint per stage. Payloads are signed & idempotent. Return 2xx fast.

Reference

Endpoints

POST/v1/assetsQueue a new asset generation
GET/v1/assets/:idJob status & stage progress
GET/v1/assets/:id/resultSigned download URLs (WebP/GIF/MP4/WebM/PNG sheet) + meta
POST/v1/assets/:id/approveApprove a paused stage in manual mode
POST/v1/assets/:id/cancelCancel a running job
POST/v1/motionUpload a motion clip (characters only)
GET/v1/balanceCurrent balance & usage

Full schema in docs. Each endpoint accepts the same payload via REST or MCP.

JSON examples

Useful payloads and responses

Request: POST /v1/assets
{
  "type": "character",
  "subtype": "runner",
  "prompt": "neon samurai, orange hakama",
  "actions": ["run", "melee"],
  "formats": ["webp", "mp4"],
  "webhook": "https://you.dev/hooks/bruno"
}
Accepted response: 202
{
  "job": "job_8fK2a91",
  "status": "queued",
  "accepted_at": "2026-05-23T19:42:00Z"
}
Webhook payload
{
  "event": "asset.stage.completed",
  "job": "job_8fK2a91",
  "stage": "render",
  "status": "done",
  "request_id": "req_991bc",
  "signature": "t=1716493320,v1=..."
}
Result response: GET /v1/assets/:id/result
{
  "job": "job_8fK2a91",
  "status": "completed",
  "result": {
    "webp": "https://cdn.brunoapi.com/.../sprite.webp",
    "mp4": "https://cdn.brunoapi.com/.../preview.mp4"
  }
}
Visual results

What you get after completion

Sprite sheet

PNG atlas for game engines and pipelines.

Animated WebP

Lightweight loop for web storefront previews.

MP4 preview

Shareable clip for social and product pages.

WebM variant

Alternative video format for modern browsers.

Pricing

Subscriptions in dollars, not tokens

Generation lives behind a subscription. Every tier includes a monthly quota; anything above is just $3 per asset (and that price drops on bigger plans).

75% creator · 25% platform commercial license while active

A job created through the REST or MCP API counts against the API key's owner subscription. No active plan → API calls return 402 payment_required.