API-Referenz
Vollständige Referenz aller Novauth-Verifizierungsendpunkte. Jeder Kanal nutzt dasselbe Authentifizierungsmodell und dieselbe Basis-URL – nur Pfad und Payload unterscheiden sich.
https://api.novauth.com/api/v1/connect-hubAuthentifizierung
Jede Anfrage muss zwei Header enthalten. Deine Zugangsdaten findest du im Bereich Entwickler → API-Schlüssel des Dashboards. Zugangsdaten werden serverseitig 5 Minuten lang gecacht, neu erstellte Schlüssel sind also innerhalb von Sekunden aktiv.
x-api-keyDein API-Schlüssel. Behandle ihn wie ein Passwort – gib ihn niemals in clientseitigem Code preis.x-account-idDeine Konto-Kennung. Im Dashboard neben jedem API-Schlüssel angezeigt.x-request-idOptionale Korrelations-ID. Übergib eine beliebige UUID; wird in Fehlerantworten zur Nachverfolgung zurückgegeben.Speichere Zugangsdaten in Umgebungsvariablen (BETATEL_API_KEY, BETATEL_ACCOUNT_ID). Hardcode sie niemals in Quelldateien.
Schlüssel mit dem Präfix sk_test_ sind Sandbox-Schlüssel – sie berühren keine echten Carrier und verursachen keine Kosten. Verwende sie während der Entwicklung und tausche sie gegen deinen BTEL_-Schlüssel aus, wenn du live gehst. Sandbox-Modus →
Beim Erstellen eines API-Schlüssels kannst du optional eine oder mehrere IP-Adressen oder CIDR-Bereiche angeben. Wenn eine IP-Whitelist konfiguriert ist, wird jede Anfrage von einer IP außerhalb der Liste mit 401 Unauthorized abgelehnt, auch wenn der API-Schlüssel selbst gültig ist. Damit kannst du einen Schlüssel an die IP deines Servers binden, sodass er bei einem Leak nicht missbraucht werden kann.
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
Leitet einen kurzlebigen Klingel-und-Auflege-Anruf ein. Die Anrufer-ID kodiert den OTP – dein mobiles SDK liest die eingehende Nummer, ohne dass der Nutzer abnehmen muss.
calleestringerforderlichcallerstringmax_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"
# }Gibt eine paginierte Liste aller Anrufe deines Kontos zurück. Verwende filter, um Ergebnisse nach beliebigen CDR-Feldern einzuschränken (z. B. 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"
}'Beendet einen aktiven Anruf vor dem natürlichen Ende. Gibt bei Erfolg 204 No Content zurück.
# 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
Stellt eine Textnachricht über SMPP zu. Wird typischerweise verwendet, um einen numerischen OTP-Code zu senden, den der Nutzer in deine App eingibt.
tostringerforderlichtextstringerforderlichfromstringmessageIdstring (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"
# }Ruft den Zustellstatus einer gesendeten Nachricht ab. Der Status wird asynchron aktualisiert, sobald Carrier-Zustellberichte (DLRs) eintreffen.
deliveredBestätigte Zustellung an das Endgerät.sentAn den Carrier weitergeleitet; warte auf DLR.failedZustellung fehlgeschlagen (ungültige Nummer, gesperrt).undeliveredCarrier hat akzeptiert, aber Zustellung nicht bestätigt.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"
# }Gibt eine paginierte Liste aller gesendeten Nachrichten zurück. Akzeptiert denselben Paginierungs-Body wie andere Listen-Endpunkte (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"
}'Telegram-OTP
Sendet einen numerischen OTP über das offizielle Gateway API von Telegram. Unterstützt Erreichbarkeitsprüfungen, serverseitige Code-Validierung und Widerruf mit automatischer Rückerstattung.
tostringerforderlichcodestringerforderlichttlnumbersender_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
# }Prüft, ob die Nummer ein Telegram-Konto hat, bevor gesendet wird. Wenn is_refunded true ist, hat der Nutzer kein Telegram-Konto – die Prüfgebühr wird erstattet und du solltest auf SMS oder Verify Call zurückfallen.
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 }
# }Fragt das Code-Eingabe-Ergebnis für eine bestimmte request_id ab. Übergib optional den vom Nutzer eingegebenen code zur serverseitigen Validierung.
code_validNutzer hat den richtigen Code eingegeben.code_invalidNutzer hat einen falschen Code eingegeben.code_max_attempts_exceededZu viele fehlgeschlagene Versuche.expiredCode-TTL abgelaufen, bevor er eingegeben wurde.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
# }
# }Bricht eine aktive OTP-Anfrage ab, bevor der Nutzer sie abschließt. Wenn die Nachricht noch nicht gelesen wurde, ist is_refunded true und die Gebühr wird deinem Guthaben gutgeschrieben.
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
# }Ruft den vollständigen Telegram-Zustelldatensatz für eine bestimmte uuid ab (die Novauth-Korrelations-ID, die vom Sende-Endpunkt zurückgegeben wird). Enthält Zustellstatus, Verifizierungsstatus, Kosten und Land.
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"
# }Gibt eine paginierte Liste aller Telegram-Zustelldatensätze zurück. Nach <code>verification_status</code>, <code>delivery_status</code> oder einem anderen TDR-Feld filtern.
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"
}'Sendet eine OTP-Nachricht über die WhatsApp Business API. Der Nutzer liest den Code im WhatsApp-Gespräch und gibt ihn in deine App ein.
tostringerforderlichtextstringerforderlichuuidstring (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"
# }Melde das Verifizierungsergebnis des Nutzers nach dem Senden über POST /whatsapp/webhook. Details findest du in der Webhooks-Referenz.
Ruft den WhatsApp-Zustelldatensatz für eine bestimmte uuid ab, die vom Sende-Endpunkt zurückgegeben wurde.
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"
# }Gibt eine paginierte Liste aller WhatsApp-Zustelldatensätze zurück. Unterstützt denselben <code>page</code>-, <code>rows_per_page</code>-, <code>filter</code>-Body wie alle anderen Listen-Endpunkte.
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"
}'Fehlercodes
Alle Fehlerantworten folgen demselben JSON-Envelope. Das Feld error enthält einen maschinenlesbaren String; gib deine x-request-id an den Support weiter, wenn du Probleme meldest.
| Status | Code | Beschreibung |
|---|---|---|
| 400 | BAD_REQUEST | Ungültiger Request-Body – fehlendes Pflichtfeld, falsches Format oder ungültige Telefonnummer. |
| 401 | UNAUTHORIZED | Fehlende oder ungültige x-api-key / x-account-id-Header. |
| 402 | PAYMENT_REQUIRED | Unzureichendes Kontoguthaben. Lade dein Konto auf, um fortzufahren. |
| 403 | FORBIDDEN | API-Schlüssel vorhanden, aber ohne Berechtigung für diese Operation. |
| 404 | NOT_FOUND | Die angeforderte UUID oder Ressource existiert nicht. |
| 409 | CONFLICT | Doppelte Anfrage oder widersprüchlicher Zustand (z. B. Widerruf einer bereits abgelaufenen Anfrage). |
| 480 | TEMPORARY_UNAVAILABLE | Gateway vorübergehend nicht erreichbar. Mit exponentiellem Backoff erneut versuchen. |
| 486 | BUSY_HERE | (Verify Call) Empfänger ist besetzt oder der Anruf wurde vom Netzwerk abgelehnt. |
| 500 | INTERNAL_SERVER_ERROR | Unerwarteter Serverfehler. Kontaktiere den Support mit deiner x-request-id. |
| 503 | SERVICE_UNAVAILABLE | Gateway getrennt oder Service in Wartung. Statusseite prüfen. |
| 603 | DECLINE | (Verify Call) Empfänger hat den Anruf explizit abgelehnt. |
Eine vollständige Liste der Fehlercodes einschließlich empfohlener Behebungsschritte findest du im Fehlerbehandlungs-Leitfaden.