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:

SlideRoleFlags
1Coverrequired
2Bodyrepeatable
3CTArequired

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.zip

The 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:

orderroleheadlinebody
1cover5 pricing mistakes
2bodyCharging per seatTeams shrink; usage doesn't
3bodyNo free tierNobody tries before buying
4ctaFollow 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.

  1. Build one design per slide layout at your carousel size.
  2. Loop the render endpoint once per slide, passing that slide's copy.
  3. 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.

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.

Frequently asked questions

A carousel group is an ordered set of slide templates, each with a role like cover, body or CTA. You create an instance from a group, fill the values for every slide, then call export. The response is a ZIP containing one image per slide.

A ZIP archive with one file per slide, named slide-01, slide-02 and so on. PNG is the default, and JPEG, WebP or PDF apply to the whole carousel rather than per slide. You unzip it and upload the slides yourself.

One render per slide. An 8-slide deck costs 8 renders, and re-exporting after a typo costs another 8. Proof the copy before you export rather than after, especially on 100 free renders a month, no card.

No. Imejis generates the slide images and stops there. Publishing belongs to a scheduling tool like Buffer or Hootsuite, or to LinkedIn's own composer. We're the image step in that chain, not the posting step.

Yes, and for a fully custom deck it's often simpler. Make one design per slide size, then loop the render endpoint once per slide with that slide's copy. You get the same images without the group and instance model.

We use cookies to run the site and, with your consent, for analytics and marketing. See our Cookie Policy. You can change this any time from “Cookie settings” in the footer.