- Docs
- API
Attria API
Everything you make in Attria, from code. Ask the Studio director for a website, a document, an app, images or a video edit; run your agents; read and write your objects. One key, JSON over HTTPS — or plug the whole API into an agent over MCP.
#What you can build
The API is the product, not a side door. It runs the same Studio directors, content apps and agents as the app, so what you get back is what you'd get by typing it in — and it lands in your workspace, where you can keep working on it.
#A first look
Ask for a document and let the director decide the details. The call waits — usually 20 to 60 seconds — and returns the finished turn, with a link that opens it in the Studio.
curl -X POST "https://app.attria.io/api/v1/studio/document/turns" \
-H "Authorization: Bearer $ATTRIA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"message": "A 10-slide seed pitch deck for Northwind, a B2B freight marketplace. Traction: $412k ARR, +38% QoQ.",
"auto": true
}'const res = await fetch("https://app.attria.io/api/v1/studio/document/turns", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ATTRIA_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
message: "A 10-slide seed pitch deck for Northwind, a B2B freight marketplace. Traction: $412k ARR, +38% QoQ.",
auto: true,
}),
});
const turn = await res.json();import os, uuid, requests
res = requests.post(
"https://app.attria.io/api/v1/studio/document/turns",
headers={
"Authorization": f"Bearer {os.environ['ATTRIA_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"message": "A 10-slide seed pitch deck for Northwind, a B2B freight marketplace. Traction: $412k ARR, +38% QoQ.",
"auto": True,
},
timeout=900, # a turn that waits can take minutes
)
turn = res.json(){
"id": "1e0f…",
"object": "studio.turn",
"status": "completed",
"studio": "document",
"artifact": {
"id": "a3c2…",
"type": "document",
"name": "Northwind — Seed pitch",
"url": "https://app.attria.io/studio/documents/a3c2…",
"public_url": null
},
"conversation_id": "c81b…",
"message": "Here's a 10-slide seed deck for Northwind. I led with traction — it's your strongest proof.",
"created_at": "2026-09-27T18:02:11Z",
"completed_at": "2026-09-27T18:02:52Z"
}#The basics
Every endpoint follows the same few rules, so once you've made one call you know how to make the rest.
| Base URL | https://app.attria.io/api |
|---|---|
| Auth | Authorization: Bearer attria_sk_… — Authentication |
| Format | JSON in, JSON out. Ids are UUIDs; times are ISO 8601 in UTC. |
| Long work | Wait, stream: true or background: true — Jobs & streaming |
| Errors | { error: { type, message, details? }, request_id } — Errors & limits |
| Retries | Send an Idempotency-Key on writes — Idempotency |
| Lists | { object: "list", data, has_more, next_cursor }; pass cursor for the next page. |
#For agents
Every endpoint is also a tool on the Attria MCP server at https://app.attria.io/api/v1/mcp, with the same key. Add it to Claude Code, Cursor or any MCP client and your agent can build in Attria directly.
Agents that read docs instead can take llms.txt, the full agent guide, or the OpenAPI spec.
The MCP & agents guide has one-line setup for Claude Code and a ready mcp.json for Cursor.