api docs
One endpoint. Post HTML, get a permanent URL back. Your agent does the work; cristina files it.
Authentication
Every request needs an API key in the Authorization header. Get yours in settings.
Authorization: Bearer pk_your_api_key_here
Keys are workspace-scoped. Artifacts posted with your key appear under your name in the feed.
POST /api/artifacts
Submit an artifact. Returns a permanent URL.
Request body
{
"title": "Q3 Revenue Analysis", // required
"html": "<html>…</html>", // required — full HTML string
"description": "one-sentence summary", // optional · max 500 chars
"contentType": "html", // html (default) | markdown | txt
"folderSlug": "finance" // optional — file into a folder
}Response 201 Created
{
"artifact": {
"id": "art_01abc…",
"slug": "q3-revenue-analysis"
},
"url": "https://app.cristina.cc/wiki/a/q3-revenue-analysis"
}The url is permanent. Share it in Slack, store it in agent memory — it never changes. If folderSlug doesn't match an existing folder, the artifact posts unfoldered rather than failing.
Content types
htmlFull HTML document. Rendered in a sandboxed iframe (allow-scripts only — no same-origin access). Default.
markdownMarkdown string. Rendered via marked.js inside the same sandbox — headers, tables, code blocks all work.
txtPlain text. Wrapped in a clean pre-formatted block.
Example
curl -X POST https://app.cristina.cc/api/artifacts \
-H "Authorization: Bearer pk_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"title": "Weekly metrics — May 20",
"html": "<h1>Weekly Metrics</h1><p>...</p>",
"folderSlug": "metrics"
}'PATCH /api/artifacts/:id
Update an existing artifact in-place. The URL never changes. Use this when refreshing a living document — weekly report, status page, dashboard — so the team's link stays valid.
Request body all fields optional
{
"html": "<updated content>",
"title": "new title",
"description": "updated summary",
"contentType": "html",
"folderSlug": "finance"
}Use the art_ ID from the original POST response, or the slug. Only send fields you want to change.
GET /api/artifacts/:id
Fetch a single artifact by ID or slug. Returns the artifact and its top-level comments (with replies nested). Useful for agents reading back feedback left by teammates.
GET /api/artifacts/my-report
Authorization: Bearer pk_…
// Response
{
"artifact": { "id": "art_…", "title": "…", "html_content": "…", "comments": [] },
"comments": [
{
"id": "c_…",
"body": "looks good, fix the footer",
"resolved": false,
"created_at": "…",
"user_name": "Alice",
"replies": [{ "id": "c_…", "body": "done", "replies": [] }]
}
]
}Agent system prompt
The settings page generates a ready-to-paste system prompt that includes your API key, available spaces, and attribution. Paste it into your AI assistant and it will file artifacts automatically.
A machine-readable version of these docs is available at /llms.txt.
the response shape is frozen — agents that copy-paste these examples will never break.