Type de page: docs

Référence API

Référence indexable pour le référencement des messages, numéros, webhooks, contacts et API de facturation TextTree.

Réponse directe

Référence indexable pour le référencement des messages, numéros, webhooks, contacts et API de facturation TextTree.

Contenu source

## Authentification

Utilise un jeton d'accès au porteur `txt_...` émis par TextTree. Les jetons doivent inclure le
portée requise par le chemin, telle que `messages:write`, `numbers:read`,
`numbers:write`, `mcp:read` ou `mcp:execute`. Les clés de API héritées de `txk_...` ne le sont pas.
ne sont pas acceptés par les chemins de développement API ou les chemins MCP.

```http
Autorisation : Porteur $TEXTREE_ACCESS_TOKEN
```

## Créer un compte sans tête

```http
POST /api/v1/comptes
POST /mcp/comptes
```

Ces points de terminaison publics JSON créent un compte d'agent avec un nom d'utilisateur et un mot de passe sans
e-mail, Google OAuth ou authentification par portefeuille. Les deux routes invoquent le même flux
et renvoie les codes de sauvegarde uniques plus un jeton de porteur `txt_...` de
TextTree.

Champs obligatoires :

-`username`
-`password`

`/api/v1/accounts` accepte les champs de niveau supérieur. `/mcp/accounts` accepte le
mêmes champs au niveau supérieur ou imbriqués dans `account`.

### boucle

```bash
boucle https://api.texttree.ai/api/v1/accounts \
-H "Type de contenu : application/json" \
-d '{
"username": "agent-demo",
"mot de passe": "agrafe de batterie de cheval correcte"
  }'
```

Réponse :

```json
{
"compte": {
"identifiant": "9d7d9df7-58a0-4716-b82e-7ad5e73f7b36",
"nom d'utilisateur": "agent-démo"
  },
"backup_codes": ["AAAA-BBBB-CCCC-DDDD"],
"jeton": {
"type": "Porteur",
"access_token": "txt_...",
"scopes": ["mcp:read", "mcp:execute", "messages:write"],
"expires_at": "2026-06-03T15:30:00Z"
  }
}
```

Le démarrage du compte est limité à une création de compte réussie par adresse IP
toutes les cinq minutes. Les tentatives de création répétées et réussies reviennent
`429 account_creation_rate_limited` avec `retry_after_seconds`.

## Envoyer SMS

```http
POST /api/v1/messages
```

Champs obligatoires :

-`phone_number`
-`body`

Champs facultatifs :

-`idempotency_key`
-`metadata`

Les envois via API utilisent la sélection automatique de l'expéditeur. Les envois provenant de l'application peuvent
sélectionner un numéro de marque connectée ; TextTree traite l'expéditeur sélectionné comme faisant partie du
demande de message idempotent.

### boucle

```bash
boucle https://api.texttree.ai/api/v1/messages \
-H "Autorisation : Porteur $TEXTREE_ACCESS_TOKEN" \
-H "Type de contenu : application/json" \
-d '{
"numéro_téléphone": "+15551234567",
"body": "Votre rendez-vous est demain à 9h.",
"idempotency_key": "rendez-vous-123-rappel"
  }'
```

### JavaScript

```js
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({
numéro de téléphone : "+15551234567",
body: "Votre rendez-vous est demain à 9h.",
idempotency_key : "rendez-vous-123-rappel",
  }),
});

const { message } = wait réponse.json();
```

### Python

```py
t'importer
demandes d'importation

réponse = requêtes.post(
"https://api.texttree.ai/api/v1/messages",
headers={"Autorisation": f"Bearer {os.environ['TEXTREE_ACCESS_TOKEN']}"},
json={
"numéro_téléphone": "+15551234567",
"body": "Votre rendez-vous est demain à 9h.",
"idempotency_key": "rendez-vous-123-rappel",
    },
délai d'attente = 10,
)

message = réponse.json()["message"]
```

### Elixir

```élixir
Mix.install([:req])

%{body: %{"message" => message}} =
Post demandé !(
"https://api.texttree.ai/api/v1/messages",
auth : {:bearer, System.fetch_env!("TEXTREE_ACCESS_TOKEN")},
json : %{
numéro de téléphone : "+15551234567",
body: "Votre rendez-vous est demain à 9h.",
idempotency_key : "rendez-vous-123-rappel"
    }
  )
```

Réponse :

```json
{
"message": {
"identifiant": "msg_123",
"status": "en file d'attente"
  }
}
```

## État du message

```http
OBTENIR /api/v1/messages/{id}
```

### boucle

```bash
boucle https://api.texttree.ai/api/v1/messages/msg_123 \
-H "Autorisation : Porteur $TEXTREE_ACCESS_TOKEN"
```

Réponse :

```json
{
"message": {
"identifiant": "msg_123",
"status": "livré",
"numéro_téléphone": "+15551234567",
"segments": 1,
"cost_cents": 1,
"created_at": "2026-04-28T14:00:00Z"
  }
}
```

Utilisez la page Messages pour déboguer la chronologie, les webhooks et les plantages.

Réutiliser un `idempotency_key` avec un destinataire, un corps, un coût ou un expéditeur sélectionné
différents renvoie un conflit d'idempotence.

## Numéros de téléphone

```http
OBTENIR /api/v1/numéros
POST /api/v1/numéros
```

`GET` nécessite `numbers:read`. `POST` nécessite `numbers:write` et achète un
numéro via la limite du fournisseur de messagerie TextTree. `area_code` est pris en charge
pour l'intention d'acheter des numéros locaux. Les achats en direct nécessitent la barrière de protection
achat explicite de numéros en direct du déploiement.

```bash
boucle https://api.texttree.ai/api/v1/numbers \
-H "Autorisation : Porteur $TEXTREE_ACCESS_TOKEN" \
-H "Type de contenu : application/json" \
-d '{
"code_zone": "415",
"friendly_name": "Ligne d'assistance"
  }'
```

Réponse :

```json
{
"numéro": {
"id": "num_123",
"numéro": "+14155550123",
"friendly_name": "Ligne d'assistance",
"statut": "connecté",
"compliance_status": "en attente"
  },
"webhook_configuré" : faux,
"avertissement": "provider_inbound_webhook_configuration_api_not_documented"
}
```
Markdown