API REST Reepli
L'API REST Reepli vous permet d'integrer les fonctionnalites de Reepli directement dans vos applications. Envoyez des messages, gerez des contacts, lancez des campagnes et bien plus depuis votre propre code.
Vue d'ensemble
L'API Reepli est une API RESTful qui utilise :
- HTTPS pour toutes les communications.
- JSON comme format de donnees (requetes et reponses).
- Authentification par cle API via l'en-tete HTTP.
- Codes HTTP standard pour les reponses.
- Pagination par curseur pour les listes.
URL de base : https://api.reepli.ai/v1
Pre-requis
- Un compte Reepli.ai avec un plan Business ou Enterprise. Voir Plans et tarifs.
- Les droits Administrateur sur votre compte Reepli. Voir Roles et permissions.
- Des connaissances en developpement (HTTP, JSON, REST).
Authentification
Generer une cle API
- Connectez-vous a Reepli et accedez a Parametres > Integrations > API.
- Cliquez sur Generer une nouvelle cle API.
- Donnez un nom a la cle (ex : "Integration CRM Production").
- Selectionnez les permissions de la cle (lecture, ecriture, ou les deux).
- Cliquez sur Creer.
- Copiez la cle immediatement -- elle ne sera plus affichee.
La cle API donne acces a votre compte Reepli. Ne la partagez jamais, ne la versionnez pas dans un depot de code, et ne l'exposez pas cote client (navigateur, application mobile). Stockez-la dans des variables d'environnement ou un gestionnaire de secrets.
Utiliser la cle API
Incluez la cle API dans l'en-tete Authorization de chaque requete :
Authorization: Bearer rpl_sk_votre_cle_api_ici
Exemple avec cURL :
curl -X GET https://api.reepli.ai/v1/contacts \
-H "Authorization: Bearer rpl_sk_votre_cle_api_ici" \
-H "Content-Type: application/json"
Gestion des cles API
| Action | Procedure |
|---|---|
| Lister les cles | Parametres > Integrations > API |
| Revoquer une cle | Cliquez sur l'icone de suppression a cote de la cle |
| Regenerer une cle | Revoquez l'ancienne et creez-en une nouvelle |
| Limiter les permissions | Selectionnez lecture seule ou lecture/ecriture |
Vous pouvez creer plusieurs cles API avec des permissions differentes pour chaque integration.
Limites de debit (Rate Limits)
| Plan | Requetes par minute | Requetes par jour |
|---|---|---|
| Business | 60 | 10 000 |
| Enterprise | 200 | 100 000 |
En-tetes de limite de debit
Chaque reponse API inclut des en-tetes indiquant votre consommation :
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1712140800
| En-tete | Description |
|---|---|
X-RateLimit-Limit | Nombre maximal de requetes par minute |
X-RateLimit-Remaining | Requetes restantes dans la fenetre actuelle |
X-RateLimit-Reset | Timestamp Unix de la prochaine remise a zero |
Gestion du depassement
Si vous depassez la limite, l'API repond avec :
- Code HTTP :
429 Too Many Requests - En-tete :
Retry-After: 30(nombre de secondes a attendre)
Implementez un mecanisme de backoff exponentiel dans votre code pour gerer les limites de debit de maniere elegante. Evitez de renvoyer immediatement les requetes echouees.
Codes de reponse
| Code | Signification | Description |
|---|---|---|
| 200 | OK | Requete traitee avec succes |
| 201 | Created | Ressource creee avec succes |
| 204 | No Content | Suppression reussie |
| 400 | Bad Request | Parametres invalides ou manquants |
| 401 | Unauthorized | Cle API manquante ou invalide |
| 403 | Forbidden | Permissions insuffisantes |
| 404 | Not Found | Ressource introuvable |
| 409 | Conflict | Conflit (ex : doublon) |
| 422 | Unprocessable Entity | Donnees valides mais non traitables |
| 429 | Too Many Requests | Limite de debit depassee |
| 500 | Internal Server Error | Erreur interne Reepli |
Format des erreurs
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Le champ 'phone' est requis.",
"details": [
{
"field": "phone",
"message": "Ce champ ne peut pas etre vide."
}
]
}
}
Endpoints principaux
Contacts
| Methode | Endpoint | Description |
|---|---|---|
| GET | /v1/contacts | Lister les contacts |
| POST | /v1/contacts | Creer un contact |
| GET | /v1/contacts/{id} | Recuperer un contact |
| PUT | /v1/contacts/{id} | Mettre a jour un contact |
| DELETE | /v1/contacts/{id} | Supprimer un contact |
| GET | /v1/contacts/{id}/conversations | Conversations d'un contact |
| POST | /v1/contacts/{id}/tags | Ajouter des etiquettes |
| DELETE | /v1/contacts/{id}/tags/{tag} | Supprimer une etiquette |
Creer un contact
curl -X POST https://api.reepli.ai/v1/contacts \
-H "Authorization: Bearer rpl_sk_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"phone": "+33612345678",
"name": "Marie Dupont",
"email": "[email protected]",
"tags": ["client", "premium"],
"custom_fields": {
"entreprise": "Acme SAS",
"source": "site-web"
}
}'
Reponse (201 Created) :
{
"data": {
"id": "cnt_567890",
"phone": "+33612345678",
"name": "Marie Dupont",
"email": "[email protected]",
"tags": ["client", "premium"],
"custom_fields": {
"entreprise": "Acme SAS",
"source": "site-web"
},
"created_at": "2026-04-03T10:00:00Z",
"updated_at": "2026-04-03T10:00:00Z"
}
}
Messages
| Methode | Endpoint | Description |
|---|---|---|
| POST | /v1/messages | Envoyer un message |
| GET | /v1/messages/{id} | Recuperer un message |
| GET | /v1/conversations/{id}/messages | Messages d'une conversation |
Envoyer un message texte
curl -X POST https://api.reepli.ai/v1/messages \
-H "Authorization: Bearer rpl_sk_votre_cle" \
-H "Content-Type: application/json" \
-d '{
"to": "+33612345678",
"type": "template",
"template": {
"name": "order_confirmation",
"language": "fr",
"components": [
{
"type": "body",
"parameters": [
{"type": "text", "text": "Marie"},
{"type": "text", "text": "#1042"}
]
}
]
}
}'
En dehors de la fenetre de 24 heures apres le dernier message du contact, seuls les messages bases sur des modeles approuves peuvent etre envoyes. Les messages libres (free-form) seront rejetes. Consultez la tarification WhatsApp pour comprendre le modele de facturation.
Conversations
| Methode | Endpoint | Description |
|---|---|---|
| GET | /v1/conversations | Lister les conversations |
| GET | /v1/conversations/{id} | Recuperer une conversation |
| POST | /v1/conversations/{id}/assign | Assigner un agent |
| POST | /v1/conversations/{id}/close | Fermer une conversation |
Campagnes
| Methode | Endpoint | Description |
|---|---|---|
| GET | /v1/campaigns | Lister les campagnes |
| POST | /v1/campaigns | Creer une campagne |
| GET | /v1/campaigns/{id} | Recuperer une campagne |
| POST | /v1/campaigns/{id}/send | Lancer une campagne |
| GET | /v1/campaigns/{id}/stats | Statistiques d'une campagne |
Modeles de messages
| Methode | Endpoint | Description |
|---|---|---|
| GET | /v1/templates | Lister les modeles |
| POST | /v1/templates | Creer un modele |
| GET | /v1/templates/{id} | Recuperer un modele |
| DELETE | /v1/templates/{id} | Supprimer un modele |
Pagination
Les endpoints qui retournent des listes utilisent une pagination par curseur :
GET /v1/contacts?limit=50&after=cnt_567890
| Parametre | Description | Defaut |
|---|---|---|
limit | Nombre d'elements par page (1-100) | 25 |
after | Curseur pour la page suivante | -- |
before | Curseur pour la page precedente | -- |
Reponse :
{
"data": [...],
"pagination": {
"has_more": true,
"next_cursor": "cnt_891011",
"prev_cursor": "cnt_345678"
}
}
Filtrage et tri
Les endpoints de liste supportent des parametres de filtrage :
GET /v1/contacts?tag=premium&created_after=2026-01-01&sort=-created_at
| Parametre | Description | Exemple |
|---|---|---|
tag | Filtrer par etiquette | tag=vip |
created_after | Crees apres cette date | created_after=2026-01-01 |
created_before | Crees avant cette date | created_before=2026-12-31 |
sort | Champ de tri (prefixe - pour decroissant) | sort=-created_at |
search | Recherche textuelle | search=dupont |
SDKs et bibliotheques
Reepli fournit des SDKs officiels pour les langages populaires :
| Langage | Package | Installation |
|---|---|---|
| Python | reepli-python | pip install reepli |
| Node.js | @reepli/sdk | npm install @reepli/sdk |
| PHP | reepli/sdk-php | composer require reepli/sdk-php |
Exemple avec le SDK Python :
from reepli import ReepliClient
client = ReepliClient(api_key="rpl_sk_votre_cle")
# Creer un contact
contact = client.contacts.create(
phone="+33612345678",
name="Marie Dupont",
tags=["client"]
)
# Envoyer un message
message = client.messages.send(
to="+33612345678",
template="order_confirmation",
parameters={"name": "Marie", "order_id": "#1042"}
)
Bonnes pratiques
- Gerez les erreurs : implementez une gestion robuste des erreurs et des retentatives.
- Respectez les limites : implementez un backoff exponentiel en cas de code 429.
- Validez les donnees : validez les donnees cote client avant d'envoyer les requetes.
- Utilisez les webhooks : pour les notifications en temps reel, preferez les webhooks au polling.
- Versionnez : utilisez toujours le prefixe
/v1/pour garantir la compatibilite.
Depannage
Code 401 - Non autorise
- Verifiez que votre cle API est correcte et active.
- Verifiez le format de l'en-tete :
Authorization: Bearer rpl_sk_....
Code 429 - Limite depassee
- Attendez le delai indique dans l'en-tete
Retry-After. - Implementez un mecanisme de backoff exponentiel.
- Envisagez de passer a un plan superieur pour des limites plus elevees.
Code 422 - Donnees non traitables
- Verifiez le format des numeros de telephone (indicatif pays requis).
- Assurez-vous que les champs obligatoires sont presents.
- Consultez le champ
detailsde la reponse d'erreur.
Pour d'autres problemes, consultez la page de depannage ou contactez le support.