Sandbox y Datos de Prueba
El sandbox es una copia completa del pipeline de verificación con sus propias credenciales y sus propios datos. Úselo para construir y validar su integración antes de que un cliente real la utilice.
Acceso
| Qué necesita | Cómo lo obtiene |
|---|---|
| URL base del sandbox | Emitida por Inyo durante el onboarding |
client_id / client_secret | Emitidos por Inyo durante el onboarding, separados de los de producción |
webhookSecret | Emitido por Inyo durante el onboarding, separado del de producción |
| Acceso de red | Sus rangos de IP de salida deben estar en la lista de permitidos — envíelos a su contacto en Inyo |
Una webhookUrl registrada | Opcional, pero necesaria para ejercitar la entrega de webhooks. Un túnel funciona durante el desarrollo |
Las credenciales de sandbox y de producción nunca son intercambiables, y una verificación en sandbox nunca es una base válida para una decisión real de onboarding.
El Sandbox Ejecuta Verificación Real
El sandbox realiza análisis real de documentos — el mismo pipeline de extracción, autenticidad, prueba de vida y coincidencia facial que producción. Ningún número de documento de prueba produce un resultado de verificación predefinido como ocurre con los números de tarjeta de prueba en pagos: aprobación, rechazo y revisión provienen todos de las imágenes que usted envía.
La única excepción es la verificación de formato del número de documento, que sí acepta valores reservados — consulte Números de Documento de Prueba Reservados. Verifica la forma de un número declarado y nunca mira una imagen, por lo que es una superficie separada del pipeline de verificación descrito aquí.
La consecuencia práctica: pruebe con documentos reales que usted controle personalmente, o con documentos emitidos para pruebas. Una verificación fallará genuinamente si la imagen está borrosa, el documento está vencido o la selfie no coincide — que es exactamente lo que hace útil al sandbox para probar su manejo de errores.
Cada resultado incluye un campo
provider."inyo"significa que lo produjo un análisis real."inyo-mock"significa que lo produjo un simulador — lo cual nunca ocurre en producción, y le indica sin ambigüedad que un resultado no provino de una verificación real.
Cómo Generar Cada Resultado
| Objetivo | Cómo producirlo |
|---|---|
approved | Un documento válido y vigente que usted controle, bien iluminado y encuadrado, con una selfie de la misma persona |
declined — documento vencido | Un documento vencido. document_not_expired falla |
declined — no coincidencia facial | Un documento que pertenece a una persona con una selfie de otra. face_match falla |
declined — recaptura de pantalla | Fotografíe el documento desde la pantalla de un teléfono o monitor. document_scene_clear falla |
declined — ilegible | Una captura deliberadamente borrosa o parcialmente cubierta. document_readable falla |
declined — intentos de captura | Falle la captura repetidamente en el widget hasta alcanzar el límite, lo que agrega una verificación capture_attempts |
in_review — verificación blanda | Envíe dataCheck: true con un nombre o fecha de nacimiento en prefill que no coincida con el documento. document_data_match falla |
in_review — rechazo retenido | Pida a Inyo habilitar rechazos retenidos en su tenant de sandbox, luego produzca cualquier rechazo con documento legible |
in_review — aprobación límite | Pida a Inyo configurar un umbral de revisión en su tenant de sandbox por encima de su umbral de coincidencia facial, luego verifique con una selfie marginal |
expired | Cree una sesión y déjela sin usar más allá de las 48 horas de vigencia del enlace |
Respuestas 422 | Solicite un tipo de documento que no tenga habilitado, o envíe un prefill.documentNumber con formato inválido |
502 | No es reproducible a demanda — manéjelo en el código como una ruta de reintento transitoria |
Solicite un tenant de sandbox adicional si necesita configuraciones en conflicto. El enrutamiento a revisión y los rechazos retenidos son configuraciones a nivel de tenant, por lo que ejercitar tanto un rechazo normal como un rechazo retenido implica cambiar la configuración entre ejecuciones — o tener dos tenants de sandbox.
Pruebas Sin Cámara
El validador de formato de número de documento no necesita imágenes y no consume ninguna verificación, lo que lo convierte en lo más rápido para integrar primero:
curl --request POST \
--url https://{FQDN}/v1/validators/document-number \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"documentType": "drivers_license", "number": "not-a-number", "issuingCountry": "USA", "issuingState": "PA"}'
{
"documentType": "drivers_license",
"issuingCountry": "USA",
"issuingState": "PA",
"valid": false,
"rule": "dl:USA:PA",
"detail": "document number does not match the PA license format"
}
Úselo para confirmar su manejo de los tres estados — true, false y null para una jurisdicción desconocida. Consulte Validador de Número de Documento.
Números de Documento de Prueba Reservados
La verificación de formato del número de documento acepta un pequeño conjunto de valores reservados que devuelven el veredicto elegido bajo demanda. Úselos cuando necesite un resultado valid específico — habitualmente desde la creación de remitente de remesas, que ejecuta esta verificación sobre todo documento declarado — sin tener que aprender antes el formato real de numeración de una jurisdicción.
Solo en sandbox. Estos valores se habilitan por entorno; si los valores de abajo devuelven un veredicto ordinario, pida a su contacto de Inyo que los habilite en su tenant de sandbox.
Todo tipo capturable publica los tres estados de valid, así que puede ejercitar su propio manejo por tipo sin aprender el formato real de numeración de una jurisdicción. ssn e itin traen solo un valor de aprobación — vea más abajo.
documentType | issuingCountry | issuingState | number | valid |
|---|---|---|---|---|
drivers_license | USA | PA | 99900001 | true |
drivers_license | USA | PA | 99900002 | false |
drivers_license | USA | PA | 99900003 | null |
drivers_license | BRA | — | 99900000070 | true |
drivers_license | BRA | — | 99900000188 | false |
drivers_license | BRA | — | 99900000296 | null |
passport | USA | — | 999000001 | true |
passport | USA | — | 999000002 | false |
passport | USA | — | 999000003 | null |
identity_card | MEX | — | XXXX000101HXXXXX01 | true |
identity_card | MEX | — | XXXX000101HXXXXX02 | false |
identity_card | MEX | — | XXXX000101HXXXXX03 | null |
ssn | USA | — | 078051120 | true |
itin | USA | — | 912891234 | true |
Las filas de identity_card son mexicanas porque no existe una regla para cédulas de identidad de EE. UU. — un valor estadounidense sería un caso de prueba para una verificación que no existe. La CURP codifica el nombre y la fecha de nacimiento del titular, así que el campo de nombre todo en X es estructuralmente válido y no puede colisionar con una persona real.
Envíe cada número con el issuingCountry y el issuingState indicados. Un valor reservado se reconoce por ese par exacto, por lo que el mismo número bajo cualquier otra jurisdicción se valida con las reglas ordinarias.
curl --request POST \
--url https://{FQDN}/v1/validators/document-number \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"documentType": "drivers_license", "number": "99900002", "issuingCountry": "USA", "issuingState": "PA"}'
{
"documentType": "drivers_license",
"issuingCountry": "USA",
"issuingState": "PA",
"valid": false,
"rule": "reserved:drivers_license:PA:invalid",
"detail": "reserved sandbox test value — simulated invalid verdict"
}
Un resultado simulado lleva la cabecera de respuesta X-Inyo-Simulated: true. Está presente solo cuando un valor reservado produjo el resultado, y ausente en caso contrario — incluso en producción, donde nunca aparece.
Los valores reservados son números reales y válidos en el formato de su jurisdicción. Esto es deliberado: significa que una regla de formato previa — como la que la creación de remitente de remesas aplica antes de llamar a esta verificación — deja pasar el valor en lugar de rechazarlo antes, que es justamente lo que permite que
99900002llegue hasta nosotros y vuelva comofalse.La consecuencia es que donde los valores reservados no están habilitados, devuelven el veredicto que les dan las reglas reales de formato —
valid: truepara todos los valores excepto el ITIN, que devuelvefalse. Un valor reservado nunca produce un resultado más estricto que un número ordinario, así que dejar uno en el código no es un riesgo de seguridad — pero deja de simular en silencio, así que no lleve ninguno a producción.
912891234es el único valor que devuelvefalsecon la simulación desactivada. No existe un espécimen de ITIN anulado como lo es078-05-1120para los SSN, así que proviene de un grupo que el IRS reserva para otros programas — la única forma de garantizar que nunca pertenecerá a una persona real. El costo es que una regla de formato previa más estricta puede rechazarlo antes de que llegue a esta verificación. Si eso ocurre de su lado, úselo directamente contra este endpoint en lugar de pasar por un llamador que pre-valida.
Pruebas de Entrega de Resultados
La entrega merece probarse por sí sola, independientemente de los resultados de verificación:
- Verificación de firma — capture el cuerpo de un webhook real de sandbox y su
X-Inyo-Signature, luego pruebe unitariamente su verificador contra esos bytes exactos. Agregue un caso que mute un byte del cuerpo y verifique el rechazo, y un caso que re-serialice el JSON parseado y verifique el rechazo. Esos dos casos detectan el error que rompe la mayoría de las integraciones. Después agregue tres que detectan los que solo encontrará más adelante: unt=vencido, fuera de su tolerancia; un encabezado que trae unv2=extra que su código no implementa (debe validar igual conv1); y un encabezado que repitev1=dos veces (debe rechazarse de plano, no resolverse eligiendo uno). - Comportamiento de reintentos — devuelva
500desde su endpoint y confirme que ve hasta tres intentos, y luego nada. - Ordenamiento — reproduzca dos notificaciones almacenadas de una sesión fuera de orden y verifique que su handler conserva la que tiene el
notifiedAtmás alto. - Idempotencia — entregue el mismo resultado dos veces y verifique que su sistema no lo procesa por duplicado.
Los pasos 1, 3 y 4 no requieren ninguna llamada al sandbox una vez que haya capturado un payload real.
Antes de Salir a Producción
| Verificación | Por qué |
|---|---|
| La verificación de firma se ejecuta contra bytes crudos | La falla de producción más común |
in_review tiene un estado pendiente en su modelo | No es ni aprobado ni rechazado, y también llega en redirecciones |
Los resultados concurrentes se resuelven por notifiedAt | Las entregas pueden llegar fuera de orden |
| Un resultado completado puede revertirse | Las anulaciones de control de calidad re-entregan un resultado modificado |
502 reintenta en lugar de rechazar | Es una falla de infraestructura, no un resultado del cliente |
| Las credenciales de producción están separadas y la URL base está cambiada | Los tokens de sandbox no son válidos en producción |
| Un job de conciliación consulta las sesiones no terminales | La entrega es de mejor esfuerzo; GET /v1/sessions/{sessionId} es la fuente autoritativa |
Próximos Pasos
- Primeros Pasos — el recorrido de extremo a extremo
- Recepción de Resultados — firmas, reintentos y ordenamiento
