Carousel

Instagram carousel from a brief

One call with a short brief returns a finished Instagram carousel: 5–10 slides, 1080×1080 (1:1, the feed's square — the default) or 1080×1350 (aspect: "4:5", the taller post that takes more of the feed) JPEG, designed text (language: Hebrew, English, Ukrainian or Russian) over a photo, a generated picture or a brand-colour card — with the caption, at most 5 hashtags, alt text per slide, where every picture came from, and the plan as JSON. Asynchronous: the call answers 202 with the execution; poll GET /v1/executions/{id} for output.slides[].url. How it works: a planner writes the slides (one idea per slide; in the square a headline ≤ 6 words and 44 characters and a body ≤ 18 words and 120 characters, in 4:5 a headline ≤ 8 words and a body ≤ 25; slide 1 a hook, the last a call to action; facts, prices and dates only from your brief). Pictures: own_images first, in order; images: "stock" picks free photos for each slide in the slides' shape, checks them, and copies them with their licence (a slide without a fitting photo becomes a brand-colour card, never a paid generation); ai / ai-pro generate the cover first and the rest in its style; none makes brand-colour cards. Text is set by our render engine, never by the image model, so Hebrew, numbers, prices and @handles read correctly (Ukrainian and Russian are set in Rubik, the slide font with Cyrillic letters). Looks: photo (full-bleed picture, dark scrim, large headline), card (brand colour, big numbers, a picture on the cover only — the cheapest with ai), split (picture on top in a rounded frame, text panel below). The logo sits bottom-left for Hebrew (bottom-right for English) with the handle next to it, the slide marker ("2/7") and the swipe cue opposite. The plan carries its aspect, so a re-render keeps the shape. Fix one slide without paying for pictures again: edit output.plan and send it to POST /v1/carousel/render. The files are kept 24 hours — download them within that time. The price is the real cost of what ran (the planner, the photo check, each generated picture, the render) times the standard markup; the estimate is the worst case and is what is reserved.

Billing: Real cost of the run × the standard markup: the planner, the photo check or each generated picture, and the render per slide · Rate limit: 6/min · Asynchronous

post/v1/carousel

Request

  • Base URL: https://apihub.co.il
  • URL: https://apihub.co.il/v1/carousel
  • Auth: HTTP bearer

Headers

Idempotency-Keystring

Replay-safe: the same execution is returned instead of charging twice

X-Tagstring

Group calls into one job (e.g. one video) — see GET /v1/usage?tag=…

x-wait-msinteger

Wait for the job inside this call (ms)

Request body

ctastring

What the last slide asks for (follow, save, a link in the bio, a DM keyword)

look'auto' | 'photo' | 'card' | 'split'

photo = a full-bleed picture on every slide · card = brand colour, big numbers, a picture on the cover only · split = picture on top, text panel below. auto = photo with stock or your own pictures, card with generated ones or none

tonestring
briefstring required

The topic, or your own text to turn into slides. Facts, prices and dates are taken only from here.

aspect'1:1' | '4:5'

The slides' shape: 1:1 = 1080×1080, the feed's square (default) · 4:5 = 1080×1350, the taller post that takes more of the feed. A square slide holds less text: headline ≤ 6 words, body ≤ 18 (4:5: 8 and 25). With plan: the plan's own shape unless you name one.

images'stock' | 'ai' | 'ai-pro' | 'none'

stock = free photos picked and checked for the slide · ai = generated (Gemini 3.1 Flash Image), the cover first and the rest in its style · ai-pro = Gemini 3 Pro Image · none = brand-colour cards

slidesinteger
audiencestring
brand_idstring

A brand of yours (GET /v1/brands): its colours, logo, handle, font and tone fill what brand and tone leave out — default = your default brand

language'he' | 'en' | 'uk' | 'ru'

he (default) · en · uk · ru — the language the slides, the caption and the hashtags are written in. Ukrainian and Russian are set in Rubik.

archetype'auto' | 'tips' | 'myths' | 'steps' | 'before-after' | 'story' | 'product'

auto = the planner picks the structure that fits the brief

own_imagesstring[]

Your own pictures (JPEG / PNG / WebP), used first, in order

Response

Completed (or 202 while processing)

idstring

Execution id — stable across internal retries; use it with GET /v1/executions/{id}

status'pending' | 'processing' | 'completed' | 'partial' | 'failed' | 'cancelled' | 'timeout'
operationstring
tagstring nullable

Your X-Tag, if sent

created_atstring date-time
completed_atstring date-time nullable
outputobject

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

errorstring nullable

Changes

No recorded changes to this operation across all 2 revisions of this API.