CSV to images
A spreadsheet in, a stack of images out. Each row becomes one image from the same template; a column named after a placeholder fills it, and a column named layer.property changes that layer. Try it with a starter, then send the same file to the API with a key.
curl -X POST "https://api.imageapis.com/v1/collections?template=tpl_…" -H 'X-API-Key: YOUR_KEY' -H 'Content-Type: text/csv' --data-binary @rows.csvHow the columns work
The first row of the CSV names the columns, and the name decides what a column does:
| Column | What it does | Example |
|---|---|---|
title |
Fills {{title}} wherever the template uses it |
Ship social cards without a designer |
accent.fill |
Sets the fill property of the layer named accent |
#22c55e |
photo.src |
Swaps the image in the layer named photo |
https://example.com/a.jpg |
_post |
Kept as metadata on the image, returned with its URL | 102 |
An empty cell leaves the template as it is. Numbers and true/false are read for the properties that take them, so bar.value can be 72 and stars.visible can be no. Commas, semicolons, tabs and pipes all work as the delimiter, so a CSV exported from Excel in a European locale works as is.
With a key
The same file goes to the API in one request, up to 1,000 rows. Save the template once (or copy a starter), then post the CSV with its id:
curl -X POST "https://api.imageapis.com/v1/collections?template=tpl_…" \
-H 'X-API-Key: YOUR_KEY' -H 'Content-Type: text/csv' --data-binary @rows.csv
The answer comes back at once with every image's URL already assigned. The images render in the background, and you can poll the collection or pass webhook_url to be told when they are done. Each row costs one image. If the plan does not have enough images left, the request is refused whole and nothing is charged. The CSV guide covers Python, Google Sheets and retrying failed rows.