Clear
See who is asking and exactly what they need.
Or whatever is relevant—not your entire ID.
What to expect
See who is asking and exactly what they need.
Verification runs directly on your device, without a routine manual-review queue.
Save a completed verification on your device and reuse it when it remains valid and is accepted.
Approve only the requested information.
Start from a Verihop link or QR code. You see who is asking and which details they need before anything is shared.
Verihop shows the requesting service and the exact details it wants.
Follow the guided identity-document and live-holder checks available for the request.
Approve the requested details and continue where you left off.
A better handoff
Share the approved result without making another full-document upload the default.
Want more detail about how identity information is handled? Read the privacy notice.
Made for real life
Age
Confirm your age without sharing a complete passport copy.
Rentals & services
Share requested verified details without typing or uploading everything again.
Account onboarding
Complete the check and return directly to the service.
Account access
Verify for sensitive actions, support, or account recovery.
Building one of these experiences? See how Verihop works for companies, integrations and customer journeys. Explore FOR COMPANIES →
Ready when you are
Try the age-check demo, review the exact requested details, and complete the phone flow.
Personal Identity API
Create a verification session from your backend, send the returned launch URL, and securely fetch the user-approved result. Verihop handles the verification, consent, and device routing.
Need the product and business overview? See FOR COMPANIES →
INTEGRATION STEPS
POST /v1/sessions
Use the returned launch_url or qr_url.
Capture session_id, result_token, and optional signed callback data where applicable.
GET /v1/sessions/{id}/result
API keys stay on your backend. Verified personal data is not placed in callback URLs.
A backend-owned session starts the flow; approved identity information is fetched server-to-server.
Test in the Customer Portal
Use a test account to choose requested fields, configure a callback, run the Session Example, and inspect the real request, response, session status, and structured result.
Agent-ready integration skill
One secure source for test setup, server-side sessions, callbacks, results, launch behavior, and concise patterns for Node, Python, Swift, Kotlin, Java, Go, PHP, Ruby, and cURL.
Postman collection
Set your API key and callback URL, create a session, then paste the callback result token to fetch the verified result.
Path: https://api.verihop.com
Authenticate partner requests from your backend only:
Authorization: Bearer <api_key>
Create a test account first to get an API key for integration. Test-account responses are redacted by design, and the same account can later be upgraded to active for production.
/v1/sessionsCreate a verification session and get deep link + signed session token.
expires_at passes, create a new session. Do not reuse an expired launch URL, QR code, or callback token.Authorization: Bearer <api_key>
Content-Type: application/json
Idempotency-Key: <uuid> // recommended
{
"app": "RideNow",
"header": "Age check",
"fields": ["legalName", "over18", "documentNumber"],
"callback": "ridenow://verified"
}
app: Partner app display name shown inside Verihop (max 80 chars).header: Short verification title shown to the user (max 120 chars).fields: Requested field tokens; if omitted/empty, fallback is legalName and over18.callback: Base return URL sent in POST /v1/sessions. Verihop opens it after completion and appends session_id, result_token (success path), and optional callback_jwt; required and allowlist-validated in your production policy.Authorization: Partner API key in bearer format.Content-Type: Use application/json for request body parsing.Idempotency-Key: Retry key for create-session dedupe; send UUID v4/v7 and reuse only for same payload retries.201 response{
"session_id": "sess_123",
"expires_at": 1730000000,
"launch_url": "https://www.verihop.com/verify.html?session_id=sess_123&token=h_abc123",
"app_clip_url": "https://appclip.apple.com/id?p=KycBox.VerifyBox.Clip&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"
}
session_id: Unique session identifier for tracking and result retrieval.expires_at: Session expiry (Unix epoch seconds).launch_url: Primary URL for web, Android, QR codes, emails, SMS, and general handoff.app_clip_url: Direct native App Clip URL for iOS partner apps. Open it exactly as returned; do not reconstruct it.qr_url: QR-safe URL; currently equivalent to launch_url.status_url: Session status endpoint for server-side polling.401 missing_bearer_token, 401 invalid_api_key403 customer_inactive400 missing_callback_url, invalid_callback_url, callback_host_not_allowed400 field_not_allowed, invalid_field_token, request_too_large409 idempotency_key_conflict, idempotency_key_in_progress429 rate_limit_exceeded, daily_quota_exceeded/v1/sessions/{id}Non-PII session status endpoint for desktop orchestration and monitoring.
Authorization: Bearer <api_key>
200 response{
"session_id": "sess_123",
"status": "issued",
"issued_at": 1730000000,
"expires_at": 1730000300,
"last_status": null,
"last_status_at": null,
"opened_at": null,
"result_available": false,
"result_token_expires_at": null
}
Polling is read-only and never marks a session as opened. A completed test-key session also returns a short-lived result_token for the synthetic Postman flow. Live result tokens remain callback-only.
/.well-known/jwks.jsonPublic signing keyset endpoint for verifying callback_jwt on partner backends.
200 response{
"keys": [
{
"kty": "RSA",
"kid": "kid_2025_01",
"alg": "RS256",
"use": "sig",
"n": "...",
"e": "AQAB"
}
]
}
/v1/sessions/{id}/resultFetch verified result payload server-to-server using one-time result token.
A launch token starts with h_ and cannot be used here. X-Result-Token requires the short-lived res_ token from a live callback or completed test-key status response.
Authorization: Bearer <api_key>
X-Result-Token: <result_token>
200 response{
"session_id": "sess_123",
"status": "success",
"result": {
"legalName": "Jane Doe",
"over18": "yes"
}
}
401 missing_bearer_token, invalid_api_key, missing_result_token403 customer_mismatch, invalid_result_token410 result_token_expired409 result_token_used404 result_not_available, session_not_foundfields)legalName, dateOfBirth, over18, over21, passport, idCard, documentNumber, documentExpiry, documentCountry, documentNationality
The result contains only the requested supported fields approved by the user. Document-kind requirements such as passport and idCard do not automatically include every document attribute.
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.
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.
Use launch_url on Android and for general web handoff. An iOS partner app that wants the native App Clip card should open the returned app_clip_url. Your callback shape remains the same: Verihop appends session_id, success-path result_token, and optional callback_jwt.
Create the session on your backend and send the returned app_clip_url to your iOS app. Open that URL with SwiftUI Link or UIApplication.open on iOS 17 or later. Do not parse launch_url, copy its token, or hard-code Verihop's App Clip bundle ID. If the full Verihop app is installed, iOS opens it instead while preserving the same session.
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.
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.
jwt from POST /v1/sessions?No. That token is for Verihop app consumption. Partners should treat it as opaque transport data and use launch_url to launch Verihop.
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.
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.
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.
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.
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).
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.
Start in test mode
Use a redacted test account, keep credentials on your backend, and move to production only after callback and field controls are approved.
Personal Identity Verification
Add reliable identity and eligibility checks to customer journeys while limiting the sensitive data your company needs to handle.
Customers verify on their phone and approve only the information needed for your decision.
Why this matters
Customers abandon onboarding when verification takes too long or asks for too much. Companies remain responsible for the sensitive information they collect and protect.
of UK consumers surveyed had abandoned an account-opening process.
FullCircl, State of Identity Verification 2025average onboarding time in the same study — 2.8× longer than customers said they wanted.
FullCircl, State of Identity Verification 2025of people in the Netherlands surveyed said they would never share a copy of their passport, ID card or driving licence online.
CBS, 2025personal-data breach notifications were reported to the Dutch privacy regulator in 2025.
Autoriteit Persoonsgegevens, 2026Verihop lets your product request the approved, verified information needed for a decision without making another passport or selfie file the result.
A better verification flow
Verify the person, receive only what your decision needs, and avoid making document copies and manual review the default.
*Typical supported verification flow. Completion time can vary by device, document and connection.
Where Verihop fits
Sometimes you need someone's identity. Sometimes you only need one reliable answer.
Age & eligibility
Request a verified age result without receiving a complete passport copy.
Account & service onboarding
Request the verified identity details needed for your onboarding decision.
Rentals & trusted access
Verify identity before providing a vehicle, property, equipment, or controlled service.
Account recovery & support
Request a fresh verification for sensitive support or recovery actions.
Verihop verifies the information. Your company decides what it means for the customer journey.
How it works
Your product starts a Verihop verification for the approved identity information it needs.
The customer opens the link or QR code and completes the verification on their phone.
Once the customer approves, the verified information is returned securely to your system.
Verihop handles supported document reading, holder checks, consent, device routing, and secure result delivery. Your product applies the business rule that follows.
Building the integration? Explore FOR DEVS →
Customer Portal
Start in test mode, move through production approval, and manage the live service from the same company workspace.
Run redacted sessions and inspect the complete handoff before production.
Submit your production setup and approved fields for review.
Monitor usage, billing, callbacks, and session activity.
Manage team access, MFA, trusted devices, and audit evidence.
Developers can test requests, callbacks, and results from the Developer area. See FOR DEVS →
Start with one use case
Bring the customer journey, the decision you need to make and the information you currently collect. We'll map the smallest useful verification request and a clear path to testing it.