Skip to main content
Didit Raises $2M and Joins Y Combinator (W26)
Didit
Database Validation

Cross-check any identity.
Against the source that issued it.

Cross-check a name, ID number, or address against the source that issued it — 1,000+ registries, bureaus, and telcos through one call. From $0.05 per check, 500 free/month.

Backed by
Y Combinator
GBTC Finance
Bondex
Crnogorski Telekom
UCSF Neuroscape
Shiply
Adelantos

Trusted by 2,000+ organizations worldwide.

Government registries

Validate IDs against
live national databases.

Confirm the person and their ID against the official record — SSN, RFC, CPF, Aadhaar, NIN, and 60+ other national registries. Price published per country.

How it works

From sign-up to verified user in four steps.

  1. Step 01

    Create the workflow

    Pick the checks you want — ID, liveness, face match, sanctions, address, age, phone, email, custom questions. Drag them into a flow in the dashboard, or post the same flow to our API. Branch on conditions, run A/B tests, no code required.

  2. Step 02

    Integrate

    Embed natively with our Web, iOS, Android, React Native, or Flutter SDK. Redirect to a hosted page. Or just send your user a link — by email, SMS, WhatsApp, anywhere. Pick what fits your stack.

  3. Step 03

    User goes through the flow

    Didit hosts the camera, the lighting cues, the mobile hand-off, and accessibility. While the user is in the flow, we score 200+ fraud signals in real time and verify every field against authoritative data sources. Result in under two seconds.

  4. Step 04

    You receive the results

    Real-time signed webhooks keep your database in sync the moment a user is approved, declined, or sent to review. Poll the API on demand. Or open the console to inspect every session, every signal, and manage cases your way.

Built for developers · Built against fraud · Open by design

Six capabilities. One feature flag. DATABASE_VALIDATION.

Every capability below is a toggle on the same module. No upsell tiers, no separate plans, no add-on calls — toggle the services you want per workflow.
01 · Sources catalog

1,000+ authoritative sources. One call.

Civil registries, tax authorities, electoral rolls, credit bureaus, telcos, court records, and address verification — all reachable through one endpoint. A new source is added every month and shows up automatically.
02 · Source categories

Registries. Bureaus. Telcos. Courts. Address.

Pick the data domain that matches the fraud you're fighting. Civil-registry checks defeat synthetic identities. Credit-bureau checks confirm history. Telco checks confirm an active line. Address verification proves residency.
03 · Per-source orchestration

Run services in parallel. Highest confidence wins.

Enable any number of services per country and Didit fires them in parallel. One source confirming is a strong signal — two independent sources corroborating is the strongest verdict we can return.
04 · Report shape

Per-field match. Source data. Biometric score.

Every source returns a per-field verdict, outcome code, and cleaned registry record — full name, dates, photo, signature, and a face-match score on biometric services like Argentina's RENAPER and Panama's Tribunal Electoral.
05 · Regional coverage

Latin America, Spain, and 45+ countries.

19 directly-integrated civil registries across Latin America and Spain. 156 datasets across 45 more countries via the global identity network. A new integration typically goes live in two to three weeks on request.
06 · Variable pay-per-call

From $0.05 per check. No minimums. 500 free.

Billed only on a successful query. Cheapest tier $0.05 (Dominican Republic). Standard government-registry tier $0.20 (Argentina, Brazil, Mexico, Spain, Colombia, Peru, Chile, and more). Skipped services are never billed.
Integrate

Two endpoints. Same JSON. Same catalog.

Let Didit capture the ID and pull the fields automatically, or send the identity data straight in if you already have it. Same JSON shape on the way out.
POST /v3/session/Hosted UI
$ curl -X POST https://verification.didit.me/v3/session/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_id": "wf_db_validation",
    "vendor_data": "user-42"
  }'
201Created{ "session_url": "verify.didit.me/..." }
Didit captures the ID, pulls the fields automatically, and runs every enabled source.docs →
POST /v3/database-validation/Server to server
$ curl -X POST https://verification.didit.me/v3/database-validation/ \
  -H "x-api-key: $DIDIT_API_KEY" \
  -F "issuing_state=BRA" \
  -F "services=bra_cpf" \
  -F "identification_number=12345678900"
200OK{ "match_type": "full_match", "validation_type": "1x1" }
You own the identity data. We route it to the right registry and return the verdict inline.docs →
Agent-ready integration

Ship Database Validation in one prompt.

Paste the block below into Claude Code, Cursor, Codex, Devin, Aider, or Replit Agent. Fill in your stack — framework, language, use case — and the agent ships the workflow, webhook, and decision code end to end.
didit-integration-prompt.md
# Didit Database Validation — integrate in 5 minutes

You are integrating Didit's Database Validation module into <my_stack>.
Database Validation cross-references each user's identity data against the
authoritative source for that country — the national civil registry, tax
authority, electoral roll, credit bureau, telco database, court record or
biometric service that issued the document. 1,000+ data sources reachable
through one endpoint. Follow these steps exactly. Every URL, header, and
enum value below is canonical — do not paraphrase or "improve" them.

## 1. Provision an account
- Sign up: https://business.didit.me (no credit card required).
- Or provision programmatically: POST https://apx.didit.me/auth/v2/programmatic/register/
  (returns an API key bound to the workspace + application).

## 2. Two integration paths — pick one

### Path A — Workflow Builder (hosted UI)
Best when you want Didit to capture the ID document, run Optical Character Recognition (OCR), derive the
required fields automatically, and trigger the right registry service per
issuing country.

1. Create a workflow that contains the DATABASE_VALIDATION feature:
   POST https://verification.didit.me/v3/workflows/
   Authorization header:  x-api-key: <your-api-key>
   Body: workflow_label, features array including
         { feature: "DATABASE_VALIDATION" }   (UPPERCASE — strict enum)
   Configure per-country service IDs (e.g. arg_renaper, bra_cpf,
   mex_curp, dom_cedula) plus partialMatchAction / noMatchAction.

2. Create a verification session for an end user:
   POST https://verification.didit.me/v3/session/
   Body: workflow_id (from step 1), vendor_data (your own user id).
   Response: session_url — redirect the user to it.

3. Listen for webhook callbacks (see "Webhooks" below).

### Path B — Standalone server-to-server API
Best when you already have the identity fields (mobile SDK capture,
existing onboarding pipeline, reseller flow). Single endpoint, every
country and every service routed through it.

POST https://verification.didit.me/v3/database-validation/
Content-Type: multipart/form-data
Body fields (all optional except issuing_state and at least one identifier):
  - issuing_state           (required, ISO 3166-1 alpha-3, e.g. ARG, BRA, MEX)
  - services                (optional, repeated, service IDs to run; omit
                             to run every configured service for that country)
  - identification_number   (e.g. DNI, CPF, CURP, cedula number)
  - first_name
  - last_name
  - date_of_birth           (YYYY-MM-DD)
  - selfie                  (file, required for biometric services such as
                             arg_renaper, pan_cedula_sib, pan_cedula_sib_plus)
  - address_element_1       (street + number)
  - address_element_2       (unit / building / floor)
  - address_element_3       (suburb / district)
  - address_element_4       (city / state / region)
  - address_element_5       (postal code; postal_code alias accepted)
  - consent                 (boolean — required when the selected service
                             has requires_consent=true in the catalog)
  - vendor_data             (optional string, your user id)

Response: JSON report with match_type, validation_type (1x1 or 2x2),
per-service validations, source_data, and any warnings.

## 3. Webhooks (Path A only — Path B returns synchronously)
- Register a webhook destination once via
  POST https://verification.didit.me/v3/webhook/destinations/
  Body: url, subscribed_events: ["session.verified", "session.review_started",
                                  "session.declined"]
- Response includes secret_shared_key — store it.
- Every webhook delivery carries an X-Signature-V2 header you MUST verify
  before trusting the payload.  HMAC-SHA256 verification MUST run against the raw body bytes (the raw payload as Didit sent it) BEFORE any JSON parsing — re-serialising the parsed body changes whitespace and key order, which invalidates the signature.Algorithm:
    1. sortKeys(payload) recursively
    2. shortenFloats (truncate trailing zeros after the decimal point)
    3. JSON.stringify the result
    4. HMAC-SHA256 with the secret_shared_key
    5. Hex-encode, compare to the X-Signature-V2 header.

## 4. Reading the report (both paths return the same shape)
The database_validation object includes:
- status: "Approved" | "Declined" | "In Review" | "Not Finished"
- match_type: "full_match" | "partial_match" | "no_match"
- issuing_state: ISO 3166-1 alpha-3 country code
- validation_type: "1x1" (single source full-match) or "2x2" (two
  independent sources corroborate the data)
- screened_data: the user fields submitted (identification_number,
  first_name, last_name, date_of_birth, selfie, address fields, ...)
- validations: array of per-service results. Each entry carries
  service_id (e.g. arg_renaper), service_name, outcome_code (MATCH,
  NO_MATCH, DOCUMENT_NOT_FOUND, BIOMETRIC_IMAGE_UNUSABLE,
  REGISTRY_UNAVAILABLE, ...), optional outcome_detail, a per-field
  validation block (full_match / partial_match / no_match), and a
  source_data block lifted from the registry record (photo, signature,
  full_name, gender, dates, face_match_score for biometric services).

Configurable risks (action per workflow — Decline, Review, or Approve):
- DATABASE_VALIDATION_PARTIAL_MATCH    (partialMatchAction)
- DATABASE_VALIDATION_NO_MATCH         (noMatchAction)

Warnings raised when a service cannot run:
- COULD_NOT_PERFORM_DATABASE_VALIDATION — required input field missing
  (e.g. CPF could not be OCR-extracted). You are NOT charged. Session
  auto-moves to In Review; saving the missing field in the Console
  retriggers the check.

## 5. Hard rules — do not change
- Base URL for /v3/* endpoints is verification.didit.me (NOT apx.didit.me).
- Feature enum is UPPERCASE: DATABASE_VALIDATION, ID_VERIFICATION,
  LIVENESS, FACE_MATCH, AML, IP_ANALYSIS.
- Country codes are ISO 3166-1 alpha-3 UPPERCASE: ARG, BRA, MEX, ESP, ...
- Service IDs are lowercase snake-case with a country prefix:
  arg_renaper, bra_cpf, mex_curp, dom_cedula, pan_cedula_sib_plus, ...
- Auth header is x-api-key (lowercase, hyphenated).
- Webhook signature header is X-Signature-V2 (NOT X-Signature).
- Status casing matches exactly: "Approved", "Declined", "In Review",
  "Not Finished" (title-cased, space-separated).
- match_type casing matches exactly: full_match, partial_match, no_match
  (lowercase snake-case).
- You are only billed when a service returns a result. Skipped services
  (missing input, unsupported issuing_state) are never billed.

## 6. Pricing reference (public, pay-per-call)
- Variable per source. Lowest tier: $0.05 per check (Dominican Republic,
  Junta Central Electoral).
- Standard government-registry tier: $0.20 per check (Argentina RENAPER,
  Brazil Receita Federal CPF, Mexico RENAPO CURP, Spain DGP, Colombia
  Registraduria, Peru RENIEC, Chile Registro Civil, Ecuador, Uruguay,
  El Salvador, Guatemala, Honduras, Bolivia, Paraguay, Venezuela, Costa
  Rica).
- Biometric premium tier: $0.75 (Panama SIB) up to $1.50 (Panama SIB
  Plus elevated tier with stronger biometric thresholds).
- Global identity network: 156 datasets across 45 countries (AU, NZ,
  UK, IE, FR, DE, IT, ES, PT, NL, BE, CH, AT, Nordics, Greece, Poland,
  Czechia, Hungary, Romania, Slovakia, India, Indonesia, Philippines,
  Thailand, Malaysia, Singapore, Hong Kong, China, Cambodia, Kenya,
  Nigeria, South Africa, Morocco, USA, Canada). Per-service pricing
  surfaced in the catalog and billing exports.
- 500 free checks every month, forever, on every account.

## 7. Verify your integration
- Sandbox starts on signup at https://business.didit.me — no separate flag.
- Test the full catalog of services with the per-country reference pages
  under https://docs.didit.me/api-reference/database-validation/.
- Switch to live: flip the application's environment toggle in console.

When in doubt: https://docs.didit.me/core-technology/database-validation/overview
Need more context? See the full module docs.docs.didit.me →
Authoritative registry coverage

147 authoritative registries searchable.

Every Database Validation provider Didit cross-checks against, with the canonical reference URL and the verification category. Sourced from the same Mintlify-docs catalogue the Business Console reads from — search by country name, ISO 3166-1 alpha-3 code, or service id. 147 services · 53 countries.

Canonical reference: docs.didit.me/core-technology/database-validation/overview

Compliant by design

Open a new country in one click. We do the hard work.

We open the local subsidiaries, secure the licenses, run the penetration tests, earn the certifications, and align with every new regulation. To ship verifications in a new country, flip a toggle. 220+ countries live, audited and pen-tested every quarter — the only identity provider an EU member-state government has formally called safer than in-person verification.
Read the security & compliance dossier
EU financial sandbox
Tesoro · SEPBLAC · BdE
ISO/IEC 27001
Information security · 2026
SOC 2 · Type I
AICPA · 2026
iBeta Level 1 PAD
NIST / NIAP · 2026
GDPR
EU 2016/679
DORA
EU 2022/2554
MiCA
EU 2023/1114
AMLD6 · eIDAS 2.0
EU-aligned by design

Proof numbers

Proof numbers
  • 0+
    Authoritative sources, one call.
  • 0
    Latin America and Spain civil registries, directly integrated.
  • From $0.05
    Per check. Billed only on a result.
  • <0.0s
    End-to-end on production traffic.
Three tiers, one price list

Start free. Pay per usage. Scale to Enterprise.

500 free verifications every month, forever. Pay-as-you-go for production. Custom contracts, data residency, and SLAs (Service Level Agreements) on Enterprise.
Free

Free

$0 / month. No credit card required.

  • Free KYC bundle (ID Verification + Passive Liveness + Face Match + Device & IP Analysis) — 500 / month, every month
  • Blocklisted Users
  • Duplicate Detection
  • 200+ fraud signals on every session
  • Reusable KYC across the Didit network
  • Case Management Platform
  • Workflow Builder
  • Public docs, sandbox, SDKs, MCP (Model Context Protocol) server
  • Community support
Most popular
Pay per usage

Usage Based

Pay only for what you use. 25+ modules. Public per-module pricing, no monthly minimum fee.

  • Full KYC at $0.33 (ID + Biometric + IP / Device)
  • 10,000+ AML datasets — sanctions, PEPs, adverse media
  • 1,000+ government data sources for Database Validation
  • Transaction Monitoring at $0.02 per transaction
  • Live KYB at $2.00 per business
  • Wallet Screening at $0.15 per check
  • Whitelabel verification flow — your brand, our infrastructure
Enterprise

Enterprise

Custom MSA & SLA. For large volumes and regulated programs.

  • Annual contracts
  • Custom MSA, DPA, and SLA
  • Dedicated Slack and WhatsApp channel
  • Manual reviewers on demand
  • Reseller and white-label terms
  • Exclusive features and partner integrations
  • Named CSM, security review, compliance support

Start free → pay only when a check runs → unlock Enterprise for a custom contract, SLA, or data residency.

FAQ

Common questions

Infrastructure for identity and fraud.

One API for KYC, KYB, Transaction Monitoring, and Wallet Screening. Integrate in 5 minutes.

Ask an AI to summarise this page