Carousels & Infographics
Create infographic
Creates a single 1080x1350 infographic canvas (stored as a one-slide carousel row with format='infographic') that publishes as a LinkedIn IMAGE post, not a document. LinkedIn only: an X account returns 400 linkedin_only.
/api/public/infographicscurl -X POST https://postiv.ai/api/public/infographics \
-H "Authorization: Bearer pk_postiv_..." \
-H "Content-Type: application/json" \
-d '{
"title": "Launch lessons",
"integrationId": 123
}'{
"success": true,
"carousel": {
"id": "car2...",
"title": "State of LinkedIn 2026",
"status": "draft",
"integrationId": 1234,
"planItemId": null,
"createdAt": "..."
},
"format": "infographic",
"versionId": "cv1...",
"versionNumber": 1,
"slideCount": 1,
"slides": [
{
"index": 0,
"title": "State of LinkedIn 2026",
"textPreview": "73% of B2B buyers..."
}
],
"openInPostivUrl": "https://postiv.ai/app/create?carouselId=car2...",
"warnings": []
}Authorization
Requires an organization API key with the posts:write scope, sent as Authorization: Bearer or x-api-key.
Body parameters
titlestringrequired1-240 chars.
integrationIdintrequiredLinkedIn profile or company page whose brand style the infographic uses (LinkedIn only: an X account returns 400 linkedin_only).
styleIdstringExact styleId from list_visual_templates (format infographic), with copy in outline.fields. global:freeform has no template: a designer draws the whole page around headline, subtitle, sections, dataPoints, sourceNote and cta (no item limit), word for word, in the Brand Kit colors and fonts.
outline.topicstringrequiredoutline.targetAudiencestringoutline.objectivestringoutline.anglestringoutline.styleInstructionsstringOmit unless the user explicitly requested a specific look: otherwise the saved brand theme applies automatically.
outline.backgroundStylestringnonegriddotsdiagonalwavessubtle-noisegradient-onlyoutline.themeOverrideobjectSame shape as create-carousel's themeOverride; omit entirely unless explicit colors were requested.
outline.headlinestringrequiredMax 8-10 words.
outline.subtitlestringoutline.archetypestringstat-gridtimelineprocesscomparisonfunneldonutranked-barsmyth-vs-factchecklistcycleautooutline.sections[]arrayrequiredMax 4 for templates (no limit with global:freeform). Each { title?, kind: stats|steps|comparison|timeline|list|chart|text, items: [{ label, value?, description? }] }.
outline.dataPoints[]arrayMax 6 for templates (no limit with global:freeform), { value, label }: real numbers only, never invented.
outline.sourceNotestringSmall attribution/citation line.
outline.ctastringoutline.imageUrls[]string[]Max 3.
outline.assetHints[]arrayFreeform (styleId global:freeform) only; templates ignore them. Max 4, each { kind: logo | image | screenshot | website-screenshot, topic, label?, scope? }, same as create-carousel's per-slide assetHints.
planItemIduuidResponse
The created infographic (a carousel row with a single slide).
carousel.id / title / status / integrationId / planItemId / createdAtmixedformatstringAlways 'infographic'.
versionId / versionNumber / slideCount (always 1) / slides / appliedStyle / openInPostivUrl / warningsmixedSame shape as create-carousel (appliedStyle only for Freeform).
Errors
| 400 | missing_title / invalid_outline (missing headline) |
| 400 | linkedin_only: integrationId is an X account |
| 404 | integration_not_found: integrationId is not an account in this workspace / linkedin_profile_not_found: the LinkedIn profile is not active |
| 502 | carousel_generation_failed |
Good to know
- Status is 201 Created. No PDF concept applies: render-carousel renders a single canvas PNG for infographics.