Artifact creation, storage, and sharing — compose.casa
Pass your API key via header:
X-Compose-Key: ck_xxxxxxxxxxxx
Or Bearer token:
Authorization: Bearer ck_xxxxxxxxxxxx
/api/createCreate a new artifact.
{
"content": "# Hello World",
"title": "My Document",
"content_type": "text/markdown",
"metadata": {}
}
Returns: { "id": "abc12345", "url": "https://compose.casa/v/abc12345" }
/api/{id}Retrieve an artifact by ID. Returns full content, metadata, and version info.
/api/{id}Update an artifact. Creates a new version. Body same as create.
/api/{id}/versionsList all versions of an artifact.
/api/{id}/answersAnswers to the artifact's questions. No auth: anyone with the link can read them.
/api/{id}/answersSave one answer. No auth: anyone with the link can answer, like a shared doc.
{ "key": "q1-001", "question": "Keep Customize hidden?", "answer": "Yes", "name": "optional" }
To ask questions, put them in an html or canvas artifact as <ol data-questions><li>…</li></ol>. Each question gets an answer box under it that saves as the reader types. Add data-question="key" to an item to keep its answer attached if the list is reordered later. Readers can add their own questions under the first list (an empty <ol data-questions></ol> takes questions only from people). The creator gets one email listing every answer once answers stop coming in for two minutes.
/api/{id}/commentsAdd a comment to the artifact's conversation. No auth.
{ "body": "Option B reads best", "name": "optional" }
/api/{id}/votesVote totals per card. ?voter= marks the cards that voter token voted for. POST casts or updates a vote ({ "key", "title", "voter", "note", "name" }); DELETE ?voter=&key= takes it back. No auth.
/api/{id}/conversationEvery published version, question, answer, comment and vote, oldest first.
/api/artifacts/{id}/push-to-porterQueue the live version for your own Porter inbox workspace (porter.onl). Signed in only: your key's account email, or an AuthGate token. GET /api/artifacts/{id}/porter-status shows queued / sent (with the Porter URL) / failed. Also the MCP tool push_to_porter, or "metadata": {"porter_push": true} on create. Canvases are pushed baked: one static board per frame.
Frames (figure.frame or [data-frame]) get Expand, Download and a yellow Vote. data-play="url" adds Play, which opens the live design. data-full on a frame's image holds its full-resolution version. Full guide: docs/authoring-canvases.md in the repo.
/api/listList recent artifacts. Query: ?limit=20
/api/keysList API keys for the authenticated user (admin sees all).
/api/keysCreate a new API key (admin only).
{ "tier": "free", "owner": "[email protected]" }
/api/keys/{key}Revoke an API key (admin only).
/api/og/{id}Dynamic OG image (SVG) for social sharing previews.
/api/healthHealth check. Returns { "status": "ok" }
| Path | Description |
|---|---|
/v/{id} | Rendered viewer with metadata |
/raw/{id} | Raw content (plain text) |
/embed/{id} | Embeddable iframe view |
| Tier | Artifacts/day | Max size |
|---|---|---|
| free | 50 | 256 KB |
| pro | 500 | 2 MB |
| enterprise | unlimited | 10 MB |
Compose is available as an MCP tool server:
HTTP: compose.casa/mcp
Stdio: /opt/axecloud-mcp/compose-mcp
Tools: compose, canvas, recall
AXE Technologies — compose.casa