capsule

Create a capsule

Changed on
post/api/preview/capsules

Request

  • Base URL
    https://symbol.chat (the document declares no server; this is the origin it was published from)
  • URL
    https://symbol.chat/api/preview/capsules
  • Auth
    • HTTP bearer
    • or API key in cookie __Secure-next-auth.session-token
    • or OAuth 2
      Authorization code: https://mcp.symbol.chat/authorize
      Token URL: https://mcp.symbol.chat/token

Request body

agentboolean

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.

authored_blankboolean

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.

categoriesstring[]

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.

cek_paramsobject

Opaque CEK metadata produced by the client crypto layer

content_mdstring

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

draftAttachmentIdsstring[]

Draft attachment ids to associate on create.

draftIdstring

Draft attachment session id; required when draftAttachmentIds is present.

field_valuesobject

Structured field values keyed by field name. Validated against the Type's field_schema at write time; undeclared keys are rejected.

incompleteboolean

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.

is_encryptedboolean
is_promptboolean

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.

project_idstring nullable

UUID v4 string

prompt_argumentsobject

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.

reclaim_aliasboolean

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.

share_display'article' | 'prompt' | 'showcase' nullable

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

slugstring nullable

Optional human-readable alias (@type/alias). Lowercase slug, max 60 chars, not purely numeric. Resolves to the same capsule as its numeric ref.

summarystring

Optional short summary (LLM-generated or hand-written).

tagsstring[]

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.

titlestring required

Human-readable capsule title

type_idstring

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.

type_slugstring

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_idstring nullable

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_cekstring

Wrapped per-capsule content-encryption key (E2EE)

Response

Successful response

agent_metaobject nullable
alias_droppedboolean
alias_reclaimableboolean
alias_reclaimedboolean
alsoAvailableAsSkillstring
archive_event_idstring nullable
archive_reasonstring nullable
archived_atstring nullable
attachmentsobject[]
capsule_keysobject[]
code_excerptstring nullable
content_excerptstring nullable
content_mdstring nullable
content_renderedstring nullable
coverobject nullable
created_atstring
created_bystring
deadCrossRefsobject

Cited @type/ref tokens whose capsule was deleted, keyed like resolvedCrossRefs. Never resolved to a capsule that now holds the same number or alias.

deleted_atstring nullable
draftAttachmentsMapobject
evicted_version_numsinteger[]
field_valuesobject
flag_reasonstring nullable
flagged_atstring nullable
idstring required

UUID v4 string

inbound_ref_countinteger
incompleteboolean
is_agentboolean
is_encryptedboolean
is_promptboolean
is_sharedboolean
is_staleboolean
languagestring nullable
last_entry_atstring nullable
last_fetched_atstring nullable
log_entriesobject[]
log_entries_next_cursorstring nullable
log_entries_totalinteger
log_entry_orderstring
log_field_schemaobject[]
log_paragraph_rendering'plain' | 'markdown'
log_period_keystring nullable
log_period_nextstring nullable
log_period_prevstring nullable
marked_completeboolean
missing_required_fieldsstring[]
owned_logobject nullable

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

owner_capsuleobject nullable

On an owned log, web shape only: the capsule it belongs to, present only when you may read that capsule.

owner_capsule_idstring nullable

The owning capsule's id, when this is an owned log and you may read the owner; otherwise null. Always null in write responses.

owner_log_bindingboolean
owner_log_typeobject nullable
preview_fieldsobject[]
project_colorstring nullable
project_idstring nullable
project_namestring nullable
project_slugstring nullable
prompt_metaobject nullable
prompt_namestring nullable
ref_idinteger
resolvedCrossRefsobject
rolloverstring nullable
share_display'article' | 'prompt' | 'showcase' nullable
share_display_effective'article' | 'prompt' | 'showcase' nullable
share_display_rendered'article' | 'prompt' | 'showcase'

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.

share_display_unhonored'showcase_no_cover' nullable

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.

skill_name_nextstring

Present with name_changed: the name the next publish would serve it under.

skill_name_servedstring

Present with name_changed: the name the skill is served under now.

skill_republish_neededboolean
skill_republish_reasonsstring[]

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

slugstring nullable
summarystring nullable
summary_staleboolean
summary_updated_atstring nullable
tags_droppedboolean
tags_truncatedboolean
titlestring
token_bindingsobject
type_colorstring nullable
type_content_md_maxinteger nullable
type_guidancestring nullable
type_guidance_notestring
type_guidance_status'current' | 'delivered'
type_guidance_status_reasonstring
type_iconstring nullable
type_idstring

UUID v4 string

type_log_entry_orderstring nullable
type_log_target_type_idstring nullable
type_namestring
type_paragraph_renderingstring nullable
type_rolloverstring nullable
type_share_templatestring nullable
type_slugstring
type_structurestring nullable
unreferencedboolean
updated_atstring
version_skip_reasonstring nullable
version_skippedboolean
viewer_can_writeboolean
visibility'self' | 'link' | 'public' | 'org_view' | 'org_edit'
warningsstring[]
workspace_idstring nullable

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

      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

      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