{
  "aboutHtml": "<p>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.</p><p>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.</p><p>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.</p><p>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 &lt;|speaker:0|&gt; and &lt;|speaker:1|&gt;; 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.</p><p>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.</p><p>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.</p><p>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.</p><p>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.</p><p>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.</p><p>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.</p>",
  "aboutText": "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.\n\nFor 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.\n\nThe 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.\n\nThe 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.\n\nWord-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.\n\nThe 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.\n\nEmotion 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.\n\nLanguage 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.\n\nFor 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.\n\nFor 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.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "11288a1ac3f2275bd92051027a3b4c1623624e11b4bf38130adc1547937fad71",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "en",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: Transcribe 1 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Close\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-1-pro</code><button type=\"button\" id=\"copy-id\">Copy ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Model card sections\"><button type=\"button\" data-card-jump=\"overview\">Overview</button><button type=\"button\" data-card-jump=\"methods\">Inputs &amp; methods</button><button type=\"button\" data-card-jump=\"pricing\">Pricing</button><button type=\"button\" data-card-jump=\"examples\">Examples</button><button type=\"button\" data-card-jump=\"results\">Results</button><button type=\"button\" data-card-jump=\"aliases\">Aliases</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"API methods\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1-pro\">Recognition</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Overview</h3><p class=\"mdesc-full\">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.</p><dl class=\"card-io\" data-card-io><div><dt>Accepted inputs</dt><dd>Audio</dd></div><div><dt>Results</dt><dd>Text</dd></div></dl><details class=\"card-about\"><summary>About the model</summary><p class=\"note-s\" data-model-method-boundary>This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.</p><div class=\"mabout\" id=\"m-about\"><p>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.</p><p>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.</p><p>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.</p><p>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 &lt;|speaker:0|&gt; and &lt;|speaker:1|&gt;; 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.</p><p>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.</p><p>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.</p><p>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.</p><p>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.</p><p>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.</p><p>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.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Available in Ailoot · inputs &amp; methods</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Speech recognition</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Input types</dt><dd><code>audio</code></dd></div><div><dt>Output types</dt><dd><code>text</code></dd></div><div><dt>Output format</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Field</th><th>Type</th><th>Requirement</th><th>Values &amp; limits</th><th>Default</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Required</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span><div>fish-audio/transcribe-1-pro</div></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">input_audio</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>object</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Required</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span><div>Exact keys: data, format</div></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">input_audio.data</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>base64_string</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Required</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span><div>Maximum decoded bytes: 26,214,400</div><div>Strict Base64: Yes</div></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">input_audio.format</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Required</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span><div>Conditions: Must equal the actual file probe format</div></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">response_format</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>string</code></td><td data-cell-label=\"Requirement\"><span class=\"card-cell-label\">Requirement</span>Optional</td><td data-cell-label=\"Values &amp; limits\"><span class=\"card-cell-label\">Values &amp; limits</span><div>json</div></td><td data-cell-label=\"Default\" data-default=\"unspecified\"><span class=\"card-cell-label\">Default</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Input material combinations</summary><p class=\"note-s\"><b>speech_to_text</b> · Required: input_audio.data, input_audio.format</p></details><details class=\"note-s\" data-method-contract><summary>Method parameters and lifecycle</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parameter</th><th>Contract</th></tr></thead><tbody><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>content_type</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>application/json</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>required</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>model, input_audio</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>additional_properties</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>parameters</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>{&quot;name&quot;:&quot;model&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:true,&quot;enum&quot;:[&quot;fish-audio/transcribe-1-pro&quot;]}, {&quot;name&quot;:&quot;input_audio&quot;,&quot;type&quot;:&quot;object&quot;,&quot;required&quot;:true,&quot;exact_keys&quot;:[&quot;data&quot;,&quot;format&quot;],&quot;data&quot;:&quot;strict base64 of actual supported audio bytes&quot;,&quot;format&quot;:&quot;exact probed file format; must match actual bytes&quot;}, {&quot;name&quot;:&quot;response_format&quot;,&quot;type&quot;:&quot;string&quot;,&quot;required&quot;:false,&quot;enum&quot;:[&quot;json&quot;]}</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>max_audio_bytes</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>26214400</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>multipart_for_this_profile</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>false</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>audio</td></tr></tbody></table></div><p>Lifecycle: <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · actual returned task_id or media library record</p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}/content</code></p><p class=\"note-s\"><code>GET /v1/media/assets</code></p><p class=\"note-s\"><code>GET /v1/media/assets/{asset_id}</code></p><p class=\"note-s\">Keep the complete response and the original returned IDs.</p><p class=\"note-s\">Never resubmit an unknown creation.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Pricing</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Tariff references do not add request options. Supported parameters are listed for the selected method.</p><dl data-price-conditions><dt>Fast mode</dt><dd>Not specified <span class=\"note-s\">When fast mode is selected</span></dd><dt>Flex mode</dt><dd>Not specified <span class=\"note-s\">When flex mode is selected</span></dd><dt>Maximum reasoning effort</dt><dd>Not specified <span class=\"note-s\">When maximum reasoning effort uses the default adjustment</span></dd></dl></div><div data-declared-tariff-pricing><h4>Ailoot rates</h4><h4>Prices by configuration</h4><p class=\"note-s\">Match each charge to the conditions shown. Use one rate for each set of alternative configurations.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Rate schedule</th><th>Billing unit</th><th>Charge</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Base token rates</th><td data-cell-label=\"Rate schedule\"><span class=\"card-cell-label\">Rate schedule</span>Base rate</td><td data-cell-label=\"Billing unit\"><span class=\"card-cell-label\">Billing unit</span>—</td><td data-cell-label=\"Charge\"><span class=\"card-cell-label\">Charge</span><div><span>Input · Input tokens</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Output · Output tokens</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cache read</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cache write</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Input · Cache write, 1 hour</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>input audio second</th><td data-cell-label=\"Rate schedule\"><span class=\"card-cell-label\">Rate schedule</span>—</td><td data-cell-label=\"Billing unit\"><span class=\"card-cell-label\">Billing unit</span>per input audio second</td><td data-cell-label=\"Charge\"><span class=\"card-cell-label\">Charge</span><div><span>Input · input audio second</span> <b>$0.0002</b> <span class=\"price-unit\">per input audio second</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">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. <a href=\"/docs/en/billing/reserve/\">How reservation and settlement work →</a></p><div data-declared-reference-pricing><h4>Reference tariff details</h4><p class=\"note-s\">Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.</p><details class=\"card-price-reference\" data-declared-reference-group data-client-selectable=\"false\"><summary>Fish Audio: Transcribe 1 Pro</summary><h4>Prices by configuration</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Billing conditions</th><th>Charge</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Fish Audio: Transcribe 1 Pro · Default configuration</th><td data-cell-label=\"Billing conditions\"><span class=\"card-cell-label\">Billing conditions</span>Default configuration</td><td data-cell-label=\"Charge\"><span class=\"card-cell-label\">Charge</span><div><span>Input · Input audio seconds</span> <b>$0.0002</b> <span class=\"price-unit\">per input audio second</span></div></td></tr></tbody></table></div></details></div></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Example requests</h3><h4>Ailoot Ultra · Speech recognition</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Code options\"><button class=\"cg-tab\" id=\"model-code-1362-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1362-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · actual audio bytes and probed format</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copy code\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1362-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1362-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_AUDIO_FILE:?Set your actual audio file}&quot;\n: &quot;${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}&quot;\nexport AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;fish-audio/transcribe-1-pro&quot;, &quot;response_format&quot;: &quot;json&quot;}&#39;)\nimport base64\nf=Path(os.environ[&#39;AILOOT_AUDIO_FILE&#39;])\nraw=f.read_bytes()\nif not raw or len(raw)&gt;26214400:raise SystemExit(&#39;Use actual audio bytes within 25 MiB&#39;)\nfmt=os.environ[&#39;AILOOT_AUDIO_FORMAT&#39;].strip()\nif not fmt:raise SystemExit(&#39;Use the actual probed format; the server checks it against the bytes&#39;)\np[&#39;input_audio&#39;]={&#39;data&#39;:base64.b64encode(raw).decode(),&#39;format&#39;:fmt}\nPath(&#39;request.json&#39;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nr=json.loads(Path(&#39;result.json&#39;).read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint(&#39;Keep the complete JSON and response headers; do not resubmit an unknown creation.&#39;)\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Receive and save results</h3><h4>Ailoot Ultra · Speech recognition</h4><p class=\"note-s\">json</p><ul class=\"card-result-paths\"><li><code>GET /v1/media/tasks/{task_id}</code></li><li><code>GET /v1/media/assets/{asset_id}/content</code></li><li><code>GET /v1/media/assets</code></li><li><code>GET /v1/media/assets/{asset_id}</code></li></ul><div class=\"card-result-process\" data-all-results><h5>Keep all completed results</h5><p class=\"note-s\">Keep every complete returned response, file and content part.</p><p class=\"note-s\">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.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>If the original response needs checking</h5><p class=\"note-s\">Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route.</p></div><details class=\"card-about\" data-output-fields><summary>Response fields</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Field</th><th>Type</th><th>Meaning</th></tr></thead><tbody><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">text</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Meaning\"><span class=\"card-cell-label\">Meaning</span>Transcribed text.</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</td><td data-cell-label=\"Meaning\"><span class=\"card-cell-label\">Meaning</span>Audio usage.</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">usage.seconds</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td><td data-cell-label=\"Meaning\"><span class=\"card-cell-label\">Meaning</span>Audio duration in seconds.</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">duration</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>number</td><td data-cell-label=\"Meaning\"><span class=\"card-cell-label\">Meaning</span>Audio duration in seconds.</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">task_id</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Meaning\"><span class=\"card-cell-label\">Meaning</span>Transcript task ID; returned with asset_url when a non-empty transcript is stored, published and assigned a signed content URL.</td></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">asset_url</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>string</td><td data-cell-label=\"Meaning\"><span class=\"card-cell-label\">Meaning</span>Signed transcript content URL; returned with task_id when a non-empty transcript is stored, published and assigned a signed content URL.</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errors and next steps</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Response</th><th>Condition</th><th>Next step</th></tr></thead><tbody><tr><th data-cell-label=\"Response\" scope=\"row\"><span class=\"card-cell-label\">Response</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Invalid required fields, material representation or parameter value</td><td data-cell-label=\"Next step\"><span class=\"card-cell-label\">Next step</span>Correct the indicated fields before a new creation request.</td></tr><tr><th data-cell-label=\"Response\" scope=\"row\"><span class=\"card-cell-label\">Response</span><code>server_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>The returned response says the operation or result requires a check</td><td data-cell-label=\"Next step\"><span class=\"card-cell-label\">Next step</span>Keep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Aliases</h3><h4>Model aliases</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Ftranscribe-1-pro&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1-pro&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1-pro</code></a></span></p><h4>Method path aliases</h4><p class=\"note-s\">Use the method paths shown above.</p><h4>Related caller IDs</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Ftranscribe-1-pro&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1-pro&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/transcribe-1-pro",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "fish-audio/transcribe-1-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1-pro",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "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.",
            "errors": [
              {
                "code": null,
                "condition": "Invalid required fields, material representation or parameter value",
                "http_status": 400,
                "recovery": "Correct the indicated fields before a new creation request.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "The returned response says the operation or result requires a check",
                "http_status": null,
                "recovery": "Keep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
            },
            "limits": {
              "decoded_audio_max_bytes": 26214400
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "speech_to_text",
                "required": [
                  "input_audio.data",
                  "input_audio.format"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "speech_to_text"
            ],
            "outputs": {
              "all_results": "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.",
              "family": "transcription",
              "fields": [
                {
                  "description": "Transcribed text.",
                  "name": "text",
                  "required": true,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "Audio usage.",
                  "name": "usage",
                  "required": true,
                  "required_known": true,
                  "type": "object"
                },
                {
                  "description": "Audio duration in seconds.",
                  "name": "usage.seconds",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "Audio duration in seconds.",
                  "name": "duration",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "Transcript task ID; returned with asset_url when a non-empty transcript is stored, published and assigned a signed content URL.",
                  "name": "task_id",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "Signed transcript content URL; returned with task_id when a non-empty transcript is stored, published and assigned a signed content URL.",
                  "name": "asset_url",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "data",
                  "format"
                ],
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "decoded_maximum_bytes": 26214400,
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.data",
                "required": true,
                "strict_base64": true,
                "type": "base64_string"
              },
              {
                "availability": "source_interface",
                "conditions": "Must equal the actual file probe format",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.format",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "json"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "multipart input on this exact profile",
              "fields outside model/input_audio/response_format",
              "non-json response format"
            ]
          },
          "hints": [
            "Keep the complete response and the original returned IDs.",
            "Never resubmit an unknown creation."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "audio"
            ],
            "max_audio_bytes": 26214400,
            "multipart_for_this_profile": false,
            "parameters": [
              {
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "data": "strict base64 of actual supported audio bytes",
                "exact_keys": [
                  "data",
                  "format"
                ],
                "format": "exact probed file format; must match actual bytes",
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "enum": [
                  "json"
                ],
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "lifecycle": {
            "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "actual returned task_id or media library record",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "method_aliases": [],
          "operation_modes": [
            "speech_to_text"
          ],
          "output": {
            "family": "text",
            "type": "JSON transcript with text and usage; actual owned transcript flow"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set your actual audio file}\"\n: \"${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}\"\nexport AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"fish-audio/transcribe-1-pro\", \"response_format\": \"json\"}')\nimport base64\nf=Path(os.environ['AILOOT_AUDIO_FILE'])\nraw=f.read_bytes()\nif not raw or len(raw)>26214400:raise SystemExit('Use actual audio bytes within 25 MiB')\nfmt=os.environ['AILOOT_AUDIO_FORMAT'].strip()\nif not fmt:raise SystemExit('Use the actual probed format; the server checks it against the bytes')\np['input_audio']={'data':base64.b64encode(raw).decode(),'format':fmt}\nPath('request.json').write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · actual audio bytes and probed format",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "Keep the complete response and the original returned IDs.",
          "Never resubmit an unknown creation."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Распознавание речи",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_second": 0.0002
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    }
  ],
  "model_id": "fish-audio/transcribe-1-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "f792f5e4676d79f6d1caf4b0acf5e8a7012e65de5737e10c51f3a1cd7a6f14a6",
    "input_html_sha256": "e03372b76cff7fc5fb728fff8677c89bef0b077c18c34c09f83a1cf20e80ade4",
    "private_audit_sha256": "2ccf32c29047edf416635ff64e980b8da05b86fd2aec5c6c420abda18e529fc5",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/",
    "description": "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.",
    "locale": "en",
    "md_url": "https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/index.md",
    "title": "Fish Audio: Transcribe 1 Pro — Ailoot",
    "url": "https://ailoot.ai/models/en/fish-audio-transcribe-1-pro/"
  },
  "rawModel": {
    "about": "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.\n\nFor 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.\n\nThe 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.\n\nThe 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.\n\nWord-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.\n\nThe 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.\n\nEmotion 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.\n\nLanguage 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.\n\nFor 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.\n\nFor 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.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "available": null,
    "canonical_model": "fish-audio/transcribe-1-pro",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "audio"
      ],
      "manufacturer_output": [
        "transcription"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ],
        "summary": "Full configuration pricing in details."
      }
    ],
    "ctx": null,
    "declared_tariff_references": [
      {
        "client_selectable": false,
        "key": "aeebfac63d7ddd8619fb",
        "label": "Fish Audio: Transcribe 1 Pro",
        "profiles": [
          {
            "basis": "",
            "dimensions": {
              "conditions": "Default configuration"
            },
            "label": "Fish Audio: Transcribe 1 Pro · Default configuration",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_physical_unit",
                "billing_input": false,
                "key": "0949942d98ce2e4c35b418d6",
                "label": "Input audio seconds",
                "public_unit_label": "per input audio second",
                "quantity": "1",
                "rate_role": "declared_tariff_rate",
                "side": "in",
                "unit": "input_audio_second"
              }
            ]
          }
        ]
      }
    ],
    "entity_type": "model",
    "formats": [
      "transcriptions"
    ],
    "id": "fish-audio/transcribe-1-pro",
    "input": [
      "audio"
    ],
    "kind": "transcription",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "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.",
            "errors": [
              {
                "code": null,
                "condition": "Invalid required fields, material representation or parameter value",
                "http_status": 400,
                "recovery": "Correct the indicated fields before a new creation request.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "The returned response says the operation or result requires a check",
                "http_status": null,
                "recovery": "Keep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request.",
                "type": "server_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
              "assets": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets"
                },
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}"
                }
              ],
              "content": [
                {
                  "http": "GET",
                  "path": "/v1/media/assets/{asset_id}/content",
                  "url_source": "exact returned signed URL; never construct token"
                }
              ],
              "mode": "synchronous_result_then_owned_library",
              "operation_id_is_not_task_id": true,
              "status": [
                {
                  "http": "GET",
                  "id_source": "actual returned task_id or media library record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
            },
            "limits": {
              "decoded_audio_max_bytes": 26214400
            },
            "material_combinations": [
              {
                "content_type": "application/json",
                "mode": "speech_to_text",
                "required": [
                  "input_audio.data",
                  "input_audio.format"
                ]
              }
            ],
            "media_library": {
              "asset": {
                "fields": [
                  {
                    "description": null,
                    "name": "asset_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "task_id",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "output_key",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "family",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "model",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "method",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "status",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "content_type",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "sha256",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "size_bytes",
                    "type": "integer"
                  },
                  {
                    "description": null,
                    "name": "content_url",
                    "type": "string"
                  }
                ],
                "http": "GET",
                "id_source": "actual returned asset_id",
                "path": "/v1/media/assets/{asset_id}"
              },
              "content": {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "range_header_supported": true,
                "url_source": "Use exact returned signed content_url including its token; do not construct a token."
              },
              "expired_link": {
                "code": "link_expired",
                "http_status": 404,
                "recovery": "Read the asset again to obtain its refreshed signed content_url, then fetch that URL. Do not regenerate."
              },
              "list": {
                "all_pages": "Follow every returned next_cursor, then select records by their actual task_id/output_key.",
                "http": "GET",
                "output_fields": [
                  {
                    "description": null,
                    "name": "object",
                    "type": "string"
                  },
                  {
                    "description": null,
                    "name": "data",
                    "type": "asset[]"
                  },
                  {
                    "description": null,
                    "name": "next_cursor",
                    "type": "string|null"
                  }
                ],
                "parameters": [
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "family",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": null,
                    "default_known": false,
                    "enum": null,
                    "enum_known": false,
                    "name": "cursor",
                    "required": false,
                    "type": "string"
                  },
                  {
                    "availability": "source_interface",
                    "default": 20,
                    "default_known": true,
                    "enum": null,
                    "enum_known": false,
                    "maximum": 100,
                    "minimum": 1,
                    "name": "limit",
                    "required": false,
                    "type": "integer"
                  }
                ],
                "path": "/v1/media/assets"
              },
              "revoke": {
                "http": "DELETE",
                "meaning": "Revokes/deletes the existing owned file; this is not generation cancellation.",
                "path": "/v1/media/assets/{asset_id}",
                "pending_status": "revoking",
                "success_statuses": [
                  202,
                  204
                ]
              },
              "task": {
                "http": "GET",
                "id_source": "actual returned task_id or media library record; operation_id is not task_id",
                "path": "/v1/media/tasks/{task_id}"
              }
            },
            "operation_modes": [
              "speech_to_text"
            ],
            "outputs": {
              "all_results": "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.",
              "family": "transcription",
              "fields": [
                {
                  "description": "Transcribed text.",
                  "name": "text",
                  "required": true,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "Audio usage.",
                  "name": "usage",
                  "required": true,
                  "required_known": true,
                  "type": "object"
                },
                {
                  "description": "Audio duration in seconds.",
                  "name": "usage.seconds",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "Audio duration in seconds.",
                  "name": "duration",
                  "required": true,
                  "required_known": true,
                  "type": "number"
                },
                {
                  "description": "Transcript task ID; returned with asset_url when a non-empty transcript is stored, published and assigned a signed content URL.",
                  "name": "task_id",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                },
                {
                  "description": "Signed transcript content URL; returned with task_id when a non-empty transcript is stored, published and assigned a signed content URL.",
                  "name": "asset_url",
                  "required": false,
                  "required_known": true,
                  "type": "string"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "exact_keys": [
                  "data",
                  "format"
                ],
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "decoded_maximum_bytes": 26214400,
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.data",
                "required": true,
                "strict_base64": true,
                "type": "base64_string"
              },
              {
                "availability": "source_interface",
                "conditions": "Must equal the actual file probe format",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "input_audio.format",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "json"
                ],
                "enum_known": true,
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "multipart input on this exact profile",
              "fields outside model/input_audio/response_format",
              "non-json response format"
            ]
          },
          "hints": [
            "Keep the complete response and the original returned IDs.",
            "Never resubmit an unknown creation."
          ],
          "input": {
            "additional_properties": false,
            "content_type": "application/json",
            "material_types": [
              "audio"
            ],
            "max_audio_bytes": 26214400,
            "multipart_for_this_profile": false,
            "parameters": [
              {
                "enum": [
                  "fish-audio/transcribe-1-pro"
                ],
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "data": "strict base64 of actual supported audio bytes",
                "exact_keys": [
                  "data",
                  "format"
                ],
                "format": "exact probed file format; must match actual bytes",
                "name": "input_audio",
                "required": true,
                "type": "object"
              },
              {
                "enum": [
                  "json"
                ],
                "name": "response_format",
                "required": false,
                "type": "string"
              }
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "lifecycle": {
            "all_results": "Follow everyactualreturnedoutputandownedasset; no result is discardedbecauseindex0orcontent_urlalreadyexists.",
            "assets": [
              {
                "http": "GET",
                "path": "/v1/media/assets"
              },
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}"
              }
            ],
            "content": [
              {
                "http": "GET",
                "path": "/v1/media/assets/{asset_id}/content",
                "url_source": "exact returned signed URL; never construct token"
              }
            ],
            "mode": "synchronous_result_then_owned_library",
            "operation_id_is_not_task_id": true,
            "status": [
              {
                "http": "GET",
                "id_source": "actual returned task_id or media library record",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "method_aliases": [],
          "operation_modes": [
            "speech_to_text"
          ],
          "output": {
            "family": "text",
            "type": "JSON transcript with text and usage; actual owned transcript flow"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set your actual audio file}\"\n: \"${AILOOT_AUDIO_FORMAT:?Set its actual probed file format}\"\nexport AILOOT_AUDIO_FILE AILOOT_AUDIO_FORMAT\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"fish-audio/transcribe-1-pro\", \"response_format\": \"json\"}')\nimport base64\nf=Path(os.environ['AILOOT_AUDIO_FILE'])\nraw=f.read_bytes()\nif not raw or len(raw)>26214400:raise SystemExit('Use actual audio bytes within 25 MiB')\nfmt=os.environ['AILOOT_AUDIO_FORMAT'].strip()\nif not fmt:raise SystemExit('Use the actual probed format; the server checks it against the bytes')\np['input_audio']={'data':base64.b64encode(raw).decode(),'format':fmt}\nPath('request.json').write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nr=json.loads(Path('result.json').read_text())\nprint(json.dumps(r,ensure_ascii=False,indent=2))\nprint('Keep the complete JSON and response headers; do not resubmit an unknown creation.')\nPY_RESULT\n",
            "label": "curl · actual audio bytes and probed format",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "Keep the complete response and the original returned IDs.",
          "Never resubmit an unknown creation."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Распознавание речи",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "per_request",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null,
          "unit_prices": {
            "audio_input_second": 0.0002
          }
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "quoted_unit": "per input audio second"
            },
            "label": "input audio second",
            "units": [
              {
                "amount": "0.0002",
                "amount_unit": "usd_per_exact_native_unit",
                "billing_input": true,
                "estimate_only": false,
                "key": "audio_input_second",
                "label": "input audio second",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "public_unit_label": "per input audio second",
                "quantity": 1,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "audio_input_second"
              }
            ]
          }
        ],
        "request_model_id": "fish-audio/transcribe-1-pro",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}",
          "GET /v1/media/assets/{asset_id}/content"
        ],
        "tiers": [],
        "units": [
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          },
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_exact_native_unit",
            "billing_input": true,
            "estimate_only": false,
            "key": "audio_input_second",
            "label": "input audio second",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "public_unit_label": "per input audio second",
            "quantity": 1,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "audio_input_second"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "fish-audio/transcribe-1-pro",
        "request_model_id": "fish-audio/transcribe-1-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Transcribe 1 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "pricing_profiles": [
      {
        "dimensions": {
          "regime": "base"
        },
        "label": "Ultra",
        "units": [
          {
            "amount": "0.0002",
            "amount_unit": "usd_per_declared_unit",
            "conditions": {},
            "key": "prompt",
            "label": "prompt",
            "quantity": "1",
            "rate_role": "typed_active_maker_rate",
            "side": "in",
            "unit": "input_audio_second"
          }
        ]
      }
    ],
    "public_id": "fish-audio/transcribe-1-pro",
    "short": "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."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "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.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "426fd63b7d59658ea48ec2f6739a041693b854706f7ef48c84528927d1754ac1",
    "renderer_sha256": "fed50305bd3bcc4980ac14df23640efb8c1bc1e819f9d53643d6f43e8974d3fe"
  },
  "sourceRevision": "eb28fad241f517632f843df0935670aa9245ab1db16f54fa05a83cee342f6baf"
}
