Source: https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/
Canonical: https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/
Language: en

# Fish Audio: Transcribe 1 Pro

[Markdown](https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/index.md) · [JSON](https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/facts.json)

## [Fish Audio: Transcribe 1 Pro](https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/)

Transcribe 1 Pro turns recordings of up to 60 minutes into text with speaker markers and optional word-level timing. It preserves inferred emotion and vocal-event cues, making interviews, meetings and podcasts easier to review, search or prepare for captions.

- [**Ailoot Ultra · Speech recognition** `POST /v1/audio/transcriptions` `fish-audio/transcribe-1-pro`](https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/#method-0)

About the model

This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.

Transcribe 1 Pro is Fish Audio’s speech-to-text model for short clips, multi-speaker conversations and long recordings. It takes recorded audio and returns a transcript, with optional timing and structured speaker turns. Its distinguishing features are speaker changes marked in the text and cues about emotion or vocal events, which preserve more of the recording’s conversational structure than a plain sequence of words.

For an interview, meeting or podcast, keep the complete conversation in one file so that returning speakers can retain consistent labels within the response. A useful review artifact is a transcript linked to the original recording, with turns displayed separately and a timestamp available for checking a quotation. A summary or action list is a subsequent application step: keep it separate from the transcript so the spoken source remains available for comparison.

The producer accepts recordings up to 60 minutes and describes processing long files with compressed audio such as MP3, Opus or AAC. Supported formats include WAV, MP3, AAC in M4A or MP4, FLAC, Ogg with Opus or Vorbis, WebM/Matroska and MOV. For a video file, it uses the first audio track. AIFF, CAF, WMA, AMR, AC-3 and raw headerless PCM are unsupported. One audio file is supplied per request; the result arrives after the whole recording has been transcribed, and a long recording can take several minutes. Clips shorter than about 0.08 seconds are rejected.

The producer response contains the full text, the recording’s duration in seconds and a segments array. Pro marks speaker changes inline with labels such as \<|speaker:0|\> and \<|speaker:1|\>; a label applies to the following text until the next marker. These are identifiers within one response, not verified names or identities that can be matched across requests. If the transcript has no speaker marker, the guide treats it as a single-speaker result. Keep any text before the first marker with the first turn rather than discarding it.

Word-level timestamps are optional. In the producer request, ignore\_timestamps defaults to true; setting it to false asks for segments with text, start and end times in seconds. A segment is generally a word, or one character or a few in Chinese and Japanese. Segment text omits punctuation, speaker markers and event cues, and can normalise a spoken value differently from the full transcript. A word segment can have the same start and end time. An empty segments array can mean timestamps were not requested, no speech was found or timing was temporarily unavailable. Use the full transcript for readable wording and segments for alignment rather than assuming both strings match character for character.

The diarize setting defaults to auto. When timestamps are requested and diarize is not false, Pro also returns speaker\_turns. Each turn contains its speaker label, text and start/end times, preserving punctuation and retained cues without the inline speaker marker. If word timing is unavailable, turn times can be approximate and cover the whole recording; adjacent turns are not necessarily contiguous or non-overlapping. Disabling diarize removes the structured turn list but leaves speaker markers in the full text. A known speaker count, or minimum and maximum counts, can guide longer-recording diarisation on a best-effort basis. The exact count cannot be combined with the count bounds, and count hints cannot be used with diarize disabled.

Emotion and vocal-event cues appear as bracketed text, for example \[laughter\], alongside the recognised speech. They are inferences from the audio, not words that a user needs to add before transcription. Pro’s tag\_audio\_events setting defaults to true; disabling it removes these cues from the transcript and turn text without changing the timing. There is no separate emotion field or fixed emotion enumeration. Preserve the annotated transcript when the sound of a remark matters, and use a cue-free version when the downstream artifact needs only the spoken words.

Language is detected automatically. An optional lowercase ISO 639-1 hint does not force translation or change Pro’s transcript. If the language cannot be determined, the returned language code can reflect the hint without verifying it against the audio. The producer reports one language rather than an inventory of every language in a mixed-language recording. Keep the original wording and language metadata together when preparing a searchable archive, especially where different parts of a conversation switch languages.

For captions, group consecutive timed words into readable SRT or WebVTT cues rather than producing one caption per word. Separate cues around pauses and choose their length and display time to suit the player and audience. Speaker-turn boundaries can keep different speakers in separate cues. Check for an empty timing result and for cues whose end must be later than their start. Caption formatting, names for anonymous speaker labels and any later summary are application artifacts built from the transcription result.

For a practical recording workflow, decide before transcription whether you need a plain readable transcript, annotated conversation turns or timed captions. Keep the audio identifier with the result, retain the returned full text when punctuation and cues matter, and use the structured timing fields for navigation. Pro’s long-recording and multi-speaker capabilities are distinct from the general short-recording Transcribe 1 model; their limits and controls should not be treated as interchangeable.

**Ailoot Ultra · Speech recognition** `POST /v1/audio/transcriptions` `fish-audio/transcribe-1-pro`

[`fish-audio/transcribe-1-pro`](https://ailoot.ai/models/en/#m=fish-audio%2Ftranscribe-1-pro&route=Ultra&caller=fish-audio%2Ftranscribe-1-pro&fmt=transcriptions)

Fish Audio /`fish-audio/transcribe-1-pro`

### Overview

Transcribe 1 Pro turns recordings of up to 60 minutes into text with speaker markers and optional word-level timing. It preserves inferred emotion and vocal-event cues, making interviews, meetings and podcasts easier to review, search or prepare for captions.

Accepted inputs

Audio

Results

Text

### Available in Ailoot · inputs & methods

**Ailoot Ultra · Speech recognition** `POST /v1/audio/transcriptions`

Input types

`audio`

Output types

`text`

Output format

json

| Field | Type | Requirement | Values & limits | Default |
| --- | --- | --- | --- | --- |
| Field`model` | Type`string` | RequirementRequired | Values & limits fish-audio/transcribe-1-pro | Default— |
| Field`input_audio` | Type`object` | RequirementRequired | Values & limits Exact keys: data, format | Default— |
| Field`input_audio.data` | Type`base64_string` | RequirementRequired | Values & limits Maximum decoded bytes: 26,214,400 Strict Base64: Yes | Default— |
| Field`input_audio.format` | Type`string` | RequirementRequired | Values & limits Conditions: Must equal the actual file probe format | Default— |
| Field`response_format` | Type`string` | RequirementOptional | Values & limits json | Default— |

Input material combinations

**speech\_to\_text** · Required: input\_audio.data, input\_audio.format

Method parameters and lifecycle

| Parameter | Contract |
| --- | --- |
| Parameter`content_type` | Contractapplication/json |
| Parameter`required` | Contractmodel, input\_audio |
| Parameter`additional_properties` | Contractfalse |
| Parameter`parameters` | Contract{"name":"model","type":"string","required":true,"enum":\["fish-audio/transcribe-1-pro"\]}, {"name":"input\_audio","type":"object","required":true,"exact\_keys":\["data","format"\],"data":"strict base64 of actual supported audio bytes","format":"exact probed file format; must match actual bytes"}, {"name":"response\_format","type":"string","required":false,"enum":\["json"\]} |
| Parameter`max_audio_bytes` | Contract26214400 |
| Parameter`multipart_for_this_profile` | Contractfalse |
| Parameter`material_types` | Contractaudio |

Lifecycle: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · actual returned task\_id or media library record

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

Keep the complete response and the original returned IDs.

Never resubmit an unknown creation.

### Pricing

Tariff references do not add request options. Supported parameters are listed for the selected method.

Fast mode

Not specified When fast mode is selected

Flex mode

Not specified When flex mode is selected

Maximum reasoning effort

Not specified When maximum reasoning effort uses the default adjustment

#### Ailoot rates

#### Prices by configuration

Match each charge to the conditions shown. Use one rate for each set of alternative configurations.

| Configuration | Rate schedule | Billing unit | Charge |
| --- | --- | --- | --- |
| ConfigurationBase token rates | Rate scheduleBase rate | Billing unit— | Charge Input · Input tokens **—** / 1K tokens Output · Output tokens **—** / 1K tokens Input · Cache read **—** / 1K tokens Input · Cache write **—** / 1K tokens Input · Cache write, 1 hour **—** / 1K tokens |
| Configurationinput audio second | Rate schedule— | Billing unitper input audio second | Charge Input · input audio second **$0.0002** per input audio second |

Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. [How reservation and settlement work →](https://ailoot.ai/docs/en/billing/reserve/)

#### Reference tariff details

Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.

Fish Audio: Transcribe 1 Pro

#### Prices by configuration

| Configuration | Billing conditions | Charge |
| --- | --- | --- |
| ConfigurationFish Audio: Transcribe 1 Pro · Default configuration | Billing conditionsDefault configuration | Charge Input · Input audio seconds **$0.0002** per input audio second |

### Example requests

#### Ailoot Ultra · Speech recognition

curl · actual audio bytes and probed format

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_AUDIO_FILE:?Set your actual audio file}"
: "${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}"
export AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "fish-audio/transcribe-1-pro", "response_format": "json"}')
import base64
f=Path(os.environ['AILOOT_AUDIO_FILE'])
raw=f.read_bytes()
if not raw or len(raw)>26214400:raise SystemExit('Use actual audio bytes within 25 MiB')
fmt=os.environ['AILOOT_AUDIO_FORMAT'].strip()
if not fmt:raise SystemExit('Use the actual probed format; the server checks it against the bytes')
p['input_audio']={'data':base64.b64encode(raw).decode(),'format':fmt}
Path('request.json').write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path('result.json').read_text())
print(json.dumps(r,ensure_ascii=False,indent=2))
print('Keep the complete JSON and response headers; do not resubmit an unknown creation.')
PY_RESULT
```

### Receive and save results

#### Ailoot Ultra · Speech recognition

json

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### Keep all completed results

Keep every complete returned response, file and content part.

Keep the complete JSON, response headers, text and every actual returned usage field. Use actual task/asset identities from the response or owned library; operation\_id is not task\_id.

##### If the original response needs checking

Retain original operation\_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route.

Response fields

| Field | Type | Meaning |
| --- | --- | --- |
| Field`text` | Typestring | MeaningTranscribed text. |
| Field`usage` | Typeobject | MeaningAudio usage. |
| Field`usage.seconds` | Typenumber | MeaningAudio duration in seconds. |
| Field`duration` | Typenumber | MeaningAudio duration in seconds. |
| Field`task_id` | Typestring | MeaningTranscript task ID; returned with asset\_url when a non-empty transcript is stored, published and assigned a signed content URL. |
| Field`asset_url` | Typestring | MeaningSigned transcript content URL; returned with task\_id when a non-empty transcript is stored, published and assigned a signed content URL. |

Errors and next steps

| Response | Condition | Next step |
| --- | --- | --- |
| Response400 · `invalid_request_error` | ConditionInvalid required fields, material representation or parameter value | Next stepCorrect the indicated fields before a new creation request. |
| Response`server_error` | ConditionThe returned response says the operation or result requires a check | Next stepKeep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request. |

### Aliases

#### Model aliases

**Ailoot Ultra** [`fish-audio/transcribe-1-pro`](https://ailoot.ai/models/en/#m=fish-audio%2Ftranscribe-1-pro&route=Ultra&caller=fish-audio%2Ftranscribe-1-pro&fmt=transcriptions)

#### Method path aliases

Use the method paths shown above.

#### Related caller IDs

[`fish-audio/transcribe-1-pro`](https://ailoot.ai/models/en/#m=fish-audio%2Ftranscribe-1-pro&route=Ultra&caller=fish-audio%2Ftranscribe-1-pro&fmt=transcriptions)

FAQ · Fish Audio: Transcribe 1 Pro

What inputs and results are available?

`POST /v1/audio/transcriptions` · `fish-audio/transcribe-1-pro`: `audio` → `text`

Which fields does the request use?

`POST /v1/audio/transcriptions` · `fish-audio/transcribe-1-pro`: `model`, `input_audio`, `response_format`

Connect Ailoot to Claude Code, OpenCode, Hermes or your own app.

## The company and its project portfolio

The company and its project portfolio: millions of customers; monthly sales in the billions.

## Buy tokens at a discount.

Subscription discounts for regular use. Promo codes offer up to 50% off token purchases.

Subscription

Choose a discounted plan for your regular requests.

Promo code: up to 50% off

Enter your code at checkout. The price updates to reflect the current promotion.

Spending in your history

The model, tokens and amount are recorded for each request.

[Choose a subscription](https://ailoot.ai/docs/en/billing/subscriptions/) · [View model prices](https://ailoot.ai/models/en/)

## Connect the API to a product you sell.

Use Ailoot in SaaS, apps and bots under its official service offer and licence agreement. Request a reseller licence for resale.

Commercial application

Add text, image, video and audio generation to paid features in your service.

Reseller licence

Send a description of your project and how you provide access. Request written terms for use and resale.

Documents on the website

The service offer, licence agreement and data processing policy are available before you connect.

[Request a reseller licence](mailto:support@ailoot.ai) · [Service offer and licence agreement](https://ailoot.ai/legal/offer?lang=en)

## Ailoot · The company and its project portfolio





Ailoot combines established operating experience, a large client base, stable service and ongoing KPI control.





The company and its project portfolio: millions of customers; monthly sales in the billions.





Ailoot brings that operating experience to API access for AI features in customer products, agents, applications and automations.
