Skip to main content

Charts don't render themselves.

Chart-Output converts a Chart.js config into a production-ready image in one API call — PNG, SVG, WebP, or PDF. No browser. No headless Chrome. No fragile infrastructure.

✓ 500 renders free · ✓ No credit card required · ✓ Live in minutes

Your spec in. A production-ready image out. Deterministic, versioned, and pipeline-safe.

Used inAutomated reporting pipelinesEmail digestsSaaS dashboardsZapier automations

Official integrations and SDKs: Zapier, n8n, Node.js, Python, Ruby, Go, PHP

Built for

Pick your integration path

From pipeline engineers to no-code automation builders — one API, three ways in.

Engineering teams

Embed charts in PDF reports, email digests, and Slack messages — without spinning up a browser or maintaining a render farm.

SaaS products

Render charts server-side for customer-facing dashboards, automated exports, and white-labeled reports.

Automation builders

Connect via Zapier or n8n and generate chart images from any data source — no code required.

Features

Infrastructure for teams that take reliability seriously

via api

One endpoint. Deterministic output.

POST a chart spec, receive a rendered image. Same input produces the same output across every deploy — pinned dependencies, golden test coverage, no runtime drift. PNG, SVG, WebP, or PDF. One endpoint, every language.

const res = await fetch("https://api.chart-output.com/v1/render", {
  method: "POST",
  headers: { "Authorization": "Bearer co_live_..." },
  body: JSON.stringify({ type: "bar", data: chartData }),
});
const png = await res.arrayBuffer(); // → image/png
async batch

Async rendering with webhook delivery

Fire a render job, receive the result via signed webhook when it's ready. Idempotency keys prevent duplicate renders on retries. No polling loops, no client timeouts blocking your pipeline.

POST /v1/render/batch
{ "idempotency_key": "abc123" }
→ 202 Accepted · webhook on complete
ai generation

Natural language to rendered chart. No spec required.

Send a description and raw data — the AI generation endpoint constructs the chart spec and returns a rendered image. Built for pipelines where the chart type isn't known in advance: dynamic reporting, user-driven analytics, AI-assisted dashboards.

View AI generation docs
brand kits

Every chart inherits your brand automatically

Define your colors, fonts, and logo once as a brand kit. Reference it by ID on any API call — automated reports, Slack digests, embedded analytics — and every chart renders consistently across your entire pipeline.

performance

p50 under 133ms. Built for inline calls.

Fast enough to call synchronously on a server route without adding latency to your response. For high-volume or time-insensitive workloads, use async batch rendering and receive results via webhook.

output formats

PNG, SVG, WebP, and PDF

One chart config renders to four formats. Switch per request without changing anything else. Retina 2× and PDF are included on all plans.

Delivery

Charts that arrive anywhere images work

Email clients, Slack, PDFs, webhooks — if it can display an image, Chart-Output can deliver a chart to it. One API call. Rendered at send time. No frontend required.

From: reports@acmecorp.com · To: sarah@company.com

📊 Your Q3 Performance Report — Acme Corp

Hi Sarah, here's your Q3 performance summary:

Chart rendered server-side via Chart-Output · Works in Gmail, Outlook, Apple Mail, HubSpot

GmailOutlookApple MailHubSpotSlackWebhooksPDFsn8nZapier

How it works

One REST endpoint. Three steps.

Authenticate once, POST your spec, receive your image. Synchronous or async — same endpoint, same predictable output.

1

Authenticate

One API key, works in any environment — local dev, CI, production. Per-key analytics so you know exactly what is rendering and when.

2

POST your spec or a description

Synchronous for single renders, async for batch. Pass a chart config directly or send a natural language description with raw data and let the AI endpoint construct the spec.

3

Receive your image

Binary response, CDN URL, or webhook delivery — your choice. PNG, SVG, WebP, or PDF output. Signed URLs available on Pro and above.

Pricing

Pay for renders, not seats.

Start free. Scale when your pipeline does.

Free

Start building with full API access. No card required.

$0/mo

500 renders / month

Includes
  • 25 AI renders/month
  • PNG, SVG & PDF output
  • Full API access
  • No watermarks
  • OpenAPI 3.1 spec + SDK
Get API Key →

No credit card required

Starter

For teams moving from prototype to production.

$29/mo

10,000 renders / month

Includes
  • 100 AI renders/month
  • PNG, SVG & PDF output
  • Synchronous rendering
  • Full API access
  • No watermarks
  • OpenAPI 3.1 spec + SDK
Pro
Most popular

For pipelines that can't afford to wait — async rendering, webhooks, and priority support.

$99/mo

50,000 renders / month

What's included
  • 50,000 renders/month
  • 500 AI renders/month
  • Async batch rendering
  • HMAC-signed webhooks
  • Signed CDN URLs
  • Per-key analytics
  • Priority support≤24h
Business

For SaaS teams with high-volume pipelines and embedded analytics at scale.

$299/mo

200,000 renders / month

Everything in Starter, plus
  • 200,000 renders/month
  • 2,000 AI renders/month
  • Uptime SLA
  • Invoice billing
  • Priority support≤8h
Enterprise

Custom volume, dedicated support, and compliance documentation on request.

Custom

Unlimited renders

Everything in Business, plus
  • Custom render volume
  • Dedicated support
  • SOC 2 docs on request
  • SSO / SAML
  • HMAC-signed webhooks
  • Custom domain (CNAME)
  • Custom SLA
No credit card to startOpenAPI 3.1 specHMAC-signed webhooksPer-key analyticsPublic status pageSLA on Business+
Still have questions?

Email hello@chart-output.com

No. Chart-Output takes a standard Chart.js configuration object as the POST body. If you've already written a Chart.js config, it works as-is — no format conversion needed.
The synchronous endpoint returns the image inline — good for single renders where you need the image immediately (median response time ~133ms). The async endpoint accepts a job, returns a job ID, and delivers the result to your webhook URL when rendering is complete — better for high-volume batch jobs or time-insensitive workloads.
We pin all rendering dependencies and run a regression suite against golden snapshots on every deploy. The same spec produces the same image across environments. We publish a compatibility matrix so you know exactly what changed between versions.
Synchronous renders return a structured error response with a machine-readable code. Async renders retry automatically and deliver failure payloads to your webhook endpoint, so your pipeline can handle it without manual intervention.
Specs submitted for rendering are not persisted after the render completes. If you use the AI generation endpoint, the spec we construct is returned to you and not stored. See our privacy policy for full data handling details.
One successful API response containing an image. Requests that return errors don't count against your quota.
Submit a batch render job via POST. We return a job ID immediately. When rendering completes, we deliver a signed payload to your registered webhook URL with the render results and CDN URLs. Idempotency keys prevent duplicate renders if your client retries.
You send a natural language description and raw data. The endpoint constructs a chart spec, renders it, and returns the image. It's designed for pipelines where the chart type isn't known in advance — dynamic reporting, user-driven analytics, or AI-assisted dashboards.
The public status page is at status.chart-output.com. SLA terms are included in Business and Enterprise plans. Uptime history is public and updated in real time.