Quick start: make your first file
Create a template, see which parts can change, make a test render in the app, then make the same image with one API call. About ten minutes.
In this guide you create a template, change its headline, and make an image. First you do it in the app, then with one API call. You need a JamFrame account. If you don’t have one yet, sign up for free.
1. Create a template
- In the sidebar, click Templates.
- Click New Design.
- Pick a size, for example an Instagram square post.
- Leave Starter layout selected. It gives you a photo, a headline and a subline that are ready to change.
- Click Create design. The editor opens.
2. See what can change
- On the canvas, click the headline.
- In the properties panel, find API parameter. Let the render API change this layer is already
turned on, and the Key is
headline. - Click Save in the top bar.
The starter layout has three of these dynamic fields: photo, headline and subline. A key is the name
you use when you send a new value. To make your own fields, see
Choose what changes.
3. Make a test render
-
In the top bar, click Integrations, API & Forms.
-
Stay on the REST API Integration tab. API parameters lists the keys of the template.
-
In the Test render panel, find Modifications (JSON). Change the headline, for example:
{ "headline": "Summer sale: 30% off" } -
Leave Format on PNG and click Test render.
The image shows up in a few seconds. This test render used one credit. You can see it on the Renders page.
4. Create an API key
- In the sidebar, under Developers, click API Keys.
- Click New API key, type a name such as “My first key”, and click Create key.
- Click Copy, keep the key somewhere safe, then click I’ve saved this — close.
5. Make the image with the API
Go back to the template and open Integrations, API & Forms again. Example request has a ready-made request with your template’s id. It looks like this:
curl https://api.jamframe.com/v1/render \
-H "Authorization: Bearer $JAMFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "YOUR_TEMPLATE_ID",
"modifications": {
"headline": "Summer sale: 30% off",
"subline": "This weekend only"
},
"response": { "format": "png" }
}'const res = await fetch("https://api.jamframe.com/v1/render", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.JAMFRAME_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
templateId: "YOUR_TEMPLATE_ID",
modifications: {
headline: "Summer sale: 30% off",
subline: "This weekend only",
},
response: { format: "png" },
}),
});
const { data } = await res.json();
console.log(data.content); // the link to your imageimport os
import requests
res = requests.post(
"https://api.jamframe.com/v1/render",
headers={"Authorization": f"Bearer {os.environ['JAMFRAME_API_KEY']}"},
json={
"templateId": "YOUR_TEMPLATE_ID",
"modifications": {
"headline": "Summer sale: 30% off",
"subline": "This weekend only",
},
"response": {"format": "png"},
},
)
print(res.json()["data"]["content"]) # the link to your imageThe answer has a link to your image in data.content:
{
"data": {
"content": "https://cdn.jamframe.com/renders/…/5f0c6b0e.png?Expires=…",
"expiresAt": "2026-11-09T12:05:00.000Z",
"type": "url",
"format": "png",
"pages": [1],
"credits": 1,
"renderId": "clx8n0q1r0004abcd1234efgh",
"responseTime": 1840
}
}
The link works for 5 minutes, so download the file or use it soon. To keep links longer, see Render images and PDFs.
What next
- Make your own dynamic fields: Choose what changes.
- Make images without code: Dynamic URLs and Forms.
- Make many files at once from a sheet: Workflows.
- Learn every option of the render call: Render images and PDFs.
Last updated
Still stuck?
Email [email protected] and a real person will reply. Tell us the template you were using and what you expected to happen.