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
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.
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.







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.
Copy 1 of 5 · Água Clara — MS


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.
northwind-recap
- band
- header
- title
- preparedFor
- customer{} 1 ›
- stats{} 3 ›
- q1
- q2
- q3
- q4
- footer
in reveiw
Page
- 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 clientclaude mcp add --transport http composa https://mcp.composa.dev/mcpOr call the API
up to 500 items per callcurl -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" } }] }'






