{
  "aboutHtml": "<p>Gemini 3.5 Transcribe converts an audio file into text. Alongside transcription, it supports language detection, identification of speakers, timestamps for individual words, a custom vocabulary and smart text preparation.</p><h4>Languages and duration</h4><p><strong>More than 85 languages</strong> are supported, including Russian, as well as switching between languages within a recording. Language is detected automatically. An ordinary request processes audio of <strong>up to one hour</strong>. With speaker diarization or word-level timestamps enabled, the limit drops to <strong>30 minutes</strong>.</p><p>Output includes the complete transcript and, for the relevant modes, individual word annotations. The model is intended for file processing; continuous real-time recognition belongs to the separate <code>gemini-3.5-transcribe-live</code> version.</p><h4>Transcription modes</h4><p>Verbatim transcription is used by default. Smart mode removes filler words, accounts for speakers&#39; self-corrections and formats the text. This mode cannot be combined with speaker diarization or word-level timestamps.</p><p>Speaker diarization supports <strong>up to eight speakers</strong>. Identifying who spoke a line has <strong>experimental status</strong> for three or more speakers. Timestamps help connect the text to the recording, but enabling them may reduce recognition accuracy.</p><h4>Terms and files</h4><p>The custom term vocabulary holds <strong>up to 1000 entries</strong>; Google notes that it is usually better to limit it to around one hundred. This vocabulary is incompatible with speaker diarization and word-level timestamps. Mode selection therefore needs to account for what matters more: specialized terms or detailed speaker and time annotations.</p><p>Supported audio formats include WAV, MP3, AIFF, AAC, OGG, FLAC, MPEG, M4A, L16, Opus, A-law, mu-law and WebM. Duration limits and permitted mode combinations are published for file processing. The Transcribe family description also specifies <strong>96K tokens</strong> of context and <strong>32K tokens</strong> of text output; these family characteristics do not replace file limits in the selected method.</p><p>Context caching, code execution, file search, function calling, image creation and Thinking are not supported. The model specializes in obtaining text and annotations from audio, not generating new speech.</p>",
  "aboutText": "Gemini 3.5 Transcribe converts an audio file into text. Alongside transcription, it supports language detection, identification of speakers, timestamps for individual words, a custom vocabulary and smart text preparation.\n\n### Languages and duration\n\n**More than 85 languages** are supported, including Russian, as well as switching between languages within a recording. Language is detected automatically. An ordinary request processes audio of **up to one hour**. With speaker diarization or word-level timestamps enabled, the limit drops to **30 minutes**.\n\nOutput includes the complete transcript and, for the relevant modes, individual word annotations. The model is intended for file processing; continuous real-time recognition belongs to the separate `gemini-3.5-transcribe-live` version.\n\n### Transcription modes\n\nVerbatim transcription is used by default. Smart mode removes filler words, accounts for speakers' self-corrections and formats the text. This mode cannot be combined with speaker diarization or word-level timestamps.\n\nSpeaker diarization supports **up to eight speakers**. Identifying who spoke a line has **experimental status** for three or more speakers. Timestamps help connect the text to the recording, but enabling them may reduce recognition accuracy.\n\n### Terms and files\n\nThe custom term vocabulary holds **up to 1000 entries**; Google notes that it is usually better to limit it to around one hundred. This vocabulary is incompatible with speaker diarization and word-level timestamps. Mode selection therefore needs to account for what matters more: specialized terms or detailed speaker and time annotations.\n\nSupported audio formats include WAV, MP3, AIFF, AAC, OGG, FLAC, MPEG, M4A, L16, Opus, A-law, mu-law and WebM. Duration limits and permitted mode combinations are published for file processing. The Transcribe family description also specifies **96K tokens** of context and **32K tokens** of text output; these family characteristics do not replace file limits in the selected method.\n\nContext caching, code execution, file search, function calling, image creation and Thinking are not supported. The model specializes in obtaining text and annotations from audio, not generating new speech.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "7d64ede2c758d398c765527243126f52aa704456c210e3f09ed3597c3fbbc035",
    "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\">G</span><h2 id=\"sheet-title\">Gemini 3.5 Transcribe</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Close\">×</button></div><div class=\"idline\"><span>Google /</span><code>gemini-3.5-transcribe</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=\"Core|transcriptions|/v1/audio/transcriptions|gemini-3.5-transcribe\">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\">A Google model for speech recognition, language detection, speaker diarization and word-level timestamps.</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>Gemini 3.5 Transcribe converts an audio file into text. Alongside transcription, it supports language detection, identification of speakers, timestamps for individual words, a custom vocabulary and smart text preparation.</p><h4>Languages and duration</h4><p><strong>More than 85 languages</strong> are supported, including Russian, as well as switching between languages within a recording. Language is detected automatically. An ordinary request processes audio of <strong>up to one hour</strong>. With speaker diarization or word-level timestamps enabled, the limit drops to <strong>30 minutes</strong>.</p><p>Output includes the complete transcript and, for the relevant modes, individual word annotations. The model is intended for file processing; continuous real-time recognition belongs to the separate <code>gemini-3.5-transcribe-live</code> version.</p><h4>Transcription modes</h4><p>Verbatim transcription is used by default. Smart mode removes filler words, accounts for speakers&#39; self-corrections and formats the text. This mode cannot be combined with speaker diarization or word-level timestamps.</p><p>Speaker diarization supports <strong>up to eight speakers</strong>. Identifying who spoke a line has <strong>experimental status</strong> for three or more speakers. Timestamps help connect the text to the recording, but enabling them may reduce recognition accuracy.</p><h4>Terms and files</h4><p>The custom term vocabulary holds <strong>up to 1000 entries</strong>; Google notes that it is usually better to limit it to around one hundred. This vocabulary is incompatible with speaker diarization and word-level timestamps. Mode selection therefore needs to account for what matters more: specialized terms or detailed speaker and time annotations.</p><p>Supported audio formats include WAV, MP3, AIFF, AAC, OGG, FLAC, MPEG, M4A, L16, Opus, A-law, mu-law and WebM. Duration limits and permitted mode combinations are published for file processing. The Transcribe family description also specifies <strong>96K tokens</strong> of context and <strong>32K tokens</strong> of text output; these family characteristics do not replace file limits in the selected method.</p><p>Context caching, code execution, file search, function calling, image creation and Thinking are not supported. The model specializes in obtaining text and annotations from audio, not generating new speech.</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 · Speech-to-text</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>gemini-3.5-transcribe</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\">file</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span><code>file</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 bytes: 67,108,864</div><div>File formats: wav, mp3, m4a, ogg, webm, flac</div><div>Content type: multipart/form-data</div><div>Maximum duration, seconds: 600</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: actual audio file</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>material_types</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>audio</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>null</td></tr><tr><th data-cell-label=\"Parameter\" scope=\"row\"><span class=\"card-cell-label\">Parameter</span><code>optional_controls</code></th><td data-cell-label=\"Contract\"><span class=\"card-cell-label\">Contract</span>null</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\">Method shapes and IDs are exact; supplier capability is separate from admission.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Pricing</h3><h4>Ailoot method rates</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> Speech-to-text</b><code>POST /v1/audio/transcriptions</code></header><dl><div><dt>Input</dt><dd>$0.01 <em>per minute or part thereof</em></dd></div></dl></section><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></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Example requests</h3><h4>Ailoot · Speech-to-text</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-306-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-306-panel-0\" aria-selected=\"true\" tabindex=\"0\">Transcription example</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-306-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-306-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 MP3 recording}&quot;\nexport AILOOT_AUDIO_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport os\nfrom pathlib import Path\nf=Path(os.environ[&quot;AILOOT_AUDIO_FILE&quot;])\nif not f.is_file() or f.suffix.lower()!=&quot;.mp3&quot;:raise SystemExit(&quot;Choose your actual MP3 recording&quot;)\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; \\\n  --form-string model=gemini-3.5-transcribe -F &quot;file=@$AILOOT_AUDIO_FILE&quot; \\\n  -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;result.json&quot;).read_text()),ensure_ascii=False,indent=2))\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 · Speech-to-text</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\">Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.</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></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></tr><tr><th data-cell-label=\"Field\" scope=\"row\"><span class=\"card-cell-label\">Field</span><code class=\"card-field-name\">segments[]</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span>object</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></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></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></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=\"Core\"><b>Ailoot</b> <a href=\"#m=gemini-3.5-transcribe&amp;route=Core&amp;caller=gemini-3.5-transcribe&amp;fmt=transcriptions\"><code>gemini-3.5-transcribe</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=gemini-3.5-transcribe&amp;route=Core&amp;caller=gemini-3.5-transcribe&amp;fmt=transcriptions\"><code>gemini-3.5-transcribe</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "gemini-3.5-transcribe",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "gemini-3.5-transcribe",
        "route_label": "Core"
      },
      "method_key": "Core|transcriptions|/v1/audio/transcriptions|gemini-3.5-transcribe",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
            "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."
            },
            "material_combinations": [
              {
                "content_type": "multipart/form-data",
                "mode": "speech_to_text",
                "required": [
                  "actual audio file"
                ]
              }
            ],
            "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": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
              "family": "transcription",
              "fields": [
                {
                  "description": null,
                  "name": "text",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "segments[]",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "asset_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "gemini-3.5-transcribe"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "content_type": "multipart/form-data",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "file_formats": [
                  "wav",
                  "mp3",
                  "m4a",
                  "ogg",
                  "webm",
                  "flac"
                ],
                "maximum_bytes": 67108864,
                "maximum_seconds": 600,
                "name": "file",
                "required": true,
                "type": "file"
              },
              {
                "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": []
          },
          "hints": [
            "Method shapes and IDs are exact; supplier capability is separate from admission."
          ],
          "input": {
            "material_types": [
              "audio"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "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"
          },
          "operation_modes": [
            "audio_transcriptions"
          ],
          "output": {
            "family": [
              "text"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set your actual MP3 recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport os\nfrom pathlib import Path\nf=Path(os.environ[\"AILOOT_AUDIO_FILE\"])\nif not f.is_file() or f.suffix.lower()!=\".mp3\":raise SystemExit(\"Choose your actual MP3 recording\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" \\\n  --form-string model=gemini-3.5-transcribe -F \"file=@$AILOOT_AUDIO_FILE\" \\\n  -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Transcribe your actual recording",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Speech-to-text",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.01,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_started_minute",
                "label": "per minute or part thereof",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "gemini-3.5-transcribe",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_started_minute",
        "units": [
          {
            "key": "audio_input_started_minute",
            "label": "per minute or part thereof",
            "side": "in",
            "usd": 0.01
          }
        ]
      }
    }
  ],
  "model_id": "gemini-3.5-transcribe",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "0a30937b693600603b26a987582532f1a99518cd71d1efb36d5c725737ab222d",
    "input_html_sha256": "ebcf6e07b4d0afea4f7c6121f7e559c5717e93ebc243dcdd6d24e7e261403f03",
    "private_audit_sha256": "776298ae329256a08cf648c0aedb52717fd4106e96d88cea029387906ac95d67",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/en/gemini-3-5-transcribe/",
    "description": "A Google model for speech recognition, language detection, speaker diarization and word-level timestamps.",
    "locale": "en",
    "md_url": "https://ailoot.ai/models/en/gemini-3-5-transcribe/index.md",
    "title": "Gemini 3.5 Transcribe — Ailoot",
    "url": "https://ailoot.ai/models/en/gemini-3-5-transcribe/"
  },
  "rawModel": {
    "about": "Gemini 3.5 Transcribe converts an audio file into text. Alongside transcription, it supports language detection, identification of speakers, timestamps for individual words, a custom vocabulary and smart text preparation.\n\n### Languages and duration\n\n**More than 85 languages** are supported, including Russian, as well as switching between languages within a recording. Language is detected automatically. An ordinary request processes audio of **up to one hour**. With speaker diarization or word-level timestamps enabled, the limit drops to **30 minutes**.\n\nOutput includes the complete transcript and, for the relevant modes, individual word annotations. The model is intended for file processing; continuous real-time recognition belongs to the separate `gemini-3.5-transcribe-live` version.\n\n### Transcription modes\n\nVerbatim transcription is used by default. Smart mode removes filler words, accounts for speakers' self-corrections and formats the text. This mode cannot be combined with speaker diarization or word-level timestamps.\n\nSpeaker diarization supports **up to eight speakers**. Identifying who spoke a line has **experimental status** for three or more speakers. Timestamps help connect the text to the recording, but enabling them may reduce recognition accuracy.\n\n### Terms and files\n\nThe custom term vocabulary holds **up to 1000 entries**; Google notes that it is usually better to limit it to around one hundred. This vocabulary is incompatible with speaker diarization and word-level timestamps. Mode selection therefore needs to account for what matters more: specialized terms or detailed speaker and time annotations.\n\nSupported audio formats include WAV, MP3, AIFF, AAC, OGG, FLAC, MPEG, M4A, L16, Opus, A-law, mu-law and WebM. Duration limits and permitted mode combinations are published for file processing. The Transcribe family description also specifies **96K tokens** of context and **32K tokens** of text output; these family characteristics do not replace file limits in the selected method.\n\nContext caching, code execution, file search, function calling, image creation and Thinking are not supported. The model specializes in obtaining text and annotations from audio, not generating new speech.",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "ctx": null,
    "formats": [
      "transcriptions"
    ],
    "id": "gemini-3.5-transcribe",
    "input": [
      "audio"
    ],
    "kind": "transcription",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
            "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."
            },
            "material_combinations": [
              {
                "content_type": "multipart/form-data",
                "mode": "speech_to_text",
                "required": [
                  "actual audio file"
                ]
              }
            ],
            "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": "Retain complete JSON, not only text; preserve every available segment/speaker/timestamp and actual task/asset identity.",
              "family": "transcription",
              "fields": [
                {
                  "description": null,
                  "name": "text",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "segments[]",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "task_id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "asset_url",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "gemini-3.5-transcribe"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "content_type": "multipart/form-data",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "file_formats": [
                  "wav",
                  "mp3",
                  "m4a",
                  "ogg",
                  "webm",
                  "flac"
                ],
                "maximum_bytes": 67108864,
                "maximum_seconds": 600,
                "name": "file",
                "required": true,
                "type": "file"
              },
              {
                "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": []
          },
          "hints": [
            "Method shapes and IDs are exact; supplier capability is separate from admission."
          ],
          "input": {
            "material_types": [
              "audio"
            ],
            "optional_controls": null,
            "required": null
          },
          "lifecycle": {
            "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"
          },
          "operation_modes": [
            "audio_transcriptions"
          ],
          "output": {
            "family": [
              "text"
            ],
            "format": null,
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": null,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_AUDIO_FILE:?Set your actual MP3 recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport os\nfrom pathlib import Path\nf=Path(os.environ[\"AILOOT_AUDIO_FILE\"])\nif not f.is_file() or f.suffix.lower()!=\".mp3\":raise SystemExit(\"Choose your actual MP3 recording\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/transcriptions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" \\\n  --form-string model=gemini-3.5-transcribe -F \"file=@$AILOOT_AUDIO_FILE\" \\\n  -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Transcribe your actual recording",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Speech-to-text",
        "max_out": null,
        "max_tool_calls": null,
        "out": null,
        "output": [
          "text"
        ],
        "path": "/v1/audio/transcriptions",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.01,
                "amount_unit": "usd_per_display_unit",
                "key": "audio_input_started_minute",
                "label": "per minute or part thereof",
                "side": "in"
              }
            ]
          }
        ],
        "request_model_id": "gemini-3.5-transcribe",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "audio_input_started_minute",
        "units": [
          {
            "key": "audio_input_started_minute",
            "label": "per minute or part thereof",
            "side": "in",
            "usd": 0.01
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "gemini-3.5-transcribe",
        "request_model_id": "gemini-3.5-transcribe",
        "route_label": "Core"
      }
    ],
    "name": "Gemini 3.5 Transcribe",
    "price": {
      "in": 0.01,
      "in_label": "per minute or part thereof",
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": false
    },
    "short": "A Google model for speech recognition, language detection, speaker diarization and word-level timestamps."
  },
  "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": "A Google model for speech recognition, language detection, speaker diarization and word-level timestamps.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "a78727d1a2028908b46cf5583954b068c0a2fb9f7879b39d683bbcee179e08cd",
    "renderer_sha256": "fed50305bd3bcc4980ac14df23640efb8c1bc1e819f9d53643d6f43e8974d3fe"
  },
  "sourceRevision": "b945d190b42fba99eec395cdf2f1f8175d1e84088adef6c5167b6e2dbd4bd402"
}
