---
name: banner
description: A finished marketing banner for a business from a short brief — a square picture or a 15-second video, with the business's logo and photos/clips or generated ones; Hebrew or English.
---
# Marketing banner from a brief

One call: `POST https://apihub.co.il/v1/banner` (Bearer API key). Asynchronous — it answers 202 with an `execution_id`.

**Styles** — pictures (1080×1080 JPEG): `natural` (soft & natural), `premium` (black & gold), `clean` (clean & blue), `sporty` (loud & sporty). Videos (15 s, 1080×1080 MP4 with music): `motion-red`, `motion-gold`, `motion-sea`, `motion-cream`.
One recipe per style: https://apihub.co.il/skills/banner-natural.md, https://apihub.co.il/skills/banner-premium.md, https://apihub.co.il/skills/banner-clean.md, https://apihub.co.il/skills/banner-sporty.md, https://apihub.co.il/skills/banner-motion-red.md, https://apihub.co.il/skills/banner-motion-gold.md, https://apihub.co.il/skills/banner-motion-sea.md, https://apihub.co.il/skills/banner-motion-cream.md.

**Body:**
```jsonc
{
  "brief": "…",                    // the business + the offer in the customer's words: what, price, gift, place, who for
  "style": "natural",              // one of the eight
  "language": "he",                // he (default) or en
  "business": { "name": "…", "logo_url": "https://…", "primary": "#5E6E4B", "accent": "#8A4B2D" },
  "images": ["https://…"],         // pictures: the customer's photos (the 1st = the main one; premium uses a 2nd)
  "videos": ["https://…"],         // videos: the customer's clips, in order (fewer are reused)
  "media": "auto",                 // auto · ai (generate the photos) · stock (free stock clips, videos) · own
  "music": "auto",                 // videos: auto (our library, the style's mood) · none · a link
  "copy": { "headline": "…" },     // optional: the customer's own words for some fields (kept exactly)
  "photo_direction": "…"           // optional: what the generated photo should show
}
```
Everything with AI: send only `brief` + `style` (+ the logo). For a video made entirely with AI footage, make 2–5 clips first with `POST /v1/ai/video` and pass them in `videos`.

Poll `GET /v1/executions/{execution_id}` every 5 seconds until `status` is `succeeded` (a picture takes about 30–60 s with a generated photo; a video 60–120 s). The result is in `output`.

`output`:
- `url` — the banner: a 1080×1080 JPEG, or a 1080×1080 MP4 of 15 seconds (an animated style) with `poster_url` (a JPEG frame)
- `copy` — every text on the banner (the style's fields)
- `editable_url` — the same banner as an editable file (PPTX, layers): give it to the customer to edit in Canva themselves — open canva.com and drag the file in (or Create a design → Import file); every text, the logo and the photo are separate layers (a video banner: the moment of its offer)
- `caption` + `hashtags` (at most 5) — ready for the post
- `plan` — everything the render read; keep it to change the banner later
- `warnings` — anything that was left out (an unreadable logo, a photo that could not be made)
The files are kept 24 hours: download them.

**Change a word, the price, a picture or the colours without paying for the models again:** take `output.plan`, edit it (`copy.headline`, `copy.price.amount`, `photo_url`, `brand.logo_url`, `brand.primary` / `brand.accent` as #RRGGBB, or `style` — another style of the same kind), and send `POST /v1/banner/render` with `{ "plan": … }`. Only the render is charged (6 credits a picture, 24 a video).

**Rules the API keeps (say them to the customer, don't fight them):**
- Prices, discounts, gifts, numbers and places come ONLY from the brief. Without a price in the brief the banner shows a short punch line instead — never an invented figure.
- Text is set by our engine (real Hebrew right to left, real fonts); long words shrink to fit their box.
- Stock clips never show a stock person's face or a brand (an advert must not look like an endorsement).

Prices here are the BASE API price in credits (the real cost × 3, one credit = $0.01); an account's package can make them lower. The estimate (`POST /v1/banner/estimate`) is the worst case and is what is reserved; the charge is what really ran.
