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.
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-proOverview
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 |
|---|---|---|---|---|
Fieldmodel | Typestring | RequirementRequired | Values & limits fish-audio/transcribe-1-pro | Default— |
Fieldinput_audio | Typeobject | RequirementRequired | Values & limits Exact keys: data, format | Default— |
Fieldinput_audio.data | Typebase64_string | RequirementRequired | Values & limits Maximum decoded bytes: 26,214,400 Strict Base64: Yes | Default— |
Fieldinput_audio.format | Typestring | RequirementRequired | Values & limits Conditions: Must equal the actual file probe format | Default— |
Fieldresponse_format | Typestring | RequirementOptional | Values & limits json | Default— |
Input material combinations
speech_to_text · Required: input_audio.data, input_audio.format
Method parameters and lifecycle
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractmodel, input_audio |
Parameteradditional_properties | Contractfalse |
Parameterparameters | 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"]} |
Parametermax_audio_bytes | Contract26214400 |
Parametermultipart_for_this_profile | Contractfalse |
Parametermaterial_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 →
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
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}/contentGET /v1/media/assetsGET /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 |
|---|---|---|
Fieldtext | Typestring | MeaningTranscribed text. |
Fieldusage | Typeobject | MeaningAudio usage. |
Fieldusage.seconds | Typenumber | MeaningAudio duration in seconds. |
Fieldduration | Typenumber | MeaningAudio duration in seconds. |
Fieldtask_id | Typestring | MeaningTranscript task ID; returned with asset_url when a non-empty transcript is stored, published and assigned a signed content URL. |
Fieldasset_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. |
Responseserver_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
Method path aliases
Use the method paths shown above.
Related caller IDs
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