Make.com Integration
Make (formerly Integromat) is a visual workflow builder. You can call TemplateFox via Make’s HTTP module today, and a native TemplateFox app is rolling out so the modules below appear directly in the module picker. Make’s strengths are iteration (one trigger → many PDFs), routers for conditional logic, and powerful data transformation.
1. Get your API key
Section titled “1. Get your API key”Go to your Dashboard and copy your API key.
2. Create a scenario
Section titled “2. Create a scenario”On make.com, create a new scenario and pick your trigger (Google Sheets, Typeform, Shopify, HubSpot, Airtable, schedule, webhook, etc.).
3. Add the HTTP module
Section titled “3. Add the HTTP module”Add HTTP > Make a request after your trigger and configure it:
| Field | Value |
|---|---|
| URL | https://api.templatefox.com/v1/pdf/create |
| Method | POST |
| Headers | x-api-key → your API key, Content-Type → application/json |
| Body type | Raw |
| Content type | JSON (application/json) |
| Request content | See below |
4. Request body
Section titled “4. Request body”{ "template_id": "YOUR_TEMPLATE_ID", "data": { "customer_name": "{{1.name}}", "invoice_number": "{{1.invoice}}", "total": "{{1.amount}}" }}Use Make’s mapping panel ({{1.field}}) to pull values from the trigger module. You can find your template_id in the template editor URL or from GET /v1/templates.
5. Parse the response
Section titled “5. Parse the response”Enable Parse response in the HTTP module so Make exposes the returned JSON fields to downstream modules:
url— signed URL to download the PDFfilename— the PDF filenamecredits_remaining— credits left in your planexpires_in— seconds until the URL expires
Generating multiple PDFs (iteration)
Section titled “Generating multiple PDFs (iteration)”Make’s killer feature is the Iterator. Use it when your trigger returns an array (e.g. rows from a sheet, items from a webhook payload) and you want one PDF per element:
- Add Flow Control > Iterator after your trigger
- Point it at the array field (e.g.
{{1.orders}}) - Put the HTTP module after the iterator — it runs once per element
- Each iteration passes its current item (
{{2.item}}) to the request body
This scales naturally: 10 items → 10 PDFs. 500 items → 500 PDFs (subject to your plan’s credits and rate limits).
Delivering the PDF
Section titled “Delivering the PDF”After the HTTP module runs, chain any Make module to the url field:
Email — Add Gmail / Outlook / SMTP and attach the PDF URL or the file itself.
Storage — Save to Google Drive, Dropbox, OneDrive, or back into Airtable as an attachment.
Chat — Send the download link via Slack, Discord, or Microsoft Teams.
Back to source — Write the URL into the original row (Google Sheets, Airtable, Notion) so users can click through.
Advanced patterns
Section titled “Advanced patterns”Routers — Use a router to pick a different template based on data (invoice vs. credit note, domestic vs. international, language). Each route sends to a different HTTP module with its own template_id.
Error handlers — Attach an error handler to the HTTP module. If TemplateFox returns 4xx/5xx, roll back to a safe path (e.g. notify the user, retry with exponential backoff, skip the row).
Aggregator — After iteration, aggregate the generated URLs into a single email or report listing every PDF link.
Async for heavy jobs — For large documents or batches, call /v1/pdf/create-async instead. Make can receive the completion webhook via a Webhooks > Custom webhook trigger in a second scenario.
Available modules
Section titled “Available modules”When the native TemplateFox app is enabled in your Make workspace you’ll see these modules in the picker. Each one wraps a public REST endpoint, so the HTTP recipe above stays a valid fallback.
Generation
Section titled “Generation”| Module | Endpoint | Description |
|---|---|---|
| Generate PDF | POST /v1/pdf/create | Sync generation. Supports the PDF/A archival variant. |
| Generate PDF (Async) | POST /v1/pdf/create-async | Queue a job, receive a job_id immediately. Best for batches and long renders. |
PDF tools (no template needed)
Section titled “PDF tools (no template needed)”| Module | Endpoint | Description |
|---|---|---|
| Merge PDFs | POST /v1/pdf-tools/merge | Concatenate 2+ PDFs into one document. |
| Extract PDF Pages | POST /v1/pdf-tools/extract-pages | Extract or reorder pages using a 1-3, 5, 7-9 syntax. |
| Rotate PDF | POST /v1/pdf-tools/rotate | Rotate every page by a single angle, or apply a per-page map. |
Read-only
Section titled “Read-only”| Module | Endpoint | Description |
|---|---|---|
| Get PDF Job | GET /v1/pdf/jobs/{job_id} | Look up an async job by ID. |
| List PDF Jobs | GET /v1/pdf/jobs | List recent jobs, optionally filtered by status. |
| Get Account | GET /v1/account | Returns remaining credits and account email. |
| Make an API Call | any | Universal module for any other endpoint, with auth pre-attached. |
Troubleshooting
Section titled “Troubleshooting”401 Unauthorized — Check the x-api-key header spelling and that the key is still active in your Dashboard.
400 Bad Request — The data payload doesn’t match the template’s expected variables. Open the template and verify every variable name matches a key in your JSON.
Iterator processing all items at once — Make sure the HTTP module is placed after the Iterator, not in parallel with it. The connection line should go Trigger → Iterator → HTTP.
Nested JSON from trigger breaks mapping — Wrap arrays in {{ifempty(1.items; emptyarray)}} or use JSON > Parse JSON to coerce string payloads into objects before mapping.
Next steps
Section titled “Next steps”- Get Started in 5 Minutes — Create your first template
- Data Binding — Pass dynamic data and arrays to templates
- API Reference — Full endpoint documentation
- Upload to S3 — Store PDFs in your own bucket instead of using expiring URLs