Référence API
Référence complète de tous les endpoints de vérification Novauth. Chaque canal partage le même modèle d'authentification et la même URL de base — seuls le chemin et la charge utile diffèrent.
https://api.novauth.com/api/v1/connect-hubAuthentification
Chaque requête doit inclure deux en-têtes. Vous trouverez vos identifiants dans la section Développeur → Clés API du tableau de bord. Les identifiants sont mis en cache côté serveur pendant 5 minutes, les clés nouvellement créées sont donc actives en quelques secondes.
x-api-keyVotre clé API. À traiter comme un mot de passe — ne jamais exposer dans du code côté client.x-account-idVotre identifiant de compte. Affiché dans le tableau de bord à côté de chaque clé API.x-request-idID de corrélation optionnel. Transmettez n'importe quel UUID ; retourné dans les réponses d'erreur pour le traçage.Stockez les identifiants dans des variables d'environnement (BETATEL_API_KEY, BETATEL_ACCOUNT_ID). Ne les codez jamais en dur dans les fichiers source.
Les clés préfixées par sk_test_ sont des clés bac à sable — elles ne touchent jamais les opérateurs réels et n'entraînent aucun frais. Utilisez-les pendant le développement, puis remplacez-les par votre clé BTEL_ lors de la mise en production. Mode bac à sable →
Lors de la création d'une clé API, vous pouvez éventuellement associer une ou plusieurs adresses IP ou plages CIDR. Si une liste blanche d'IP est configurée, toute requête provenant d'une IP absente de la liste est rejetée avec 401 Unauthorized, même si la clé API elle-même est valide. Cela vous permet de verrouiller une clé sur l'IP de votre serveur afin qu'elle ne puisse pas être utilisée en cas de fuite.
curl -X POST https://api.novauth.com/api/v1/connect-hub/call/flash \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{"callee": "+14155552671"}'Verify Call
Initie un appel de courte durée avec sonnerie puis raccroché. L'ID d'appelant encode l'OTP — votre SDK mobile lit le numéro entrant sans que l'utilisateur ait besoin de décrocher.
calleestringobligatoirecallerstringmax_ring_timenumberuuidstring (ULID)callerstringcalleestringcurl -X POST https://api.novauth.com/api/v1/connect-hub/call/flash \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"callee": "+14155552671",
"caller": "+38761000001",
"max_ring_time": 5
}'
# Response:
# {
# "uuid": "01KAK9KATW01A437PSXS5EVDCR",
# "caller": "+38761000001",
# "callee": "+14155552671"
# }hangup_causestringdurationnumberbillsecnumberpddnumberdestination_countrystringstart_stampstring (ISO 8601)curl https://api.novauth.com/api/v1/connect-hub/call/flash/01KAK9KATW01A437PSXS5EVDCR/cdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID"
# Response:
# {
# "uuid": "01KAK9KATW01A437PSXS5EVDCR",
# "caller": "+38761000001",
# "callee": "+14155552671",
# "hangup_cause": "NORMAL_CLEARING",
# "duration": 6,
# "billsec": 0,
# "pdd": 2,
# "start_stamp": "2024-06-01T10:30:00.000Z",
# "destination_country": "United States",
# "destination_country_code": "US"
# }Retourne une liste paginée de tous les appels de votre compte. Utilisez filter pour affiner les résultats par champ CDR (par ex. callee, hangup_cause).
pagenumberrows_per_pagenumbersort_bystringsort_direction"ASC" | "DESC"filterobjecttotalnumbertotal_pagesnumberhas_next_pagebooleanhas_previous_pagebooleanlistCDR[]curl -X POST https://api.novauth.com/api/v1/connect-hub/call/flash/cdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"rows_per_page": 20,
"sort_by": "start_stamp",
"sort_direction": "DESC"
}'Termine un appel actif avant sa fin naturelle. Retourne 204 No Content en cas de succès.
# Terminate an active call before it naturally ends
curl -X DELETE https://api.novauth.com/api/v1/connect-hub/call/flash/01KAK9KATW01A437PSXS5EVDCR \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID"
# Returns 204 No Content on successSMS
Achemine un message texte via SMPP. Généralement utilisé pour envoyer un code OTP numérique que l'utilisateur saisit dans votre application.
tostringobligatoiretextstringobligatoirefromstringmessageIdstring (UUID)fromstringtostringcurl -X POST https://api.novauth.com/api/v1/connect-hub/sms \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155552671",
"text": "Your verification code is 482910. Valid for 5 minutes.",
"from": "Novauth"
}'
# Response:
# {
# "messageId": "0a62face-6d15-11f0-962f-d89d6729654c",
# "from": "Novauth",
# "to": "14155552671"
# }Récupère le statut de livraison d'un message envoyé. Le statut est mis à jour de manière asynchrone à mesure que les rapports de livraison (DLR) des opérateurs arrivent.
deliveredLivraison confirmée sur le terminal.sentTransmis à l'opérateur ; en attente du DLR.failedÉchec de livraison (numéro invalide, bloqué).undeliveredAccepté par l'opérateur mais livraison non confirmée.curl https://api.novauth.com/api/v1/connect-hub/sms/0a62face-6d15-11f0-962f-d89d6729654c/sdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID"
# Response:
# {
# "uuid": "...",
# "messageId": "0a62face-6d15-11f0-962f-d89d6729654c",
# "from": "Novauth",
# "to": "+14155552671",
# "status": "delivered",
# "timestamp": "2024-06-01T10:30:00.000Z"
# }Retourne une liste paginée de tous les messages envoyés. Accepte le même corps de pagination que les autres endpoints de liste (page, rows_per_page, sort_by, filter).
curl -X POST https://api.novauth.com/api/v1/connect-hub/sms/sdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"rows_per_page": 20,
"sort_direction": "DESC"
}'OTP Telegram
Envoie un OTP numérique via le Gateway API officiel de Telegram. Prend en charge les vérifications de disponibilité, la validation du code côté serveur et la révocation avec remboursement automatique.
tostringobligatoirecodestringobligatoirettlnumbersender_usernamestringcallback_urlstringuuidstring (ULID)request_idstringstatusstringrequest_costnumberremaining_balancenumbercurl -X POST https://api.novauth.com/api/v1/connect-hub/telegram \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155552671",
"code": "482910",
"ttl": 300
}'
# Response:
# {
# "uuid": "01KNV9CWW9ZEYVDFBJ1N7M1DVR",
# "request_id": "tg_req_abc123",
# "to": "14155552671",
# "status": "sent",
# "request_cost": 0.05,
# "remaining_balance": 49.95
# }Sonde si le numéro possède un compte Telegram avant l'envoi. Si is_refunded est true, l'utilisateur n'a pas de compte Telegram — le coût de la sonde est remboursé et vous devriez vous rabattre sur SMS ou Verify Call.
curl -X POST https://api.novauth.com/api/v1/connect-hub/telegram/check-send-ability \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{"to": "+14155552671"}'
# Response:
# {
# "request_id": "tg_req_abc123",
# "phone_number": "14155552671",
# "request_cost": 0.01,
# "is_refunded": false,
# "remaining_balance": 49.99,
# "delivery_status": { "status": "sent", "updated_at": 1713350400 }
# }Interroge le résultat de la saisie du code pour un request_id donné. Transmettez éventuellement le code saisi par l'utilisateur pour la validation côté serveur.
code_validL'utilisateur a saisi le bon code.code_invalidL'utilisateur a saisi un mauvais code.code_max_attempts_exceededTrop de tentatives échouées.expiredLe TTL du code a expiré avant la saisie.curl -X POST https://api.novauth.com/api/v1/connect-hub/telegram/check-verification-status \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"request_id": "tg_req_abc123",
"code": "482910"
}'
# Response:
# {
# "request_id": "tg_req_abc123",
# "verification_status": {
# "status": "code_valid",
# "updated_at": 1713350400
# }
# }Annule une requête OTP active avant que l'utilisateur ne la complète. Si le message n'a pas encore été lu, is_refunded sera true et le débit est retourné à votre solde.
curl -X POST https://api.novauth.com/api/v1/connect-hub/telegram/revoke-verification \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{"request_id": "tg_req_abc123"}'
# Response:
# {
# "request_id": "tg_req_abc123",
# "is_refunded": true,
# "remaining_balance": 50.0
# }Récupère le relevé de livraison Telegram complet pour un uuid donné (l'ID de corrélation Novauth retourné par l'endpoint d'envoi). Inclut le statut de livraison, le statut de vérification, le coût et le pays.
curl https://api.novauth.com/api/v1/connect-hub/telegram/01KNV9CWW9ZEYVDFBJ1N7M1DVR/tdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID"
# Response includes full TDR:
# {
# "uuid": "01KNV9CWW9ZEYVDFBJ1N7M1DVR",
# "to": "+14155552671",
# "status": "DELIVERED",
# "delivery_status": "delivered",
# "verification_status": "code_valid",
# "request_cost": 0.05,
# "country": "United States",
# "created_at": "2024-06-01T10:30:00.000Z"
# }Retourne une liste paginée de tous les relevés de livraison Telegram. Filtrez par <code>verification_status</code>, <code>delivery_status</code> ou tout autre champ TDR.
curl -X POST https://api.novauth.com/api/v1/connect-hub/telegram/tdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"rows_per_page": 20,
"sort_direction": "DESC"
}'Envoie un message OTP via l'API WhatsApp Business. L'utilisateur lit le code dans la conversation WhatsApp et le saisit dans votre application.
tostringobligatoiretextstringobligatoireuuidstring (ULID)tostringcurl -X POST https://api.novauth.com/api/v1/connect-hub/whatsapp/otp \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155552671",
"text": "Your verification code is 482910. Valid for 5 minutes."
}'
# Response:
# {
# "uuid": "01KAK9KATW01A437PSXS5EVDCR",
# "to": "+14155552671"
# }Après l'envoi, signalez le résultat de vérification de l'utilisateur via POST /whatsapp/webhook. Consultez la référence Webhooks pour plus de détails.
Récupère le relevé de livraison WhatsApp (WDR) pour un uuid donné retourné par l'endpoint d'envoi.
curl https://api.novauth.com/api/v1/connect-hub/whatsapp/01KAK9KATW01A437PSXS5EVDCR/wdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID"
# Response:
# {
# "uuid": "01KAK9KATW01A437PSXS5EVDCR",
# "to": "+14155552671",
# "status": "DELIVERED",
# "created_at": "2024-06-01T10:30:00.000Z"
# }Retourne une liste paginée de tous les relevés de livraison WhatsApp. Prend en charge le même corps <code>page</code>, <code>rows_per_page</code>, <code>filter</code> que tous les autres endpoints de liste.
curl -X POST https://api.novauth.com/api/v1/connect-hub/whatsapp/wdr \
-H "x-api-key: YOUR_API_KEY" \
-H "x-account-id: YOUR_ACCOUNT_ID" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"rows_per_page": 20,
"sort_direction": "DESC"
}'Codes d'erreur
Toutes les réponses d'erreur suivent la même enveloppe JSON. Le champ error contient une chaîne lisible par machine ; transmettez votre x-request-id au support lors du signalement de problèmes.
| Statut | Code | Description |
|---|---|---|
| 400 | BAD_REQUEST | Corps de requête invalide — champ obligatoire manquant, mauvais format ou numéro de téléphone invalide. |
| 401 | UNAUTHORIZED | En-têtes x-api-key / x-account-id manquants ou invalides. |
| 402 | PAYMENT_REQUIRED | Solde de compte insuffisant. Rechargez votre compte pour continuer. |
| 403 | FORBIDDEN | La clé API existe mais ne dispose pas des permissions pour cette opération. |
| 404 | NOT_FOUND | L'UUID ou la ressource demandé(e) n'existe pas. |
| 409 | CONFLICT | Requête dupliquée ou état conflictuel (par ex. révocation d'une requête déjà expirée). |
| 480 | TEMPORARY_UNAVAILABLE | Passerelle temporairement inaccessible. Réessayez avec un recul exponentiel. |
| 486 | BUSY_HERE | (Verify Call) Le destinataire est occupé ou l'appel a été rejeté par le réseau. |
| 500 | INTERNAL_SERVER_ERROR | Erreur serveur inattendue. Contactez le support avec votre x-request-id. |
| 503 | SERVICE_UNAVAILABLE | Passerelle déconnectée ou service en maintenance. Consultez la page de statut. |
| 603 | DECLINE | (Verify Call) Le destinataire a explicitement refusé l'appel. |
Pour une liste complète des codes d'erreur incluant les étapes de remédiation suggérées, consultez le guide de gestion des erreurs.