{"openapi":"3.1.0","info":{"title":"BannerGen","version":"1.0.0","description":"Render social media images from templates. Every successful render costs 1 credit; failed renders are free."},"servers":[{"url":"https://api.bannergen.com"}],"security":[{"bearer":[]}],"paths":{"/v1/templates":{"get":{"summary":"List templates","security":[],"responses":{"200":{"description":"All templates","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TemplateSummary"}}}}}}}}}},"/v1/templates/{id}":{"get":{"summary":"Get a template with its parameter schema","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","enum":["quote-card","blog-post","product-promo","testimonial","carousel-slide","event","stat","tips-list","hiring","article-cover"]}}],"responses":{"200":{"description":"Template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Template"}}}},"404":{"description":"Unknown template","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/renders":{"post":{"summary":"Render one image (synchronous)","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique string up to 255 characters. Repeating a request with the same key returns the first result and charges once.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"quote-card","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"quote-card"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"quote":{"description":"The quote, without quotation marks.","type":"string","maxLength":280,"examples":["Simplicity is not the absence of clutter, it is the presence of clarity."]},"author":{"description":"Who said it.","type":"string","maxLength":60,"examples":["Maya Chen"]},"author_role":{"description":"Role or company.","type":"string","maxLength":60,"examples":["Head of Design, Northwind"]},"author_photo_url":{"description":"Author photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"playfair"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["quote"]}}},{"title":"blog-post","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"blog-post"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"label":{"description":"Small label above the title.","type":"string","maxLength":30,"examples":["New on the blog"]},"title":{"description":"Post title.","type":"string","maxLength":120,"examples":["How we cut our onboarding time in half with three tiny changes"]},"excerpt":{"description":"One or two sentences under the title.","type":"string","maxLength":180,"examples":["What we measured, what we changed and what surprised us along the way."]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Read the post"]},"image_url":{"description":"Cover image shown next to or above the text.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"inter"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]}}},{"title":"product-promo","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"product-promo"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"product_name":{"description":"Product name.","type":"string","maxLength":60,"examples":["Aero Running Shoe"]},"tagline":{"description":"Short benefit line.","type":"string","maxLength":80,"examples":["Featherlight. Built for long runs."]},"price":{"description":"Price as shown, with currency.","type":"string","maxLength":20,"examples":["$89"]},"old_price":{"description":"Crossed-out previous price.","type":"string","maxLength":20,"examples":["$129"]},"badge":{"description":"Discount badge text.","type":"string","maxLength":14,"examples":["-30%"]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Shop now"]},"product_image_url":{"description":"Product photo, ideally on a plain or transparent background.","type":"string","format":"uri","pattern":"^https://","examples":["https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=1200&q=80&fm=jpg"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"poppins"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["product_name"]}}},{"title":"testimonial","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"testimonial"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"review":{"description":"What the customer said.","type":"string","maxLength":300,"examples":["We replaced three tools with this one. Setup took an afternoon and the team actually likes using it."]},"name":{"description":"Customer name.","type":"string","maxLength":60,"examples":["Jordan Ellis"]},"role":{"description":"Role and company.","type":"string","maxLength":60,"examples":["Ops Lead at Brightside"]},"photo_url":{"description":"Customer photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"rating":{"description":"Star rating out of 5.","type":"string","enum":["1","2","3","4","5"],"examples":["5"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"inter"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["review"]}}},{"title":"carousel-slide","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"carousel-slide"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"slide_number":{"description":"Number of this slide.","type":"string","maxLength":3,"examples":["2"]},"total_slides":{"description":"Total slides, for the progress bar.","type":"string","maxLength":3,"examples":["7"]},"title":{"description":"Slide heading.","type":"string","maxLength":90,"examples":["Write the hook before the content"]},"body":{"description":"Slide text.","type":"string","maxLength":280,"examples":["People decide in the first second whether to keep swiping. Lead with the outcome, not the setup."]},"footer_hint":{"description":"Hint in the corner.","type":"string","maxLength":24,"examples":["Swipe →"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"space-grotesk"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]}}},{"title":"event","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"event"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"event_type":{"description":"Small label.","type":"string","maxLength":30,"examples":["Live webinar"]},"title":{"description":"Event title.","type":"string","maxLength":90,"examples":["Scaling content without scaling the team"]},"date":{"description":"Date as you want it shown.","type":"string","maxLength":40,"examples":["Thu, Nov 14"]},"time":{"description":"Time with timezone.","type":"string","maxLength":40,"examples":["5:00 PM CET"]},"speaker_name":{"description":"Speaker name.","type":"string","maxLength":60,"examples":["Priya Raman"]},"speaker_role":{"description":"Speaker role.","type":"string","maxLength":60,"examples":["VP Marketing, Northwind"]},"speaker_photo_url":{"description":"Speaker photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Register free"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"outfit"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]}}},{"title":"stat","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"stat"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"number":{"description":"The number, with units.","type":"string","maxLength":12,"examples":["73%"]},"label":{"description":"What the number means.","type":"string","maxLength":120,"examples":["of buyers check a brand's social feed before their first purchase"]},"source":{"description":"Source line.","type":"string","maxLength":80,"examples":["Source: Northwind Consumer Survey 2026"]},"trend":{"description":"Optional trend arrow next to the number.","type":"string","enum":["none","up","down"],"default":"none"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"bricolage"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["number"]}}},{"title":"tips-list","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"tips-list"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"title":{"description":"List heading.","type":"string","maxLength":80,"examples":["5 ways to reuse one blog post"]},"item_1":{"description":"First point.","type":"string","maxLength":90,"examples":["Turn each subheading into a carousel slide"]},"item_2":{"description":"Second point.","type":"string","maxLength":90,"examples":["Pull the best quote into a quote card"]},"item_3":{"description":"Third point.","type":"string","maxLength":90,"examples":["Post the key stat as a big-number image"]},"item_4":{"description":"Fourth point.","type":"string","maxLength":90,"examples":["Record a 30-second summary for Reels"]},"item_5":{"description":"Fifth point.","type":"string","maxLength":90,"examples":["Send it to your newsletter with a new intro"]},"numbered":{"description":"Numbers instead of bullets.","type":"boolean","default":true},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"dm-sans"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title","item_1"]}}},{"title":"hiring","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"hiring"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"headline":{"description":"Top line.","type":"string","maxLength":30,"examples":["We're hiring"]},"role":{"description":"Job title.","type":"string","maxLength":60,"examples":["Senior Product Designer"]},"location":{"description":"Location or Remote.","type":"string","maxLength":40,"examples":["Remote · EU"]},"employment_type":{"description":"Full-time, contract…","type":"string","maxLength":30,"examples":["Full-time"]},"salary":{"description":"Salary range.","type":"string","maxLength":40,"examples":["€70–90k"]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Apply now"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"montserrat"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["role"]}}},{"title":"article-cover","type":"object","additionalProperties":false,"required":["template"],"properties":{"template":{"type":"string","const":"article-cover"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square"},"output_format":{"type":"string","enum":["png"],"default":"png"},"params":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"category":{"description":"Category tag.","type":"string","maxLength":30,"examples":["Growth"]},"title":{"description":"Article title.","type":"string","maxLength":120,"examples":["The quiet power of boring marketing"]},"author":{"description":"Author name.","type":"string","maxLength":60,"examples":["Sam Okafor"]},"date":{"description":"Publication date or reading time.","type":"string","maxLength":40,"examples":["Oct 28, 2026 · 6 min read"]},"image_url":{"description":"Optional photo; the card uses it as the background.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"fraunces"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]}}}],"discriminator":{"propertyName":"template"}},"example":{"template":"quote-card","format":"square","params":{"quote":"Simplicity is not the absence of clutter, it is the presence of clarity."}}}}},"responses":{"200":{"description":"Replay of an earlier request with the same Idempotency-Key (header `Idempotent-Replayed: true`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Render"}}}},"201":{"description":"Rendered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Render"}}}},"400":{"description":"Body is not JSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"No credits left","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Same Idempotency-Key still in progress","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid parameters, image failed to load, or Idempotency-Key reused with a different body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; see Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/batches":{"post":{"summary":"Start a batch (asynchronous)","description":"Validates every row up front: invalid rows are marked `failed` right away and cost nothing. The valid ones reserve a credit each; items that fail while rendering get it back. Poll GET /v1/batches/{id} until `status` is `completed`.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique string up to 255 characters. Repeating a request with the same key returns the first batch and charges once.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"title":"quote-card","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"quote-card"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"quote":{"description":"The quote, without quotation marks.","type":"string","maxLength":280,"examples":["Simplicity is not the absence of clutter, it is the presence of clarity."]},"author":{"description":"Who said it.","type":"string","maxLength":60,"examples":["Maya Chen"]},"author_role":{"description":"Role or company.","type":"string","maxLength":60,"examples":["Head of Design, Northwind"]},"author_photo_url":{"description":"Author photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"playfair"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"quote":{"description":"The quote, without quotation marks.","type":"string","maxLength":280,"examples":["Simplicity is not the absence of clutter, it is the presence of clarity."]},"author":{"description":"Who said it.","type":"string","maxLength":60,"examples":["Maya Chen"]},"author_role":{"description":"Role or company.","type":"string","maxLength":60,"examples":["Head of Design, Northwind"]},"author_photo_url":{"description":"Author photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"playfair"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["quote"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"blog-post","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"blog-post"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"label":{"description":"Small label above the title.","type":"string","maxLength":30,"examples":["New on the blog"]},"title":{"description":"Post title.","type":"string","maxLength":120,"examples":["How we cut our onboarding time in half with three tiny changes"]},"excerpt":{"description":"One or two sentences under the title.","type":"string","maxLength":180,"examples":["What we measured, what we changed and what surprised us along the way."]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Read the post"]},"image_url":{"description":"Cover image shown next to or above the text.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"inter"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"label":{"description":"Small label above the title.","type":"string","maxLength":30,"examples":["New on the blog"]},"title":{"description":"Post title.","type":"string","maxLength":120,"examples":["How we cut our onboarding time in half with three tiny changes"]},"excerpt":{"description":"One or two sentences under the title.","type":"string","maxLength":180,"examples":["What we measured, what we changed and what surprised us along the way."]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Read the post"]},"image_url":{"description":"Cover image shown next to or above the text.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"inter"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"product-promo","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"product-promo"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"product_name":{"description":"Product name.","type":"string","maxLength":60,"examples":["Aero Running Shoe"]},"tagline":{"description":"Short benefit line.","type":"string","maxLength":80,"examples":["Featherlight. Built for long runs."]},"price":{"description":"Price as shown, with currency.","type":"string","maxLength":20,"examples":["$89"]},"old_price":{"description":"Crossed-out previous price.","type":"string","maxLength":20,"examples":["$129"]},"badge":{"description":"Discount badge text.","type":"string","maxLength":14,"examples":["-30%"]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Shop now"]},"product_image_url":{"description":"Product photo, ideally on a plain or transparent background.","type":"string","format":"uri","pattern":"^https://","examples":["https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=1200&q=80&fm=jpg"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"poppins"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"product_name":{"description":"Product name.","type":"string","maxLength":60,"examples":["Aero Running Shoe"]},"tagline":{"description":"Short benefit line.","type":"string","maxLength":80,"examples":["Featherlight. Built for long runs."]},"price":{"description":"Price as shown, with currency.","type":"string","maxLength":20,"examples":["$89"]},"old_price":{"description":"Crossed-out previous price.","type":"string","maxLength":20,"examples":["$129"]},"badge":{"description":"Discount badge text.","type":"string","maxLength":14,"examples":["-30%"]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Shop now"]},"product_image_url":{"description":"Product photo, ideally on a plain or transparent background.","type":"string","format":"uri","pattern":"^https://","examples":["https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=1200&q=80&fm=jpg"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"poppins"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["product_name"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"testimonial","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"testimonial"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"review":{"description":"What the customer said.","type":"string","maxLength":300,"examples":["We replaced three tools with this one. Setup took an afternoon and the team actually likes using it."]},"name":{"description":"Customer name.","type":"string","maxLength":60,"examples":["Jordan Ellis"]},"role":{"description":"Role and company.","type":"string","maxLength":60,"examples":["Ops Lead at Brightside"]},"photo_url":{"description":"Customer photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"rating":{"description":"Star rating out of 5.","type":"string","enum":["1","2","3","4","5"],"examples":["5"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"inter"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"review":{"description":"What the customer said.","type":"string","maxLength":300,"examples":["We replaced three tools with this one. Setup took an afternoon and the team actually likes using it."]},"name":{"description":"Customer name.","type":"string","maxLength":60,"examples":["Jordan Ellis"]},"role":{"description":"Role and company.","type":"string","maxLength":60,"examples":["Ops Lead at Brightside"]},"photo_url":{"description":"Customer photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"rating":{"description":"Star rating out of 5.","type":"string","enum":["1","2","3","4","5"],"examples":["5"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"inter"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["review"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"carousel-slide","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"carousel-slide"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"slide_number":{"description":"Number of this slide.","type":"string","maxLength":3,"examples":["2"]},"total_slides":{"description":"Total slides, for the progress bar.","type":"string","maxLength":3,"examples":["7"]},"title":{"description":"Slide heading.","type":"string","maxLength":90,"examples":["Write the hook before the content"]},"body":{"description":"Slide text.","type":"string","maxLength":280,"examples":["People decide in the first second whether to keep swiping. Lead with the outcome, not the setup."]},"footer_hint":{"description":"Hint in the corner.","type":"string","maxLength":24,"examples":["Swipe →"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"space-grotesk"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"slide_number":{"description":"Number of this slide.","type":"string","maxLength":3,"examples":["2"]},"total_slides":{"description":"Total slides, for the progress bar.","type":"string","maxLength":3,"examples":["7"]},"title":{"description":"Slide heading.","type":"string","maxLength":90,"examples":["Write the hook before the content"]},"body":{"description":"Slide text.","type":"string","maxLength":280,"examples":["People decide in the first second whether to keep swiping. Lead with the outcome, not the setup."]},"footer_hint":{"description":"Hint in the corner.","type":"string","maxLength":24,"examples":["Swipe →"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"space-grotesk"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"event","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"event"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"event_type":{"description":"Small label.","type":"string","maxLength":30,"examples":["Live webinar"]},"title":{"description":"Event title.","type":"string","maxLength":90,"examples":["Scaling content without scaling the team"]},"date":{"description":"Date as you want it shown.","type":"string","maxLength":40,"examples":["Thu, Nov 14"]},"time":{"description":"Time with timezone.","type":"string","maxLength":40,"examples":["5:00 PM CET"]},"speaker_name":{"description":"Speaker name.","type":"string","maxLength":60,"examples":["Priya Raman"]},"speaker_role":{"description":"Speaker role.","type":"string","maxLength":60,"examples":["VP Marketing, Northwind"]},"speaker_photo_url":{"description":"Speaker photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Register free"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"outfit"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"event_type":{"description":"Small label.","type":"string","maxLength":30,"examples":["Live webinar"]},"title":{"description":"Event title.","type":"string","maxLength":90,"examples":["Scaling content without scaling the team"]},"date":{"description":"Date as you want it shown.","type":"string","maxLength":40,"examples":["Thu, Nov 14"]},"time":{"description":"Time with timezone.","type":"string","maxLength":40,"examples":["5:00 PM CET"]},"speaker_name":{"description":"Speaker name.","type":"string","maxLength":60,"examples":["Priya Raman"]},"speaker_role":{"description":"Speaker role.","type":"string","maxLength":60,"examples":["VP Marketing, Northwind"]},"speaker_photo_url":{"description":"Speaker photo, shown as a circle.","type":"string","format":"uri","pattern":"^https://"},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Register free"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"outfit"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"stat","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"stat"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"number":{"description":"The number, with units.","type":"string","maxLength":12,"examples":["73%"]},"label":{"description":"What the number means.","type":"string","maxLength":120,"examples":["of buyers check a brand's social feed before their first purchase"]},"source":{"description":"Source line.","type":"string","maxLength":80,"examples":["Source: Northwind Consumer Survey 2026"]},"trend":{"description":"Optional trend arrow next to the number.","type":"string","enum":["none","up","down"],"default":"none"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"bricolage"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"number":{"description":"The number, with units.","type":"string","maxLength":12,"examples":["73%"]},"label":{"description":"What the number means.","type":"string","maxLength":120,"examples":["of buyers check a brand's social feed before their first purchase"]},"source":{"description":"Source line.","type":"string","maxLength":80,"examples":["Source: Northwind Consumer Survey 2026"]},"trend":{"description":"Optional trend arrow next to the number.","type":"string","enum":["none","up","down"],"default":"none"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"bricolage"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["number"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"tips-list","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"tips-list"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"title":{"description":"List heading.","type":"string","maxLength":80,"examples":["5 ways to reuse one blog post"]},"item_1":{"description":"First point.","type":"string","maxLength":90,"examples":["Turn each subheading into a carousel slide"]},"item_2":{"description":"Second point.","type":"string","maxLength":90,"examples":["Pull the best quote into a quote card"]},"item_3":{"description":"Third point.","type":"string","maxLength":90,"examples":["Post the key stat as a big-number image"]},"item_4":{"description":"Fourth point.","type":"string","maxLength":90,"examples":["Record a 30-second summary for Reels"]},"item_5":{"description":"Fifth point.","type":"string","maxLength":90,"examples":["Send it to your newsletter with a new intro"]},"numbered":{"description":"Numbers instead of bullets.","type":"boolean","default":true},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"dm-sans"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"title":{"description":"List heading.","type":"string","maxLength":80,"examples":["5 ways to reuse one blog post"]},"item_1":{"description":"First point.","type":"string","maxLength":90,"examples":["Turn each subheading into a carousel slide"]},"item_2":{"description":"Second point.","type":"string","maxLength":90,"examples":["Pull the best quote into a quote card"]},"item_3":{"description":"Third point.","type":"string","maxLength":90,"examples":["Post the key stat as a big-number image"]},"item_4":{"description":"Fourth point.","type":"string","maxLength":90,"examples":["Record a 30-second summary for Reels"]},"item_5":{"description":"Fifth point.","type":"string","maxLength":90,"examples":["Send it to your newsletter with a new intro"]},"numbered":{"description":"Numbers instead of bullets.","type":"boolean","default":true},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"dm-sans"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title","item_1"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"hiring","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"hiring"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"headline":{"description":"Top line.","type":"string","maxLength":30,"examples":["We're hiring"]},"role":{"description":"Job title.","type":"string","maxLength":60,"examples":["Senior Product Designer"]},"location":{"description":"Location or Remote.","type":"string","maxLength":40,"examples":["Remote · EU"]},"employment_type":{"description":"Full-time, contract…","type":"string","maxLength":30,"examples":["Full-time"]},"salary":{"description":"Salary range.","type":"string","maxLength":40,"examples":["€70–90k"]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Apply now"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"montserrat"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"headline":{"description":"Top line.","type":"string","maxLength":30,"examples":["We're hiring"]},"role":{"description":"Job title.","type":"string","maxLength":60,"examples":["Senior Product Designer"]},"location":{"description":"Location or Remote.","type":"string","maxLength":40,"examples":["Remote · EU"]},"employment_type":{"description":"Full-time, contract…","type":"string","maxLength":30,"examples":["Full-time"]},"salary":{"description":"Salary range.","type":"string","maxLength":40,"examples":["€70–90k"]},"cta":{"description":"Button text.","type":"string","maxLength":24,"examples":["Apply now"]},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"montserrat"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["role"]},"description":"Up to 1000 images in total (rows × formats)."}}},{"title":"article-cover","type":"object","additionalProperties":false,"required":["template","rows"],"properties":{"template":{"type":"string","const":"article-cover"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"],"default":"square","description":"One format for every row."},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"uniqueItems":true,"minItems":1,"description":"Several formats: every row is rendered in each. Use instead of `format`."},"output_format":{"type":"string","enum":["png"],"default":"png"},"defaults":{"type":"object","description":"Params shared by every row. A row's own non-empty value wins.","additionalProperties":false,"properties":{"category":{"description":"Category tag.","type":"string","maxLength":30,"examples":["Growth"]},"title":{"description":"Article title.","type":"string","maxLength":120,"examples":["The quiet power of boring marketing"]},"author":{"description":"Author name.","type":"string","maxLength":60,"examples":["Sam Okafor"]},"date":{"description":"Publication date or reading time.","type":"string","maxLength":40,"examples":["Oct 28, 2026 · 6 min read"]},"image_url":{"description":"Optional photo; the card uses it as the background.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"fraunces"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}}},"rows":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","description":"A param that is left out, null or \"\" has no value. Content (texts, images, rating) is then not drawn at all; styling params (theme, font, toggles) take their default.","additionalProperties":false,"properties":{"category":{"description":"Category tag.","type":"string","maxLength":30,"examples":["Growth"]},"title":{"description":"Article title.","type":"string","maxLength":120,"examples":["The quiet power of boring marketing"]},"author":{"description":"Author name.","type":"string","maxLength":60,"examples":["Sam Okafor"]},"date":{"description":"Publication date or reading time.","type":"string","maxLength":40,"examples":["Oct 28, 2026 · 6 min read"]},"image_url":{"description":"Optional photo; the card uses it as the background.","type":"string","format":"uri","pattern":"^https://"},"background":{"description":"Hex color, linear-gradient(<angle>deg, #hex, #hex) or an https image URL. Defaults depend on theme.","type":"string","examples":["#0f172a","linear-gradient(135deg, #1e1b4b, #7c3aed)","https://…/photo.jpg"]},"primary_color":{"description":"Main brand color (headings, key shapes).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"accent_color":{"description":"Highlight color (badges, buttons, decorations).","type":"string","pattern":"^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$"},"font":{"description":"Font family from the curated list.","type":"string","enum":["inter","poppins","montserrat","space-grotesk","outfit","bricolage","dm-sans","playfair","fraunces","lora","dm-serif","bebas-neue"],"default":"fraunces"},"logo_url":{"description":"Logo (PNG, JPEG, GIF or SVG over https).","type":"string","format":"uri","pattern":"^https://","examples":["https://avatars.githubusercontent.com/u/9919?s=256"]},"handle":{"description":"Signature such as @brand or brand.com.","type":"string","maxLength":40,"examples":["@northwind"]},"theme":{"description":"Quick light/dark switch for the default palette.","type":"string","enum":["light","dark"],"default":"light"}},"required":["title"]},"description":"Up to 1000 images in total (rows × formats)."}}}],"discriminator":{"propertyName":"template"}},"example":{"template":"quote-card","format":"square","defaults":{"theme":"dark"},"rows":[{"quote":"Simplicity is not the absence of clutter, it is the presence of clarity."},{"quote":"Simplicity is not the absence of clutter, it is the presence of clarity.","author":"Maya Chen","author_role":"Head of Design, Northwind","logo_url":"https://avatars.githubusercontent.com/u/9919?s=256","handle":"@northwind"}]}}}},"responses":{"200":{"description":"Replay of an earlier request with the same Idempotency-Key (header `Idempotent-Replayed: true`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}},"202":{"description":"Queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}},"400":{"description":"Body is not JSON","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Not enough credits for the valid rows","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Same Idempotency-Key still in progress","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid template, format, defaults or rows list, or Idempotency-Key reused with a different body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited; see Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/batches/{id}":{"get":{"summary":"Batch status and every item","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Batch with items","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Batch"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such batch on this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account":{"get":{"summary":"Plan and remaining credits","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"API key: `Authorization: Bearer big_…`"}},"schemas":{"Error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["missing_api_key","invalid_api_key","insufficient_credits","not_found","idempotency_in_progress","invalid_json","validation_failed","image_load_failed","idempotency_key_reused","rate_limited","internal_error"]},"message":{"type":"string"},"param":{"type":"string","description":"Offending parameter (image_load_failed)."},"errors":{"type":"array","description":"Every invalid parameter (validation_failed).","items":{"type":"object","required":["param","code","message"],"properties":{"param":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}},"Format":{"type":"object","required":["id","width","height"],"properties":{"id":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"width":{"type":"integer"},"height":{"type":"integer"}}},"Render":{"type":"object","required":["id","url","template","format","width","height","output_format","created_at"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri","description":"Public, unguessable link to the image. Safe to hot-link."},"template":{"type":"string"},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"width":{"type":"integer"},"height":{"type":"integer"},"output_format":{"type":"string","enum":["png"]},"bytes":{"type":"integer"},"created_at":{"type":"string","format":"date-time"}}},"Batch":{"type":"object","required":["id","status","template","formats","total","succeeded","failed","pending","created_at"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["queued","processing","completed"],"description":"`completed` once every item succeeded or failed."},"template":{"type":"string"},"formats":{"type":"array","items":{"type":"string","enum":["square","portrait","story","landscape","pin"]}},"total":{"type":"integer","description":"Images in the batch: rows × formats."},"succeeded":{"type":"integer"},"failed":{"type":"integer"},"pending":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"},"items":{"type":"array","items":{"$ref":"#/components/schemas/BatchItem"},"description":"Only in GET /v1/batches/{id}."}}},"BatchItem":{"type":"object","required":["row_index","format","status"],"properties":{"row_index":{"type":"integer","description":"Index of the row in `rows`."},"format":{"type":"string","enum":["square","portrait","story","landscape","pin"]},"status":{"type":"string","enum":["pending","succeeded","failed"]},"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"width":{"type":"integer"},"height":{"type":"integer"},"bytes":{"type":"integer"},"error":{"type":"object","description":"Why the item failed. Failed items are not charged.","required":["code","message"],"properties":{"code":{"type":"string","enum":["validation_failed","image_load_failed","internal_error","timeout"]},"message":{"type":"string"},"param":{"type":"string"},"errors":{"type":"array","description":"Every invalid parameter (validation_failed).","items":{"type":"object","required":["param","code","message"],"properties":{"param":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"TemplateSummary":{"type":"object","required":["id","name","description","formats"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"formats":{"type":"array","items":{"$ref":"#/components/schemas/Format"}}}},"Template":{"type":"object","required":["id","name","description","formats","params_schema","example"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"formats":{"type":"array","items":{"$ref":"#/components/schemas/Format"}},"params_schema":{"type":"object","description":"JSON Schema (2020-12) of `params`."},"example":{"type":"object","description":"Example `params` that render nicely."}}},"Account":{"type":"object","required":["plan","credits"],"properties":{"email":{"type":"string"},"plan":{"type":"string"},"credits":{"type":"integer","description":"Renders left."},"credits_reset_at":{"type":["string","null"],"format":"date-time","description":"When credits refill; null on the trial."},"key_prefix":{"type":"string","description":"Start of the key used for this request."}}}}}}