{
  "aboutHtml": "<p>Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI destiné à convertir la parole enregistrée en texte. Dans son profil Sync, un court extrait audio produit une transcription complète en une réponse. Il convient aux messages vocaux, à la saisie push-to-talk et aux tours de conversation distincts où l’application sait déjà quand l’enregistrement doit se terminer.</p><p>Préparez l’audio sous forme d’extrait délimité. Les exigences Sync d’AssemblyAI acceptent des durées de 80 millisecondes à 120 secondes, avec une taille maximale de fichier de 40 MB. Les formats pris en charge sont WAV ou PCM brut signé 16 bits little-endian. L’audio peut être mono ou stéréo, la stéréo étant mixée en interne en mono. Les fréquences d’échantillonnage prises en charge sont 8, 16, 22.05, 24, 32, 44.1 et 48 kHz. Un en-tête WAV fournit la fréquence d’échantillonnage et le nombre de canaux ; pour du PCM brut, ces valeurs doivent être fournies séparément dans la configuration de transcription.</p><p>Enregistrez l’énoncé complet et préservez le début et la fin de la parole. Une tâche originale utile est un court message vocal d’assistance produit contenant un nom de produit, un identifiant de commande et une demande. Conservez l’extrait source afin de pouvoir vérifier la transcription sur ces détails importants. Pour un enregistrement plus long, préparez un processus adapté à la transcription longue plutôt que de traiter la limite de durée des extraits courts comme une affirmation sur la capacité audio globale du modèle.</p><p>Le résultat contient la transcription complète, une liste de mots avec un indice de confiance pour chacun et un indice de confiance global entre zéro et un. Il fournit également la durée de l’audio soumis et un identifiant de requête, ce qui permet de garder le texte associé à son extrait d’origine. Utilisez la confiance par mot pour localiser les passages qui méritent une vérification à l’écoute, en particulier les noms, les nombres et le vocabulaire métier importants pour l’application.</p><p>Les horodatages des mots sont facultatifs et désactivés par défaut. Lorsqu’ils sont demandés, chaque mot aligné peut comporter son début et sa fin en millisecondes par rapport au début de l’extrait. Le profil du fabricant laisse ces valeurs absentes lorsqu’un mot ne peut pas être aligné, plutôt que d’inventer un minutage approximatif. La précision des horodatages est meilleure pour l’audio en anglais. Conservez explicitement les minutages manquants lors de la préparation d’un surlignage mot à mot, d’une forme d’onde avec recherche ou d’un alignement de sous-titres, et comparez le texte à l’enregistrement avant de l’utiliser comme piste de sous-titres terminée.</p><p>Un prompt contextuel décrit le sujet de l’enregistrement. Il peut nommer un domaine, un scénario ou des détails précis déjà connus de l’application, et sa longueur maximale est de 6000 caractères. Commencez par une courte description adaptée à l’audio, par exemple une conversation d’assistance technique sur un appareil particulier. Le prompt fournit un contexte de reconnaissance ; il ne demande pas de réécrire le message du locuteur sous la forme d’un autre document.</p><p>Une liste distincte de termes clés oriente la reconnaissance vers un vocabulaire précis. Le profil Sync accepte jusqu’à 100 termes et 8000 caractères pour l’ensemble de cette liste. Utilisez l’orthographe exacte des noms inhabituels, des acronymes ou des termes de produit, et excluez les mots courants bien reconnus. Des listes trop longues ou inutiles peuvent provoquer des corrections excessives : concentrez donc la liste sur les mots importants de l’enregistrement. La description du contexte et la liste de vocabulaire peuvent être utilisées ensemble.</p><p>La conversation antérieure peut aussi aider à interpréter une réponse courte. Fournissez les énoncés précédents dans l’ordre chronologique, du plus ancien au plus récent, tandis que l’audio actuel reste le tour à transcrire. Le budget de contexte documenté est de 500 tours ou de 16 000 caractères au total. S’il dépasse ces plafonds ou le contexte disponible du modèle, les entrées les plus anciennes sont supprimées en premier. Cela est utile lorsqu’une brève réponse contient un identifiant ou une référence dont le sens vient de la question précédente.</p><p>La sélection de langue oriente la reconnaissance vers une ou plusieurs langues attendues. L’interface Sync actuelle accepte 32 codes de langue et utilise l’anglais par défaut lorsqu’aucune sélection n’est fournie. Pour un audio qui alterne les langues, listez les langues attendues. Un prompt contextuel personnalisé remplace le prompt par défaut géré et prend le pas sur l’orientation distincte par codes de langue : nommez donc les langues attendues dans ce prompt lorsque le contexte linguistique et le scénario sont tous deux nécessaires. Gardez la transcription dans les langues réellement parlées plutôt que de traiter la transcription comme une instruction de traduction.</p><p>Le modèle apparaît aussi dans d’autres processus de transcription AssemblyAI, tandis que les exigences d’extraits courts et les champs de résultat du profil Sync appartiennent à cette interface particulière. Le processus Dictation du fabricant ajoute une étape distincte de nettoyage du texte ; une transcription et un message réécrit sont des livrables différents. Préservez la parole reconnue si une étape ultérieure de révision ou de résumé produit une version nettoyée, afin que la formulation originale reste disponible pour comparaison.</p><p>Les livrables utiles comprennent un message vocal transcrit, un tour complet pour un assistant, du texte court issu d’un audio et consultable par recherche, ou une liste de mots horodatés pour une interface de vérification. Vérifiez les mots décisifs par rapport à l’enregistrement, préservez les alignements manquants et gardez l’extrait lié au texte renvoyé. Le résultat de reconnaissance fournit à l’étape suivante de l’application une transcription étayée par sa source ; répondre à la demande ou réviser le message relève du processus qui l’entoure.</p>",
  "aboutText": "Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI destiné à convertir la parole enregistrée en texte. Dans son profil Sync, un court extrait audio produit une transcription complète en une réponse. Il convient aux messages vocaux, à la saisie push-to-talk et aux tours de conversation distincts où l’application sait déjà quand l’enregistrement doit se terminer.\n\nPréparez l’audio sous forme d’extrait délimité. Les exigences Sync d’AssemblyAI acceptent des durées de 80 millisecondes à 120 secondes, avec une taille maximale de fichier de 40 MB. Les formats pris en charge sont WAV ou PCM brut signé 16 bits little-endian. L’audio peut être mono ou stéréo, la stéréo étant mixée en interne en mono. Les fréquences d’échantillonnage prises en charge sont 8, 16, 22.05, 24, 32, 44.1 et 48 kHz. Un en-tête WAV fournit la fréquence d’échantillonnage et le nombre de canaux ; pour du PCM brut, ces valeurs doivent être fournies séparément dans la configuration de transcription.\n\nEnregistrez l’énoncé complet et préservez le début et la fin de la parole. Une tâche originale utile est un court message vocal d’assistance produit contenant un nom de produit, un identifiant de commande et une demande. Conservez l’extrait source afin de pouvoir vérifier la transcription sur ces détails importants. Pour un enregistrement plus long, préparez un processus adapté à la transcription longue plutôt que de traiter la limite de durée des extraits courts comme une affirmation sur la capacité audio globale du modèle.\n\nLe résultat contient la transcription complète, une liste de mots avec un indice de confiance pour chacun et un indice de confiance global entre zéro et un. Il fournit également la durée de l’audio soumis et un identifiant de requête, ce qui permet de garder le texte associé à son extrait d’origine. Utilisez la confiance par mot pour localiser les passages qui méritent une vérification à l’écoute, en particulier les noms, les nombres et le vocabulaire métier importants pour l’application.\n\nLes horodatages des mots sont facultatifs et désactivés par défaut. Lorsqu’ils sont demandés, chaque mot aligné peut comporter son début et sa fin en millisecondes par rapport au début de l’extrait. Le profil du fabricant laisse ces valeurs absentes lorsqu’un mot ne peut pas être aligné, plutôt que d’inventer un minutage approximatif. La précision des horodatages est meilleure pour l’audio en anglais. Conservez explicitement les minutages manquants lors de la préparation d’un surlignage mot à mot, d’une forme d’onde avec recherche ou d’un alignement de sous-titres, et comparez le texte à l’enregistrement avant de l’utiliser comme piste de sous-titres terminée.\n\nUn prompt contextuel décrit le sujet de l’enregistrement. Il peut nommer un domaine, un scénario ou des détails précis déjà connus de l’application, et sa longueur maximale est de 6000 caractères. Commencez par une courte description adaptée à l’audio, par exemple une conversation d’assistance technique sur un appareil particulier. Le prompt fournit un contexte de reconnaissance ; il ne demande pas de réécrire le message du locuteur sous la forme d’un autre document.\n\nUne liste distincte de termes clés oriente la reconnaissance vers un vocabulaire précis. Le profil Sync accepte jusqu’à 100 termes et 8000 caractères pour l’ensemble de cette liste. Utilisez l’orthographe exacte des noms inhabituels, des acronymes ou des termes de produit, et excluez les mots courants bien reconnus. Des listes trop longues ou inutiles peuvent provoquer des corrections excessives : concentrez donc la liste sur les mots importants de l’enregistrement. La description du contexte et la liste de vocabulaire peuvent être utilisées ensemble.\n\nLa conversation antérieure peut aussi aider à interpréter une réponse courte. Fournissez les énoncés précédents dans l’ordre chronologique, du plus ancien au plus récent, tandis que l’audio actuel reste le tour à transcrire. Le budget de contexte documenté est de 500 tours ou de 16 000 caractères au total. S’il dépasse ces plafonds ou le contexte disponible du modèle, les entrées les plus anciennes sont supprimées en premier. Cela est utile lorsqu’une brève réponse contient un identifiant ou une référence dont le sens vient de la question précédente.\n\nLa sélection de langue oriente la reconnaissance vers une ou plusieurs langues attendues. L’interface Sync actuelle accepte 32 codes de langue et utilise l’anglais par défaut lorsqu’aucune sélection n’est fournie. Pour un audio qui alterne les langues, listez les langues attendues. Un prompt contextuel personnalisé remplace le prompt par défaut géré et prend le pas sur l’orientation distincte par codes de langue : nommez donc les langues attendues dans ce prompt lorsque le contexte linguistique et le scénario sont tous deux nécessaires. Gardez la transcription dans les langues réellement parlées plutôt que de traiter la transcription comme une instruction de traduction.\n\nLe modèle apparaît aussi dans d’autres processus de transcription AssemblyAI, tandis que les exigences d’extraits courts et les champs de résultat du profil Sync appartiennent à cette interface particulière. Le processus Dictation du fabricant ajoute une étape distincte de nettoyage du texte ; une transcription et un message réécrit sont des livrables différents. Préservez la parole reconnue si une étape ultérieure de révision ou de résumé produit une version nettoyée, afin que la formulation originale reste disponible pour comparaison.\n\nLes livrables utiles comprennent un message vocal transcrit, un tour complet pour un assistant, du texte court issu d’un audio et consultable par recherche, ou une liste de mots horodatés pour une interface de vérification. Vérifiez les mots décisifs par rapport à l’enregistrement, préservez les alignements manquants et gardez l’extrait lié au texte renvoyé. Le résultat de reconnaissance fournit à l’étape suivante de l’application une transcription étayée par sa source ; répondre à la demande ou réviser le message relève du processus qui l’entoure.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "bfb62a4f374798b2c5ef6b9af9271a945690274c8adeed94202ff79e4706b233",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "fr-ch",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">AssemblyAI: Universal-3.5 Pro</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Fermer\">×</button></div><div class=\"idline\"><span>AssemblyAI /</span><code>assemblyai/universal-3-5-pro</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\">Premiers pas</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|assemblyai%2Funiversal-3-5-pro\">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\">Premiers pas</h3><p class=\"mdesc-full\">Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI qui transforme un court extrait audio en transcription complète en une réponse. Son profil Sync ajoute un indice de confiance par mot, des horodatages de mots facultatifs, des indications de vocabulaire et le contexte de conversation antérieure pour la saisie vocale et les processus push-to-talk.</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>Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI destiné à convertir la parole enregistrée en texte. Dans son profil Sync, un court extrait audio produit une transcription complète en une réponse. Il convient aux messages vocaux, à la saisie push-to-talk et aux tours de conversation distincts où l’application sait déjà quand l’enregistrement doit se terminer.</p><p>Préparez l’audio sous forme d’extrait délimité. Les exigences Sync d’AssemblyAI acceptent des durées de 80 millisecondes à 120 secondes, avec une taille maximale de fichier de 40 MB. Les formats pris en charge sont WAV ou PCM brut signé 16 bits little-endian. L’audio peut être mono ou stéréo, la stéréo étant mixée en interne en mono. Les fréquences d’échantillonnage prises en charge sont 8, 16, 22.05, 24, 32, 44.1 et 48 kHz. Un en-tête WAV fournit la fréquence d’échantillonnage et le nombre de canaux ; pour du PCM brut, ces valeurs doivent être fournies séparément dans la configuration de transcription.</p><p>Enregistrez l’énoncé complet et préservez le début et la fin de la parole. Une tâche originale utile est un court message vocal d’assistance produit contenant un nom de produit, un identifiant de commande et une demande. Conservez l’extrait source afin de pouvoir vérifier la transcription sur ces détails importants. Pour un enregistrement plus long, préparez un processus adapté à la transcription longue plutôt que de traiter la limite de durée des extraits courts comme une affirmation sur la capacité audio globale du modèle.</p><p>Le résultat contient la transcription complète, une liste de mots avec un indice de confiance pour chacun et un indice de confiance global entre zéro et un. Il fournit également la durée de l’audio soumis et un identifiant de requête, ce qui permet de garder le texte associé à son extrait d’origine. Utilisez la confiance par mot pour localiser les passages qui méritent une vérification à l’écoute, en particulier les noms, les nombres et le vocabulaire métier importants pour l’application.</p><p>Les horodatages des mots sont facultatifs et désactivés par défaut. Lorsqu’ils sont demandés, chaque mot aligné peut comporter son début et sa fin en millisecondes par rapport au début de l’extrait. Le profil du fabricant laisse ces valeurs absentes lorsqu’un mot ne peut pas être aligné, plutôt que d’inventer un minutage approximatif. La précision des horodatages est meilleure pour l’audio en anglais. Conservez explicitement les minutages manquants lors de la préparation d’un surlignage mot à mot, d’une forme d’onde avec recherche ou d’un alignement de sous-titres, et comparez le texte à l’enregistrement avant de l’utiliser comme piste de sous-titres terminée.</p><p>Un prompt contextuel décrit le sujet de l’enregistrement. Il peut nommer un domaine, un scénario ou des détails précis déjà connus de l’application, et sa longueur maximale est de 6000 caractères. Commencez par une courte description adaptée à l’audio, par exemple une conversation d’assistance technique sur un appareil particulier. Le prompt fournit un contexte de reconnaissance ; il ne demande pas de réécrire le message du locuteur sous la forme d’un autre document.</p><p>Une liste distincte de termes clés oriente la reconnaissance vers un vocabulaire précis. Le profil Sync accepte jusqu’à 100 termes et 8000 caractères pour l’ensemble de cette liste. Utilisez l’orthographe exacte des noms inhabituels, des acronymes ou des termes de produit, et excluez les mots courants bien reconnus. Des listes trop longues ou inutiles peuvent provoquer des corrections excessives : concentrez donc la liste sur les mots importants de l’enregistrement. La description du contexte et la liste de vocabulaire peuvent être utilisées ensemble.</p><p>La conversation antérieure peut aussi aider à interpréter une réponse courte. Fournissez les énoncés précédents dans l’ordre chronologique, du plus ancien au plus récent, tandis que l’audio actuel reste le tour à transcrire. Le budget de contexte documenté est de 500 tours ou de 16 000 caractères au total. S’il dépasse ces plafonds ou le contexte disponible du modèle, les entrées les plus anciennes sont supprimées en premier. Cela est utile lorsqu’une brève réponse contient un identifiant ou une référence dont le sens vient de la question précédente.</p><p>La sélection de langue oriente la reconnaissance vers une ou plusieurs langues attendues. L’interface Sync actuelle accepte 32 codes de langue et utilise l’anglais par défaut lorsqu’aucune sélection n’est fournie. Pour un audio qui alterne les langues, listez les langues attendues. Un prompt contextuel personnalisé remplace le prompt par défaut géré et prend le pas sur l’orientation distincte par codes de langue : nommez donc les langues attendues dans ce prompt lorsque le contexte linguistique et le scénario sont tous deux nécessaires. Gardez la transcription dans les langues réellement parlées plutôt que de traiter la transcription comme une instruction de traduction.</p><p>Le modèle apparaît aussi dans d’autres processus de transcription AssemblyAI, tandis que les exigences d’extraits courts et les champs de résultat du profil Sync appartiennent à cette interface particulière. Le processus Dictation du fabricant ajoute une étape distincte de nettoyage du texte ; une transcription et un message réécrit sont des livrables différents. Préservez la parole reconnue si une étape ultérieure de révision ou de résumé produit une version nettoyée, afin que la formulation originale reste disponible pour comparaison.</p><p>Les livrables utiles comprennent un message vocal transcrit, un tour complet pour un assistant, du texte court issu d’un audio et consultable par recherche, ou une liste de mots horodatés pour une interface de vérification. Vérifiez les mots décisifs par rapport à l’enregistrement, préservez les alignements manquants et gardez l’extrait lié au texte renvoyé. Le résultat de reconnaissance fournit à l’étape suivante de l’application une transcription étayée par sa source ; répondre à la demande ou réviser le message relève du processus qui l’entoure.</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>assemblyai/universal-3-5-pro</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 l’intégralité de ses octets 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 provenant d’un enregistrement multimédia existant dont vous êtes propriétaire</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 · Tokens en entrée</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Sortie · Tokens en sortie</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Lecture du cache</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Écriture dans le cache</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div><div><span>Entrée · Écriture dans le cache, 1 h</span> <b>—</b> <span class=\"price-unit\">/ 1K tokens</span></div></td></tr><tr><th data-cell-label=\"Configuration\" scope=\"row\"><span class=\"card-cell-label\">Configuration</span>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.00025</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-ch/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-1073-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1073-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-1073-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1073-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;assemblyai/universal-3-5-pro&#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 complet de la réponse d’origine, état et en-têtes transmis. Ce gestionnaire n’ajoute aucune structure JSON universelle, aucun champ texte ni 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 dont vous êtes propriétaire et leurs liens de contenu signés exacts ; ne renvoyez jamais une demande de 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 indiqué dans la requête.</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 de l’erreur renvoyée.</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 dispose d’aucune route autorisée.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez les détails de l’erreur renvoyée.</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 déterminer la quantité d’entrée requise ou sa borne.</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 requise 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 est indisponible.</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 le renvoi de la demande.</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, la consommation ou la facturation définitive nécessite une vérification.</td><td data-cell-label=\"Étape suivante\"><span class=\"card-cell-label\">Étape suivante</span>Conservez l’identifiant réel de la requête et la réponse d’origine. Consultez l’enregistrement existant dont vous êtes propriétaire ; ne renvoyez pas 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=assemblyai%2Funiversal-3-5-pro&amp;route=Ultra&amp;caller=assemblyai%2Funiversal-3-5-pro&amp;fmt=transcriptions\"><code>assemblyai/universal-3-5-pro</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=assemblyai%2Funiversal-3-5-pro&amp;route=Ultra&amp;caller=assemblyai%2Funiversal-3-5-pro&amp;fmt=transcriptions\"><code>assemblyai/universal-3-5-pro</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "assemblyai/universal-3-5-pro",
        "fmt": "transcriptions",
        "http": "POST",
        "path": "/v1/audio/transcriptions",
        "request_model_id": "assemblyai/universal-3-5-pro",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|transcriptions|/v1/audio/transcriptions|assemblyai%2Funiversal-3-5-pro",
      "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 indiqué dans la requête.",
                "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 de l’erreur renvoyée.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "La méthode sélectionnée ne dispose d’aucune route autorisée.",
                "http_status": 404,
                "recovery": "Conservez les détails de l’erreur renvoyée.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Le tarif accepté ne peut pas déterminer la quantité d’entrée requise ou sa borne.",
                "http_status": 422,
                "recovery": "Conservez la réponse ; utilisez la représentation d’entrée requise 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 est indisponible.",
                "http_status": 503,
                "recovery": "Conservez la réponse d’origine complète. Une réservation incertaine n’autorise pas le renvoi de la demande.",
                "type": null
              },
              {
                "code": null,
                "condition": "Le résultat d’origine, la consommation ou la facturation définitive nécessite une vérification.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Conservez l’identifiant réel de la requête et la réponse d’origine. Consultez l’enregistrement existant dont vous êtes propriétaire ; ne renvoyez pas 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 dont vous êtes propriétaire et leurs liens de contenu signés exacts ; ne renvoyez jamais une demande de 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 complet de la réponse d’origine, état et en-têtes transmis. Ce gestionnaire n’ajoute aucune structure JSON universelle, aucun champ texte ni aucune enveloppe de tâche."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "assemblyai/universal-3-5-pro"
                ],
                "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": [
                    "assemblyai/universal-3-5-pro"
                  ],
                  "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": "assemblyai/universal-3-5-pro"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "L’exemple lit votre fichier PCM WAV réel et non vide, encode l’intégralité de ses octets 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 provenant d’un enregistrement multimédia existant dont vous êtes propriétaire",
                "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.00025",
                "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.00025",
                "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': 'assemblyai/universal-3-5-pro', '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.00025
          }
        },
        "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.00025",
                "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.00025",
                "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": "assemblyai/universal-3-5-pro",
        "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.00025",
            "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.00025",
            "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": "assemblyai/universal-3-5-pro",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "3af2cbcd199ee714feceedaccc34431af17860488b5d4d15f1f00228560eacaa",
    "input_html_sha256": "a7288bce5960c215f0a2a88b2351095c804d52dc4b75cffbc982506f1c17085b",
    "private_audit_sha256": "360ad996c028d626b3a1275abe64dbc6beb1f06eb1c0545a7e4c513599f748d4",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/fr-ch/assemblyai-universal-3-5-pro/",
    "description": "Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI qui transforme un court extrait audio en transcription complète en une réponse. Son profil Sync ajoute un indice de confiance par mot, des horodatages de mots facultatifs, des indications de vocabulaire et le contexte de conversation antérieure pour la saisie vocale et les processus push-to-talk.",
    "locale": "fr-ch",
    "md_url": "https://ailoot.ai/models/fr-ch/assemblyai-universal-3-5-pro/index.md",
    "title": "AssemblyAI: Universal-3.5 Pro — Ailoot",
    "url": "https://ailoot.ai/models/fr-ch/assemblyai-universal-3-5-pro/"
  },
  "rawModel": {
    "about": "Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI destiné à convertir la parole enregistrée en texte. Dans son profil Sync, un court extrait audio produit une transcription complète en une réponse. Il convient aux messages vocaux, à la saisie push-to-talk et aux tours de conversation distincts où l’application sait déjà quand l’enregistrement doit se terminer.\n\nPréparez l’audio sous forme d’extrait délimité. Les exigences Sync d’AssemblyAI acceptent des durées de 80 millisecondes à 120 secondes, avec une taille maximale de fichier de 40 MB. Les formats pris en charge sont WAV ou PCM brut signé 16 bits little-endian. L’audio peut être mono ou stéréo, la stéréo étant mixée en interne en mono. Les fréquences d’échantillonnage prises en charge sont 8, 16, 22.05, 24, 32, 44.1 et 48 kHz. Un en-tête WAV fournit la fréquence d’échantillonnage et le nombre de canaux ; pour du PCM brut, ces valeurs doivent être fournies séparément dans la configuration de transcription.\n\nEnregistrez l’énoncé complet et préservez le début et la fin de la parole. Une tâche originale utile est un court message vocal d’assistance produit contenant un nom de produit, un identifiant de commande et une demande. Conservez l’extrait source afin de pouvoir vérifier la transcription sur ces détails importants. Pour un enregistrement plus long, préparez un processus adapté à la transcription longue plutôt que de traiter la limite de durée des extraits courts comme une affirmation sur la capacité audio globale du modèle.\n\nLe résultat contient la transcription complète, une liste de mots avec un indice de confiance pour chacun et un indice de confiance global entre zéro et un. Il fournit également la durée de l’audio soumis et un identifiant de requête, ce qui permet de garder le texte associé à son extrait d’origine. Utilisez la confiance par mot pour localiser les passages qui méritent une vérification à l’écoute, en particulier les noms, les nombres et le vocabulaire métier importants pour l’application.\n\nLes horodatages des mots sont facultatifs et désactivés par défaut. Lorsqu’ils sont demandés, chaque mot aligné peut comporter son début et sa fin en millisecondes par rapport au début de l’extrait. Le profil du fabricant laisse ces valeurs absentes lorsqu’un mot ne peut pas être aligné, plutôt que d’inventer un minutage approximatif. La précision des horodatages est meilleure pour l’audio en anglais. Conservez explicitement les minutages manquants lors de la préparation d’un surlignage mot à mot, d’une forme d’onde avec recherche ou d’un alignement de sous-titres, et comparez le texte à l’enregistrement avant de l’utiliser comme piste de sous-titres terminée.\n\nUn prompt contextuel décrit le sujet de l’enregistrement. Il peut nommer un domaine, un scénario ou des détails précis déjà connus de l’application, et sa longueur maximale est de 6000 caractères. Commencez par une courte description adaptée à l’audio, par exemple une conversation d’assistance technique sur un appareil particulier. Le prompt fournit un contexte de reconnaissance ; il ne demande pas de réécrire le message du locuteur sous la forme d’un autre document.\n\nUne liste distincte de termes clés oriente la reconnaissance vers un vocabulaire précis. Le profil Sync accepte jusqu’à 100 termes et 8000 caractères pour l’ensemble de cette liste. Utilisez l’orthographe exacte des noms inhabituels, des acronymes ou des termes de produit, et excluez les mots courants bien reconnus. Des listes trop longues ou inutiles peuvent provoquer des corrections excessives : concentrez donc la liste sur les mots importants de l’enregistrement. La description du contexte et la liste de vocabulaire peuvent être utilisées ensemble.\n\nLa conversation antérieure peut aussi aider à interpréter une réponse courte. Fournissez les énoncés précédents dans l’ordre chronologique, du plus ancien au plus récent, tandis que l’audio actuel reste le tour à transcrire. Le budget de contexte documenté est de 500 tours ou de 16 000 caractères au total. S’il dépasse ces plafonds ou le contexte disponible du modèle, les entrées les plus anciennes sont supprimées en premier. Cela est utile lorsqu’une brève réponse contient un identifiant ou une référence dont le sens vient de la question précédente.\n\nLa sélection de langue oriente la reconnaissance vers une ou plusieurs langues attendues. L’interface Sync actuelle accepte 32 codes de langue et utilise l’anglais par défaut lorsqu’aucune sélection n’est fournie. Pour un audio qui alterne les langues, listez les langues attendues. Un prompt contextuel personnalisé remplace le prompt par défaut géré et prend le pas sur l’orientation distincte par codes de langue : nommez donc les langues attendues dans ce prompt lorsque le contexte linguistique et le scénario sont tous deux nécessaires. Gardez la transcription dans les langues réellement parlées plutôt que de traiter la transcription comme une instruction de traduction.\n\nLe modèle apparaît aussi dans d’autres processus de transcription AssemblyAI, tandis que les exigences d’extraits courts et les champs de résultat du profil Sync appartiennent à cette interface particulière. Le processus Dictation du fabricant ajoute une étape distincte de nettoyage du texte ; une transcription et un message réécrit sont des livrables différents. Préservez la parole reconnue si une étape ultérieure de révision ou de résumé produit une version nettoyée, afin que la formulation originale reste disponible pour comparaison.\n\nLes livrables utiles comprennent un message vocal transcrit, un tour complet pour un assistant, du texte court issu d’un audio et consultable par recherche, ou une liste de mots horodatés pour une interface de vérification. Vérifiez les mots décisifs par rapport à l’enregistrement, préservez les alignements manquants et gardez l’extrait lié au texte renvoyé. Le résultat de reconnaissance fournit à l’étape suivante de l’application une transcription étayée par sa source ; répondre à la demande ou réviser le message relève du processus qui l’entoure.",
    "alias_of": null,
    "aliases": [],
    "author": "AssemblyAI",
    "capabilities": {
      "context_length": 0,
      "manufacturer_input": [
        "audio"
      ],
      "manufacturer_output": [
        "transcription"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.00025",
            "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.00025",
            "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": "assemblyai/universal-3-5-pro",
    "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 indiqué dans la requête.",
                "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 de l’erreur renvoyée.",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "La méthode sélectionnée ne dispose d’aucune route autorisée.",
                "http_status": 404,
                "recovery": "Conservez les détails de l’erreur renvoyée.",
                "type": "not_found_error"
              },
              {
                "code": null,
                "condition": "Le tarif accepté ne peut pas déterminer la quantité d’entrée requise ou sa borne.",
                "http_status": 422,
                "recovery": "Conservez la réponse ; utilisez la représentation d’entrée requise 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 est indisponible.",
                "http_status": 503,
                "recovery": "Conservez la réponse d’origine complète. Une réservation incertaine n’autorise pas le renvoi de la demande.",
                "type": null
              },
              {
                "code": null,
                "condition": "Le résultat d’origine, la consommation ou la facturation définitive nécessite une vérification.",
                "http_status": 502,
                "operation_id_source": "actual X-Client-Request-ID",
                "recovery": "Conservez l’identifiant réel de la requête et la réponse d’origine. Consultez l’enregistrement existant dont vous êtes propriétaire ; ne renvoyez pas 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 dont vous êtes propriétaire et leurs liens de contenu signés exacts ; ne renvoyez jamais une demande de 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 complet de la réponse d’origine, état et en-têtes transmis. Ce gestionnaire n’ajoute aucune structure JSON universelle, aucun champ texte ni aucune enveloppe de tâche."
            },
            "parameters": [
              {
                "default_known": false,
                "enum": [
                  "assemblyai/universal-3-5-pro"
                ],
                "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": [
                    "assemblyai/universal-3-5-pro"
                  ],
                  "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": "assemblyai/universal-3-5-pro"
              },
              "content_type": "application/json"
            }
          },
          "input": {
            "content_type": "application/json",
            "material_conditions": [
              "L’exemple lit votre fichier PCM WAV réel et non vide, encode l’intégralité de ses octets 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 provenant d’un enregistrement multimédia existant dont vous êtes propriétaire",
                "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.00025",
                "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.00025",
                "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': 'assemblyai/universal-3-5-pro', '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.00025
          }
        },
        "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.00025",
                "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.00025",
                "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": "assemblyai/universal-3-5-pro",
        "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.00025",
            "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.00025",
            "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": "assemblyai/universal-3-5-pro",
        "request_model_id": "assemblyai/universal-3-5-pro",
        "route_label": "Ultra"
      }
    ],
    "name": "AssemblyAI: Universal-3.5 Pro",
    "price": {
      "in": null,
      "in_label": null,
      "out": null,
      "out_label": null,
      "sort_in": null,
      "sort_out": null,
      "varies": true
    },
    "short": "Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI qui transforme un court extrait audio en transcription complète en une réponse. Son profil Sync ajoute un indice de confiance par mot, des horodatages de mots facultatifs, des indications de vocabulaire et le contexte de conversation antérieure pour la saisie vocale et les processus push-to-talk."
  },
  "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": "Universal-3.5 Pro est le modèle de reconnaissance vocale d’AssemblyAI qui transforme un court extrait audio en transcription complète en une réponse. Son profil Sync ajoute un indice de confiance par mot, des horodatages de mots facultatifs, des indications de vocabulaire et le contexte de conversation antérieure pour la saisie vocale et les processus push-to-talk.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "e999e1f1277e607719f51a88719b98d38954e738b3bd55fd2f792db154c229e9",
    "renderer_sha256": "4d2f3bfcbf0fa5c616c87aa9524d00d7cff227d8dfa2446ff47c8e0220325dc9"
  },
  "sourceRevision": "ce930ecf646c84efe45106c7470ff314501e7acbef23c61a89ea1904410da814"
}
