Transcribe audio and video and run Audio Intelligence (speaker labels, key phrases, content moderation, topic detection, entity detection, sentiment analysis, PII redaction) with AssemblyAI.
AssemblyAI ships in the w6w first-party pack. It declares 11 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.assemblyaiAssemblyAI turns audio and video into text and turns that text into structured insight — this app covers the full Speech-to-Text lifecycle (submit a URL-reachable file, poll or wait for the result, list and delete transcripts) plus the Audio Intelligence add-ons AssemblyAI enables as flags on that same submit call: speaker diarization, key phrases, content moderation, topic detection, entity detection, sentiment analysis, and PII redaction (text and, optionally, a beeped-out audio copy).
transcript-submit-and-wait is the one-call path for the common case of “transcribe this and give me the text back”; transcript-submit plus transcript-wait/a Webhook URL cover everything from fire-and-forget batch jobs to long-running files. Companion actions export the finished transcript as SRT/VTT subtitles, split it into sentences or paragraphs, search it for keywords, and fetch the PII-redacted audio download link.
Every action works with a publicly reachable audio/video URL — this app’s sandbox coerces network bodies to strings, which is incompatible with AssemblyAI’s separate raw-bytes upload endpoint; see the README for the full explanation.
Three routes to the same 11 actions. The Workflow tab is generated from AssemblyAI's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
transcript-get Show a transcript's current status. The transcript is ready when status is "completed".
transcript-list List transcripts on this account, newest first. Retrievable for the last 90 days only.
transcript-paragraphs-get Get the transcript split into semantically segmented paragraphs.
transcript-redacted-audio-get Get the status and download URL of the PII-redacted audio file. Only available for 24 hours after the transcript completes.
transcript-sentences-get Get the transcript split into semantically segmented sentences.
transcript-submit Submit a URL-reachable audio or video file for transcription and return immediately, without waiting for it to finish. Audio Intelligence add-ons (speaker labels, key phrases, content moderation, topic detection, entity detection, sentiment analysis, PII redaction) are enabled as flags on this same call.
transcript-submit-and-wait Submit a URL-reachable audio or video file for transcription and block until it completes or fails, returning the finished transcript. Throws if the transcription itself fails.
transcript-subtitles-get Export the transcript as SRT or VTT subtitles/captions.
transcript-wait Poll a transcript until it reaches a terminal status (completed or error), then return it.
transcript-word-search Search the transcript for keywords or short phrases and get back match counts and timestamps.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying AssemblyAI's real ids.
{
"manifestVersion": "2",
"name": "assemblyai-example",
"steps": [
{
"id": "transcript-get",
"uses": {
"app": "io.w6w.assemblyai",
"action": "transcript-get",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"transcriptId": "<transcriptId>"
}
}
]
}transcript-get transcript-list transcript-paragraphs-get transcript-redacted-audio-get transcript-sentences-get +6 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for AssemblyAI, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to AssemblyAI. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "transcript-get",
payload: {
transcriptId: "<value>",
// region: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action transcript-get --payload '{"transcriptId":"<value>"}' Give an AI agent AssemblyAI — without giving it AssemblyAI's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.assemblyai#transcript-get",
"input": {
"transcriptId": "<transcriptId>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's AssemblyAI connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
AssemblyAI's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. AssemblyAI itself is MIT, and the runtime that executes it is source-available (FSL).
AssemblyAI declares its own checks, so its health is a property of the app rather than something the host guesses at.
Atlassian Statuspage rollup for status.assemblyai.com, with per-component detail. Unauthenticated and unsigned.