Make Integration — Visual Workflow Image Generation
Generate images from HTML using the Make.com HTTP module. Build visual automation workflows with RendShot.
Make.com (formerly Integromat) is a visual automation platform where you connect apps and services into branching, multi-step workflows called scenarios. Because RendShot is a standard REST API, you can call it from any scenario using Make's built-in HTTP "Make a request" module — no custom app required.
Prerequisites
- A RendShot API key — get one at rendshot.ai/dashboard/keys. Keys start with
rs_live_. - A Make.com account (free tier works for testing).
Step 1: Add the HTTP Module
Inside your scenario, click the + button to add a module. Search for HTTP, then choose Make a request.
Configure the module with these settings:
| Field | Value |
|---|---|
| URL | https://api.rendshot.ai/v1/image |
| Method | POST |
| Body type | Raw |
| Content type | JSON (application/json) |
| Parse response | Yes |
Under Headers, add two entries:
| Key | Value |
|---|---|
Authorization | Bearer rs_live_your_key_here |
Content-Type | application/json |
Step 2: Configure the Request Body
Set Request content to a JSON object. The minimum required field is html; width and height default to 1200×630 if omitted.
{
"html": "<div style=\"background:#1a1816;color:#fff;padding:60px;font-family:sans-serif\"><h1>Hello Make</h1></div>",
"width": 1200,
"height": 630,
"format": "png"
}To pull values from earlier modules, use Make's variable syntax. Assume module 1 is an RSS feed trigger that exposes title and link:
{
"html": "<div style=\"background:#1a1816;color:#fff;padding:60px;font-family:sans-serif\"><h1>{{1.title}}</h1><p style=\"opacity:.6\">{{1.link}}</p></div>",
"width": 1200,
"height": 630,
"format": "png"
}Replace {{1.title}} with any variable from your upstream modules. Make injects these at runtime before sending the request.
Supported body fields:
| Field | Type | Default | Description |
|---|---|---|---|
html | string | — | HTML to render (XOR with template_id) |
template_id | string | — | Use a saved template instead of raw HTML |
variables | object | — | Template variable substitutions |
width | number | 1200 | Viewport width in pixels |
height | number | 630 | Viewport height in pixels |
format | string | png | png or jpeg |
Step 3: Parse the Response
Enable Parse response in the HTTP module (checked in Step 1). Make will automatically parse the JSON body and expose its fields as variables.
The RendShot response looks like:
{
"id": "img_01abc...",
"url": "https://assets.rendshot.ai/images/img_01abc....png",
"width": 1200,
"height": 630,
"format": "png"
}In downstream modules, reference the image URL as {{N.url}} — where N is the step number of your HTTP module.
Step 4: Use the Image
Wire the output {{N.url}} to any downstream module. Common destinations:
- Google Drive — "Upload a file" with the URL fetched via a second HTTP GET
- Slack — "Create a message" with the URL embedded as an attachment
- Gmail / Outlook — Attach or inline the image in an automated email
- Twitter / X — "Create a tweet" with media upload
- Airtable / Notion — Store the URL in a record field
For binary uploads (e.g. Google Drive), add an HTTP → Get a file module between RendShot and the upload module to download the image bytes first.
URL Screenshots
To capture a screenshot of an existing webpage instead of rendering HTML, change the URL and body:
| Field | Value |
|---|---|
| URL | https://api.rendshot.ai/v1/screenshot |
{
"url": "{{1.link}}",
"width": 1280,
"height": 800,
"full_page": false
}Everything else — headers, parse response, downstream modules — stays the same. The response format is identical.
Example Scenarios
Scenario 1: RSS to Social Card
Automate social card creation every time a new post is published:
- RSS — Watch feed items — monitors your blog feed
- HTTP — Make a request (RendShot) — renders a branded card using
{{1.title}}and{{1.description}} - Twitter/X — Create a tweet — posts the card image with a link to the article
This runs on a schedule (e.g. every 15 minutes) and posts a card for each new item automatically.
Scenario 2: Webhook to Invoice Image by Email
Turn webhook data into a rendered invoice image and deliver it:
- Webhooks — Custom webhook — receives a POST from your app with order data
- HTTP — Make a request (RendShot) — renders an invoice HTML template with
{{1.customer_name}},{{1.total}},{{1.items}} - Gmail — Send an email — attaches or inlines the invoice image, sent to
{{1.customer_email}}
Because Make supports loops, you can iterate over {{1.items}} to build the line-item rows in the HTML before sending.
Make vs Zapier
Both platforms can call RendShot via HTTP, but they have different strengths:
| Make | Zapier | |
|---|---|---|
| Flow model | Visual graph — supports branches, loops, filters, error routes | Linear steps only |
| Batch processing | Built-in iterators and aggregators | Limited |
| Error handling | Per-module error routes, rollback, resume | Basic retry only |
| Complexity | Better for multi-step or conditional workflows | Better for simple A → B automations |
| Pricing | Operations-based | Task-based |
For straightforward "event fires → generate image → post somewhere" flows, either platform works. Use Make when your scenario branches (e.g. different templates per content type) or processes lists of items.
See the Zapier integration guide if you prefer Zapier.
Troubleshooting
Request fails with a 400 error
The most common cause is sending the body as key-value pairs instead of raw JSON. Make sure Body type is set to Raw and Content type is JSON (application/json). The request content field must be a valid JSON string.
401 Unauthorized
Check that the Authorization header value is exactly Bearer rs_live_your_key_here — with a space between Bearer and your key, and no extra quotes. Verify the key is active in your Dashboard.
Content-Type errors
The Content-Type: application/json header is required. Without it, the API returns a 400 parsing error even if the body is valid JSON.
Variables not substituted
Make variable syntax ({{N.field}}) is only evaluated inside the Request content field, not inside the URL or header values. If your HTML template is complex, consider building the HTML string in a Tools — Set variable module first, then reference it in the body.
Image URL expires
RendShot image URLs are permanent by default (no expiry unless you configure one). If you need to store the image long-term, download it immediately after generation and upload it to your own storage.
Zapier Integration — Automate Image Generation
Generate images from HTML and capture URL screenshots using Zapier webhooks. Connect RendShot to 5,000+ apps.
Windmill Integration — Image Generation in Scripts & Flows
Generate images from HTML in Windmill scripts using the RendShot Python SDK or TypeScript fetch. No extra setup needed.