Riferimento API
Riferimento completo per tutti gli endpoint di verifica Novauth. Ogni canale condivide lo stesso modello di autenticazione e URL di base — variano solo il percorso e il payload.
https://api.novauth.com/api/v1/connect-hubAutenticazione
Ogni richiesta deve includere due header. Puoi trovare le tue credenziali nella sezione Developer → API Keys della dashboard. Le credenziali vengono memorizzate nella cache lato server per 5 minuti, quindi le chiavi appena create diventano attive in pochi secondi.
x-api-keyLa tua chiave API. Trattala come una password — non esporla mai nel codice lato client.x-account-idIl tuo identificatore account. Visualizzato nella dashboard accanto a ogni chiave API.x-request-idID di correlazione facoltativo. Passa qualsiasi UUID; viene restituito nelle risposte di errore per la tracciatura.Archivia le credenziali nelle variabili d'ambiente (BETATEL_API_KEY, BETATEL_ACCOUNT_ID). Non hardcodarle mai nei file sorgente.
Le chiavi con prefisso sk_test_ sono chiavi sandbox — non toccano mai i veri operatori e non comportano alcun addebito. Usale durante lo sviluppo, poi sostituiscile con la chiave BTEL_ quando vai in produzione. Modalità Sandbox →
Durante la creazione di una chiave API puoi allegare facoltativamente uno o più indirizzi IP o range CIDR. Se è configurata una whitelist IP, qualsiasi richiesta proveniente da un IP non incluso nell'elenco viene rifiutata con 401 Unauthorized, anche se la chiave API è valida. Questo ti consente di bloccare una chiave sull'IP del tuo server, in modo che non possa essere utilizzata in caso di furto.
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
Avvia una chiamata di breve durata con squillo e chiusura. L'ID chiamante codifica l'OTP — il tuo SDK mobile legge il numero in arrivo senza che l'utente debba rispondere.
calleestringobbligatoriocallerstringmax_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"
# }Restituisce un elenco paginato di tutte le chiamate per il tuo account. Usa filter per filtrare i risultati per qualsiasi campo CDR (es. 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"
}'Termina una chiamata attiva prima che si concluda naturalmente. Restituisce 204 No Content in caso di successo.
# 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
Invia un messaggio di testo tramite SMPP. Tipicamente utilizzato per inviare un codice OTP numerico che l'utente digita nella tua app.
tostringobbligatoriotextstringobbligatoriofromstringmessageIdstring (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"
# }Recupera lo stato di consegna di un messaggio inviato. Lo stato viene aggiornato in modo asincrono all'arrivo dei rapporti di consegna (DLR) degli operatori.
deliveredConsegna confermata all'handset.sentInviato all'operatore; in attesa di DLR.failedConsegna fallita (numero non valido, bloccato).undeliveredOperatore accettato ma consegna non confermata.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"
# }Restituisce un elenco paginato di tutti i messaggi inviati. Accetta lo stesso corpo di paginazione degli altri endpoint elenco (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
Invia un OTP numerico tramite l'API Gateway ufficiale di Telegram. Supporta controlli di raggiungibilità, validazione del codice lato server e revoca con rimborso automatico.
tostringobbligatoriocodestringobbligatoriottlnumbersender_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
# }Verifica se il numero ha un account Telegram prima dell'invio. Se is_refunded è true, l'utente non ha un account Telegram — il costo della verifica viene rimborsato e dovresti ripiegare su SMS o 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 }
# }Interroga l'esito dell'inserimento del codice per un dato request_id. Passa facoltativamente il code inserito dall'utente per la validazione lato server.
code_validL'utente ha inserito il codice corretto.code_invalidL'utente ha inserito un codice errato.code_max_attempts_exceededTroppi tentativi falliti.expiredTTL del codice scaduto prima dell'inserimento.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
# }
# }Annulla una richiesta OTP attiva prima che l'utente la completi. Se il messaggio non è ancora stato letto, is_refunded sarà true e l'addebito viene restituito al tuo saldo.
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
# }Recupera il registro di consegna Telegram completo per un dato uuid (l'ID di correlazione Novauth restituito dall'endpoint di invio). Include stato di consegna, stato di verifica, costo e paese.
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"
# }Restituisce un elenco paginato di tutti i registri di consegna Telegram. Filtra per <code>verification_status</code>, <code>delivery_status</code> o qualsiasi altro campo 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"
}'Invia un messaggio OTP tramite WhatsApp Business API. L'utente legge il codice nella conversazione WhatsApp e lo digita nella tua app.
tostringobbligatoriotextstringobbligatoriouuidstring (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"
# }Dopo l'invio, segnala l'esito della verifica dell'utente tramite POST /whatsapp/webhook. Vedi il riferimento Webhooks per i dettagli.
Recupera il registro di consegna WhatsApp per un dato uuid restituito dall'endpoint di invio.
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"
# }Restituisce un elenco paginato di tutti i registri di consegna WhatsApp. Supporta lo stesso corpo <code>page</code>, <code>rows_per_page</code>, <code>filter</code> di tutti gli altri endpoint elenco.
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"
}'Codici di errore
Tutte le risposte di errore seguono lo stesso envelope JSON. Il campo error contiene una stringa leggibile dalla macchina; fornisci il tuo x-request-id al supporto quando segnali problemi.
| Stato | Codice | Descrizione |
|---|---|---|
| 400 | BAD_REQUEST | Corpo della richiesta non valido — campo obbligatorio mancante, formato errato o numero di telefono non valido. |
| 401 | UNAUTHORIZED | Header x-api-key / x-account-id mancanti o non validi. |
| 402 | PAYMENT_REQUIRED | Saldo dell'account insufficiente. Ricarica il tuo account per continuare. |
| 403 | FORBIDDEN | La chiave API esiste ma non dispone dei permessi per questa operazione. |
| 404 | NOT_FOUND | L'UUID o la risorsa richiesta non esiste. |
| 409 | CONFLICT | Richiesta duplicata o stato in conflitto (es. revoca di una richiesta già scaduta). |
| 480 | TEMPORARY_UNAVAILABLE | Gateway temporaneamente non raggiungibile. Riprova con backoff esponenziale. |
| 486 | BUSY_HERE | (Verify Call) Il destinatario è occupato o la chiamata è stata rifiutata dalla rete. |
| 500 | INTERNAL_SERVER_ERROR | Errore imprevisto del server. Contatta il supporto con il tuo x-request-id. |
| 503 | SERVICE_UNAVAILABLE | Gateway disconnesso o servizio in manutenzione. Controlla la pagina di stato. |
| 603 | DECLINE | (Verify Call) Il destinatario ha rifiutato esplicitamente la chiamata. |
Per un elenco completo dei codici di errore con le relative fasi di rimedio suggerite, consulta la guida alla gestione degli errori.