Proof 1 · September 2026

Where AI finally meets paper.

Create and deliver professional documents at scale.

Build the template with your AI agent. Refine it on the canvas. Then our API delivers a personal copy to every customer: 500 per call, about 6 milliseconds each. That’s less time than it took you to read this em dash —

Claude, Cursor & any MCP client · REST API · PDF, PNG, SVG

cComposanorthwind-recap
Download
northwind-recap
Northwind EnergyAnnual statement
Ana Souza
Your 2025, in review
4,210
kWh used
−12%
vs 2024
$318
saved
Q11,263
Q2926
Q3842
Q41,179
northwind.energypage 1 of 1
0 delivered
claude · composa mcpsession 0413
› A 2025 recap for every customer.

The difference · built to scale

Faster than you can say “headless Chrome.”

Composa typesets straight to PDF, PNG and SVG. There’s no browser to boot and no web page to paint first. That’s the whole trick, and we’re a little smug about it.

6.2 ms
per document in a 500-item API call. 11.8 ms at 100.
3.09 s
for 500 personal documents in one call, compiled on the server.
0
browsers booted, warmed up or apologised to.
1
render per document, whether it runs to one page or forty.
500 personal documents, start to finish
Composa
0.05 min · 3.09 s
Headless browser
5.2 min · 310 s

Composa: one 500-item API call, server compile, measured September 2026. Headless browser: 500 documents at 0.62 s each, rendered one after another.

One page. Three pairs of hands.

A person, an agent and a program can all hold the same document. Each reaches it through the surface it’s good at, and nobody has to learn the other two.

For your agent

MCP server

Claude, Cursor or any MCP client composes with design operations: a title, a table, a band of cards. The engine sets them. Your agent never has to guess where 142px is.

apply_ops([
  { op: "add_text", role: "title" },
  { op: "add_table", variable: "orders" }
])

For your team

Canvas

Open what the agent made and move, retype or restyle anything by hand, the way you would in a design tool. No code, no JSON. Just a very patient page.

For your systems

REST API

One template, up to 500 rows per call. Variables, CSV tables and a different image in every render. PDF, PNG or SVG back, before your webhook finishes yawning.

It’s not just documents · posts, stories, thumbnails, banners

Same post. Every name. No interns harmed.

Instagram posts, stories, YouTube thumbnails, banners: your agent drafts the campaign once, and Composa sets a copy for every row in the list. Constantinopla gets the same headline Jo does, and both fit. Every image below is a real render.

Marina, your cardamom bun is on us.
post · 1:135 chars
Constantinopla, your sourdough loaf is on us.
post · 1:145 chars
Jo, your flat white is on us.
post · 1:129 chars
Kenji, your almond croissant is on us.
post · 1:138 chars
Ingrid, 20% off anything with butter in it. So, everything.
story · 9:16same data
Kenji laminates dough at 4 a.m.
YouTube thumbnail · 16:9one per episode
Constantinopla judges your sourdough starter
YouTube thumbnail · 16:9one per episode
Every format from one engine →A4US LetterSlide 16:9Post 1:1Story 9:16YouTube 16:9Banner

Personalised reports · statements, report cards

The layout makes room for the data.

A school named in 15 characters and one named in 50 get the same cover, and both look set by hand. No ellipsis, no 7pt emergency type. These are real copies of the Boletim da Escola, printed by Composa from public INEP data. Pick a school.

Escola Estadual Indígena Fran… stet. We don’t truncate.

Copy 1 of 5 · Água Clara — MS

Cover: boletim of EE Chico Mendes, Água Clara — MS
Cover · the name wraps to the space it has
The school's results: boletim of EE Chico Mendes, Água Clara — MS
The school's results · the title keeps one line

The editor · it’s not just for AI

A complete canvas, for when the AI gets creative.

Agents are fast, tireless and occasionally certain that “annual” has one n. The canvas is a full editor, so whoever spots the mistake fixes it by hand, and the fix goes out in every copy. Artificial intelligence, meet actual proofreading.

cComposanorthwind-recap
Preview Automate Download
Layers{ } Variables
Pages (1)+ New page

northwind-recap

  • band
  • header
  • title
  • preparedFor
  • customer{} 1 ›
  • stats{} 3 ›
  • q1
  • q2
  • q3
  • q4
  • footer
northwind-recap
Northwind EnergyAnual statement
Your 2025,
in reveiw
Prepared for
Ana Souza
4,210
kWh used
−12%
vs 2024
$318
saved
Q11,263
Q2926
Q3842
Q41,179
northwind.energypage 1 of 1
92%
All pages1+ New
✓ northwind-recap.pdf downloaded
InspectorPage

Page

FormatA4
Size595 × 842 pt
Margin56 pt
Background#FFFFFF
Fig. 2 — The agent’s draft, corrected by a person. The same template prints all 500 copies, so every fix lands in every one.
Move anything
Drag, resize, align and distribute. The agent's layout is a starting point, not a verdict.
Edit text in place
Click and type. Variables sit inline, so {customer_name} stays a slot while you fix the sentence around it.
Pages and formats
Multiple pages, headers that repeat, and every size from A4 to a story. Or a custom one.
Undo the agent
A full history, for your last change or the agent's last five. Nobody has to know.

Developers

One command to hand your agent a printing press.

Connect your agent

Claude Code shown · any MCP client
claude mcp add --transport http composa https://mcp.composa.dev/mcp

Or call the API

up to 500 items per call
curl -X POST https://composa.dev/api/v1/run \
  -H "Authorization: Bearer $COMPOSA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "template_id": "85416813-…",
        "format": "pdf",
        "items": [{ "data": { "name": "Ana Souza" } }] }'

Stop the presses.
Actually, don’t.