# Transcribe audio to text with ZeroGPU's whisper-tiny API

ZeroGPU's whisper-tiny API turns one recording into text in one request. You send the audio as an https URL or as base64, and the response is a transcript in JSON, plain text, or SRT or VTT subtitles. Each call costs $0.02 per 60 seconds, measured on the length of the audio rather than the text, and draws on prepaid Credits. To call it, send `POST https://agents.zerogpu.ai/zcj/ij9i70sj726a/zeroclick/v1/audio/transcriptions` with `"model": "whisper-tiny"` and a bearer credential (the agent identity the storefront issues) that holds Credits.

## At a glance

- **Endpoint:** `POST https://agents.zerogpu.ai/zcj/ij9i70sj726a/zeroclick/v1/audio/transcriptions`. Speech into English text uses `POST https://agents.zerogpu.ai/zcj/ij9i70sj726a/zeroclick/v1/audio/translations`.
- **Body:** JSON with `model` (`whisper-tiny`) and exactly one of `file_url` or `file`. Optional fields are `filename`, `language`, `prompt`, `response_format`, `temperature` and `timestamp_granularities`.
- **Price:** $0.02 per 60 seconds, billed per second of audio with a one-second minimum.
- **Payment:** each call draws on Credits, bought once with a bearer credential. Calls do not return a per-call 402.
- **Response:** `{"text": "..."}` by default. The `x-audio-duration-seconds` header gives the audio length.
- **Limits:** 25 MB by URL, about 5.6 MB inline as base64, and 10 minutes of audio.
- **Full purchase flow:** [the buyer skill](https://agents.zerogpu.ai/zcj/ij9i70sj726a/SKILL.md)

## Transcribe a recording

1. Buy Credits once with a bearer credential ([auth.md](https://agents.zerogpu.ai/zcj/ij9i70sj726a/auth.md) covers how to register one), from $0.01 on a wallet rail or $0.50 by card, as [the buyer skill](https://agents.zerogpu.ai/zcj/ij9i70sj726a/SKILL.md) sets out.

2. Send the recording by URL:

   ```bash
   curl -sS "https://agents.zerogpu.ai/zcj/ij9i70sj726a/zeroclick/v1/audio/transcriptions" \
     -H "Authorization: Bearer $ACCESS_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"model": "whisper-tiny", "file_url": "https://www.voiptroubleshooter.com/open_speech/american/OSR_us_000_0010_8k.wav", "response_format": "json", "language": "en"}'
   ```

   This example sends a standard speech-test recording of the Harvard sentences and took 5.8 seconds. It returns a JSON object with one field, `text`, shown truncated here:

   ```json
   {"text": "The birch can use lid on this smooth planks. Glue the sheet to the dark blue bac…"}
   ```

3. Read what the call drew. A response paid from Credits carries a `zc-billing` header in this shape:

   ```
   zc-billing: {"status":"settled","fundingSource":"credit","chargedUsd":"<debited>","remainingCreditUsd":"<balance>"}
   ```

   The example drew $0.011333 from Credits. To check your balance at any time, send `GET https://agents.zerogpu.ai/zcj/ij9i70sj726a/agent/entitlements` with your bearer.

## Choose the audio source and output

| Your audio | Field to set |
| --- | --- |
| Hosted at an https URL, up to 25 MB | `file_url`. The URL must be https, including at every redirect (at most 3), and the download must finish within 30 seconds. |
| A local file, up to about 5.6 MB | `file`, as base64 or a `data:` URL, plus a `filename` such as `voicemail.wav` |

An inline body looks like this:

```json
{"model": "whisper-tiny", "file": "data:audio/wav;base64,UklGRiQAAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YQAAAAA=", "filename": "hello.wav"}
```

Accepted formats are flac, m4a, mp3, mp4, mpeg, mpga, oga, ogg, wav and webm.

| You need | `response_format` | Returns |
| --- | --- | --- |
| The transcript as JSON (default) | `json` | `{ text }` |
| Segment or word timings | `verbose_json` | Adds `task`, `language`, `duration`, `segments` and `words`. Set `timestamp_granularities` to `["segment"]`, `["word"]` or both. |
| Plain text | `text` | `text/plain` |
| Subtitles | `srt` or `vtt` | `text/plain` |

- **`language`:** set it when you know it, as an ISO-639-1 code such as `en`. Without it, the language is detected automatically.
- **`prompt`:** up to 4096 characters of names or jargon, which guides spelling.
- **`temperature`:** ranges from 0 to 1 and defaults to 0.

## Translate speech into English text

Send the same body to `https://agents.zerogpu.ai/zcj/ij9i70sj726a/zeroclick/v1/audio/translations`, without `language`:

```json
{"model": "whisper-tiny", "file_url": "https://example.com/audio/hello.mp3", "response_format": "text"}
```

The transcript is always English. Including `language` returns `400`. Translations are billed at the same rate.

## Cost per recording

| Recording | Cost |
| --- | --- |
| 30-second voice note | $0.01 |
| 5-minute meeting clip | $0.10 |
| 10-minute recording, the maximum | $0.20 |

## Boundaries

- One recording per request. There is no batch field.
- This route takes an `application/json` body only, with the fields listed above.
- If ZeroGPU cannot read the body (bad base64, an unreachable URL, or both or neither audio source), it answers `400` or `413` before transcription. That call is not billed.
- When Credits run out, calls stop until you top up.

## Errors

| Status or code | Meaning | Action |
| --- | --- | --- |
| `401 bearer_required` | No credential was sent | Register at [auth.md](https://agents.zerogpu.ai/zcj/ij9i70sj726a/auth.md), then retry with `Authorization: Bearer` |
| `403 plan_required` | The credential holds no Credits | Buy Credits (step 1), then retry |
| `usage_exhausted` | The Credits balance is used up | Top up with `POST https://agents.zerogpu.ai/zcj/ij9i70sj726a/extend` and `{"amountUsd": "<amount>"}` |
| `400 invalid_audio_source` | Both `file` and `file_url` were sent, or neither | Send exactly one |
| `400 file_url_fetch_failed`, `file_url_timeout`, `invalid_file_url` | The URL could not be downloaded | Fix the https URL, or send `file` |
| `413 file_too_large`, `audio_too_long` | The audio is over 25 MB or over 10 minutes | Split the recording |
| `429` | Rate limit reached | Wait for `retry-after`, then retry |
| `503 model_unavailable`, `server_busy` | The model is warming up or every slot is busy | Retry with backoff |

## Frequently asked questions

### How much does the whisper-tiny speech to text API cost?

$0.02 per 60 seconds, billed on the seconds of audio you send, with a one-second minimum. Each call draws on Credits you buy once. The Credits purchase is the only step that answers with a 402.

### Can I transcribe an audio file that is not hosted at a URL?

Yes. Send it in `file` as base64 or a `data:` URL, with a `filename`. Inline audio is limited to about 5.6 MB. For files up to 25 MB, host the file and use `file_url`.

### Does whisper-tiny detect the spoken language?

Yes. When `language` is omitted, the language is detected automatically. When you know it, set it as an ISO-639-1 code such as `en`.

### Can the API return subtitles?

Yes. Set `response_format` to `srt` or `vtt` to get subtitle text. Set it to `verbose_json` with `timestamp_granularities` to get segment or word timings as JSON.

### Is a call charged if the audio URL cannot be fetched?

No. A body that cannot be read, including an unreachable URL, is answered with `400` or `413` before transcription and is not billed.

## Keep reading

- [ZeroGPU API pricing: per-token rates and Credits](/guides/pricing-for-agents)
- [ZeroGPU API errors and recovery](/guides/errors)
- [ZeroGPU models by task](/guides/models-by-task)
- [The buyer skill](https://agents.zerogpu.ai/zcj/ij9i70sj726a/SKILL.md): the full purchase flow
- [How to pay](https://agents.zerogpu.ai/zcj/ij9i70sj726a/payment.md): rails, Credits and top-ups

---

Updated 2026-10-20. All ZeroGPU guides: https://agents.zerogpu.ai/guides.md. Storefront: https://agents.zerogpu.ai/zcj/ij9i70sj726a/llms.txt.
