Verificação de Telefone
A Verificação de Telefone confirma que um número de telefone realmente pertence à pessoa que o declara, usando uma consulta de identity-match da operadora. Ela compara o nome, o endereço e a data de nascimento do remetente com os dados que a operadora móvel possui para aquele número e retorna uma pontuação de correspondência. Use-a como sinal antifraude durante o onboarding ou antes de uma primeira transação.
Esta verificação é diagnóstica e explícita — nunca é executada automaticamente a partir do fluxo de transação e nunca reescreve o número de telefone armazenado do remetente. Chame-a quando quiser fazer uma verificação.
Verificar um Número de Telefone
Endpoint: POST /organizations/{tenant}/v2/people/verifyPhone
Autenticação: Nível de agente (x-api-key + x-agent-id + x-agent-api-key)
Há dois modos de chamada mutuamente exclusivos:
| Modo | Enviar | Comportamento |
|---|---|---|
| Modo pessoa | Apenas personId | A Inyo carrega o nome, o endereço e a data de nascimento do remetente a partir do registro armazenado, verifica junto à operadora e espelha o resultado na pessoa (phoneVerificationScore, phoneVerificationStatus, phoneVerificationLastCheckedAt). |
| Modo inline | Os campos de identidade diretamente, sem personId | Sem estado — nada é lido ou gravado no registro da pessoa. |
⚠️ Os modos não podem ser combinados. Se você enviar
personId, não deve enviar nenhum campo de identidade inline, ou a requisição retorna422.
Modo Pessoa
curl --request POST \
--url https://{FQDN}/organizations/$TENANT/v2/people/verifyPhone \
--header 'Content-Type: application/json' \
--header "x-api-key: $API_KEY" \
--header "x-agent-id: $AGENT_ID" \
--header "x-agent-api-key: $AGENT_KEY" \
--data '{
"personId": "48066496-9445-41b7-acbe-85e069a77cb7"
}'
O phoneNumber armazenado do remetente já deve estar no formato E.164; caso contrário, a requisição retorna 422.
Modo Inline
curl --request POST \
--url https://{FQDN}/organizations/$TENANT/v2/people/verifyPhone \
--header 'Content-Type: application/json' \
--header "x-api-key: $API_KEY" \
--header "x-agent-id: $AGENT_ID" \
--header "x-agent-api-key: $AGENT_KEY" \
--data '{
"phoneNumber": "+14145447770",
"firstName": "John",
"lastName": "Doe",
"addressLine1": "123 Market St",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"addressCountryCode": "US",
"dateOfBirth": "1990-01-15"
}'
Campos da Requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
personId | string (UUID) | Modo pessoa | O remetente a verificar. Quando presente, todos os campos de identidade são carregados do registro e nenhum pode ser enviado inline. |
phoneNumber | string | Modo inline | O número a verificar, E.164 (+ e 1–15 dígitos, ex.: +14145447770). Não é normalizado — canonicalize antes de enviar. |
firstName | string | Não | Nome a corresponder |
lastName | string | Não | Sobrenome a corresponder |
addressLine1 | string | Não | Endereço a corresponder |
addressLine2 | string | Não | Linha de endereço adicional |
city | string | Não | Cidade a corresponder |
state | string | Não | Estado/província a corresponder |
postalCode | string | Não | CEP/código postal a corresponder |
addressCountryCode | string | Não | Código de país ISO 3166-1 alfa-2 |
dateOfBirth | string | Não | YYYY-MM-DD ou YYYYMMDD |
Quanto mais campos de identidade você fornecer, mais completo será o resultado de correspondência.
Resposta
{
"verificationId": 42,
"phoneNumber": "+14145447770",
"status": "MATCH",
"summaryScore": 100,
"callerType": "CONSUMER",
"valid": true,
"nationalFormat": "(414) 544-7770",
"countryCode": "US",
"identityMatch": {
"first_name_match": "exact_match",
"last_name_match": "exact_match",
"address_lines_match": "exact_match",
"date_of_birth_match": "exact_match",
"summary_score": 100
},
"verifiedAt": "2026-09-09T14:22:11+00:00",
"cached": false
}
| Campo | Descrição |
|---|---|
verificationId | Identificador deste registro de verificação |
status | Resultado geral — MATCH, PARTIAL, NO_MATCH ou ERROR |
summaryScore | Pontuação de correspondência 0–100, ou null quando o provedor não retornou pontuação |
callerType | CONSUMER, BUSINESS ou uma classificação similar da operadora |
valid | Se o número é uma linha válida e acessível |
nationalFormat | O número formatado para o seu país |
countryCode | Código de país ISO do número |
identityMatch | Detalhe de correspondência por campo (nome, partes do endereço, data de nascimento, etc.) |
verifiedAt | Quando a verificação foi realizada |
cached | true quando este resultado foi servido do cache (veja abaixo) |
Limiares de Status
status é derivado de summaryScore usando limiares por tenant (padrões: MATCH ≥ 80, PARTIAL ≥ 40, abaixo → NO_MATCH). O status é capturado no momento da verificação — mudanças de limiar posteriores não reclassificam resultados históricos. Contate a Inyo para ajustar seus limiares.
Cache
Requisições idênticas são armazenadas em cache por tenant durante 90 dias, com chave na tupla completa de entrada (número de telefone, nome, endereço, data de nascimento). Um acerto de cache retorna o resultado armazenado com "cached": true e não cobra novamente o provedor de verificação. Varie qualquer campo de entrada para forçar uma consulta nova.
Respostas de Erro
| HTTP | Erro | Causa |
|---|---|---|
422 | VALIDATION_ERROR | Campos ausentes/inválidos, telefone não E.164, ou personId enviado junto com campos de identidade inline |
501 | PROVIDER_NOT_CONFIGURED | O provedor de verificação não está configurado para o seu tenant — contate o suporte da Inyo |
502 | PROVIDER_ERROR | O provedor está temporariamente indisponível — repita a requisição |
Testes no Sandbox
No sandbox, a verificação de telefone não chama o provedor real — sem cobrança, sem consultas ao vivo. Em vez disso, o resultado é determinado inteiramente pelo último dígito do número de telefone, então você pode exercitar cada ramo escolhendo o número que envia:
| O telefone termina em | status | summaryScore | O que simula |
|---|---|---|---|
0, 1, 2 | MATCH | 100 | Correspondência de identidade total — todos os campos exact_match |
3, 4, 5 | PARTIAL | 60 | Misto — alguns campos correspondem, outros não |
6, 7 | NO_MATCH | 20 | Maioria dos campos no_match |
8 | ERROR | null | O provedor não retornou pontuação (nada para comparar) |
9 | — | — | 500 upstream → o endpoint retorna 502 PROVIDER_ERROR |
Por exemplo, +14145550002 retorna MATCH e +14145550009 retorna 502.
Como a chave de cache inclui o número de telefone, reexecutar o mesmo número de sandbox retorna
"cached": truena segunda chamada. Altere o número (ou qualquer outro campo) para forçar uma consulta simulada nova.
Todos os Endpoints
| Operação | Método | Endpoint |
|---|---|---|
| Verificar um número de telefone | POST | /organizations/{tenant}/v2/people/verifyPhone |
