> For the complete documentation index, see [llms.txt](https://docs.uptiq.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.uptiq.ai/platform-resources/skill-library/ai-skills/speech-recognition.md).

# Speech Recognition

**Speech Recognition** performs automatic speech-to-text transcription on an audio file, so downstream skills can analyze, classify, or store what was said.

It is a converter, not an analyzer. Its job is to hand you text; what happens to that text is the next skill's problem.

## How it works

* **Input resolution** — takes a `downloadUrl` for the audio file. `$input` (the previous skill's output) and `$secret` can construct that URL or inject authentication headers — `https://example.com/audio/$input.filePath`.
* **Processing** — fetches the audio from `downloadUrl`, sends the stream to the underlying recognition service, and receives the transcribed text.
* **Execution** — blocking. Waits for transcription to complete.
* **Response** — success returns the transcription; failure returns `null` in `transcription` plus a status code and error message.

## Worked example: summarizing customer service calls

A call center records its customer service calls. The goal is an automated workflow that turns those recordings into text, then summarizes each call and extracts the key details.

**The problem.** Listening to audio to find out what happened doesn't scale. Nobody reviews a thousand calls.

**The approach.** Speech Recognition is the first step, not the whole one. Transcribe the audio, then hand the text to the skills that actually do the work:

* [Prompt](/platform-resources/skill-library/ai-skills/prompt.md) — to summarize the call.
* [Entity Recognition](/platform-resources/skill-library/ai-skills/entity-recognition.md) — to pull out the account number, the dates, the commitments made.
* [PII Guard](/platform-resources/skill-library/ai-skills/pii-guard.md) — before the transcript reaches a log or a less-trusted system, because a customer service call is full of personal data spoken out loud.

**Configuration:**

```json
{
  "downloadUrl": "https://example.com/audio-file.wav",
  "name": "Meeting Transcription",
  "description": "Transcribes the weekly team meeting audio."
}
```

## Configuration reference

| Field         | Type   | Required | Description                           |
| ------------- | ------ | -------- | ------------------------------------- |
| `downloadUrl` | string | ✅        | Direct URL to the audio file.         |
| `name`        | string | —        | Display name for this skill instance. |
| `description` | string | —        | Description of this skill's purpose.  |

The skill itself needs no authentication — but `downloadUrl` might. Handle that with `$secret` in headers.

## Output

The output port (`speechRecognitionResult`) always conforms to:

| Field           | Type           | Always | Description                              |
| --------------- | -------------- | ------ | ---------------------------------------- |
| `transcription` | string \| null | ✅      | The transcribed text; `null` on failure. |
| `statusCode`    | number         | ✅      | HTTP-style status for the outcome.       |
| `error`         | string \| null | —      | Error message on failure.                |

## Errors

| Status | Meaning                                                                       |
| ------ | ----------------------------------------------------------------------------- |
| `200`  | Success — transcription generated.                                            |
| `400`  | Invalid or inaccessible URL — `downloadUrl` could not be resolved or reached. |
| `422`  | Unsupported file format — the file isn't a recognized audio format.           |
| `500`  | Internal transcription error — a service-side failure.                        |

{% hint style="info" %}
`400` and `422` are worth distinguishing when debugging: `400` means the file couldn't be fetched (wrong URL, missing auth, network); `422` means it was fetched fine but isn't audio the service can read.
{% endhint %}

## Testing in isolation

* **Path** — `/skill-runtime/workflows/nodes/SpeechRecognition/execute`
* **Method** — `POST`

***

To add this skill to an agent, see [Adding a Skill to the Agent](/agent-builder/build/adding-a-skill-to-the-agent.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.uptiq.ai/platform-resources/skill-library/ai-skills/speech-recognition.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
