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
| Property | Value |
|---|---|
| Capability | knowledge.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - 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
| Property | Value |
|---|---|
| Capability | knowledge.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Member |
| Availability | On demand (MCP tier 2) |
| Idempotent | No |
| Egress | None - 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.