Aller au contenu
Tous les fournisseurs

Intron

langue·🇦🇴🇧🇫🇧🇮🇧🇯🇧🇼🇨🇩🇨🇫🇨🇬🇨🇮🇨🇲🇨🇻🇩🇯🇩🇿🇪🇬🇪🇷🇪🇹🇬🇦🇬🇭🇬🇲🇬🇳🇬🇶🇬🇼🇰🇪🇰🇲🇱🇷🇱🇸🇱🇾🇲🇦🇲🇬🇲🇱🇲🇷🇲🇺🇲🇼🇲🇿🇳🇦🇳🇪🇳🇬🇷🇼🇸🇨🇸🇩🇸🇱🇸🇳🇸🇴🇸🇸🇸🇹🇸🇿🇹🇩🇹🇬🇹🇳🇹🇿🇺🇬🇿🇦🇿🇲🇿🇼

Intron est une API vocale adaptée aux accents africains : reconnaissance vocale (speech-to-text) dans 36 langues africaines en entrée (dont plusieurs, comme le wolof, le swahili, le haoussa et le yoruba, sous forme de modèles mêlant la langue et l’anglais, ou code-switching), avec post-traitement LLM optionnel, et synthèse vocale (text-to-speech) dans 12 langues africaines plus l’anglais avec des accents africains.

À utiliser avec des agents IA

Après avoir installé le plugin ou ajouté le serveur MCP, donnez cette consigne à votre agent :

« Vérifie combien de crédits Intron il me reste avant d’envoyer un lot de fichiers audio. »
Installer le plugin →

Capacités

CapacitéTypeStatutiMéthodeExemple
get_credits_balancesynchroneDisponibleGET
get_speech_synthesis_statussynchroneDisponibleGET
get_transcription_statussynchroneDisponibleGET
submit_audio_transcriptionasynchroneDisponiblePOST
submit_speech_synthesisasynchroneDisponiblePOST
synthesize_speech_syncsynchroneDisponiblePOST
transcribe_audio_syncsynchroneDisponiblePOST

Gotchas

Les gotchas sont affichés tels qu’ils figurent dans les specs, dans leur langue d’origine.

get_credits_balance

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠currency depends on the country set on the account: NGN for Nigeria (NG), USD for every other country. Don't assume USD.
  • ⚠The body's status is "success" here, while transcription endpoints return "Ok".
  • ⚠Error bodies (invalid key, rate limit) are not documented.
  • ⚠Rate limit: 100 requests per minute on accounts/v1/balance. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

get_speech_synthesis_status

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠Poll until processing_status is TTS_TEXT_AUDIO_GENERATED or TTS_TEXT_AUDIO_PROCESSING_FAILED (other values: TTS_TEXT_AUDIO_QUEUED, TTS_TEXT_AUDIO_PENDING, TTS_TEXT_AUDIO_PROCESSING). The documented in-progress example already contains audio_path and audio_duration_in_seconds — only use audio_path once the status is TTS_TEXT_AUDIO_GENERATED.
  • ⚠The response does not echo text_id — keep it on your side.
  • ⚠audio_path is the generated audio's location (example "http://myaudio.wav"). How long it stays valid and whether downloading it needs the API key are not documented — download it promptly.
  • ⚠No error response is documented for this endpoint (unknown text_id, invalid key, rate limit).
  • ⚠Rate limit: 100 requests per minute on tts/v1/status. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

get_transcription_status

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠Poll until processing_status is FILE_TRANSCRIBED (results present) or FILE_PROCESSING_FAILED. The other values are FILE_QUEUED, FILE_PENDING and FILE_PROCESSING; the in-progress example shows only processing_status and audio_file_name in data.
  • ⚠get_structured_post_processing takes 'f' or 't' (default 'f' = Markdown text). Every documented example is the default text form; the JSON shape returned with 't' is not documented, so transcript_* fields may not be strings then.
  • ⚠The documented status responses do not echo file_id — keep it on your side.
  • ⚠get_icd_codes output has two names in the docs: transcript_icd_codes in the procedure examples, transcript_billing_codes in the completed example on Get File Status. Read both.
  • ⚠No dedicated response field is documented for get_differential_diagnosis, get_followup_instructions or get_practice_guidelines: in the completed example on Get File Status their output appears as sections inside transcript_suggestions.
  • ⚠The documented examples return status "Ok" and message "file status found". No error response is documented for this endpoint (unknown file_id, invalid key, rate limit).
  • ⚠Rate limit: 100 requests per minute on status. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

submit_audio_transcription

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠Asynchronous: the response only carries data.file_id (message "file queued for processing"). Poll get_transcription_status until processing_status is FILE_TRANSCRIBED or FILE_PROCESSING_FAILED. No webhook is documented for file uploads.
  • ⚠No duration limit is documented for this endpoint (the 60/120 s limit is on upload/sync).
  • ⚠The body is multipart/form-data, not JSON. Every option is a form field whose value is the string "TRUE" or "FALSE" — not a JSON boolean.
  • ⚠use_category defaults to file_category_telehealth, not file_category_general — set it explicitly. The docs list the get_* options of each category (see each option's description); what happens with an option from another category is not documented.
  • ⚠audio_file_blob is typed 'String — url to a readable file' in the field table, but every example uploads the file itself (curl --form 'audio_file_blob=@"path"'). Send the file; passing a URL is not shown anywhere.
  • ⚠use_language_asr_input is 'required: yes' in the upload tables, but the Question Answering page lists it as optional with default 'en', and both the custom-template example and the English Python sample on upload/sync omit it. Always send it — per the Question Answering page, a missing code means 'en'.
  • ⚠get_answer=TRUE treats the audio as a spoken question and returns only transcript_answer: all other post-processing options are ignored. The answer is in the question's language unless use_language_data_extraction_output sets another code. When no question is detected, transcript_answer is not an answer: the model 'briefly acknowledges what was said and invites the user to ask a question' (documented example: "Good morning! I'm here to help..."). The Question Answering page marks get_answer as required, the upload tables as optional (default FALSE).
  • ⚠get_icd_codes output has two names in the docs: transcript_icd_codes in the procedure examples, transcript_billing_codes in the completed example on Get File Status. Read both.
  • ⚠No dedicated response field is documented for get_differential_diagnosis, get_followup_instructions or get_practice_guidelines: in the completed example on Get File Status their output appears as sections inside transcript_suggestions.
  • ⚠The body's status is "Ok" on success and "Error" on failure (the balance endpoint returns "success"). message is not a reliable signal: some 200 examples carry "file queued for processing" next to a finished transcript.
  • ⚠Only two error bodies are documented (400 duration limit and 503 timeout, both on upload/sync). The status code and body for an invalid API key, an unknown file_id, a rate-limit hit or exhausted credits are not documented, nor is a maximum file size.
  • ⚠The public docs describe no sandbox, test key, free tier or pricing, and don't say how file transcription is billed: every call hits production. The account's credit balance is readable with get_credits_balance.
  • ⚠Rate limit: 60 requests per minute on upload. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

submit_speech_synthesis

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠The body is JSON and the header table requires 'Content-Type: application/json' — send it, even though the docs' JavaScript samples omit it.
  • ⚠Character limit is contradictory: the page says 'less than or equal to 4096 characters', but the documented 400 says 'max limit of 1200 characters'. Keep text short or split it.
  • ⚠voice_accent must be listed for voice_language ('invalid text voice accent,{accent} not supported for language {language}') and voice_gender for voice_accent ('invalid text voice gender,{gender} not supported for accent {accent}'), both 400. English (en) takes the accents afrikaans, hausa, igbo, luganda, sepedi, swahili, setswana, xhosa, yoruba, zulu; every other language takes only its own. On this page all three Hausa samples send voice_language 'ha' with voice_accent 'swahili', which the table does not list for 'ha' (only 'hausa') — follow the table.
  • ⚠TTS covers 13 voice languages — af, am, en, ha, ig, rw, lg, om, pcm, sn, sw, wo, yo — fewer than speech-to-text: no French and no Fulani/Pulaar voice.
  • ⚠Asynchronous: the response only carries data.text_id. Poll get_speech_synthesis_status until processing_status is TTS_TEXT_AUDIO_GENERATED or TTS_TEXT_AUDIO_PROCESSING_FAILED. No webhook is documented.
  • ⚠The documented 400 for an invalid output_audio_format shows the voice-gender message ('invalid text voice gender,...'): don't rely on the message text to tell the two apart.
  • ⚠Only 400 (character limit, language, accent, gender, format) bodies are documented. The status and body for an invalid API key, a rate-limit hit or exhausted credits are not documented.
  • ⚠The public docs describe no sandbox, test key, free tier or pricing, and don't say how text-to-speech is billed: every call hits production. The account's credit balance is readable with get_credits_balance.
  • ⚠Rate limit: 60 requests per minute on tts/v1/enqueue. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

synthesize_speech_sync

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠The body is JSON and the header table requires 'Content-Type: application/json' — send it, even though the docs' JavaScript samples omit it.
  • ⚠Character limit is contradictory: the page says 'less than or equal to 4096 characters', but the documented 400 says 'max limit of 100 characters'. Keep text short or split it.
  • ⚠voice_accent must be listed for voice_language ('invalid text voice accent,{accent} not supported for language {language}') and voice_gender for voice_accent ('invalid text voice gender,{gender} not supported for accent {accent}'), both 400. English (en) takes the accents afrikaans, hausa, igbo, luganda, sepedi, swahili, setswana, xhosa, yoruba, zulu; every other language takes only its own. On this page the Hausa JavaScript sample sends voice_language 'ha' with voice_accent 'swahili', which the table does not list for 'ha' (cURL and Python send 'hausa') — follow the table.
  • ⚠TTS covers 13 voice languages — af, am, en, ha, ig, rw, lg, om, pcm, sn, sw, wo, yo — fewer than speech-to-text: no French and no Fulani/Pulaar voice.
  • ⚠The request can time out after 120 seconds with HTTP 503. The docs say the text_id in the 503 response can be used with get_speech_synthesis_status; the documented 503 body is {"data":{"text_id":...},"message":"tts text queued for processing","status":"Ok"} — status "Ok" despite the 503.
  • ⚠The success response carries no text_id: only audio_duration_in_seconds, audio_path and processing_status.
  • ⚠audio_path is the generated audio's location (example "http://myaudio.wav"). How long it stays valid and whether downloading it needs the API key are not documented — download it promptly.
  • ⚠The documented 400 for an invalid output_audio_format shows the voice-gender message ('invalid text voice gender,...'): don't rely on the message text to tell the two apart.
  • ⚠Only 400 (character limit, language, accent, gender, format) and 503 (timeout) bodies are documented. The status and body for an invalid API key, a rate-limit hit or exhausted credits are not documented.
  • ⚠The public docs describe no sandbox, test key, free tier or pricing, and don't say how text-to-speech is billed: every call hits production. The account's credit balance is readable with get_credits_balance.
  • ⚠Rate limit: 30 requests per minute on tts/v1/generate. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

transcribe_audio_sync

  • ⚠The API key comes from the developers tab of your account on voice.intron.io; send it as 'Authorization: Bearer {key}' from your backend only — the docs say never expose it in client-side code.
  • ⚠Duration limit is contradictory: the page says 'only supports files durations less than or equal to 120 seconds', but its documented 400 says 'audio duration of 65seconds exceeds the max duration of 60seconds'. Keep audio under 60 s here, or use submit_audio_transcription for anything longer.
  • ⚠A 503 is not necessarily a failure: the request can time out after 120 seconds with HTTP 503 and data.file_id (body status "Error", message "file queued for processing"). The docs say this file_id can be used to get the file's status — call get_transcription_status with it.
  • ⚠The body is multipart/form-data, not JSON. Every option is a form field whose value is the string "TRUE" or "FALSE" — not a JSON boolean.
  • ⚠use_category defaults to file_category_telehealth, not file_category_general — set it explicitly. The docs list the get_* options of each category (see each option's description); what happens with an option from another category is not documented.
  • ⚠audio_file_blob is typed 'String — url to a readable file' in the field table, but every example uploads the file itself (curl --form 'audio_file_blob=@"path"'). Send the file; passing a URL is not shown anywhere.
  • ⚠use_language_asr_input is 'required: yes' in the upload tables, but the Question Answering page lists it as optional with default 'en', and both the custom-template example and the English Python sample on upload/sync omit it. Always send it — per the Question Answering page, a missing code means 'en'.
  • ⚠get_answer=TRUE treats the audio as a spoken question and returns only transcript_answer: all other post-processing options are ignored. The answer is in the question's language unless use_language_data_extraction_output sets another code. When no question is detected, transcript_answer is not an answer: the model 'briefly acknowledges what was said and invites the user to ask a question' (documented example: "Good morning! I'm here to help..."). The Question Answering page marks get_answer as required, the upload tables as optional (default FALSE).
  • ⚠get_icd_codes output has two names in the docs: transcript_icd_codes in the procedure examples, transcript_billing_codes in the completed example on Get File Status. Read both.
  • ⚠No dedicated response field is documented for get_differential_diagnosis, get_followup_instructions or get_practice_guidelines: in the completed example on Get File Status their output appears as sections inside transcript_suggestions.
  • ⚠The body's status is "Ok" on success and "Error" on failure (the balance endpoint returns "success"). message is not a reliable signal: some 200 examples carry "file queued for processing" next to a finished transcript.
  • ⚠Only two error bodies are documented (400 duration limit and 503 timeout, both on upload/sync). The status code and body for an invalid API key, an unknown file_id, a rate-limit hit or exhausted credits are not documented, nor is a maximum file size.
  • ⚠The public docs describe no sandbox, test key, free tier or pricing, and don't say how file transcription is billed: every call hits production. The account's credit balance is readable with get_credits_balance.
  • ⚠Rate limit: 30 requests per minute on upload/sync. Responses carry rate-limit headers; Retry-After gives the delay in seconds before retrying.

Détails

Catégorie
langue
Sandbox
Non

Contributeurs de la spec