Carousels & Infographics
Create carousel
Creates a multi-slide LinkedIn document-post carousel from a structured content outline (never HTML): Postiv's own carousel agent generates the branded slide HTML using the target profile's saved brand style. Created as a draft with no rendered preview.
/api/public/carouselscurl -X POST https://postiv.ai/api/public/carousels \
-H "Authorization: Bearer pk_postiv_..." \
-H "Content-Type: application/json" \
-d '{
"title": "Launch lessons",
"integrationId": 123
}'{
"success": true,
"carousel": {
"id": "car1...",
"title": "5 Content Mistakes",
"status": "draft",
"integrationId": 1234,
"planItemId": null,
"createdAt": "2026-07-19T09:10:00.000Z"
},
"versionId": "cv1...",
"versionNumber": 1,
"slideCount": 6,
"slides": [
{
"index": 0,
"title": "5 Content Mistakes",
"textPreview": "Most B2B content fails because..."
}
],
"openInPostivUrl": "https://postiv.ai/app/create?carouselId=car1...",
"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, internal library title.
integrationIdintrequiredProfile whose brand style (colors/fonts/templates) generates the slides.
outline.topicstringrequiredoutline.targetAudiencestringoutline.contentTypestringe.g. educational, listicle, case study, story.
outline.objectivestringoutline.narrativeArcstringoutline.styleInstructionsstringFreeform visual direction layered on the saved brand style.
outline.backgroundStylestringnonegriddotsdiagonalwavessubtle-noisegradient-onlyoutline.themeOverride.backgroundColorstringHex; overrides the saved brand theme for this carousel only.
outline.themeOverride.textColorstringoutline.themeOverride.primaryColorstringoutline.themeOverride.accentColorstringoutline.slides[]arrayrequired1-10 slides (10 max enforced; app-level guidance says 5-8 is the LinkedIn sweet spot).
outline.slides[].slideTypestringrequirede.g. cover, content, list, quote, stats, comparison, cta.
outline.slides[].headlinestringrequiredoutline.slides[].subheadlinestringoutline.slides[].bodystringoutline.slides[].calloutstringoutline.slides[].items[]arrayMax 8, each { label, description? }.
outline.slides[].dataPointobject{ value, label } hero stat.
outline.slides[].imageUrls[]string[]Max 3 public URLs.
outline.slides[].layoutstringoutline.slides[].designNotesstringplanItemIduuidLinks to a Bob plan item and marks it drafted.
Response
The created carousel with slide text summaries.
carousel.id / title / status / integrationId / planItemId / createdAtmixedversionIduuidversionNumberint1 for a new carousel.
slideCountintslides[].index / title / textPreviewmixedtextPreview is HTML-stripped, truncated to 200 chars.
openInPostivUrlstringwarningsstring[]Per-slide generation warnings, e.g. 'slide 3: ...'.
Errors
| 400 | missing_title / invalid_outline (0 slides or >10 slides) |
| 404 | linkedin_profile_not_found |
| 502 | carousel_generation_failed: generation produced zero slides |
Good to know
- Status is 201 Created. Always call render-carousel next: no preview images exist yet. The model must supply CONTENT only; Postiv's own slide-HTML agent (generateCarouselSlides) renders the visuals.