Skip to content

Render API docs

The base URL is https://render.cuelark.com. Send JSON and you get the file back directly in the response body. No account is needed today.

EndpointWhat it doesCost
GET or POST
/v1/chart
Chart JSON to PNG or SVG. GET takes ?c=<url-encoded JSON> or flat ?type=&labels=&data=. POST takes {chart, format, scale}. Spec: JSON Schema at /schema/chart.json (palette, subtitle, axis titles, stacked, showValues, prefix/suffix).Free (rate limited)
GET or POST
/v1/og
Social card. template (classic, blog, launch, changelog, quote, stat, event, repo, podcast, hiring, minimal) plus its fields: title (required, or stat), description, eyebrow, site, author, role, date, cta, stat, statLabel, version, episode, items and tags (separate with |). Brand: font (sans, serif, mono), theme (light, dark, blue, sunset, mint, grape), accent, align, size (og, x, linkedin, square, portrait, youtube), bg (one color or "from,to" gradient), ink, logo and bgImage (base64 data URLs, POST only), overlay, format, scale.Free (rate limited)
POST
/v1/pdf
{markdown | html | url, format, landscape, margin, header, footer, title, background, cssPageSize, javascript, filename} to application/pdf. header/footer are plain text with {page} {pages} {title} {date}; split "left | center | right".Metered browser render
GET
/v1/data
?url=<public JSON or CSV URL> returns the text (max 2 MB, 8 s) so the chart maker can load data from servers without CORS. Private and internal addresses are refused.Free (rate limited)
POST
/v1/screenshot
{url | html, width, height, fullPage, format, quality, retina, javascript} to image/png, jpeg or webp.Metered browser render

Limits

Errors

Errors are JSON: {"error":"bad_request","message":"…"}, with status 400 (bad input), 401 (bad key), 413 (too large), 422 (page failed to render), 429 (limit reached; see retry-after) or 502/503 (browser busy).

Security

JavaScript example

js
// Chart PNG from data
const png = await fetch("https://render.cuelark.com/v1/chart", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ chart: { type: "bar", labels: ["A", "B"], datasets: [{ data: [3, 5] }] }, scale: 2 }),
}).then((r) => r.arrayBuffer());

// Screenshot
const shot = await fetch("https://render.cuelark.com/v1/screenshot", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({ url: "https://example.com", width: 1280, height: 800 }),
});
python
import requests
r = requests.post("https://render.cuelark.com/v1/pdf", json={"url": "https://example.com", "format": "a4"})
open("page.pdf", "wb").write(r.content)

Using an AI assistant? See the MCP server. Copy-paste recipes for n8n, Cursor and Next.js are on the recipes page.