Transcription de la parole
RouteAPI expose les deux endpoints audio d’OpenAI : la transcription, qui renvoie l’audio dans sa langue d’origine, et la traduction, qui renvoie toujours l’anglais. Les deux acceptent multipart/form-data, renvoient leur résultat dans la même réponse — il n’y a ni tâche asynchrone ni étape d’interrogation — et s’authentifient avec la même clé API que le reste de l’API des modèles.
| Point de terminaison | Rôle | Réponse |
|---|---|---|
POST /v1/audio/transcriptions | Audio vers texte, dans la langue source | JSON ou texte, selon response_format |
POST /v1/audio/translations | Audio vers texte anglais | JSON ou texte, selon response_format |
Si la Base URL de votre client est configurée sans /v1, POST /audio/transcriptions et POST /audio/translations fonctionnent également ; la passerelle les réécrit en interne vers les chemins /v1.
Transcriptions
Section intitulée « Transcriptions »Transcrit un fichier audio dans sa langue d’origine. Envoyez-le en multipart/form-data.
POST /v1/audio/transcriptionshttps://api.routeapi.ai/v1/audio/transcriptionsParamètres de la requête
Section intitulée « Paramètres de la requête »| Champ | Type | Requis | Description |
|---|---|---|---|
file | file | Oui | Le fichier audio. Seule la première partie file est transmise |
model | string | Oui | ID du modèle de transcription, par exemple whisper-1, gpt-4o-transcribe ou gpt-4o-mini-transcribe |
response_format | string | Non | Format de sortie demandé, par exemple json, text, srt, vtt ou verbose_json. RouteAPI considère json comme sa valeur par défaut mais n’écrit pas de valeur par défaut dans le formulaire transmis : lorsque vous omettez le champ, l’amont applique sa propre valeur par défaut et le corps de l’amont est renvoyé tel quel |
language | string | Non | Indication de langue ISO-639-1, transmise à l’amont |
prompt | string | Non | Indication de contexte ou de terminologie, transmise à l’amont |
temperature | number | Non | Température d’échantillonnage, transmise à l’amont |
timestamp_granularities[] | array | Non | Niveau de détail des horodatages ; transmis, et n’a de sens en amont qu’avec verbose_json |
Les autres champs de formulaire sont également transmis. La passerelle reconstruit le corps multipart à partir de votre formulaire : elle écrit elle-même model, copie la première partie fichier et recopie tous les autres champs texte. RouteAPI ne valide que model ; le fait que des champs comme chunking_strategy soient pris en compte est décidé par le modèle en amont.
Exemples
Section intitulée « Exemples »curl https://api.routeapi.ai/v1/audio/transcriptions \ -H "Authorization: Bearer $ROUTEAPI_KEY" \ -F "file=@./meeting.mp3" \ -F "model=whisper-1" \ -F "response_format=json" \ -F "language=en"import os
from openai import OpenAI
client = OpenAI( api_key=os.environ["ROUTEAPI_KEY"], base_url="https://api.routeapi.ai/v1",)
with open("meeting.mp3", "rb") as audio_file: transcript = client.audio.transcriptions.create( model="whisper-1", file=audio_file, response_format="json", )
print(transcript.text)Le corps de réponse de l’amont est renvoyé tel quel, avec Content-Type et Content-Length normalisés. Avec response_format défini à json — la valeur par défaut des amonts compatibles OpenAI — vous obtenez :
{ "text": "This is the transcribed content of the uploaded audio."}Avec verbose_json, vous obtenez normalement aussi task, language, duration et segments ; avec text, srt ou vtt, le corps est du texte brut plutôt que du JSON. Le fournisseur définit exactement lesquels de ces formats un modèle donné prend en charge — RouteAPI ne remodèle pas le corps.
Traductions
Section intitulée « Traductions »Même forme multipart que les transcriptions, mais la sortie est toujours du texte anglais, quelle que soit la langue d’entrée. Les mêmes champs s’appliquent (file, model, response_format, prompt, temperature). La langue source est détectée par le modèle : il n’y a donc pas de paramètre language dans le contrat de traduction — la passerelle transmet les champs de formulaire supplémentaires, mais un amont qui ne les accepte pas peut rejeter la requête.
POST /v1/audio/translationshttps://api.routeapi.ai/v1/audio/translationscurl https://api.routeapi.ai/v1/audio/translations \ -H "Authorization: Bearer $ROUTEAPI_KEY" \ -F "file=@./interview-de.mp3" \ -F "model=whisper-1"import os
from openai import OpenAI
client = OpenAI( api_key=os.environ["ROUTEAPI_KEY"], base_url="https://api.routeapi.ai/v1",)
with open("interview-de.mp3", "rb") as audio_file: result = client.audio.translations.create( model="whisper-1", file=audio_file, )
print(result.text)Facturation
Section intitulée « Facturation »Les appels de reconnaissance vocale utilisent le même mécanisme de solde et de quota que tout autre appel de l’API des modèles : un montant estimé est prélevé au préalable, l’appel est réglé après la réponse de l’amont, et un appel échoué est remboursé. Les prix proviennent de la configuration du modèle — voir Tarification des modèles pour savoir comment les prix sont affichés sur la page de détail d’un modèle.
- Si la réponse de l’amont contient un objet
usageavec untotal_tokensnon nul, c’est cet usage qui est facturé (input_tokens/output_tokenssont utilisés lorsqueprompt_tokens/completion_tokenssont absents). - Si l’amont ne signale aucun usage, la passerelle se rabat sur l’estimation de durée : 1000 tokens par minute d’audio envoyé et aucun token de sortie. Sur les modèles tarifés au token, cette même estimation sert à la pré-réservation (plancher au montant minimum de pré-réservation de la passerelle pour toute requête).
- Si l’usage signalé comporte des détails de tokens audio, ces tokens sont facturés au tarif audio ; sinon, ils sont facturés comme des tokens d’entrée ordinaires au multiplicateur du modèle. Le repli sur la durée ne comporte aucun détail audio, ce qui explique que 1000 tokens par minute corresponde à un tarif à la minute.
- Lorsque le repli s’applique, le coût d’une transcription suit la longueur de l’audio, et non la quantité de texte renvoyée. Lorsque l’amont signale bien un usage, c’est cette répartition signalée qui prime.
Les requêtes audio utilisent le corps standard { "error": { ... } }, et le message contient un request ID que vous pouvez rechercher dans les journaux de la console. Voir Erreurs courantes pour la liste complète.
| Statut | Code | Cause |
|---|---|---|
| 400 | invalid_request | model est absent ou vide (Missing required field: model) |
| 403 | insufficient_user_quota / pre_consume_token_quota_failed | Le solde du compte ou le quota de la clé ne couvre pas le coût estimé |
| 403 | — | Le modèle est hors de la liste blanche de modèles de la clé (This token has no access to model ...) |
| 429 | — | La limite de débit a été dépassée |
| 503 | model_not_found | Aucun canal utilisable pour le modèle (No valid upstream service) |
| 500 | count_token_failed | La durée de l’audio envoyé ne peut pas être mesurée (extension ou conteneur non pris en charge) |
| 500 | convert_request_failed | La requête ne peut pas être convertie pour le canal — par exemple une transcription sans partie file, ou un canal dont l’adaptateur n’implémente pas l’audio |
| 4xx / 5xx | code de l’amont | Le fournisseur a rejeté la requête ; le statut et le message sont transmis tels quels |
{ "error": { "message": "Missing required field: model (request id: 20261023153000123456789AbCdEfGh)", "type": "error", "code": "invalid_request" }}Deux modes d’échec méritent d’être anticipés, car ils se confondent facilement avec des problèmes du fournisseur :
fileabsent sur une transcription ou une traduction n’est pas intercepté par la couche de validation de la passerelle ; l’erreur apparaît plus tard sous la formeconvert_request_failed. Vérifiez que le nom du champ est exactementfileet que le client a réellement joint une partie.- Un conteneur audio non pris en charge échoue pendant l’estimation des tokens, avant tout appel à l’amont : il est donc signalé comme
count_token_failedet non comme une erreur en amont.
Lorsqu’une requête échoue, le montant pré-réservé est remboursé.
Étapes suivantes
Section intitulée « Étapes suivantes »- Synthèse vocale — générez de l’audio à partir de texte.
- Modèles — vérifiez que l’ID de modèle est visible pour votre clé avant d’appeler un endpoint audio.
- Tarification des modèles — comment les prix d’entrée et de sortie audio sont affichés.
- Erreurs courantes — codes de statut, corps d’erreur et ordre de dépannage.