opbox

The transcript.* family (2 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.

Createtranscript.create

PropertyValue
Capabilityknowledge.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

(DEFERRED wiring: dual route+MCP-apikey path). One verb covers all six provider sites via the status field (completed|failed). { filename, title?, fileSize, mimeType, durationSecs?, text, language?, status, error?, segments?, speakerCount?, provider }. user_id is the acting frontend user (REQUIRED - NOT NULL). Mints tr_.

Call POST /v/transcript.create with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool transcript.create.

Deletetranscript.delete

PropertyValue
Capabilityknowledge.write
Risk classWrite - autonomy L1
Min. permissionMember
AvailabilityOn demand (MCP tier 2)
IdempotentNo
EgressNone - in-box (pure Postgres, no outbound call)

{ transcriptId }. Fail-closed: the row must resolve in the workspace AND be owned by the acting user (the route checks workspaceId+userId). not-found -> BadInput.

Call POST /v/transcript.delete with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool transcript.delete.