Create a capsule
Changed onRequest
- Base URLhttps://symbol.chat (the document declares no server; this is the origin it was published from)
- Auth
- HTTP bearer
- or API key in cookie __Secure-next-auth.session-token
- or OAuth 2Authorization codehttps://mcp.symbol.chat/authorizeToken URLhttps://mcp.symbol.chat/token
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Request body
Package this capsule as a Claude Code agent. Omit to inherit the Type's packaging default; set explicitly to override. Encrypted capsules can't be agents.
Required alongside content_md: "" when the Type has an output_template: confirms you want an empty authored body instead of the template. false asks for the refusal (422 empty_body_on_templated_type) now; omitting it is accepted with a warning until the API changelog's effective date, then refused.
Category slugs from the curated taxonomy (max 10). Unknown slugs are rejected with a 400 naming the offending value. Fetch valid slugs from GET /api/preview/categories.
Opaque CEK metadata produced by the client crypto layer
Markdown body. Omit it to borrow the Type's output template (when the Type has one). Send body text to author the body. Send an empty string for an empty authored body; on a Type with an output template that also needs authored_blank: true (see authored_blank). Maximum length is configured per-Type via content_md_max (default 20000, ceiling 90000).
Draft attachment ids to associate on create.
Draft attachment session id; required when draftAttachmentIds is present.
Structured field values keyed by field name. Validated against the Type's field_schema at write time; undeclared keys are rejected.
Create the capsule in the incomplete state (issue #1703): the Type's required fields need not be satisfied yet, so it can be captured before its values are known. Provided values are still validated. Complete it later with incomplete: false, which enforces the required fields at that point.
Expose this capsule on the MCP prompts surface. Omit to inherit the Type's default; set explicitly to override. Toggling it does not move the capsule or change its @type/ref.
UUID v4 string
Describe the open {{token}} variables in the body so an assistant using this capsule as a prompt knows what to supply: { token: { description?, required? } }. Each key must be a token in the authored body that is not filled from a Type field; a field-bound token returns 400.
Set true to reuse an alias that belonged to a deleted capsule. Without it, such an alias is dropped like any other collision. Only frees an alias no existing capsule answers to; older mentions of it stay unresolved and only new mentions reach this capsule.
How this capsule renders on its public share page: article, prompt, or showcase. Omit (or send null on update) to INHERIT the Type's share_template live; a concrete value pins it permanently. Independent of is_prompt (which controls MCP prompt exposure).
Optional human-readable alias (@type/alias). Lowercase slug, max 60 chars, not purely numeric. Resolves to the same capsule as its numeric ref.
Optional short summary (LLM-generated or hand-written).
Free-form tags (max 20). Each is normalized to a slug and deduped server-side (e.g. Foo Bar and foo-bar collapse to one). Purely numeric or empty-after-normalization values are dropped.
Human-readable capsule title
Target Type by UUID. Omit to fall back to the user's default Type for the workspace, or name the Type by slug via type_slug instead.
Target Type by slug (e.g. receipts), resolved to the caller's Type of that slug in the destination workspace. An alternative to type_id; supplying both is accepted only when they name the same Type, else 422. Omit both to fall back to the default Type.
Workspace context. Accepts: "personal" for your personal workspace, an organization workspace name (full or partial — e.g. "Verdant Studio" or "Verdant"), or a workspace UUID. The MCP server resolves names against the user's accessible workspaces; ambiguous or unknown names return an error listing available workspaces — call list_workspaces in that case. Omit to use the default: personal for personal API keys, the bound organization for organization API keys.
Wrapped per-capsule content-encryption key (E2EE)
Response
Successful response
Cited @type/ref tokens whose capsule was deleted, keyed like resolvedCrossRefs. Never resolved to a capsule that now holds the same number or alias.
The tag labels this request sent that were not stored, trimmed, in the order sent: a label that is purely numeric or has no letter or number. Present only beside tags_dropped: true, on the caller's own create or update.
UUID v4 string
When the capsule's age clock was last renewed. Staleness and auto-archive measure from it. Equal to updated_at except after a Type field rename or retype, which advances updated_at (the edit token) and keeps this. Read-only; absent from older servers.
On an owner: its owned log, or null until the first append creates it or when you may not read the log (the entries are then empty too).
On an owned log, web shape only: the capsule it belongs to, present only when you may read that capsule.
The owning capsule's id, when this is an owned log and you may read the owner; otherwise null. Always null in write responses.
What the capsule's shared page renders, after the cover fallback: a Showcase with no cover image renders as article. Present on server single-capsule reads and write responses, absent where cover presence was not looked up.
Why share_display_rendered differs from share_display_effective: showcase_no_cover when Showcase was chosen and the capsule has no cover image, else null. Present exactly when share_display_rendered is.
Present with name_changed: the name the next publish would serve it under.
Present with name_changed: the name the skill is served under now.
Why the published skill is stale: name_changed (the next publish renames it, see skill_name_served and skill_name_next) and/or content_changed (its content is behind this capsule).
UUID v4 string
Changes
- info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status
- info
- info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status
- info