Type de page: docs
Limites de taux
Comprenez les limites de débit du API, les performances d'envoi, les tentatives et les contrôles du mode direct.
Réponse directe
Comprenez les limites de débit du API, les performances d'envoi, les tentatives et les contrôles du mode direct.
Contenu source
Les plafonds tarifaires protègent la fiabilité des fournisseurs, le contrôle des dépenses et l’expérience client.
TextTree affiche les échecs de limite de débit avec :
- Demande d'identification
-point de terminaison
- guide de nouvelle tentative
- message ou événement webhook associé
Les performances en production dépendent de l’enregistrement de l’expéditeur, des limites du fournisseur et du plan d’espace de travail.
## Limitation du bootstrap du compte
Le bootstrap du compte sans tête est intentionnellement plus strict que le trafic API normal :
-`POST /api/v1/accounts`
-`POST /mcp/accounts`
Chaque adresse IP peut créer avec succès un compte toutes les cinq minutes. TextTree
stocke uniquement un hachage de l’adresse IP pour cet enregistrement de limitation. un essai
Une création réussie répétée dans la fenêtre renvoie :
```json
{
"erreur": "account_creation_rate_limited",
"retry_after_seconds" : 300
}
```
## Limite de débit d'envoi de messages
`POST /api/v1/messages` est limité en débit par identifiant API (par jeton d'accès) pour
qu'une seule clé ne peut pas inonder la file d'attente d'envoi partagée. La limite est un bucket de jetons :
de courtes rafales sont autorisées, puis les demandes sont limitées à un rythme soutenu.
| Niveau du forfait | Capacité d'éclatement | Recharge de jetons |
| --- | ---: | --- |
| Démarreur | 1 message | 1 jeton toutes les 1 200 ms |
| Croissance | 5 messages | 1 jeton toutes les 1 200 ms |
| Échelle | 10 messages | 1 jeton toutes les 1 200 ms |
| Entreprise | 20 messages | 1 jeton toutes les 1 200 ms |
Tous les niveaux maintiennent la recharge soutenue par défaut de l'admission API au niveau ou en dessous du
Plafond par défaut du fournisseur Dial d'un jeton toutes les 1 200 ms. Les niveaux de rémunération augmentent
l'admission de courtes rafales ; la livraison réelle est toujours en file d'attente derrière l'enregistrement de l'expéditeur,
Limites de débit Dial, contrôles des dépenses et paramètres de l'expéditeur de l'espace de travail.
Lorsque le compartiment est vide, le point de terminaison répond avec `429 Too Many Requests`, un
en-tête `Retry-After` (en secondes) et :
```json
{
"erreur": "message_send_rate_limited",
"message": "Trop de demandes d'envoi de messages. Réessayez après le délai indiqué.",
"retry_after_seconds": 1,
"limite": {
"tier": "démarrant",
"capacité": 1,
"refill_ms": 1200
}
}
```
Les lectures (`GET /api/v1/messages/:id`) et les aperçus ne sont pas affectés par cette limite.
Des performances soutenues plus élevées sont disponibles par plan d'espace de travail une fois l'enregistrement du
l’expéditeur est stable – contactez l’assistance.
## Format de réponse
```json
{
"erreur": "message_send_rate_limited",
"message": "Trop de demandes d'envoi de messages. Réessayez après le délai indiqué.",
"retry_after_seconds": 30,
"limite": {
"tier": "croissance",
"capacité": 5.
"refill_ms": 1200
}
}
```
Utilisez `retry_after_seconds` lorsqu'il est présent. Si le champ est manquant, utilisez le retour arrière exponentiel avec
gigue au lieu de réessayer immédiatement.
## Réessayez le modèle
```js
fonction asynchrone sendWithBackoff (charge utile, tentative = 1) {
réponse const = wait fetch("https://api.texttree.ai/api/v1/messages", {
méthode : "POST",
en-têtes : {
Autorisation : `Bearer ${process.env.TEXTREE_ACCESS_TOKEN}`,
"Content-Type": "application/json",
},
corps : JSON.stringify(charge utile),
});
si (response.status !== 429) {
réponse de retour ;
}
const retryAfter = Number(response.headers.get("retry-after") || 2 ** tentative);
wait new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
return sendWithBackoff (charge utile, tentative + 1);
}
```
## Idempotence
Incluez toujours `idempotency_key` lorsque vous réessayez de soumettre un flux de travail. Cela permet à TextTree de renvoyer le
message original au lieu de créer des enregistrements SMS en double lorsque la première demande a réussi, mais
Votre client a expiré.
```json
{
"numéro_téléphone": "+15551234567",
"body": "Votre rendez-vous est demain à 9h.",
"idempotency_key": "rendez-vous-123-rappel"
}
```
## Guide opérationnel
- Effectuez des tests en rafale en mode Test avant de déplacer le trafic vers Live.
- Gardez les récepteurs webhook rapides et renvoyez `2xx` rapidement.
- Utilisez les journaux de messages et les identifiants de requête pour déboguer les envois limités.
- Demander de l'aide pour des performances de production plus élevées une fois que l'enregistrement de l'expéditeur est stable.