Référence API
Référence de l'API actuelle ChinqIT Verify. Base : https://sms.chinqit.com/api/v2.
Authentification
Toutes les requêtes doivent inclure la clé API dans l'un de ces en-têtes :
X-API-Key: votre-clé-apiou
Authorization: Bearer votre-clé-apiLes clés API sont fournies par ChinqIT Verify. Contactez votre administrateur pour en obtenir une.
401 Unauthorized (clé manquante) :
{
"success": false,
"message": "API key is required. Please provide X-API-Key header or Authorization Bearer token."
}403 Forbidden (clé invalide ou inactive) :
{
"success": false,
"message": "Invalid or inactive API key."
}403 Forbidden (clé non liée à un compte de facturation — endpoints d'envoi uniquement) :
{
"success": false,
"message": "API key is not linked to a billing account"
}URL de base
- Production :
https://sms.chinqit.com/api/v2
Formats de numéro
Les règles dépendent de l'endpoint et du canal OTP.
SMS (POST /api/v2/notify, POST /api/v2/code avec channel: "sms", POST /api/v2/check avec channel: "sms")
Numéros mauritaniens uniquement. Entrées normalisées en +222XXXXXXXX :
- Canonique :
+222XXXXXXXX(ex.+22238089336) - Avec indicatif :
222XXXXXXXX - Local :
XXXXXXXX(doit commencer par2,3ou4)
OTP WhatsApp (POST /api/v2/code avec channel: "whatsapp")
Format international E.164 (ex. +12133734253).
Pays pris en charge : Mauritanie (MR) et États-Unis (US). Les autres pays renvoient 400 avec :
"WhatsApp OTP supports only Mauritania (MR) and United States (US) phone numbers."
Exemple US : +12133734253.
Utilisez le même numéro E.164 (et le même channel) pour POST /api/v2/check.
Les formats invalides renvoient 400 Bad Request.
Limites de débit
Débit global (notify, code, check, GET statut)
Par clé API : 10 requêtes par seconde. Les réponses incluent X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset. En cas de dépassement : 429 avec le champ retryAfter (secondes).
Les limites de débit standard ne s'appliquent pas aux requêtes bulk.
Envoi OTP (POST /api/v2/code uniquement)
Par numéro de téléphone et par clé API :
- 3 requêtes par minute
- 10 requêtes par heure
- 20 requêtes par jour
En cas de dépassement : 429 avec retryAfter (secondes).
POST /api/v2/notify
Envoyer un SMS.
Requête :
{
"message": "Bonjour, ceci est un message de test",
"phoneNumber": "+22238089336"
}| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
message | string | Oui | Contenu du SMS |
phoneNumber | string | Oui | Destinataire (format Mauritanie) |
Réponse :
{
"success": true,
"messageId": "550e8400-e29b-41d4-a716-446655440000",
"queued": true
}Les messages sont mis en file et traités de façon asynchrone. Utilisez messageId pour suivre la livraison.
La facturation est débitée lorsque la requête est acceptée. Une réponse 200 avec queued: true signifie que votre compte a été débité ; interrogez GET /api/v2/notify/:messageId pour le résultat de livraison (sent, providerError). En cas de 402, la requête est rejetée mais messageId est tout de même renvoyé pour interroger le statut d'échec.
Erreurs : 503 si l'envoi SMS est temporairement indisponible.
402 Payment Required — Solde insuffisant :
{
"success": false,
"message": "Insufficient balance",
"messageId": "550e8400-e29b-41d4-a716-446655440000"
}Exemple :
curl -X POST https://sms.chinqit.com/api/v2/notify \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "+22238089336", "message": "Bonjour"}'POST /api/v2/code
Demander un OTP (envoyer un code de vérification par SMS ou WhatsApp).
Requête :
{
"phoneNumber": "+22238089336",
"hash": "ABC123XYZ45",
"language": "en",
"channel": "sms"
}| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
phoneNumber | string | Oui | Destinataire : format Mauritanie si channel: "sms" ; E.164 si channel: "whatsapp" (MR ou US) |
hash | string | Non | Hash SMS Retriever 11 caractères (SMS uniquement). Voir Guide SMS Retriever. |
language | string | Non | fr (défaut), en, ar |
channel | string | Non | sms (défaut) ou whatsapp |
Réponse :
{
"success": true,
"messageId": "550e8400-e29b-41d4-a716-446655440000",
"expiresIn": 600
}- Code à 6 chiffres, valide 10 minutes (600 secondes), 3 tentatives de vérification max.
402 Payment Required — Solde insuffisant (SMS et WhatsApp) :
{
"success": false,
"message": "Insufficient balance",
"messageId": "550e8400-e29b-41d4-a716-446655440000"
}Pour l'OTP SMS, la facturation est débitée lorsque la requête est acceptée. Une réponse 200 signifie que votre compte a été débité ; interrogez le statut pour le résultat de livraison.
Canal WhatsApp (channel: "whatsapp") :
- Votre clé API doit avoir WhatsApp activé ; sinon 403 avec
"WhatsApp access is not enabled for this API key". - Numéro E.164 valide pour MR ou US uniquement (voir Formats de numéro) ; les autres pays renvoient 400.
- 503 si l'envoi WhatsApp est temporairement indisponible.
Exemple :
curl -X POST https://sms.chinqit.com/api/v2/code \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "+22238089336", "language": "en"}'POST /api/v2/check
Vérifier un code OTP.
Requête :
{
"phoneNumber": "+22238089336",
"otp": "123456",
"channel": "sms"
}| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
phoneNumber | string | Oui | Même numéro que pour POST /api/v2/code (Mauritanie en SMS ; E.164 MR/US en WhatsApp) |
otp | string | Oui | Code à 6 chiffres |
channel | string | Non | sms (défaut) ou whatsapp — doit correspondre au canal d'envoi |
Réponse (succès) :
{
"success": true,
"message": "OTP verified successfully",
"verified": true
}Réponse (invalide) :
{
"success": false,
"message": "Invalid OTP",
"retriesLeft": 2
}Exemple :
curl -X POST https://sms.chinqit.com/api/v2/check \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"phoneNumber": "+22238089336", "otp": "123456"}'GET /api/v2/notify/
Obtenir le statut de livraison d'un message.
Réponse :
{
"success": true,
"data": {
"messageId": "550e8400-e29b-41d4-a716-446655440000",
"sent": true,
"phoneNumber": "+22238089336",
"type": "message",
"channel": "sms",
"smppMessageId": "abc123",
"submittedAt": "2024-01-15T10:30:00.000Z",
"dlrStatus": "DELIVRD",
"dlrReceivedAt": "2024-01-15T10:30:05.000Z",
"providerError": null,
"createdAt": "2024-01-15T10:29:55.000Z",
"updatedAt": "2024-01-15T10:30:05.000Z"
}
}Exemple d'échec de livraison :
{
"success": true,
"data": {
"messageId": "550e8400-e29b-41d4-a716-446655440000",
"sent": false,
"phoneNumber": "+22238089336",
"type": "message",
"channel": "sms",
"providerError": {
"code": "NO_CREDIT",
"message": "Insufficient balance",
"statusCode": 402
},
"createdAt": "2024-01-15T10:29:55.000Z",
"updatedAt": "2024-01-15T10:29:56.000Z"
}
}| Champ | Description |
|---|---|
sent | Statut de livraison (true/false/null en attente) |
channel | Canal de livraison (sms, whatsapp) |
providerError | Détails d'erreur en cas d'échec d'envoi (null en cas de succès) |
smppMessageId | Identifiant message attribué par l'opérateur (SMS) |
submittedAt | Date d'envoi au fournisseur |
dlrStatus | Statut du accusé de réception |
dlrReceivedAt | Date de réception du DLR |
404 si le message est introuvable ou n'appartient pas à votre clé API.
Exemple :
curl -H "X-API-Key: YOUR_API_KEY" \
"https://sms.chinqit.com/api/v2/notify/550e8400-e29b-41d4-a716-446655440000"Bulk SMS
Envoi jusqu'à 50 000 destinataires par lot. Voir le guide Bulk SMS pour :
POST /api/v2/bulk/send(réponse 202 Accepted)GET /api/v2/bulk/status/:batchId
Format des erreurs
{
"success": false,
"message": "Description de l'erreur",
"errors": []
}Codes HTTP :
| Code | Signification |
|---|---|
| 200 | Succès |
| 202 | Lot bulk accepté |
| 400 | Erreur de validation |
| 401 | Clé API manquante |
| 402 | Solde insuffisant (SMS, OTP, WhatsApp, bulk) |
| 403 | Clé invalide/inactive, clé non liée à la facturation (envoi), ou WhatsApp non activé sur la clé |
| 404 | Ressource introuvable |
| 429 | Limite de débit dépassée |
| 500 | Erreur serveur |
| 502 | Erreur fournisseur (ex. WhatsApp) |
| 503 | Service temporairement indisponible (SMS ou WhatsApp) |
Codes d'erreur fournisseur
Ces codes apparaissent dans le champ providerError.code lors de la récupération du statut via GET /api/v2/notify/:messageId.
| Code | Description |
|---|---|
NO_CREDIT | Solde insuffisant lors de la tentative d'envoi |
BILLING_ERROR | Erreur de transaction de facturation lors de l'envoi (HTTP 500 sur l'endpoint d'envoi) |
QUEUE_ERROR | Message débité mais échec de mise en file d'envoi (HTTP 500 sur l'endpoint d'envoi) |
Les échecs de facturation bulk sont documentés dans le guide Bulk SMS.
Dépréciation
Les anciens endpoints sans version (/messages/send, /otp/send, etc.) restent disponibles mais renvoient l'en-tête Deprecation: true et un objet deprecation dans le JSON. Ne les utilisez pas pour de nouvelles intégrations. Voir la section API dépréciée.
Voir aussi
API v1 (dépréciée) : section legacy