{"openapi":"3.1.0","info":{"title":"Kooma API","description":"API publique Kooma (compatible OpenAI). Authentification par clé Bearer `Authorization: Bearer sk-intermo-...`.\n\n- **Conversation** : `POST /v1/chat/completions`, `POST /v1/completions`\n- **Synthèse vocale** : `POST /v1/audio/speech`\n- **Transcription** : `POST /v1/audio/transcriptions`\n- **Traduction** : `POST /v1/translations`\n\nFacturation à l'usage réel : caractères pour la synthèse vocale et la traduction, secondes d'audio pour la transcription.","version":"1.0.0"},"paths":{"/v1/models":{"get":{"summary":"List Models","operationId":"list_models_v1_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/voices":{"get":{"summary":"Liste des voix disponibles","description":"Liste les voix utilisables par POST /v1/audio/speech : voix bambara publiees\n(type=standard) et voix clonees DU compte de la cle (type=clone, id 'clone:<id>',\nfacturees tts_clone). Authentifie par cle API ; ni scope ni facturation.","operationId":"list_voices_v1_voices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/audio/speech":{"post":{"summary":"Synthèse vocale","description":"Synthétise `input` en audio WAV. Renvoie `audio/wav`. Débité au caractère (produit `tts`, ou\n`tts_clone` (≈ ×9,5 du TTS) si `voice` désigne une voix clonée du compte).","operationId":"audio_speech_v1_audio_speech_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpeechRequest"}}},"required":true},"responses":{"200":{"description":"Audio WAV synthétisé.","content":{"application/json":{"schema":{}},"audio/wav":{}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/audio/transcriptions":{"post":{"summary":"Transcription","description":"Transcrit un fichier audio/vidéo (détection de langue automatique). Renvoie `{\"text\": ...}`\n(ou texte brut si `response_format=text`). Débité à la seconde réelle d'audio (produit `stt`).","operationId":"audio_transcriptions_v1_audio_transcriptions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_audio_transcriptions_v1_audio_transcriptions_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/translations":{"post":{"summary":"Traduction","description":"Traduit `text` vers `target` (codes langue). Renvoie `{\"translations\": [{text, source, target}], \"text\": ...}`.\nDébité au caractère du texte source (produit `mt`).","operationId":"translations_v1_translations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_audio_transcriptions_v1_audio_transcriptions_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Fichier audio/vidéo à transcrire."},"model":{"type":"string","title":"Model","default":"kooma-stt-1"},"response_format":{"type":"string","title":"Response Format","default":"json"}},"type":"object","required":["file"],"title":"Body_audio_transcriptions_v1_audio_transcriptions_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"SpeechRequest":{"properties":{"input":{"type":"string","maxLength":5000,"minLength":1,"title":"Input","description":"Texte à synthétiser.","examples":["Aw ni ce, i ka kɛnɛ wa?"]},"voice":{"type":"string","maxLength":120,"title":"Voice","description":"Voix : clé d'une voix bambara publiée (ex. 'modibo', 'amadou' ; catalogue via GET /v1/voices), ou voix clonée du compte au format 'clone:<id>' (facturée au tarif tts_clone de la grille). L'identifiant nu d'un clone reste accepté (rétro-compat).","default":"modibo","examples":["modibo","clone:ab12cd34"]},"model":{"type":"string","maxLength":120,"title":"Model","description":"Identifiant de modèle (informatif ; le moteur est choisi selon la voix/langue).","default":"kooma-tts-1","examples":["kooma-tts-1"]},"speed":{"anyOf":[{"type":"number","maximum":2.0,"minimum":0.5},{"type":"null"}],"title":"Speed","description":"Débit de parole (0.5–2.0)."},"response_format":{"type":"string","title":"Response Format","description":"Format audio de sortie (seul 'wav' est supporté).","default":"wav","examples":["wav"]},"tgt":{"type":"string","title":"Tgt","description":"Langue du texte/voix (code langue, ex. bam_Latn, fra_Latn).","default":"bam_Latn","examples":["bam_Latn"]},"src":{"type":"string","title":"Src","description":"Langue source si traduction avant synthèse ('same' = pas de traduction, 'auto' = détection).","default":"same","examples":["same"]}},"type":"object","required":["input"],"title":"SpeechRequest"},"TranslationRequest":{"properties":{"text":{"type":"string","maxLength":5000,"minLength":1,"title":"Text","description":"Texte à traduire.","examples":["Bonjour, comment allez-vous ?"]},"target":{"type":"string","title":"Target","description":"Langue cible (code langue, ex. bam_Latn, fra_Latn, eng_Latn).","default":"bam_Latn","examples":["bam_Latn"]},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"Langue source (code langue). Absent/'auto' = détection.","examples":["fra_Latn"]},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Identifiant de modèle (informatif)."}},"type":"object","required":["text"],"title":"TranslationRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"servers":[{"url":"/"}]}