Para personas

Verifícate en tu teléfono. Sin app obligatoria.

Toca un enlace de Verihop o escanea un QR. Verifícate con tu teléfono, aprueba solo los campos solicitados y continúa sin crear una cuenta.

Probar demo

Cómo funciona

Empieza con un enlace seguro. Verihop elige la mejor ruta: app completa, App Clip, Android App Link, QR o fallback web.

1

Toca Verificar o escanea un QR

Verihop se abrirá y mostrará lo que solicita.

2

Verifica en el dispositivo

Si quieres compartir tus datos, toca para aprobar.

3

Vuelve verificado

Los campos aprobados se comparten y continúas al instante. ¿Quieres reutilizarlo? Guarda la verificación en la app completa cuando se te indique.

PROBAR DEMO Abre el checkout de cine en vivo. Mira el flujo de retorno verificado y la traza de request para developers.

Para devs

Una Sessions API. Orquestamos el flujo.

Ya sea iOS, Android, desktop, app instalada o App Clip/App Link, tu backend crea una sesión y muestra la launch URL o payload apto para QR.

Bases

Path: https://api.verihop.com

Autentica las requests de partner solo desde tu backend:

Authorization: Bearer <api_key>

Crea primero una cuenta de prueba para obtener una API key. Las respuestas de prueba están redactadas por diseño y la misma cuenta puede activarse después para producción.

Crear cuenta de prueba

Pasos rápidos de integración

  1. Crea una sesión con POST /v1/sessions con callback URL y campos solicitados.
  2. Envía al usuario a la launch_url.
  3. Procesa el callback y captura session_id y result_token.
  4. Opcional: consulta GET /v1/sessions/{id} para actualizaciones de estado.
  5. Obtén datos verificados server-to-server con GET /v1/sessions/{id}/result.
Ver flujo de integración
Ver flujo de usuario

Colección de Postman

Importa la colección API de Verihop.

Configura tu API key y callback URL, crea una sesión y pega el result token del callback para obtener el resultado verificado.

Descargar colección de Postman

POST /v1/sessions

Crea una sesión de verificación y recibe una launch URL más un token de sesión firmado.

Headers

Authorization: Bearer <api_key>
Content-Type: application/json
Idempotency-Key: <uuid>  // recommended

Body

{
  "app": "RideNow",
  "header": "Age check",
  "fields": ["legalName", "over18", "document"],
  "callback": "ridenow://verified"
}
Guía de elementos del body
  • app: nombre visible de la app partner dentro de Verihop (máx. 80 caracteres).
  • header: título corto de verificación mostrado al usuario (máx. 120 caracteres).
  • fields: tokens de campos solicitados; si falta o está vacío, Verihop usa legalName y over18.
  • callback: URL base de retorno enviada en POST /v1/sessions. Verihop la abre al terminar y añade session_id, result_token (success path) y opcionalmente callback_jwt; requerida y validada contra tu allowlist de producción.
Guía de headers
  • Authorization: API key partner en formato bearer.
  • Content-Type: usa application/json para parsear el request body.
  • Idempotency-Key: clave de retry para dedupe al crear sesiones; envía UUID v4/v7 y reutilízala solo para retries de la misma payload.
Success 201 response
{
  "session_id": "sess_123",
  "expires_at": 1730000000,
  "jwt": "",
  "launch_url": "https://www.verihop.com/verify.html?session_id=sess_123&token=h_abc123",
  "qr_url": "https://www.verihop.com/verify.html?session_id=sess_123&token=h_abc123",
  "status_url": "https://api.verihop.com/v1/sessions/sess_123",
  "requested_claims": ["legalName", "over18"],
  "assurance_required": "basic",
  "deep_link": "verihop://share?session="
}
Guía de elementos de respuesta
  • session_id: identificador único para tracking y obtención del resultado.
  • expires_at: expiración de sesión (Unix epoch seconds).
  • launch_url: URL principal para botones, QR, emails, SMS, web flows y flujos nativos.
  • qr_url: URL segura para QR; actualmente equivalente a launch_url.
  • jwt: token de sesión firmado consumido por Verihop. Normalmente los clients partner no lo validan directamente.
  • deep_link: campo legacy/native-only de compatibilidad para integraciones con app instalada.
Errores comunes
  • 401 missing_bearer_token, 401 invalid_api_key
  • 403 customer_inactive
  • 400 missing_callback_url, invalid_callback_url, callback_host_not_allowed
  • 400 field_not_allowed, invalid_field_token, request_too_large
  • 409 idempotency_key_conflict, idempotency_key_in_progress
  • 429 rate_limit_exceeded, daily_quota_exceeded

GET /v1/sessions/{id}

Endpoint de estado sin PII para orquestación desktop y monitorización.

Authorization: Bearer <api_key>
Success 200 response
{
  "session_id": "sess_123",
  "status": "issued",
  "issued_at": 1730000000,
  "expires_at": 1730000300,
  "last_status": null,
  "last_status_at": null,
  "result_available": false,
  "result_token_expires_at": null
}

GET /.well-known/jwks.json

Endpoint público de signing keys para verificar callback_jwt en backends partner.

Success 200 response
{
  "keys": [
    {
      "kty": "RSA",
      "kid": "kid_2025_01",
      "alg": "RS256",
      "use": "sig",
      "n": "...",
      "e": "AQAB"
    }
  ]
}

GET /v1/sessions/{id}/result

Obtén la result payload verificada server-to-server usando un result token de un solo uso.

Authorization: Bearer <api_key>
X-Result-Token: <result_token>
Success 200 response
{
  "session_id": "sess_123",
  "status": "success",
  "result": {
    "legalName": "Jane Doe",
    "over18": "yes"
  }
}
Errores comunes
  • 401 missing_bearer_token, invalid_api_key, missing_result_token
  • 403 customer_mismatch, invalid_result_token
  • 410 result_token_expired
  • 409 result_token_used
  • 404 result_not_available, session_not_found

Catálogo de campos

Request field tokens (fields)

legalName, dateOfBirth, over18, over21, document, passport, residencePermit

Response result fields

legalName, dateOfBirth, over18, over21, documentType, documentNumber, documentExpiry, documentCountry, documentNationality, nationality

Preguntas frecuentes

¿Puede el flujo empezar desde una web desktop con un QR?

Yes. Your backend creates a session using POST /v1/sessions, then renders the returned qr_url inside a QR shown on the desktop page. The user scans that QR with their phone and Verihop opens the best available experience.

¿El QR debe abrir primero una web o Verihop directamente?

Best UX is direct launch: encode the returned qr_url. It is the same universal HTTPS handoff as launch_url and supports app, lightweight, and web fallback paths.

¿El deep link es igual para iOS y Android?

Yes. Verihop uses the same launch_url on both platforms. Your callback shape is also the same: Verihop appends session_id, success-path result_token, and optional callback_jwt.

¿Qué deben registrar las apps Android partner para callbacks?

If you use a custom callback such as ridenow://verified, the Android partner app must declare an intent filter for that scheme and host. If you use an https:// callback for desktop or web-started flows, treat it as a backend endpoint unless your Android app owns that domain with verified App Links.

¿Qué callback debo usar para flujos iniciados desde desktop o web?

Use an https:// callback endpoint on your backend. After Verihop completes, your server receives session_id and result_token, then fetches GET /v1/sessions/{id}/result server-to-server.

¿Los clients partner deben verificar el jwt de POST /v1/sessions?

No. Ese token es para Verihop. Los partners deben tratarlo como transporte opaco y usar launch_url para iniciar Verihop.

¿Por qué el callback solo incluye session_id y result_token?

Callback query parameters are transport metadata only. Verified personal data is intentionally not sent in callback URLs. Your backend must exchange the one-time result_token to fetch the result payload securely. If enabled, callback_jwt can be verified via JWKS for callback authenticity.

Should partners verify callback_jwt, and where?

Yes, on partner backend when present. Verify signature and claims using Verihop JWKS at GET /.well-known/jwks.json. Validate issuer/audience/expiry and ensure JWT claims match callback query values.

Can my frontend call GET /v1/sessions/{id}/result directly?

No. Keep API keys server-side and fetch results from your backend only. The frontend/web client should only handle UI and pass state to your backend session.

¿Cómo gestionamos expiración y retries?

Create a new session when a session expires or the user abandons the flow. result_token is short-lived and single-use; if consumed or expired, restart with a new POST /v1/sessions.

¿Qué pasa si Verihop no está instalado en el teléfono?

Provide a fallback page behind your QR flow that can explain how to install/open Verihop and then continue. After install, create a new session and show a fresh QR (do not reuse stale sessions).

¿Cómo funciona idempotency y cómo se limita el abuso?

POST /v1/sessions supports Idempotency-Key for retry-safe create-session calls: same key + same payload replays the original response, while same key + different payload returns 409 idempotency_key_conflict. Misuse is further mitigated with API-key auth, callback allowlist policy, field allowlist checks, per-customer rate limits/quota, short session TTL, and one-time result_token.

Ejemplo

Open Movie Age-Check Demo

Para empresas

Solicita datos concretos. Recibe resultados verificados. Nos encargamos del resto.

Verihop reemplaza la verificación basada en subir archivos por un modelo de retorno en un salto: el usuario se verifica en su teléfono, vuelve con resultados tokenizados y tu backend recibe solo los datos aprobados.

Solicitar demo
Verihop flow overview on device Verihop flow step for document and profile checks

Cómo funciona para tu empresa

1

Crea una cuenta de prueba

Obtén una cuenta de prueba y una API key de prueba para probar la implementación. Los datos devueltos en modo prueba permanecen redactados.

2

Solicita producción

Desde el portal, solicita producción y envía la información requerida. Verihop revisa la cuenta antes de activarla.

3

Recibe datos verificados

Cuando la cuenta está Live, tu API key de producción devuelve datos verificados. Uso y facturación siguen visibles en el portal.

PROBAR DEMO Mira el flujo de retorno con API en acción. Abre la demo de cine para ver creación de sesión, callback y resultado desde un solo lugar.

Beneficios para empresas

Lo que ganas al sacar la verificación de tu propio stack.

Onboarding con menos fricción

Reduce abandono con un flujo guiado que se siente más rápido y claro que subir documentos.

Sin carga operativa de KYC

Evita mantener MRZ, NFC, liveness, parsing de documentos y una larga cola de edge cases.

Minimización de datos por diseño

Recibe solo los campos verificados aprobados que pediste, no escaneos ni archivos de fotos que debas proteger para siempre.

Checks de alta confianza

Autenticidad documental, checks seguros con chip y liveness biométrico ocurren en un único flujo confiable en el dispositivo.

Retorno instantáneo a tu producto

Los usuarios terminan la verificación y vuelven a tu app o web con metadata limpia de callback.

Menos repetición para usuarios recurrentes

Los checks confiables quedan listos, así que repetir verificaciones es más simple para tu equipo y tus usuarios.

Versátil por diseño

Lanza el mismo flujo confiable desde un botón, QR o chat de soporte sin cambiar el modelo de handoff.

Sin bucles de errores manuales

Los datos verificados vienen de MRZ y chip seguro, reduciendo errores manuales y confusión posterior.