Comece aqui
Início rápido
Este fluxo usa uma aplicação de teste. Você pode implementar a autenticação completa sem entregar mensagens ou consumir créditos.
Nesta página
1. Crie uma aplicação de teste
No painel, crie uma aplicação em modo test. Guarde a chave ak_test_… em AUT2FA_API_KEY no servidor.
Os exemplos de terminal usam Bash. Substitua o valor abaixo pela chave da sua aplicação:
export AUT2FA_API_KEY='ak_test_SUA_CHAVE'Use a URL base https://api.aut2fa.com e o cabeçalho Authorization: Bearer SUA_CHAVE.
2. Solicite o código
Use um telefone válido em formato internacional, iniciado por +. O exemplo omite code e cria o código de teste 000000.
curl https://api.aut2fa.com/v1/send \
-H "Authorization: Bearer $AUT2FA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to":"+5531999999999","locale":"pt-BR"}'// Execute no servidor (Node.js 22+).
const idempotencyKey = crypto.randomUUID();
const body = JSON.stringify({ to: "+5531999999999", locale: "pt-BR" });
// Guarde idempotencyKey e body antes de chamar; reutilize-os ao retentar.
const response = await fetch("https://api.aut2fa.com/v1/send", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AUT2FA_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": idempotencyKey,
},
body,
signal: AbortSignal.timeout(15000),
});
const result = await response.json();
if (!response.ok) throw new Error(result.code);
// Guarde result.id na sessão de autenticação do seu servidor.import json
import os
import urllib.request
import uuid
idempotency_key = str(uuid.uuid4())
body = json.dumps({"to": "+5531999999999", "locale": "pt-BR"}).encode("utf-8")
# Guarde idempotency_key e body antes de chamar; reutilize-os ao retentar.
request = urllib.request.Request(
"https://api.aut2fa.com/v1/send",
data=body,
headers={
"Authorization": "Bearer " + os.environ["AUT2FA_API_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": idempotency_key,
},
method="POST",
)
with urllib.request.urlopen(request, timeout=15) as response:
result = json.load(response)
# Guarde result["id"] na sessão de autenticação do servidor.<?php
$idempotencyKey = bin2hex(random_bytes(16));
$requestBody = json_encode([
'to' => '+5531999999999', 'locale' => 'pt-BR',
], JSON_THROW_ON_ERROR);
// Guarde a chave e $requestBody antes de chamar; reutilize-os ao retentar.
$request = curl_init('https://api.aut2fa.com/v1/send');
curl_setopt_array($request, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('AUT2FA_API_KEY'),
'Content-Type: application/json',
'Idempotency-Key: ' . $idempotencyKey,
],
CURLOPT_POSTFIELDS => $requestBody,
]);
$body = curl_exec($request);
if ($body === false) throw new RuntimeException(curl_error($request));
$status = curl_getinfo($request, CURLINFO_HTTP_CODE);
curl_close($request);
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
if ($status !== 202) throw new RuntimeException($result['code'] ?? 'http_error');
// Guarde $result['id'] na sessão de autenticação do servidor.Nos clientes nativos, guarde a chave única e o corpo serializado antes da chamada. Cada novo pedido gera outra chave; uma retentativa reutiliza a chave e o corpo originais. O cURL mínimo omite o cabeçalho opcional: para retentar com segurança, consulte idempotência.
Resposta 202 Accepted:
{
"id": "snd_01m4prwckhd0kyjgv5vw8a5wjr",
"status": "queued",
"verification": "pending",
"mode": "test",
"channel": null,
"from": null,
"expires_at": "2026-10-11T15:10:00Z",
"created_at": "2026-10-11T15:00:00Z",
"sent_at": null,
"delivered_at": null,
"read_at": null,
"verified_at": null,
"failed_at": null,
"failure_reason": null
}Guarde id e expires_at na sessão de autenticação do servidor, vinculados à pessoa e à operação que iniciou o pedido. A API não devolve o código.
3. Verifique o código
Use o id recebido na etapa anterior como SEND_ID e envie o código informado pela pessoa como string. Neste teste, ele é 000000.
curl "https://api.aut2fa.com/v1/send/$SEND_ID/verify" \
-H "Authorization: Bearer $AUT2FA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"000000"}'Resposta 200 OK ao acertar:
{
"valid": true,
"verification": "verified",
"attempts_left": 0
}Conclua a autenticação apenas se valid === true. Um HTTP 200 também pode conter código incorreto, expirado, bloqueado ou já utilizado. O código é aceito uma única vez.
Após o sucesso, attempts_left é 0; isso indica que a verificação encerrou. Veja todos os resultados em verificar código.
4. Prepare o modo live
Crie uma aplicação live e configure a chave ak_live_… no seu servidor. O modo é definido pela aplicação da chave; não existe parâmetro mode no corpo do envio.
- Confirme a cota e o saldo antes de enviar.
- Leia idempotência para retentar após uma falha de rede.
- Trate limites e Retry-After no fluxo de reenvio.
- Acompanhe o status quando precisar informar uma falha de entrega.