LinkedIn Carousel Generator API: Slides from a Sheet
A LinkedIn carousel generator API turns slide layouts plus a row of copy into a finished deck. Design the cover, the body slide and the closing slide once, send the text for each, and a ZIP comes back with one image per slide.
Carousels are the strongest organic format on LinkedIn. They're also the most tedious thing to make by hand, which is exactly the shape of problem worth automating. Here's how the pieces fit, including the two places we stop and hand off.
Groups slides and instancesGroups, slides and instances
Three nouns, and the model gets easier once they're separated.
A carousel group is the reusable structure: an ordered set of slide templates, each carrying an order, an optional roleLabel, and required and repeatable flags. Those flags are the point. They let a group describe a real deck shape rather than a fixed slide count:
| Slide | Role | Flags |
|---|---|---|
| 1 | Cover | required |
| 2 | Body | repeatable |
| 3 | CTA | required |
A user instance is one filled-in carousel built from a group. Because the body slide is repeatable, a five-point post and a nine-point post come from the same group, no second structure to maintain.
Groups exist for instagram, linkedin, twitter, facebook and custom. Dimensions are fixed at design time, so a LinkedIn deck and an Instagram deck are separate groups rather than one group resized. The LinkedIn preset we ship is 1200 by 1350.
The export is a zip one file per slideThe export is a ZIP, one file per slide
Carousels run on the management API at api.imejis.io with an OAuth bearer token, not on the render endpoint with an API key. Mixing those up is the most common first error:
curl -X POST 'https://api.imejis.io/carousel-groups/GROUP_ID/export?format=png' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"slides": [
{ "templateId": "cover_tpl", "modifications": { "title": "5 pricing mistakes" } },
{ "templateId": "body_tpl", "modifications": { "point": "Charging per seat" } },
{ "templateId": "cta_tpl", "modifications": { "handle": "@imejis" } }
]
}' \
--output carousel.zipThe archive holds slide-01, slide-02, slide-03 in the order you sent them. Format and quality apply to the whole carousel, not per slide, so a deck is PNG or it's JPEG, never a mix.
One render per slideOne render per slide
The export consumes quota per slide, not per export. An 8-slide deck is 8 renders. Re-exporting because a headline had a typo is another 8.
That changes the working habit more than the number does: proofread in the spreadsheet, not in the exported PNG. Three decks a week at 8 slides is about 104 renders a month, which is already past the free allowance before a single rework. As of September 2026, Basic is $14.99 for 1,000 renders, or 125 eight-slide decks a month, at which point re-exporting stops being a budgeting question. The pricing page has the rest and render quota explains the counters.
Driving it from a spreadsheetDriving it from a spreadsheet
The reason a sheet works well here is that a carousel is a list of short strings, which is what a spreadsheet is good at holding. One row per slide, one column per field:
| order | role | headline | body |
|---|---|---|---|
| 1 | cover | 5 pricing mistakes | |
| 2 | body | Charging per seat | Teams shrink; usage doesn't |
| 3 | body | No free tier | Nobody tries before buying |
| 4 | cta | Follow for more | @imejis |
Read the range with the Google Sheets API, map each row to a modifications object, and post the array. If you'd rather not write that glue, Zapier and Make both cover the sheet-to-API hop without code, and the table maker is useful for the one slide in every deck that wants real tabular data on it.
Two things we dont doTwo things we don't do
We don't publish. Imejis generates the slide images. It doesn't post them to LinkedIn, doesn't schedule them, and doesn't hold your account credentials. Buffer and Hootsuite exist for that, and LinkedIn's composer handles a manual upload fine. Worth knowing: LinkedIn's native document post takes a PDF, so if that's the format you want, assemble the exported slides into one yourself. What comes back from an export is individual images.
Group authoring is administrative. Creating a group and its slide templates isn't a self-serve endpoint today. You work from published groups instead: clone one into an instance, fill it, export it. Needs a layout no published group offers? Use the path below.
The custom deck pathThe custom-deck path
For a fully bespoke deck, skip the carousel model and treat it as what it is: a handful of images that happen to be read in order.
- Build one design per slide layout at your carousel size.
- Loop the render endpoint once per slide, passing that slide's copy.
- Write the files out numbered, and upload.
That's the same number of renders, works with a plain API key, and gives you complete control of every layout. It costs you the role and repeatable-slide handling, which for a deck you're writing by hand you probably weren't using anyway. Generating images with the API covers the render call itself.
Getting started with a linkedin carousel generator apiGetting started with a LinkedIn carousel generator API
If you're still choosing an approach, the LinkedIn carousel tools roundup compares what's out there including the manual options. When you're ready to wire it up, the API docs have tested calls, and 100 free renders a month, no card, is enough to produce a couple of real decks before you decide.