{
  "aboutHtml": "<p>Transcribe 1 est le modèle général de reconnaissance vocale de Fish Audio pour les enregistrements courts. Il accepte un fichier audio et renvoie les mots reconnus sous forme de texte, avec la durée de l’enregistrement, des segments horodatés facultatifs et les renseignements linguistiques lorsqu’ils sont connus. Ce modèle est utile pour une courte note vocale, une consigne parlée, un extrait d’enregistrement ou un clip audio qui nécessite une représentation textuelle lisible.</p><p>Un exemple de processus pour les notes vocales conserve l’enregistrement avec sa transcription complète et un identifiant du clip original. Une étape ultérieure de l’application peut rechercher dans ce texte, organiser la note ou produire un résumé tout en préservant la source parlée. Pour une commande, la transcription fournit les mots reconnus à l’application; toute action relève d’une étape distincte d’interprétation et d’exécution. Pour un extrait d’entrevue, notez la position du clip dans l’enregistrement complet afin de vérifier une citation au bon endroit.</p><p>Le fabricant accepte WAV, MP3, AAC, y compris M4A/MP4, FLAC et Ogg contenant Opus ou Vorbis. Pour ce modèle, les enregistrements WebM provenant d’un navigateur doivent être convertis en Ogg/Opus, MP3 ou WAV; la documentation de Pro indique la prise en charge native de conteneurs supplémentaires. Fournissez un seul fichier audio par requête. La limite de requête documentée du modèle de base est de 50 Mio, avec des fichiers MP3 et Opus de moins de 25 Mio. La taille du fichier et la longueur de l’enregistrement sont deux considérations distinctes : un fichier compressé peut respecter la limite de téléversement tout en exigeant un traitement trop long.</p><p>Transcribe 1 est conçu pour les enregistrements courts. Le fabricant recommande Pro pour les fichiers audio de plus de quelques minutes; une longue requête au modèle de base peut échouer si elle dépasse la limite de temps de traitement. Si vous découpez une source plus longue pour transcrire de courts clips, conservez le décalage initial de chacun et confirmez que la transcription renvoyée couvre tout le clip avant de combiner les résultats. Ajoutez le décalage d’origine aux temps locaux des segments pour maintenir le lien de navigation avec l’enregistrement complet. Les indications du modèle de base ne doivent pas être assimilées à la capacité distincte de 60 minutes de Pro.</p><p>La réponse du fabricant comprend le texte, la durée et les segments. La durée est exprimée en secondes, et la transcription intégrale lisible doit être conservée comme formulation principale du clip. L’horodatage est facultatif : ignore_timestamps vaut true par défaut dans l’API du fabricant, tandis que false demande des segments au niveau des mots avec texte et temps de début et de fin en secondes. Demander l’alignement allonge le traitement. Un tableau segments vide peut refléter un horodatage omis, l’absence de paroles ou un alignement temporairement indisponible; il ne doit donc pas être interprété automatiquement comme une transcription intégrale vide.</p><p>Les segments correspondent généralement à des mots, ou à un ou quelques caractères en chinois et en japonais. Leur texte omet la ponctuation et peut normaliser une valeur différemment de la transcription intégrale; il ne reproduit pas caractère par caractère la réponse lisible. Un segment peut avoir le même temps de début et de fin. Utilisez les segments pour trouver un endroit dans l’enregistrement ou préparer un affichage synchronisé, et le texte intégral lorsque les mots et la ponctuation comptent. Gardez ces deux représentations distinctes dans le livrable.</p><p>La langue est détectée automatiquement, qu’un indice linguistique facultatif soit fourni ou non. Le fabricant documente des codes ISO 639-1 en minuscules pour les indices et renvoie un code de langue pour la logique de l’application ainsi qu’un nom de langue pour l’affichage lorsqu’il est connu. La réponse indique une seule langue plutôt que toutes celles d’un enregistrement qui passe d’une langue à l’autre. Conservez les mots de la source et les métadonnées linguistiques disponibles avec le résultat plutôt que de traiter la requête de transcription comme une opération de traduction.</p><p>Pour un processus de sous-titrage, regroupez les segments horodatés consécutifs en sous-titres lisibles plutôt que d’afficher un mot à la fois. Un livrable utile est un fichier SRT ou WebVTT lié au clip original, dont les limites correspondent aux pauses et dont la quantité de texte à l’écran reste raisonnable. Vérifiez les temps manquants et assurez-vous que la fin de chaque sous-titre suit son début. Le regroupement des sous-titres et la mise en forme du fichier sont des étapes applicatives fondées sur l’alignement renvoyé; leurs choix d’affichage doivent convenir au lecteur et au public.</p><p>Les commandes documentées de Transcribe 1 sont l’audio, un indice de langue et le choix de l’horodatage. Les marqueurs de locuteur, les tours de parole structurés, les commandes d’événements émotionnels et les indices sur le nombre de locuteurs de Pro sont des fonctions distinctes; ils ne font pas partie du contrat de réponse documenté de ce modèle de base. Choisissez le livrable requis avant le traitement : texte lisible seul pour une note, ou texte avec alignement pour la navigation dans la lecture et les sous-titres. La conservation de l’identifiant du clip, de la transcription et de tout horodatage disponible rend ce résultat utile à l’étape suivante de l’application.</p>",
  "aboutText": "Transcribe 1 est le modèle général de reconnaissance vocale de Fish Audio pour les enregistrements courts. Il accepte un fichier audio et renvoie les mots reconnus sous forme de texte, avec la durée de l’enregistrement, des segments horodatés facultatifs et les renseignements linguistiques lorsqu’ils sont connus. Ce modèle est utile pour une courte note vocale, une consigne parlée, un extrait d’enregistrement ou un clip audio qui nécessite une représentation textuelle lisible.\n\nUn exemple de processus pour les notes vocales conserve l’enregistrement avec sa transcription complète et un identifiant du clip original. Une étape ultérieure de l’application peut rechercher dans ce texte, organiser la note ou produire un résumé tout en préservant la source parlée. Pour une commande, la transcription fournit les mots reconnus à l’application; toute action relève d’une étape distincte d’interprétation et d’exécution. Pour un extrait d’entrevue, notez la position du clip dans l’enregistrement complet afin de vérifier une citation au bon endroit.\n\nLe fabricant accepte WAV, MP3, AAC, y compris M4A/MP4, FLAC et Ogg contenant Opus ou Vorbis. Pour ce modèle, les enregistrements WebM provenant d’un navigateur doivent être convertis en Ogg/Opus, MP3 ou WAV; la documentation de Pro indique la prise en charge native de conteneurs supplémentaires. Fournissez un seul fichier audio par requête. La limite de requête documentée du modèle de base est de 50 Mio, avec des fichiers MP3 et Opus de moins de 25 Mio. La taille du fichier et la longueur de l’enregistrement sont deux considérations distinctes : un fichier compressé peut respecter la limite de téléversement tout en exigeant un traitement trop long.\n\nTranscribe 1 est conçu pour les enregistrements courts. Le fabricant recommande Pro pour les fichiers audio de plus de quelques minutes; une longue requête au modèle de base peut échouer si elle dépasse la limite de temps de traitement. Si vous découpez une source plus longue pour transcrire de courts clips, conservez le décalage initial de chacun et confirmez que la transcription renvoyée couvre tout le clip avant de combiner les résultats. Ajoutez le décalage d’origine aux temps locaux des segments pour maintenir le lien de navigation avec l’enregistrement complet. Les indications du modèle de base ne doivent pas être assimilées à la capacité distincte de 60 minutes de Pro.\n\nLa réponse du fabricant comprend le texte, la durée et les segments. La durée est exprimée en secondes, et la transcription intégrale lisible doit être conservée comme formulation principale du clip. L’horodatage est facultatif : ignore_timestamps vaut true par défaut dans l’API du fabricant, tandis que false demande des segments au niveau des mots avec texte et temps de début et de fin en secondes. Demander l’alignement allonge le traitement. Un tableau segments vide peut refléter un horodatage omis, l’absence de paroles ou un alignement temporairement indisponible; il ne doit donc pas être interprété automatiquement comme une transcription intégrale vide.\n\nLes segments correspondent généralement à des mots, ou à un ou quelques caractères en chinois et en japonais. Leur texte omet la ponctuation et peut normaliser une valeur différemment de la transcription intégrale; il ne reproduit pas caractère par caractère la réponse lisible. Un segment peut avoir le même temps de début et de fin. Utilisez les segments pour trouver un endroit dans l’enregistrement ou préparer un affichage synchronisé, et le texte intégral lorsque les mots et la ponctuation comptent. Gardez ces deux représentations distinctes dans le livrable.\n\nLa langue est détectée automatiquement, qu’un indice linguistique facultatif soit fourni ou non. Le fabricant documente des codes ISO 639-1 en minuscules pour les indices et renvoie un code de langue pour la logique de l’application ainsi qu’un nom de langue pour l’affichage lorsqu’il est connu. La réponse indique une seule langue plutôt que toutes celles d’un enregistrement qui passe d’une langue à l’autre. Conservez les mots de la source et les métadonnées linguistiques disponibles avec le résultat plutôt que de traiter la requête de transcription comme une opération de traduction.\n\nPour un processus de sous-titrage, regroupez les segments horodatés consécutifs en sous-titres lisibles plutôt que d’afficher un mot à la fois. Un livrable utile est un fichier SRT ou WebVTT lié au clip original, dont les limites correspondent aux pauses et dont la quantité de texte à l’écran reste raisonnable. Vérifiez les temps manquants et assurez-vous que la fin de chaque sous-titre suit son début. Le regroupement des sous-titres et la mise en forme du fichier sont des étapes applicatives fondées sur l’alignement renvoyé; leurs choix d’affichage doivent convenir au lecteur et au public.\n\nLes commandes documentées de Transcribe 1 sont l’audio, un indice de langue et le choix de l’horodatage. Les marqueurs de locuteur, les tours de parole structurés, les commandes d’événements émotionnels et les indices sur le nombre de locuteurs de Pro sont des fonctions distinctes; ils ne font pas partie du contrat de réponse documenté de ce modèle de base. Choisissez le livrable requis avant le traitement : texte lisible seul pour une note, ou texte avec alignement pour la navigation dans la lecture et les sous-titres. La conservation de l’identifiant du clip, de la transcription et de tout horodatage disponible rend ce résultat utile à l’étape suivante de l’application.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "07e01f637ef21cd47c461e02ac961ee779e960f68ca3da87bc93b56a9ba93a5e",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr-ca",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">Fish Audio: Transcribe 1</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>Fish Audio /</span><code>fish-audio/transcribe-1</code><button type=\"button\" id=\"copy-id\">Copier l’ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Rubriques de la fiche modèle\"><button type=\"button\" data-card-jump=\"overview\">Pour commencer</button><button type=\"button\" data-card-jump=\"methods\">Entrées et méthodes</button><button type=\"button\" data-card-jump=\"pricing\">Tarifs</button><button type=\"button\" data-card-jump=\"examples\">Exemples</button><button type=\"button\" data-card-jump=\"results\">Résultats</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Méthodes API\"><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\">Reconnaissance</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\">Pour commencer</h3><p class=\"mdesc-full\">Transcribe 1 convertit de courts enregistrements audio en texte avec détection automatique de la langue et horodatage facultatif des mots. Utilisez la transcription pour des notes vocales, des extraits interrogeables ou la préparation de sous-titres, en conservant les segments horodatés séparément du texte intégral lisible.</p><dl class=\"card-io\" data-card-io><div><dt>Entrées acceptées</dt><dd>Audio</dd></div><div><dt>Résultats</dt><dd>Texte</dd></div></dl><details class=\"card-about\"><summary>À propos du modèle</summary><p class=\"note-s\" data-model-method-boundary>Cette description présente les capacités du modèle. Les entrées, sorties et options disponibles dans Ailoot pour la méthode sélectionnée figurent ci-dessous.</p><div class=\"mabout\" id=\"m-about\"><p>Transcribe 1 est le modèle général de reconnaissance vocale de Fish Audio pour les enregistrements courts. Il accepte un fichier audio et renvoie les mots reconnus sous forme de texte, avec la durée de l’enregistrement, des segments horodatés facultatifs et les renseignements linguistiques lorsqu’ils sont connus. Ce modèle est utile pour une courte note vocale, une consigne parlée, un extrait d’enregistrement ou un clip audio qui nécessite une représentation textuelle lisible.</p><p>Un exemple de processus pour les notes vocales conserve l’enregistrement avec sa transcription complète et un identifiant du clip original. Une étape ultérieure de l’application peut rechercher dans ce texte, organiser la note ou produire un résumé tout en préservant la source parlée. Pour une commande, la transcription fournit les mots reconnus à l’application; toute action relève d’une étape distincte d’interprétation et d’exécution. Pour un extrait d’entrevue, notez la position du clip dans l’enregistrement complet afin de vérifier une citation au bon endroit.</p><p>Le fabricant accepte WAV, MP3, AAC, y compris M4A/MP4, FLAC et Ogg contenant Opus ou Vorbis. Pour ce modèle, les enregistrements WebM provenant d’un navigateur doivent être convertis en Ogg/Opus, MP3 ou WAV; la documentation de Pro indique la prise en charge native de conteneurs supplémentaires. Fournissez un seul fichier audio par requête. La limite de requête documentée du modèle de base est de 50 Mio, avec des fichiers MP3 et Opus de moins de 25 Mio. La taille du fichier et la longueur de l’enregistrement sont deux considérations distinctes : un fichier compressé peut respecter la limite de téléversement tout en exigeant un traitement trop long.</p><p>Transcribe 1 est conçu pour les enregistrements courts. Le fabricant recommande Pro pour les fichiers audio de plus de quelques minutes; une longue requête au modèle de base peut échouer si elle dépasse la limite de temps de traitement. Si vous découpez une source plus longue pour transcrire de courts clips, conservez le décalage initial de chacun et confirmez que la transcription renvoyée couvre tout le clip avant de combiner les résultats. Ajoutez le décalage d’origine aux temps locaux des segments pour maintenir le lien de navigation avec l’enregistrement complet. Les indications du modèle de base ne doivent pas être assimilées à la capacité distincte de 60 minutes de Pro.</p><p>La réponse du fabricant comprend le texte, la durée et les segments. La durée est exprimée en secondes, et la transcription intégrale lisible doit être conservée comme formulation principale du clip. L’horodatage est facultatif : ignore_timestamps vaut true par défaut dans l’API du fabricant, tandis que false demande des segments au niveau des mots avec texte et temps de début et de fin en secondes. Demander l’alignement allonge le traitement. Un tableau segments vide peut refléter un horodatage omis, l’absence de paroles ou un alignement temporairement indisponible; il ne doit donc pas être interprété automatiquement comme une transcription intégrale vide.</p><p>Les segments correspondent généralement à des mots, ou à un ou quelques caractères en chinois et en japonais. Leur texte omet la ponctuation et peut normaliser une valeur différemment de la transcription intégrale; il ne reproduit pas caractère par caractère la réponse lisible. Un segment peut avoir le même temps de début et de fin. Utilisez les segments pour trouver un endroit dans l’enregistrement ou préparer un affichage synchronisé, et le texte intégral lorsque les mots et la ponctuation comptent. Gardez ces deux représentations distinctes dans le livrable.</p><p>La langue est détectée automatiquement, qu’un indice linguistique facultatif soit fourni ou non. Le fabricant documente des codes ISO 639-1 en minuscules pour les indices et renvoie un code de langue pour la logique de l’application ainsi qu’un nom de langue pour l’affichage lorsqu’il est connu. La réponse indique une seule langue plutôt que toutes celles d’un enregistrement qui passe d’une langue à l’autre. Conservez les mots de la source et les métadonnées linguistiques disponibles avec le résultat plutôt que de traiter la requête de transcription comme une opération de traduction.</p><p>Pour un processus de sous-titrage, regroupez les segments horodatés consécutifs en sous-titres lisibles plutôt que d’afficher un mot à la fois. Un livrable utile est un fichier SRT ou WebVTT lié au clip original, dont les limites correspondent aux pauses et dont la quantité de texte à l’écran reste raisonnable. Vérifiez les temps manquants et assurez-vous que la fin de chaque sous-titre suit son début. Le regroupement des sous-titres et la mise en forme du fichier sont des étapes applicatives fondées sur l’alignement renvoyé; leurs choix d’affichage doivent convenir au lecteur et au public.</p><p>Les commandes documentées de Transcribe 1 sont l’audio, un indice de langue et le choix de l’horodatage. Les marqueurs de locuteur, les tours de parole structurés, les commandes d’événements émotionnels et les indices sur le nombre de locuteurs de Pro sont des fonctions distinctes; ils ne font pas partie du contrat de réponse documenté de ce modèle de base. Choisissez le livrable requis avant le traitement : texte lisible seul pour une note, ou texte avec alignement pour la navigation dans la lecture et les sous-titres. La conservation de l’identifiant du clip, de la transcription et de tout horodatage disponible rend ce résultat utile à l’étape suivante de l’application.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible dans Ailoot · entrées et méthodes</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Transcription audio</b> <code>POST /v1/audio/transcriptions</code></summary><dl class=\"method-capabilities\"><div><dt>Entrée</dt><dd><code>audio</code></dd></div><div><dt>Sortie</dt><dd><code>text</code></dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Champ</th><th>Type</th><th>Exigence</th><th>Valeurs et limites</th><th>Par défaut</th></tr></thead><tbody><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</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=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span><div>fish-audio/transcribe-1</div></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</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=\"Exigence\"><span class=\"card-cell-label\">Exigence</span>Obligatoire</td><td data-cell-label=\"Valeurs et limites\"><span class=\"card-cell-label\">Valeurs et limites</span></td><td data-cell-label=\"Par défaut\" data-default=\"unspecified\"><span class=\"card-cell-label\">Par défaut</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>Paramètres et cycle de vie de la méthode</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Paramètre</th><th>Contrat</th></tr></thead><tbody><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>content_type</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>application/json</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>required</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>model, input_audio</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>material_types</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>audio</td></tr><tr><th data-cell-label=\"Paramètre\" scope=\"row\"><span class=\"card-cell-label\">Paramètre</span><code>material_conditions</code></th><td data-cell-label=\"Contrat\"><span class=\"card-cell-label\">Contrat</span>L’exemple lit votre fichier PCM WAV réel et non vide, encode tous les octets du fichier en base64 et envoie input_audio.format avec la valeur wav.</td></tr></tbody></table></div><p>Cycle de vie : <code>synchronous_result_then_owned_library</code></p><p class=\"note-s\"><code>GET /v1/media/tasks/{task_id}</code> · task_id exact d’un enregistrement média existant appartenant à votre compte</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></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Tarifs</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>Les tarifs n’ajoutent pas d’options de requête. Les paramètres pris en charge figurent dans la méthode sélectionnée.</p><dl data-price-conditions><dt>Mode rapide</dt><dd>Non précisé <span class=\"note-s\">Lorsque le mode rapide est sélectionné</span></dd><dt>Mode Flex</dt><dd>Non précisé <span class=\"note-s\">Lorsque le mode flex est sélectionné</span></dd><dt>Effort de raisonnement maximal</dt><dd>Non précisé <span class=\"note-s\">Lorsque l’effort de raisonnement maximal utilise l’ajustement par défaut (default)</span></dd></dl></div><div data-declared-tariff-pricing><h4>Tarifs Ailoot</h4><h4>Prix par configuration</h4><p class=\"note-s\">Associez chaque coût aux conditions indiquées. Utilisez un seul tarif pour chaque ensemble de configurations alternatives.</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>Configuration</th><th>Barème tarifaire</th><th>Unité de facturation</th><th>Coût</th></tr></thead><tbody><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>Tarifs de base des jetons</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>Tarif de base</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>—</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Entrée · Jetons en entrée</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Sortie · Jetons en sortie</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Entrée · Lecture du cache</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Entrée · Écriture dans le cache</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div><div><span>Entrée · Écriture dans le cache, 1 h</span> <b>—</b> <span class=\"price-unit\">/ 1K jetons</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>seconde d’audio en entrée</th><td data-cell-label=\"Barème tarifaire\"><span class=\"card-cell-label\">Barème tarifaire</span>—</td><td data-cell-label=\"Unité de facturation\"><span class=\"card-cell-label\">Unité de facturation</span>par seconde d’audio en entrée</td><td data-cell-label=\"Coût\"><span class=\"card-cell-label\">Coût</span><div><span>Entrée · seconde d’audio en entrée</span> <b>$0.0002</b> <span class=\"price-unit\">par seconde d’audio en entrée</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot réserve un montant estimé avant une requête. Après le résultat, le montant final est débité selon l’utilisation mesurée. Pour le streaming, le montant final à débiter est calculé à partir du relevé final d’utilisation. <a href=\"/docs/fr-ca/billing/reserve/\">Fonctionnement de la réservation et du débit →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Exemples de requêtes</h3><h4>Ailoot Ultra · Transcription audio</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes du code\"><button class=\"cg-tab\" id=\"model-code-1361-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1361-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · fichier WAV réel et résultat original complet</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copier le 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-1361-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1361-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 the path to your actual PCM WAV recording}&quot;\nexport AILOOT_AUDIO_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ[&#39;AILOOT_AUDIO_FILE&#39;]).read_bytes()\nif not (audio[:4] == b&#39;RIFF&#39; and audio[8:12] == b&#39;WAVE&#39;):\n    raise SystemExit(&#39;Supply your actual PCM WAV audio file&#39;)\nwith wave.open(io.BytesIO(audio), &#39;rb&#39;) as recording:\n    if recording.getcomptype() != &#39;NONE&#39; or recording.getnframes() &lt;= 0:\n        raise SystemExit(&#39;Supply a nonempty PCM WAV recording&#39;)\nrequest = {&#39;model&#39;: &#39;fish-audio/transcribe-1&#39;, &#39;input_audio&#39;: {&#39;data&#39;: base64.b64encode(audio).decode(&#39;ascii&#39;), &#39;format&#39;: &#39;wav&#39;}}\nPath(&#39;request.json&#39;).write_text(json.dumps(request, ensure_ascii=False), encoding=&#39;utf-8&#39;)\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 response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recevoir et enregistrer les résultats</h3><h4>Ailoot Ultra · Transcription audio</h4><p class=\"note-s\">Corps de réponse d’origine complet, état et en-têtes transmis. Ce gestionnaire n’ajoute aucune structure JSON universelle, aucun champ de texte et aucune enveloppe de tâche.</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>Conserver tous les résultats terminés</h5><p class=\"note-s\">Conservez chaque réponse, fichier et partie de contenu renvoyés dans leur intégralité.</p><p class=\"note-s\">Conservez la réponse complète et les en-têtes, chaque sortie effective, les identifiants initialement renvoyés et tous les champs d’utilisation. Récupérez l’opération d’origine sans soumettre à nouveau sa création.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>Si la réponse d’origine doit être vérifiée</h5><p class=\"note-s\">Conservez le X-Client-Request-ID réel et la réponse complète. Consultez les ressources d’origine appartenant à votre compte et leurs URL exactes de contenu signées; ne soumettez jamais de nouveau une création incertaine.</p></div><details class=\"card-about\" data-output-fields><summary>Champs de la réponse</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Champ</th><th>Type</th></tr></thead><tbody><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">text (when present)</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span></td></tr><tr><th data-cell-label=\"Champ\" scope=\"row\"><span class=\"card-cell-label\">Champ</span><code class=\"card-field-name\">usage (when present)</code></th><td data-cell-label=\"Type\" data-field-type><span class=\"card-cell-label\">Type</span></td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Erreurs et étapes suivantes</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Réponse</th><th>Condition</th><th>Étape suivante</th></tr></thead><tbody><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le corps JSON ou l’identifiant canonique explicite du modèle est invalide.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez la réponse et corrigez le champ de demande indiqué.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>401 · <code>authentication_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La clé API Ailoot est invalide.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Utilisez votre clé API Ailoot autorisée.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>403 · <code>permission_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le groupe de la clé n’autorise pas cette méthode.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez les détails d’erreur retournés.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>404 · <code>not_found_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>La méthode sélectionnée ne possède aucune route autorisée.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez les détails d’erreur retournés.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le tarif accepté ne peut pas obtenir la quantité d’entrée ou la borne dont il a besoin.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez la réponse; utilisez la représentation d’entrée exigée par le tarif accepté.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>503 · <code></code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le stockage, la route, le tarif de la méthode ou la réservation requis n’est pas disponible.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez la réponse d’origine complète. Une réservation incertaine n’autorise pas une nouvelle soumission.</td></tr><tr><th data-cell-label=\"Réponse\" scope=\"row\"><span class=\"card-cell-label\">Réponse</span>502 · <code>server_error</code></th><td data-cell-label=\"Condition\"><span class=\"card-cell-label\">Condition</span>Le résultat d’origine, l’utilisation ou le règlement doit être vérifié.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez l’identifiant réel de demande et la réponse d’origine. Consultez l’enregistrement existant appartenant à votre compte; ne soumettez pas de nouveau la demande de création.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias du modèle</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=fish-audio%2Ftranscribe-1&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</code></a></span></p><h4>Alias des chemins de méthode</h4><p class=\"note-s\">Utilisez les chemins de méthode indiqués ci-dessus.</p><h4>ID d’appel associés</h4><p class=\"note-s\"><a href=\"#m=fish-audio%2Ftranscribe-1&amp;route=Ultra&amp;caller=fish-audio%2Ftranscribe-1&amp;fmt=transcriptions\"><code>fish-audio/transcribe-1</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "fish-audio/transcribe-1",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|fish-audio%2Ftranscribe-1",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "Le corps JSON ou l’identifiant canonique explicite du modèle est invalide.",
                "http_status": 400,
                "recovery": "Conservez la réponse et corrigez le champ de demande indiqué.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La clé API Ailoot est invalide.",
                "http_status": 401,
                "recovery": "Utilisez votre clé API Ailoot autorisée.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Le groupe de la clé n’autorise pas cette méthode.",
                "http_status": 403,
                "recovery": "Conservez les détails d’erreur retournés.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "La méthode sélectionnée ne possède aucune route autorisée.",
                "http_status": 404,
                "recovery": "Conservez les détails d’erreur retournés.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Le tarif accepté ne peut pas obtenir la quantité d’entrée ou la borne dont il a besoin.",
                "http_status": 422,
                "recovery": "Conservez la réponse; utilisez la représentation d’entrée exigée par le tarif accepté.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Le stockage, la route, le tarif de la méthode ou la réservation requis n’est pas disponible.",
                "http_status": 503,
                "recovery": "Conservez la réponse d’origine complète. Une réservation incertaine n’autorise pas une nouvelle soumission.",
                "type": null
              },
              {
                "code": null,
                "condition": "Le résultat d’origine, l’utilisation ou le règlement doit être vérifié.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Conservez l’identifiant réel de demande et la réponse d’origine. Consultez l’enregistrement existant appartenant à votre compte; ne soumettez pas de nouveau la demande de création.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "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 content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conservez le X-Client-Request-ID réel et la réponse complète. Consultez les ressources d’origine appartenant à votre compte et leurs URL exactes de contenu signées; ne soumettez jamais de nouveau une création incertaine."
            },
            "outputs": {
              "all_results": "Conservez la réponse complète et les en-têtes, chaque sortie effective, les identifiants initialement renvoyés et tous les champs d’utilisation. Récupérez l’opération d’origine sans soumettre à nouveau sa création.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Corps de réponse d’origine complet, état et en-têtes transmis. Ce gestionnaire n’ajoute aucune structure JSON universelle, aucun champ de texte et aucune enveloppe de tâche."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "L’exemple lit votre fichier PCM WAV réel et non vide, encode tous les octets du fichier en base64 et envoie input_audio.format avec la valeur wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "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 content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id exact d’un enregistrement média existant appartenant à votre compte",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "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 the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\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 response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Transcription audio",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "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",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "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",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "e37274dfc167177b479cd0703022067c0b3f29354c16c74e5060b8ce89dc7d12",
    "input_html_sha256": "c3d45736890a66cb1814721889b7d7bf52cddb3f7bc339ea56d78cacc086a42b",
    "private_audit_sha256": "d77d188ba79269dfea82ca30872bea7879a2c5f2c9521e1afcc2b7d55d6083fc",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr-ca/fish-audio-transcribe-1/",
    "description": "Transcribe 1 convertit de courts enregistrements audio en texte avec détection automatique de la langue et horodatage facultatif des mots. Utilisez la transcription pour des notes vocales, des extraits interrogeables ou la préparation de sous-titres, en conservant les segments horodatés séparément du texte intégral lisible.",
    "locale": "fr-ca",
    "md_url": "https://ailoot.ai/models/fr-ca/fish-audio-transcribe-1/index.md",
    "title": "Fish Audio: Transcribe 1 — Ailoot",
    "url": "https://ailoot.ai/models/fr-ca/fish-audio-transcribe-1/"
  },
  "rawModel": {
    "about": "Transcribe 1 est le modèle général de reconnaissance vocale de Fish Audio pour les enregistrements courts. Il accepte un fichier audio et renvoie les mots reconnus sous forme de texte, avec la durée de l’enregistrement, des segments horodatés facultatifs et les renseignements linguistiques lorsqu’ils sont connus. Ce modèle est utile pour une courte note vocale, une consigne parlée, un extrait d’enregistrement ou un clip audio qui nécessite une représentation textuelle lisible.\n\nUn exemple de processus pour les notes vocales conserve l’enregistrement avec sa transcription complète et un identifiant du clip original. Une étape ultérieure de l’application peut rechercher dans ce texte, organiser la note ou produire un résumé tout en préservant la source parlée. Pour une commande, la transcription fournit les mots reconnus à l’application; toute action relève d’une étape distincte d’interprétation et d’exécution. Pour un extrait d’entrevue, notez la position du clip dans l’enregistrement complet afin de vérifier une citation au bon endroit.\n\nLe fabricant accepte WAV, MP3, AAC, y compris M4A/MP4, FLAC et Ogg contenant Opus ou Vorbis. Pour ce modèle, les enregistrements WebM provenant d’un navigateur doivent être convertis en Ogg/Opus, MP3 ou WAV; la documentation de Pro indique la prise en charge native de conteneurs supplémentaires. Fournissez un seul fichier audio par requête. La limite de requête documentée du modèle de base est de 50 Mio, avec des fichiers MP3 et Opus de moins de 25 Mio. La taille du fichier et la longueur de l’enregistrement sont deux considérations distinctes : un fichier compressé peut respecter la limite de téléversement tout en exigeant un traitement trop long.\n\nTranscribe 1 est conçu pour les enregistrements courts. Le fabricant recommande Pro pour les fichiers audio de plus de quelques minutes; une longue requête au modèle de base peut échouer si elle dépasse la limite de temps de traitement. Si vous découpez une source plus longue pour transcrire de courts clips, conservez le décalage initial de chacun et confirmez que la transcription renvoyée couvre tout le clip avant de combiner les résultats. Ajoutez le décalage d’origine aux temps locaux des segments pour maintenir le lien de navigation avec l’enregistrement complet. Les indications du modèle de base ne doivent pas être assimilées à la capacité distincte de 60 minutes de Pro.\n\nLa réponse du fabricant comprend le texte, la durée et les segments. La durée est exprimée en secondes, et la transcription intégrale lisible doit être conservée comme formulation principale du clip. L’horodatage est facultatif : ignore_timestamps vaut true par défaut dans l’API du fabricant, tandis que false demande des segments au niveau des mots avec texte et temps de début et de fin en secondes. Demander l’alignement allonge le traitement. Un tableau segments vide peut refléter un horodatage omis, l’absence de paroles ou un alignement temporairement indisponible; il ne doit donc pas être interprété automatiquement comme une transcription intégrale vide.\n\nLes segments correspondent généralement à des mots, ou à un ou quelques caractères en chinois et en japonais. Leur texte omet la ponctuation et peut normaliser une valeur différemment de la transcription intégrale; il ne reproduit pas caractère par caractère la réponse lisible. Un segment peut avoir le même temps de début et de fin. Utilisez les segments pour trouver un endroit dans l’enregistrement ou préparer un affichage synchronisé, et le texte intégral lorsque les mots et la ponctuation comptent. Gardez ces deux représentations distinctes dans le livrable.\n\nLa langue est détectée automatiquement, qu’un indice linguistique facultatif soit fourni ou non. Le fabricant documente des codes ISO 639-1 en minuscules pour les indices et renvoie un code de langue pour la logique de l’application ainsi qu’un nom de langue pour l’affichage lorsqu’il est connu. La réponse indique une seule langue plutôt que toutes celles d’un enregistrement qui passe d’une langue à l’autre. Conservez les mots de la source et les métadonnées linguistiques disponibles avec le résultat plutôt que de traiter la requête de transcription comme une opération de traduction.\n\nPour un processus de sous-titrage, regroupez les segments horodatés consécutifs en sous-titres lisibles plutôt que d’afficher un mot à la fois. Un livrable utile est un fichier SRT ou WebVTT lié au clip original, dont les limites correspondent aux pauses et dont la quantité de texte à l’écran reste raisonnable. Vérifiez les temps manquants et assurez-vous que la fin de chaque sous-titre suit son début. Le regroupement des sous-titres et la mise en forme du fichier sont des étapes applicatives fondées sur l’alignement renvoyé; leurs choix d’affichage doivent convenir au lecteur et au public.\n\nLes commandes documentées de Transcribe 1 sont l’audio, un indice de langue et le choix de l’horodatage. Les marqueurs de locuteur, les tours de parole structurés, les commandes d’événements émotionnels et les indices sur le nombre de locuteurs de Pro sont des fonctions distinctes; ils ne font pas partie du contrat de réponse documenté de ce modèle de base. Choisissez le livrable requis avant le traitement : texte lisible seul pour une note, ou texte avec alignement pour la navigation dans la lecture et les sous-titres. La conservation de l’identifiant du clip, de la transcription et de tout horodatage disponible rend ce résultat utile à l’étape suivante de l’application.",
    "alias_of": null,
    "aliases": [],
    "author": "Fish Audio",
    "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": "La tarification complète de la configuration figure dans les détails."
      }
    ],
    "ctx": null,
    "formats": [
      "transcriptions"
    ],
    "id": "fish-audio/transcribe-1",
    "input": [
      "audio"
    ],
    "kind": "audio",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "errors": [
              {
                "code": null,
                "condition": "Le corps JSON ou l’identifiant canonique explicite du modèle est invalide.",
                "http_status": 400,
                "recovery": "Conservez la réponse et corrigez le champ de demande indiqué.",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "La clé API Ailoot est invalide.",
                "http_status": 401,
                "recovery": "Utilisez votre clé API Ailoot autorisée.",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "Le groupe de la clé n’autorise pas cette méthode.",
                "http_status": 403,
                "recovery": "Conservez les détails d’erreur retournés.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "La méthode sélectionnée ne possède aucune route autorisée.",
                "http_status": 404,
                "recovery": "Conservez les détails d’erreur retournés.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Le tarif accepté ne peut pas obtenir la quantité d’entrée ou la borne dont il a besoin.",
                "http_status": 422,
                "recovery": "Conservez la réponse; utilisez la représentation d’entrée exigée par le tarif accepté.",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "Le stockage, la route, le tarif de la méthode ou la réservation requis n’est pas disponible.",
                "http_status": 503,
                "recovery": "Conservez la réponse d’origine complète. Une réservation incertaine n’autorise pas une nouvelle soumission.",
                "type": null
              },
              {
                "code": null,
                "condition": "Le résultat d’origine, l’utilisation ou le règlement doit être vérifié.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Conservez l’identifiant réel de demande et la réponse d’origine. Consultez l’enregistrement existant appartenant à votre compte; ne soumettez pas de nouveau la demande de création.",
                "response_headers": {
                  "x-should-retry": "false"
                },
                "type": "server_error"
              }
            ],
            "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 content URL"
                }
              ],
              "dedicated_method_polling_or_cancel": false,
              "mode": "synchronous_result_then_owned_library",
              "original_POST_adds_task_envelope": false,
              "status": [
                {
                  "http": "GET",
                  "id_source": "exact task_id from an existing owned media record",
                  "path": "/v1/media/tasks/{task_id}"
                }
              ],
              "unknown": "Conservez le X-Client-Request-ID réel et la réponse complète. Consultez les ressources d’origine appartenant à votre compte et leurs URL exactes de contenu signées; ne soumettez jamais de nouveau une création incertaine."
            },
            "outputs": {
              "all_results": "Conservez la réponse complète et les en-têtes, chaque sortie effective, les identifiants initialement renvoyés et tous les champs d’utilisation. Récupérez l’opération d’origine sans soumettre à nouveau sa création.",
              "family": "text",
              "fields": [
                {
                  "description": null,
                  "name": "text (when present)",
                  "type": null
                },
                {
                  "description": null,
                  "name": "usage (when present)",
                  "type": null
                }
              ],
              "result": "Corps de réponse d’origine complet, état et en-têtes transmis. Ce gestionnaire n’ajoute aucune structure JSON universelle, aucun champ de texte et aucune enveloppe de tâche."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "fish-audio/transcribe-1"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "default_known": false,
                "enum_known": false,
                "name": "input_audio",
                "required": true,
                "type": "object"
              }
            ],
            "request_schema": {
              "properties": {
                "input_audio": {
                  "properties": {
                    "data": {
                      "contentEncoding": "base64",
                      "type": "string"
                    },
                    "format": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "format"
                  ],
                  "type": "object"
                },
                "model": {
                  "enum": [
                    "fish-audio/transcribe-1"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "model",
                "input_audio"
              ],
              "type": "object"
            },
            "schema_template": {
              "actual_file_preparation_required": true,
              "body": {
                "input_audio": {
                  "data": "${BASE64_ACTUAL_WAV_BYTES}",
                  "format": "wav"
                },
                "model": "fish-audio/transcribe-1"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "L’exemple lit votre fichier PCM WAV réel et non vide, encode tous les octets du fichier en base64 et envoie input_audio.format avec la valeur wav."
            ],
            "material_types": [
              "audio"
            ],
            "required": [
              "model",
              "input_audio"
            ]
          },
          "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 content URL"
              }
            ],
            "dedicated_method_polling_or_cancel": false,
            "mode": "synchronous_result_then_owned_library",
            "original_POST_adds_task_envelope": false,
            "status": [
              {
                "http": "GET",
                "id_source": "task_id exact d’un enregistrement média existant appartenant à votre compte",
                "path": "/v1/media/tasks/{task_id}"
              }
            ],
            "unknown": "Retain the actual X-Client-Request-ID and complete response. Read the original owned assets and their exact signed content URLs; never resubmit an uncertain creation."
          },
          "method": {
            "http": "POST",
            "path": "/v1/audio/transcriptions"
          },
          "output": {
            "all_results": "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again.",
            "family": "text",
            "fields": [
              {
                "description": null,
                "name": "text (when present)",
                "type": null
              },
              {
                "description": null,
                "name": "usage (when present)",
                "type": null
              }
            ],
            "result": "Complete original response body, status and forwarded headers. No universal JSON shape, text field or task envelope is added by this handler."
          }
        },
        "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 the path to your actual PCM WAV recording}\"\nexport AILOOT_AUDIO_FILE\npython3 - <<'PY_REQUEST'\nimport base64, io, json, os, wave\nfrom pathlib import Path\naudio = Path(os.environ['AILOOT_AUDIO_FILE']).read_bytes()\nif not (audio[:4] == b'RIFF' and audio[8:12] == b'WAVE'):\n    raise SystemExit('Supply your actual PCM WAV audio file')\nwith wave.open(io.BytesIO(audio), 'rb') as recording:\n    if recording.getcomptype() != 'NONE' or recording.getnframes() <= 0:\n        raise SystemExit('Supply a nonempty PCM WAV recording')\nrequest = {'model': 'fish-audio/transcribe-1', 'input_audio': {'data': base64.b64encode(audio).decode('ascii'), 'format': 'wav'}}\nPath('request.json').write_text(json.dumps(request, ensure_ascii=False), encoding='utf-8')\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 response.bin\n# Retain the complete original response, headers and actual X-Client-Request-ID.\n# Read existing owned records for recovery; do not resubmit an uncertain operation.\n",
            "label": "curl · actual WAV file and complete original result",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "transcriptions",
        "hints": [
          "The example reads your actual nonempty PCM WAV file, encodes the complete file bytes as base64 and sends input_audio.format as wav.",
          "The format value in the example is the documented recipe; no model-specific format list, limit or default is asserted.",
          "Retain the complete response and headers, every actual output, original returned identifiers and all usage fields. Recover the original operation without submitting creation again."
        ],
        "http": "POST",
        "in": null,
        "input": [
          "audio"
        ],
        "label": "Transcription audio",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "native_endpoint": "audio_transcriptions",
        "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",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/media/tasks/{task_id}"
        ],
        "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",
        "request_model_id": "fish-audio/transcribe-1",
        "route_label": "Ultra"
      }
    ],
    "name": "Fish Audio: Transcribe 1",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Transcribe 1 convertit de courts enregistrements audio en texte avec détection automatique de la langue et horodatage facultatif des mots. Utilisez la transcription pour des notes vocales, des extraits interrogeables ou la préparation de sous-titres, en conservant les segments horodatés séparément du texte intégral lisible."
  },
  "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 convertit de courts enregistrements audio en texte avec détection automatique de la langue et horodatage facultatif des mots. Utilisez la transcription pour des notes vocales, des extraits interrogeables ou la préparation de sous-titres, en conservant les segments horodatés séparément du texte intégral lisible.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "957f47202c833a4c041cd289d889a7fa7d9c86a0b1be5ecff3116b894d2cd59c",
    "renderer_sha256": "98cb81b9c4ef4923c22e586170e7cdf67056351148a1666fb03dd6a4a26716a3"
  },
  "sourceRevision": "7782a10ca136aee08a70d66c4c2178d1e8d5a83caab4babeab16688ea417b9d7"
}
