Sandbox e Dados de Teste
O sandbox é uma cópia completa do pipeline de verificação com suas próprias credenciais e seus próprios dados. Use-o para construir e validar sua integração antes que qualquer cliente real a utilize.
Acesso
| O que você precisa | Como obter |
|---|---|
| URL base do sandbox | Emitida pela Inyo no onboarding |
client_id / client_secret | Emitidos pela Inyo no onboarding, separados dos de produção |
webhook_secret | Emitido pela Inyo no onboarding, separado do de produção |
| Acesso de rede | Suas faixas de IP de saída devem estar na lista de permissões — envie-as ao seu contato na Inyo |
Uma webhook_url registrada | Opcional, mas necessária para exercitar a entrega de webhooks. Um túnel funciona durante o desenvolvimento |
Credenciais de sandbox e de produção nunca são intercambiáveis, e uma verificação em sandbox nunca é uma base válida para uma decisão real de onboarding.
O Sandbox Executa Verificação Real
O sandbox realiza análise real de documentos — o mesmo pipeline de extração, autenticidade, prova de vida e correspondência facial da produção. Não existe um conjunto fixo de números de documentos de teste que produzem resultados pré-definidos, como funcionam os números de cartão de teste em pagamentos.
A consequência prática: teste com documentos reais que você pessoalmente controla, ou com documentos emitidos para testes. Uma verificação falhará genuinamente se a imagem estiver borrada, o documento estiver vencido ou a selfie não corresponder — o que é exatamente o que torna o sandbox útil para validar seu tratamento de erros.
Todo resultado carrega um campo
provider."inyo"significa que uma análise real o produziu."inyo-mock"significa que um simulador o produziu — o que nunca acontece em produção, e indica de forma inequívoca que um resultado não veio de uma verificação real.
Produzindo Cada Resultado
| Alvo | Como produzi-lo |
|---|---|
approved | Um documento válido e não vencido que você controla, bem iluminado e enquadrado, com uma selfie da mesma pessoa |
declined — documento vencido | Um documento vencido. document_not_expired falha |
declined — divergência facial | Um documento pertencente a uma pessoa com a selfie de outra. face_match falha |
declined — recaptura de tela | Fotografe o documento a partir da tela de um celular ou monitor. document_authentic e/ou screen_pattern falham |
declined — ilegível | Uma captura deliberadamente borrada ou parcialmente coberta. document_readable falha |
declined — tentativas de captura | Falhe a captura repetidamente no widget até atingir o limite, adicionando uma verificação capture_attempts |
in_review — verificação branda (soft check) | Envie data_check: true com um nome ou data de nascimento em prefill que não corresponda ao documento. data_match falha |
in_review — rejeição retida | Peça à Inyo para habilitar rejeições retidas no seu tenant de sandbox e produza qualquer recusa com documento legível |
in_review — aprovação limítrofe | Peça à Inyo para definir um limiar de revisão no seu tenant de sandbox acima do seu limiar de correspondência facial e verifique com uma selfie marginal |
expired | Crie uma sessão e deixe-a sem uso além do tempo de vida de 48 horas do link |
Respostas 422 | Solicite um tipo de documento que você não tem habilitado, ou envie um prefill.document_number malformado |
502 | Não reproduzível sob demanda — trate-o como um caminho de retry transitório no código |
Peça um tenant de sandbox separado se você precisar de configurações conflitantes. O roteamento de revisão e as rejeições retidas são configurações no nível do tenant, então exercitar tanto uma recusa normal quanto uma recusa retida significa alterar a configuração entre execuções — ou ter dois tenants de sandbox.
Testando Sem Câmera
O validador de formato de número de documento não precisa de credenciais nem de imagens, o que o torna a coisa mais rápida para integrar primeiro:
curl --request POST \
--url https://{FQDN}/v1/validators/document-number \
--header 'Content-Type: application/json' \
--data '{"document_type": "drivers_license", "number": "not-a-number", "issuing_state": "PA"}'
{
"document_type": "drivers_license",
"number": "not-a-number",
"issuing_state": "PA",
"valid": false,
"rule": "us_dl:PA",
"detail": "document number does not match the PA license format"
}
Use-o para confirmar seu tratamento dos três estados — true, false e null para uma jurisdição desconhecida. Veja Sessões de Verificação.
Testando a Entrega de Resultados
A entrega vale a pena ser testada por si só, independentemente dos resultados de verificação:
- Verificação de assinatura — capture um corpo real de webhook do sandbox e sua
X-Inyo-Signature, e faça um teste unitário do seu verificador contra esses bytes exatos. Adicione um caso que altera um byte do corpo e afirma a rejeição, e um caso que re-serializa o JSON parseado e afirma a rejeição. Esses dois casos capturam o erro que quebra a maioria das integrações. - Comportamento de retry — retorne
500do seu endpoint e confirme que você vê até três tentativas, e depois nada. - Ordenação — reproduza duas notificações armazenadas de uma sessão fora de ordem e afirme que seu handler mantém a que tem o
notified_atmais alto. - Idempotência — entregue o mesmo resultado duas vezes e afirme que seu sistema não o processa em duplicidade.
Os passos 1, 3 e 4 não precisam de nenhuma chamada ao sandbox depois que você capturou um payload real.
Antes de Entrar em Produção
| Verificação | Por quê |
|---|---|
| A verificação de assinatura roda contra bytes brutos | A falha de produção mais comum |
in_review tem um estado pendente no seu modelo | Não é aprovado nem rejeitado, e também chega em redirecionamentos |
Resultados concorrentes são resolvidos por notified_at | As entregas podem chegar fora de ordem |
| Um resultado concluído pode ser revertido | Overrides de controle de qualidade reentregam um resultado alterado |
502 faz retry em vez de recusar | É uma falha de infraestrutura, não um resultado do cliente |
| As credenciais de produção estão separadas e a URL base foi trocada | Tokens de sandbox não são válidos em produção |
| Um job de reconciliação consulta sessões não terminais | A entrega é de melhor esforço; GET /v1/sessions/{session_id} é a fonte autoritativa |
Próximos Passos
- Primeiros Passos — o passo a passo de ponta a ponta
- Recebendo Resultados — assinaturas, retries e ordenação
- Configuração do Tenant — as configurações a solicitar no seu tenant de sandbox
