---
title: "Render a banner again from its plan"
method: POST
path: "/v1/banner/render"
tags: ["Banners"]
---

# Render a banner again from its plan

`POST /v1/banner/render`

## Request

- Base URL: `https://apihub.co.il`
- URL: `https://apihub.co.il/v1/banner/render`
- Auth: HTTP bearer

Renders a banner again from its plan (`output.plan` of POST /v1/banner) after you changed it: a word or the price in `copy`, `photo_url` (your own picture), `brand.logo_url`, `brand.primary` / `brand.accent` (#RRGGBB), the clips of a video, or `style` — another style of the same kind (a picture style for a picture, an animated one for a video; the fields the new style does not print are left out). No model call and no picture generation: only the render is charged. Asynchronous like the banner itself: poll GET /v1/executions/{id}.

**Billing:** The render only · **Rate limit:** 20/min · **Asynchronous**

## Headers

- `Idempotency-Key` string
- `X-Tag` string
- `x-wait-ms` integer

## Request body

- object
  - `plan` object, required: `output.plan` of an earlier banner, with your edits: a word, a price, a picture link, the colours — or another style of the same kind
    - `copy` object, required
      - `cta` string
      - `tag` string
      - `fine` string
      - `gift` string
      - `hook` string
      - `list` string[]
      - `tag2` string
      - `badge` object
        - `big` string, required
        - `sub` string
        - `top` string
        - `bottom` string
      - `chips` string[]
      - `hook2` string
      - `price` object
        - `amount` string, required
        - `prefix` string
        - `suffix` string
        - `currency` string
      - `script` string
      - `details` string
      - `end_big` string
      - `end_sub` string
      - `big_word` string
      - `end_icon` 'users' | 'award' | 'circle-parking' | 'coffee' | 'flame' | 'clock' | 'leaf' | 'shield-check' | 'shield' | 'droplets' | 'sparkles' | 'truck' | 'fish' | 'salad' | 'soup' | 'life-buoy' | 'map-pin' | 'sun' | 'star' | 'heart' | 'house' | 'hand-heart' | 'gift' | 'phone' | 'calendar-check' | 'scissors' | 'car-front' | 'baby' | 'graduation-cap' | 'cpu' | 'rocket' | 'waves' | 'wind' | 'thermometer-snowflake' | 'badge-check' | 'timer' | 'smile' | 'flower-2' | 'wine' | 'bath' | 'check' | 'message-circle' | 'dumbbell' | 'utensils' | 'pizza' | 'shopping-bag' | 'stethoscope' | 'paw-print' | 'book-open' | 'music' | 'camera' | 'wrench' | 'zap' | 'wifi' | 'percent' | 'tag' | 'headphones' | 'shirt' | 'bike' | 'plane'
      - `end_lead` string
      - `features` object[]
        - `icon` 'users' | 'award' | 'circle-parking' | 'coffee' | 'flame' | 'clock' | 'leaf' | 'shield-check' | 'shield' | 'droplets' | 'sparkles' | 'truck' | 'fish' | 'salad' | 'soup' | 'life-buoy' | 'map-pin' | 'sun' | 'star' | 'heart' | 'house' | 'hand-heart' | 'gift' | 'phone' | 'calendar-check' | 'scissors' | 'car-front' | 'baby' | 'graduation-cap' | 'cpu' | 'rocket' | 'waves' | 'wind' | 'thermometer-snowflake' | 'badge-check' | 'timer' | 'smile' | 'flower-2' | 'wine' | 'bath' | 'check' | 'message-circle' | 'dumbbell' | 'utensils' | 'pizza' | 'shopping-bag' | 'stethoscope' | 'paw-print' | 'book-open' | 'music' | 'camera' | 'wrench' | 'zap' | 'wifi' | 'percent' | 'tag' | 'headphones' | 'shirt' | 'bike' | 'plane', required
        - `label` string, required
      - `headline` string
      - `includes` string
      - `location` string
      - `headline2` string
      - `script_latin` string
    - `brand` object
      - `name` string
      - `accent` string
      - `primary` string
      - `logo_url` string, uri
    - `clips` object[]
      - `url` string, uri, required
      - `start` number
      - `focus_x` number
      - `focus_y` number
    - `style` 'natural' | 'premium' | 'clean' | 'sporty' | 'motion-red' | 'motion-gold' | 'motion-sea' | 'motion-cream', required
    - `cutout` boolean
    - `caption` string
    - `version` 1
    - `hashtags` string[]
    - `language` 'he' | 'en'
    - `decor_url` string, uri
    - `music_url` string, uri
    - `photo_url` string, uri
    - `photo2_url` string, uri
    - `sticker_cut` boolean
    - `sticker_url` string, uri

## Response `200`

Completed (or 202 while processing)

- object
  - `id` string: Execution id — stable across internal retries; use it with GET /v1/executions/{id}
  - `status` 'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
  - `operation` string
  - `tag` string, nullable: Your X-Tag, if sent
  - `created_at` string, date-time
  - `completed_at` string, date-time, nullable
  - `output` object: Operation result (see each operation). While a Studio render is processing: `stage` (queued · transcribing · downloading · preparing · cleaning_voice · mixing_audio · rendering · finishing), `phase` (the engine's: download · prepare · voice · audio · encode · qa · upload, or null), `progress` (a percent, 0–100) and `progress_fraction` (0–1), `eta_seconds` (seconds left, never below 0) and `estimate_seconds`
  - `error` string, nullable
  - `usage` object
    - `credits_charged` number, nullable
    - `credits_reserved` number
    - `estimated_credits` number
    - `cost_source` 'provider_reported' | 'calculated' | 'estimated' | 'null', nullable
    - `provider_usage` object, nullable: Normalised consumption, e.g. { VIDEO_SECOND: 22.4 }
  - `balance` object
    - `available` number
    - `reserved` number

## Other responses

- `202`: Processing — poll GET /v1/executions/{id}
- `400`: Invalid input
- `402`: Insufficient credits / project budget
- `404`: Resource not found (or not yours)
- `429`: Rate limited
- `503`: Service temporarily paused

---

[API](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai.md) · [All operations](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/llms.txt) · [OpenAPI document](https://skmtc.dev/apihub/apis/apihub-one-api-for-chat-image-video-ai/revisions/a8caa42835ce?raw)
