Image Generation APIImages from your data, not your designers' time.
POST /api/v1/render with a template ID and the layers that change. PNG, JPG, WebP, or AVIF comes back as a signed URL. You do not run Chromium.
25 free API images. No card required.
Try the image API
01 Send data
- REST API
- Node, Python, PHP
- n8n & WordPress
- Claude, Cursor (MCP)
02 Render the template
03 Get a file
- PNG, JPG, WebP, AVIFPick the format and scale up to 5×
- PDFCertificates, tickets, badges, reports
- Signed URLDrop it in an <img> tag or og:image
- Your bucketBring your own S3 or R2 on Scale
Templates render on our own worker, not a headless browser you maintain. Identical signed URLs stream straight from cache.
How it works.
- 01
Design a template
Lay out text, photos, badges, and QR codes in J2I Studio and name the layers you want to override.
- 02
Send named layers
Call POST /api/v1/render from REST, @j2i/sdk, n8n, WordPress, or an MCP client.
- 03
Deliver anywhere
Wait synchronously with ?wait=, stream SSE, take an HMAC webhook, or mint a signed <img> URL.
Capabilities
Built for production payloads.
Wait, stream, or walk away
Default POST returns HTTP 202 queued. ?wait= blocks up to 120 seconds. SSE, long-poll, and HMAC webhooks cover async pipelines.
Unknown layers fail loudly
Any layer name missing from the template returns 422 instead of silently shipping placeholder copy. dryRun checks payloads for free.
Signed URLs for tags
POST /api/v1/img/sign mints an HMAC URL. The first unique GET renders and bills once; repeats stream the stored file with no API key in HTML.
Four still formats + 5× scale
PNG, JPG, WebP, and AVIF with alpha transparency on PNG, WebP, and AVIF. Scale from 2× on Free up to 5× on Scale.
Batches of 50 jobs
POST /api/v1/renders/batch queues up to 50 renders in one call, including automatic variant fan-out.
Live template schema
GET /api/v1/templates/{id}/schema lists every named layer and its accepted attributes so forms and agents never guess.
A few lines in any stack.
curl -X POST "https://app.jsontoimg.com/api/v1/render?wait=30" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template": "YOUR_TEMPLATE_ID",
"format": "png",
"scale": 2,
"layers": {
"headline": { "text": "Welcome, Alex" },
"photo": { "image_url": "https://acme.dev/alex.jpg" }
}
}'import { createClient } from "@j2i/sdk";
const client = createClient({
apiKey: process.env.JSONTOIMG_API_KEY!,
});
const job = await client.renderAndWait({
template: "YOUR_TEMPLATE_ID",
format: "png",
layers: { headline: { text: "Welcome, Alex" } },
});
if (job.status === "done") console.log(job.assetUrl);import os, requests
response = requests.post(
"https://app.jsontoimg.com/api/v1/render",
params={"wait": 60},
headers={"Authorization": f"Bearer {os.environ['JSONTOIMG_API_KEY']}"},
json={
"template": "YOUR_TEMPLATE_ID",
"format": "png",
"layers": {"headline": {"text": "Welcome, Alex"}},
},
timeout=90,
)
print(response.json())<?php
$ch = curl_init('https://app.jsontoimg.com/api/v1/render?wait=60');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('JSONTOIMG_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'template' => 'YOUR_TEMPLATE_ID',
'format' => 'png',
'layers' => ['headline' => ['text' => 'Welcome, Alex']],
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);bun add -g @j2i/cli
export JSONTOIMG_API_KEY="sk_live_..."
j2i render \
--template YOUR_TEMPLATE_ID \
--format png \
--wait 60 \
--out welcome-alex.pngWelcome, Alex
Your workspace is ready. One template, every row rendered on demand.
acme.dev/alex.jpg
photo · cover fit
No-code & CMS automation
Render an image or a PDF for every spreadsheet row, WordPress post, or webhook event.
- n8nn8nOfficial community node
- WPWordPressBlock, shortcode & OG
- GSGoogle SheetsRender selected rows
- ATAirtableExtension for records
- KLKlaviyoSigned URL per profile
- S3S3 & R2BYOS bucket on Scale
Connect over HTTP & signed webhooks
- Zapier (HTTP)
- Make (HTTP)
- Webhooks
- Shopify
- GitHub Actions
- REST
- CLI
AI agents, over MCP
Point your assistant at /mcp. Eleven tools around templates, schemas, and renders.
$ claude mcp add --transport http jsontoimg https://app.jsontoimg.com/mcp
> Render an Open Graph card for our v1.4 release post
✓ list_templates · 8 templates
✓ get_template_schema · headline, author, version_tag
✓ create_render · release-v1-4.png
- Cursor
- Claude Code
- Claude Desktop
- VS Code
- Windsurf
One template, every surface.
- PDF Generation APISet format to pdf on POST /api/v1/render. Multi-page templates become multi-page PDFs billed one credit per page — the exact same rate as a PNG.
- J2I Studio EditorJ2I Studio is the visual canvas. Place text, images, shapes, charts, and frames across multiple pages, name the layers that change, and pin production to an approved snapshot.
- Data LayersPass structured JSON arrays straight to your template. Eight chart types, four QR and barcode formats, striped tables, ratings, progress bars, and auto-growing repeater groups.
Your first 25 images are on us.
Design a template, grab an API key, and render your first PNG or PDF in minutes. No card required.