Twimi
Guides

Erreurs et limites

Format

Toutes les erreurs ont la même forme :

JSONCode
{ "error": { "code": "origin_not_allowed", "message": "Cette page n'est pas autorisée pour cette clé.", "request_id": "req_7c1e…" } }
  • Basez votre code sur code, qui est stable ; message est une explication lisible qui peut évoluer.
  • Le request_id est aussi dans l'en-tête X-Request-Id. Donnez-le au support (contact@twimi.ai) : il permet de retrouver la requête dans nos journaux.

Codes

HTTPcodeSensQue faire
400invalid_requestrequête mal formée ; le message nomme les champscorriger la requête
401invalid_keyclé absente, inconnue, révoquée, ou d'un autre environnement ; avec un jeton : la clé qui a ouvert la conversation a été révoquéevérifier la clé et l'environnement
401token_expiredjeton de conversation périmérouvrir avec resume
401invalid_tokenjeton invalideouvrir une nouvelle conversation
403origin_not_allowedpage non déclarée pour cette clé publiquefaire déclarer la page
403formula_not_allowedfonction non incluse dans la formule—
403deployment_suspendeddéploiement suspenducontacter Twimi
403secret_key_requiredroute réservée à la clé secrète (/v1/usage)appeler depuis le serveur
403invalid_linklien de fichier modifié ou expirérelire la fiche de l'avatar
404not_foundadresse inconnue—
404avatar_not_foundavatar hors du déploiementvérifier avatar_id
404conversation_not_foundconversation inconnue ou terminéeouvrir une nouvelle conversation
409voice_limit_reachedvoix indisponible : forfait, plafond, fusible ou réponse de plus de 1 500 caractèrescontinuer par écrit (voir X-Twimi-Voice-Reason)
410conversation_expiredconversation de plus de 10 minutesouvrir une nouvelle conversation
413audio_too_largeson de plus de 5 Mo (/transcriptions)raccourcir l'enregistrement
429rate_limitedtrop de requêtesattendre la durée de Retry-After
500internal_errorerreur de notre côté ; aucun détail interne n'est renvoyéréessayer, sinon support
502voice_unavailable, transcription_unavailable, brain_unavailable, knowledge_unavailableservice momentanément indisponibleréessayer un peu plus tard

Sur /messages, la réponse étant en flux, un échec arrive comme un événement :

Code
data: {"type": "error", "code": "brain_unavailable", "message": "…"}

Limites de débit

QuoiLimite
Ouvertures de conversation60 par minute et par déploiement
Questions (/messages)20 par minute et par conversation
Morceaux de voix (/speech)60 par minute et par conversation
Transcriptions20 par minute et par conversation

Au-delà : 429 rate_limited, avec l'en-tête Retry-After (en secondes).

JavascriptCode
async function appel(url, options, essais = 3) { const res = await fetch(url, options); if (res.status === 429 && essais > 0) { const attente = Number(res.headers.get("Retry-After") ?? 1); await new Promise((r) => setTimeout(r, attente * 1000)); return appel(url, options, essais - 1); } return res; }

Autres limites

QuoiLimite
Question (message)1 000 caractères
Morceau de voix (text)2 000 caractères
Voix par réponse (un tour)1 500 caractères, tous morceaux compris
Son d'une question orale5 Mo, 30 secondes
Durée d'une conversation10 minutes
Validité d'un jeton30 minutes
Last modified on