ImageAPIs on Zapier
A new row, a new post or a new order becomes a social card, a certificate, a GIF or a PDF, and the next step posts it, emails it or saves it. Design the template once; Zapier fills it every time.
What the app does
Seven actions, four instant triggers and one search. Each is one call to the same API your code uses, on your key and your plan.
| Step | Kind | What it does |
|---|---|---|
| Create Image | action | Fills one of your templates and returns the image |
| Create Video | action | Renders an animated template as an MP4, WebM or GIF; the Zap continues when it is ready |
| Create Image From HTML | action | Renders your own HTML and CSS |
| Take Screenshot | action | Captures a public page: the visible part, the whole page or one element |
| Create PDF | action | From a template, HTML or a public page |
| Convert Image | action | Any image to PNG, JPEG or WebP, resized |
| Upload Image | action | Keeps a file from another app at a stable URL, for image layers |
| New Render | trigger | An image, screenshot or PDF is finished, however it was made |
| New Video | trigger | A video is finished |
| Collection Finished | trigger | Every image from a CSV or a list of rows is done |
| Render Failed | trigger | A background render, a video or a collection failed |
| Find Template | search | Picks a template by name, so the data can choose the design |
Getting the app. The ImageAPIs app is waiting for Zapier's review and is not in the public directory yet. Email hello@apidirectory.com for an invite link, which adds it to your Zapier account straight away. Until then, everything below also works with Webhooks by Zapier.
A first Zap: a card for every new row
- Make the template. Open the editor, start from a starter and put
{{title}},{{author}}and{{photo}}where the row's values go. Save it to your account. - Trigger: Google Sheets, New Spreadsheet Row.
- Action: ImageAPIs, Create Image. Connect with your key from the dashboard, then pick the template. Its fields appear: Title, Author, Photo. Map the row's columns into them.
- Action: Slack, Send Channel Message, or Gmail, or Google Drive. Map URL, or Image file where the app wants an attachment.
Turn it on, and every row becomes a card about two seconds later.
Templates become forms
When you pick a template, the step reads what it asks for and shows one field for each:
- Every
{{placeholder}}, labelled from its name:{{photo_url}}becomes Photo url. Text placeholders get a big box; placeholders in an image layer say they want an image URL, colours say they want a colour. - Each layer's main property that no placeholder fills: a text layer's text, an image's URL, a QR code's data, a chart's values, a bar's or rating's value, a rectangle's colour. The help under each field shows what the template has now. Leave it empty to keep that.
Change the template later and the fields follow; open the step and they refresh. The same list is in the API as GET /v1/templates/{id}/fields, for your own forms.
Images from other apps
Image layers take a public URL. A file from Google Drive, Dropbox, a form upload or an email attachment is not one, so add an Upload Image step first: it copies the file to img.imageapis.com/u/…, where it stays until you delete it, and you map that URL into the template's image field. Uploads are free.
Convert Image turns that file, or any image URL, into PNG, JPEG or WebP at the size you need: a 1080 px square for Instagram, a small WebP for a site.
Videos, screenshots and PDFs wait for the render
A video takes ten seconds to a minute, longer than Zapier waits for one request, and a heavy page can take a while to screenshot. These steps start the render and hand the API a callback address; the API posts the finished file there, and the Zap carries on with it. Testing the step in the Zap editor shows the render as pending, with the URL it will have.
A failed render fails the step with the reason, and Zapier's usual error email follows.
Writing HTML in a Zap
Zapier uses {{ }} for its own field mappings, so in Create Image From HTML and Create PDF write placeholders with square brackets: [[title]], and fill them under Variables. The app turns them into the API's {{title}}, and their values are HTML-escaped, so a title with < or & cannot break the page. [[[name]]] goes in unescaped. Mapping a field straight into the HTML works too, without the escaping.
Instant triggers
New Render fires for every finished image, screenshot and PDF on your account: from your code, from a CSV collection, from the editor, from another Zap. Narrow it with Kind and Template. New Video and Collection Finished do the same for videos and collections, and Render Failed catches background failures so someone can look.
They are instant: turning the Zap on subscribes a webhook on your account, and turning it off removes it. The sample Zapier shows when you test is one of your own recent renders.
What it costs
The same as the API. An image, a screenshot or a conversion is one image of your plan; a PDF is one per page; a video is one per second. Triggers, Find Template, Upload Image and the template list cost nothing. The Free plan makes 150 images a month; Zapier counts its own tasks separately.
Without the app: Webhooks by Zapier
Webhooks by Zapier, a built-in app on Zapier's paid plans, talks to the API directly.
To make an image: add Webhooks by Zapier, Custom Request, method POST, URL https://api.imageapis.com/v1/images, header X-API-Key with your key, and this as the data, mapping your fields into the values:
{ "template": "tpl_…", "variables": { "title": "…", "author": "…" } }
The response has the image's url.
To trigger on renders: add Webhooks by Zapier, Catch Hook, copy its URL, and subscribe it once:
curl -X POST https://api.imageapis.com/v1/webhooks -H 'X-API-Key: YOUR_KEY' -H 'Content-Type: application/json' \
-d '{"url": "https://hooks.zapier.com/hooks/catch/…", "events": ["render.completed"]}'
The webhooks guide has every event and what each one carries.
Make, n8n and the rest
The pattern is the same everywhere: an HTTP request step for the actions, and a webhook trigger subscribed with POST /v1/webhooks for the triggers. In Make that is the HTTP, Make a request module and a Custom webhook; in n8n the HTTP Request node and a Webhook node. Keep the key in the tool's credentials, not in the URL.