Referência da API
Referência completa de todos os endpoints de verificação da Novauth. Todos os canais partilham o mesmo modelo de autenticação e a mesma URL base — só a rota e o payload diferem.
https://api.novauth.com/api/v1/connect-hubAutenticação
Cada pedido deve incluir dois cabeçalhos. Pode encontrar as suas credenciais na secção Programador → Chaves de API do painel. As credenciais são guardadas em cache do lado do servidor durante 5 minutos, pelo que as chaves recém-criadas ficam ativas em segundos.
x-api-keyA sua chave de API. Trate-a como uma palavra-passe — nunca a exponha em código do lado do cliente.x-account-idO identificador da sua conta. Aparece no painel ao lado de cada chave de API.x-request-idID de correlação opcional. Passe qualquer UUID; é devolvido nas respostas de erro para facilitar o rastreio.Guarde as credenciais em variáveis de ambiente (BETATEL_API_KEY, BETATEL_ACCOUNT_ID). Nunca as escreva diretamente nos ficheiros de código.
As chaves com o prefixo sk_test_ são chaves de sandbox — nunca tocam em operadoras reais nem geram custos. Use-as durante o desenvolvimento e depois troque pela sua chave BTEL_ quando passar a produção. Modo sandbox →
Ao criar uma chave de API, pode opcionalmente associar um ou mais endereços IP ou intervalos CIDR. Se estiver configurada uma lista de IPs autorizados, qualquer pedido proveniente de um IP fora da lista é rejeitado com 401 Unauthorized, mesmo que a chave de API seja válida. Isto permite restringir uma chave ao IP do seu servidor, para que não possa ser usada em caso de fuga.
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
Inicia uma chamada de curta duração que toca e desliga. O ID de chamada codifica o OTP — o seu SDK móvel lê o número recebido sem que o utilizador tenha de atender.
calleestringobrigatóriocallerstringmax_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"
# }Devolve uma lista paginada de todas as chamadas da sua conta. Use filter para restringir os resultados por qualquer campo do CDR (p. 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"
}'Termina uma chamada ativa antes de esta terminar naturalmente. Devolve 204 No Content em caso de sucesso.
# 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
Entrega uma mensagem de texto via SMPP. Normalmente usada para enviar um código OTP numérico que o utilizador digita na sua aplicação.
tostringobrigatóriotextstringobrigatóriofromstringmessageIdstring (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"
# }Consulta o estado de entrega de uma mensagem enviada. O estado é atualizado de forma assíncrona à medida que chegam os relatórios de entrega das operadoras (DLRs).
deliveredEntrega confirmada no telefone.sentEnviado à operadora; a aguardar o DLR.failedEntrega falhada (número inválido, bloqueado).undeliveredA operadora aceitou, mas a entrega não foi confirmada.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"
# }Devolve uma lista paginada de todas as mensagens enviadas. Aceita o mesmo corpo de paginação dos outros endpoints de listagem (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 do Telegram
Envia um OTP numérico através da Gateway API oficial do Telegram. Suporta verificações de entregabilidade, validação do código do lado do servidor e revogação com reembolso automático.
tostringobrigatóriocodestringobrigatóriottlnumbersender_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
# }Sonda se o número tem uma conta Telegram antes do envio. Se is_refunded for true, o utilizador não tem conta Telegram — o custo da sondagem é reembolsado e deve recorrer ao fallback por 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 }
# }Consulta o resultado da introdução do código para um dado request_id. Opcionalmente, passe o code introduzido pelo utilizador para validação do lado do servidor.
code_validO utilizador introduziu o código correto.code_invalidO utilizador introduziu um código errado.code_max_attempts_exceededDemasiadas tentativas falhadas.expiredO TTL do código expirou antes da introdução.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
# }
# }Cancela um pedido OTP ativo antes de o utilizador o concluir. Se a mensagem ainda não tiver sido lida, is_refunded será true e o valor é devolvido ao seu 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
# }Obtém o registo de entrega do Telegram completo para um dado uuid (o ID de correlação da Novauth devolvido pelo endpoint de envio). Inclui estado de entrega, estado de verificação, custo e país.
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"
# }Devolve uma lista paginada de todos os registos de entrega do Telegram. Filtre por <code>verification_status</code>, <code>delivery_status</code> ou qualquer outro campo do 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"
}'Envia uma mensagem OTP através da API do WhatsApp Business. O utilizador lê o código na conversa de WhatsApp e digita-o na sua aplicação.
tostringobrigatóriotextstringobrigatóriouuidstring (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"
# }Após o envio, comunique o resultado da verificação do utilizador via POST /whatsapp/webhook. Consulte a referência de Webhooks para mais detalhes.
Obtém o registo de entrega do WhatsApp para um dado uuid devolvido pelo endpoint de envio.
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"
# }Devolve uma lista paginada de todos os registos de entrega do WhatsApp. Suporta o mesmo corpo <code>page</code>, <code>rows_per_page</code>, <code>filter</code> de todos os outros endpoints de listagem.
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"
}'Códigos de erro
Todas as respostas de erro seguem o mesmo envelope JSON. O campo error contém uma string legível por máquina; indique o seu x-request-id ao suporte quando comunicar problemas.
| Estado | Código | Descrição |
|---|---|---|
| 400 | BAD_REQUEST | Corpo do pedido inválido — campo obrigatório em falta, formato errado ou número de telefone inválido. |
| 401 | UNAUTHORIZED | Cabeçalhos x-api-key / x-account-id em falta ou inválidos. |
| 402 | PAYMENT_REQUIRED | Saldo da conta insuficiente. Carregue a sua conta para continuar. |
| 403 | FORBIDDEN | A chave de API existe, mas não tem permissão para esta operação. |
| 404 | NOT_FOUND | O UUID ou recurso solicitado não existe. |
| 409 | CONFLICT | Pedido duplicado ou estado em conflito (p. ex. revogar um pedido já expirado). |
| 480 | TEMPORARY_UNAVAILABLE | Gateway temporariamente inacessível. Repita com back-off exponencial. |
| 486 | BUSY_HERE | (Verify Call) O destinatário está ocupado ou a chamada foi rejeitada pela rede. |
| 500 | INTERNAL_SERVER_ERROR | Erro inesperado do servidor. Contacte o suporte com o seu x-request-id. |
| 503 | SERVICE_UNAVAILABLE | Gateway desligado ou serviço em manutenção. Consulte a página de estado. |
| 603 | DECLINE | (Verify Call) O destinatário recusou explicitamente a chamada. |
Para a lista completa de códigos de erro, incluindo passos de correção sugeridos, consulte o guia de gestão de erros.