{"id":"carousel","kind":"carousel","name":{"he":"קרוסלה לאינסטגרם","en":"Instagram carousel"},"one_line":{"he":"קרוסלה מוכנה לאינסטגרם מבריף קצר: שקפים מעוצבים, כיתוב והאשטגים.","en":"A finished Instagram carousel from a short brief: designed slides, a caption and hashtags."},"listed":true,"version":"1.0","updated":"2026-10-09","when_to_use":["A carousel post from a brief, with every option open (the kind, the look, the pictures, the brand colours, the shape)."],"when_not_to_use":["The kind is clear: its own skill (carousel-tips, carousel-steps…) has its real example and price.","The customer has a video to post: a video skill fits better."],"example":null,"preview":null,"price":{"unit":"carousel","from":32,"to":229,"note":"per carousel — stock photos are free, a generated picture is paid per picture"},"inputs":[{"name":"brief","type":"text","required":true,"limits":"3–4,000 characters","notes":"the topic or the customer's own text — facts, prices and dates are taken only from here"},{"name":"archetype · look · images · aspect · brand","type":"choice","required":false,"limits":"auto by default","notes":"the recipe explains each"}],"outputs":[{"name":"output.slides[].url","type":"images","required":true,"limits":"5–10 slides, 1080×1080 (1:1) or 1080×1350 (4:5)","notes":"deleted after 24 hours: download them"},{"name":"output.caption · output.hashtags · alt text","type":"text","required":true,"limits":null,"notes":"Instagram takes at most 5 hashtags on publish"},{"name":"cost","type":"number","required":true,"limits":null,"notes":"GET /v1/usage?tag=<job name> → totals.credits: quote this, not the estimate"}],"steps":[{"method":"POST","path":"/v1/carousel","what":"The carousel from the brief","body":{"brief":"5 טעויות בצחצוח שיניים. מרפאת שיניים ד״ר כהן ברמת גן, לילדים ולמבוגרים. קביעת תור בוואטסאפ.","language":"he","slides":7,"aspect":"1:1","images":"stock","look":"photo","brand":{"handle":"dr.cohen.dental"}},"async":true,"optional":false},{"method":"GET","path":"/v1/executions/{id}","what":"Poll a call that answered processing until it is completed (the file is output.url)","body":null,"async":false,"optional":false},{"method":"POST","path":"/v1/carousel/render","what":"Fix a slide: the plan with the edit, only the slides that changed","body":{"plan":{"version":1,"language":"he","aspect":"1:1","look":"card","archetype":"tips","brand":{"primary":"#0B3C5D","accent":"#5EEAD4","font":"Heebo"},"caption":"","hashtags":[],"slides":[{"role":"hook","headline":"5 טעויות בצחצוח שיניים","body":"כך תשמרו על חיוך בריא"},{"role":"point","number":1,"headline":"מברשת רכה, לא קשה"},{"role":"cta","headline":"הגיע הזמן לבדיקה","button":"שלחו לנו הודעה"}]}},"async":true,"optional":true},{"method":"GET","path":"/v1/usage","what":"?tag=<job name>: what the whole job cost — quote it to the customer","body":null,"async":false,"optional":false}],"rules":["Show the customer the price (POST <path>/estimate with the same body, or the price above) and wait for their OK before any paid call.","Send Idempotency-Key: <job>-<step> on every POST. After a timeout send the same call with the SAME key — you get the same job back, never a second charge.","A long call answers status processing: poll GET /v1/executions/{id} every 5–10 s (or send x-wait-ms, up to 90000). Never send the job again to see whether it finished.","Send the same X-Tag: <job name> on every call of one job; GET /v1/usage?tag=<job name> is then what it really cost.","On-screen text is in the video's language and taken from what is actually said (a carousel: from the customer's brief). Never invent facts, names, prices or numbers.","Publish, post or send only when the customer asked for exactly that — never on your own."],"common_errors":[{"code":"invalid_input","why":"400: a field is missing, misspelled or out of range — the message names it","fix":"Fix exactly that field and send again; send only the fields the recipe or the docs show."},{"code":"unauthorized","why":"401: the API key is missing, wrong or revoked","fix":"Ask the customer for a valid key (keys are made at /api-keys); never print it back."},{"code":"insufficient_credits","why":"402: the balance does not cover the estimate (details.required_credits)","fix":"Tell the customer the price and that the balance is short; do not retry until they top up."},{"code":"rate_limited","why":"429: too many calls a minute","fix":"Wait the retry-after seconds, then send the same call with the same Idempotency-Key."},{"code":"failed","why":"the execution's status is failed or timeout — nothing is charged for failed work","fix":"Read error.message, fix the input, and start again with a NEW Idempotency-Key."}],"quality_check":["Every slide's text comes from the brief: no invented price, date, name or number.","The text fits its slide (a square slide: headline ≤ 6 words, body ≤ 18) and reads in the brief's language.","Fix one slide with POST /v1/carousel/render { plan, only: [n] } — never make the whole carousel again for one word."],"tags":{"domain":"create","level":"basic","hebrew":true,"recommended":false,"new":true,"creator":false,"topics":["carousel","instagram"]},"links":{"recipe":"/skills/carousel.md","docs":"/docs?tool=carousel","run":null}}