Skip to main content
Didit Raises $7.5M to Build the Infrastructure for Identity and Fraud
Didit
Resellers and platforms

Sell verification as
your own product.

Brand the verification flow, configure client applications, and route results through your product. White Label adds $0.20 per check to the modules used.

Backed by
Y CombinatorRobinhood Ventures
Firecrawl
Slash
Crnogorski Telekom
UCSF Neuroscape
Bit2Me

Trusted by 2,000+ organizations worldwide.

One integration, every client

Serve your customers.
Use your brand.

Configure an application for each client and environment. Choose their checks and branding, and route results through your product. Keep required provider disclosures in the verification journey.

How it works

Launch a client flow in four steps.

Step 01 / 04

Create the workflow

Choose the checks each client needs in the workflow builder. Configure their rules, create a draft, and publish it when ready. Each new session uses the published version of that workflow.

Built for platforms · Built for margin · Open by design

Configure verification for your clients.

Configure branding, workflows, access, and result delivery for the verification service inside your product.
01 · Your brand

Apply your logo, colours, and domain.

Set colours, typography, logos, and corner radius. Override supported screen text and use your own subdomain. Enable custom style per workflow, and retain the notices that identify Didit as the verification provider.
Read the docs
02 · Clean separation

Separate client and test applications.

Create separate applications for each client and for sandbox tests and live checks. Select the correct application key for each request. Control your team’s access with resource permissions and enforce client access in your own product.
Read the docs
03 · Different checks per client

Build a different flow for each client.

Choose identity and liveness checks for people, or a business workflow for companies. Add sanctions screening where required. Select the client’s configured workflow when you start each verification.
Read the docs
04 · Results where you want them

Receive results where your team needs them.

Send your own reference when you start a verification. Session updates return it with the result, so your system can find the correct client and user. Verify the signature and delivery time before processing an update.
Read the docs
05 · The whole catalogue

Add checks to a client workflow.

Edit a draft of the client’s workflow, add the checks they need, and publish it. New sessions use that version. Existing sessions keep the version they started with, and other workflows keep their own configuration.
See the catalogue
06 · Your price

Set your price from published module costs.

Review the published price and billing unit for each module you include. Set what your product charges your clients. White Label adds $0.20 per check to the cost of the verification modules used.
See pricing
Integrate

Open the flow. Receive the result.

Start the client’s verification, then receive a signed update and route the result to the correct user.
POST /v3/session/Per client
$ curl -X POST https://verification.didit.me/v3/session/ \
  -H "x-api-key: $CLIENT_APP_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workflow_id": "YOUR_CLIENT_WORKFLOW_UUID",
    "vendor_data": "client_01:user_42"
  }'
201Created{ "url": "https://verify.yourbrand.com/…" }
Your client's key, your client's flow, your identifier.docs
POST /webhooks/didit/:clientIdYour endpoint
app.post("/webhooks/didit/:clientId", (req, res) => {
  const secret = clientSecrets.get(req.params.clientId);
  const expected = crypto.createHmac("sha256", secret)
    .update(req.rawBody).digest();
  const sig = Buffer.from(req.get("X-Signature"), "hex");
  if (!crypto.timingSafeEqual(sig, expected)) return res.sendStatus(401);

  const { vendor_data, status } = req.body;
  routeToClient(req.params.clientId, vendor_data, status);
  res.sendStatus(200);
});
200OKOK
Copy the full verifier, including signature checks, timestamp validation, and client routing.docs
Agent-ready integration

Ship a multi-client integration in one prompt.

Copy this prompt into your coding agent and describe your app. It covers client applications, branding, workflows, and routing verified results. Configure and review the account settings before launch.
didit-integration-prompt.md
# Integrate Didit for multiple clients

Integrate Didit into <my_stack> for a product serving multiple clients.
Use each client's configured application and workflow, apply their branding,
and route authenticated results through your product.

## Public module prices
- ID Verification: $0.15 per check
- Passive Liveness: $0.10 per check
- Face Match 1:1: $0.05 per check
- IP Analysis: $0.03 per check
- Full identity bundle (the four above): $0.33 per check
- AML (anti-money laundering) Screening: $0.20 per check
- Ongoing AML Monitoring: $0.07 per user per year
- Business Verification: Variable per registry check;
  person screening, document checks, and linked identity checks are billed separately
- White Label: $0.20 per check on top of the modules used
- 500 free monthly workflow checks; standalone requests are outside that allowance

Use these published costs when setting your product's client pricing.
Review commercial requirements with Didit; do not infer partner rates.

## 1. Configure client applications
Create an account at https://business.didit.me. Use separate applications
for each client and environment: live and sandbox are separate applications,
not two environments inside one application. Sandbox outcomes are simulated.
Store application keys and workflow UUIDs in your server-side configuration,
indexed by client and environment. Never expose keys to end users.
Enforce client authorization in your own product. Resource permissions do
not establish a client-specific boundary, and an application is not a
promise of isolation from every organization-level resource.

## 2. Brand the verification flow
Configure colours, typography, square and rectangular logos, corner radius,
and the login-screen option in the Style Editor. The Texts tab overrides
supported strings, one locale at a time; it does not expose arbitrary text
on every screen. Choose the completion-screen mode where needed.

For a custom domain:
- Use an unused subdomain such as verify.yourbrand.com, not a root or www. domain.
- Enable White Label on the account and grant write access to Customization.
- Add both generated CNAME records: ownership/certificate verification and routing.
- Verify ownership in the console once the records resolve.
- A custom domain prevents re-enabling the Didit login screen until removed.

Enable Workflow → Settings → Options → Include custom style for every
workflow that should use the branding. Otherwise it retains default branding.

White Label changes visual branding. Retain the required provider disclosures:
identify your company as requesting verification and Didit as powering it,
link your privacy notice and applicable terms, and link Didit's Verification
Privacy Notice and End User Terms for Identity Verification. Collect affirmative
consent where required and retain the necessary proof in your own systems.
These responsibilities also apply when you build your own verification UI.

## 3. Publish each client's workflow
Build a workflow in the Console or with
POST https://verification.didit.me/v3/workflows/.
Use a KYC (know your customer) workflow for people or a KYB (know your
business) workflow for companies. Configure the relevant checks and publish
the draft. Existing sessions retain their original workflow version.

## 4. Create the session for the correct client
Resolve the application key and workflow UUID from trusted server-side
configuration for this client and environment:

  curl -X POST https://verification.didit.me/v3/session/ \
    -H "x-api-key: <client-application-key>" \
    -H "Content-Type: application/json" \
    -d '{
      "workflow_id": "<client-workflow-uuid>",
      "vendor_data": "<client-id>:<end-user-id>"
    }'

vendor_data contains your references and is returned on session events and
decision reads. Do not assume unrelated entity or transaction events have
this same session envelope. Open the returned url or embed the hosted flow.

## 5. Receive authenticated results
Register a destination for status.updated and data.updated and store its
secret_shared_key, scoped to the client and environment in your configuration.
Verify before reading a decision or changing a client's data:
- X-Signature-V2: HMAC-SHA256 over recursively sorted, compact JSON with
  Unicode preserved. This header does not sign raw bytes.
- X-Signature: supported HMAC-SHA256 over the exact raw request bytes,
  captured before JSON middleware. The terminal example uses this variant.
- Check signature format and length before a constant-time comparison.
- Validate X-Timestamp and reject a difference greater than 300 seconds.
  Require it to match the timestamp in the authenticated payload.
- Resolve the destination secret from trusted route configuration, not from
  an unverified vendor_data value. Confirm the authenticated reference
  belongs to that client before routing the result.
- Dispatch on webhook_type, handle duplicate deliveries, and durably queue
  work before acknowledging. Return 2xx promptly, within the 5-second timeout.

Session statuses: Approved, Declined, In Review, In Progress, Not Started,
Abandoned, Expired, Kyc Expired, Resubmitted, Awaiting User. Entity and
transaction events have different status enums; do not feed them into the
session dispatcher.
Session events include session_id, status, webhook_type, created_at,
timestamp, workflow_id, workflow_version, vendor_data, metadata; decision
is present for Approved, Declined, In Review, and Abandoned.
Business sessions also include business_session_id and session_kind: "business".
For reconciliation read
GET https://verification.didit.me/v3/session/{sessionId}/decision/
using the same client's application key. Your authorized team can also
review results in the Console.

## 6. Control team permissions
Assign each member one role. Five built-in roles are available; organization
owners can create custom roles. Allowed actions differ by resource:
- sessions: read, list, create, write, delete
- users: read, list
- businesses: read, list, write
- workflows and questionnaires: read, write, create, delete
- customization: read, write
- api-keys: read, write
Use a dedicated custom role for support access. Do not grant access to all
applications merely because a support agent needs to review sessions.

## 7. Add checks and verify the integration
Edit and publish a draft of one client's workflow. New sessions use that
version; other workflows and existing sessions retain their configuration.
Review the published costs of the added checks.

1. Configure two example clients with distinct application keys, workflows,
   and webhook secrets. Test your own authorization against cross-client access.
2. Confirm sandbox and live traffic use separate applications.
3. Check each workflow's custom-style setting, domain, and required disclosures.
4. Reject malformed or invalid signatures, stale timestamps, and a reference
   that belongs to another client. Include Unicode in signature fixtures.
5. Confirm vendor_data returns unchanged on session updates and decision reads.
6. Confirm changes to one workflow affect only new sessions using that workflow.

References:
- https://docs.didit.me/console/white-label
- https://docs.didit.me/console/custom-domain
- https://docs.didit.me/console/roles-permissions
- https://docs.didit.me/console/workflows
- https://docs.didit.me/sessions-api/create-session
- https://docs.didit.me/integration/webhooks
- https://docs.didit.me/integration/sandbox-testing

Start at https://business.didit.me.
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
SOC 2 · Type II — AICPA · 2026
SOC 2 · Type I — AICPA · 2026
ISO/IEC 27001 — Information security · 2026
EU financial sandbox — Tesoro · SEPBLAC · BdE
FIDO Alliance — Associate member · 2026
iBeta Level 1 PAD — NIST / NIAP · 2026
GDPR — EU 2016/679
HIPAA — 45 CFR §160 · §164
DORA — EU 2022/2554
MiCA — EU 2023/1114
EBA remote onboarding — EBA/GL/2022/15
AMLD6 · eIDAS 2.0 — EU-aligned by design
Jugendschutz geprüft — FSM · JMStV §4(2) · 2026

Proof numbers

Proof numbers
  • 25+
    Modules behind one integration
  • 220+
    Countries and territories covered
  • $0.20
    White Label per check, plus module costs
  • 500
    Free workflow checks every month
Three tiers, one price list

Start free. Pay as you go. Scale to Enterprise.

500 free verifications every month, forever. Then pay only when a module runs. Custom contracts, data residency, and service level agreements (SLAs) on Enterprise.

Free

$0/ month · no card

For building, testing, and your first users.

Everything you need to start:
  • 500 full KYC verifications every month
  • ID, liveness, face match, device & IP
  • 200+ fraud signals, blocklist, duplicates
  • Reusable KYC across the Didit network
  • Workflow builder, case management, SDKs
  • AI support In-console AI agent, docs, and community.
Most popular

Pay as you go

$0.33per full KYC

25+ modules, publicly priced. Automatic volume discounts.

Everything in Free, plus:
  • AML screening and monitoring from $0.07
  • Business registry pricing by country and data tier
  • Transaction monitoring at $0.02 each
  • Wallet screening at $0.15 per check
  • White-label flow under your own brand
  • AI support In-console AI agent, docs, and community.

Enterprise

Customannual contract

For large volumes and regulated programs.

Everything in Pay as you go, plus:
  • Annual contracts, committed-volume pricing
  • Custom legal terms and a 99.99% uptime SLA
  • Data residency, retention, security review
  • Manual reviewers on demand
  • Reseller and white-label terms
  • Priority human support 24/7 shared Slack channel, named success manager.

Volume discounts apply automatically as usage grows — no negotiation, no sales call.

FAQ

Common questions

What is Didit?

Didit is infrastructure for identity and fraud, the platform we wished existed when we were building products ourselves: open, flexible, and developer-friendly, so it works as a real part of your stack instead of a black box you integrate around.

One API covers verifying people (KYC, know your customer), verifying businesses (KYB, know your business), screening crypto wallets (KYT, know your transaction), and monitoring transactions in real time, on a stack built to be:

  • Fast, sub-2-second p99 on every session
  • Reliable, in production with 2,000+ companies across 220+ countries
  • Secure, SOC 2 Type 1 & Type 2, ISO 27001, GDPR-native, and formally attested by Spain's financial regulator as safer than verifying someone in person

The footprint underneath: 14,000+ document types in 48+ languages, 1,000+ data sources, and 200+ fraud signals on every session. The Didit infrastructure dynamically learns from every session and gets better every day.

What does reselling Didit actually look like?
Provide verification inside your product using Didit workflows. Configure applications for each client and use separate applications for sandbox and live traffic. Apply your branding, choose each client’s checks, and route session results using your own references. White Label changes the visual branding; required notices must still identify Didit as the verification provider.
Do my clients ever see Didit?
Brand the verification screens with your colours, typography, logos, and custom subdomain. Override the supported text strings and enable Include custom style on each workflow. This removes visual Didit branding, but required provider disclosures remain. Tell users that your company requests verification and Didit powers it, and include the required privacy and identity-verification terms links.
How fast is the verification for my end user?
Completion time depends on the checks you configure and the user’s progress through them. Publish the workflow each client needs and use signed session updates to track its outcome. Document AI adds a few seconds per document and reports completion after all required uploads finish. The flow does not have one fixed completion time across every combination of checks.
How do you keep one client's data away from another's?
Use separate applications and keys for each client and environment, and enforce client access in your own product. Console roles control actions on resources; available actions differ by resource. For example, users support read and list, while workflows support read, write, create, and delete. Roles do not establish a separate client boundary by themselves.
What happens if a user fails, abandons, or expires?
Subscribe to signed session updates and handle each outcome in your product. Sessions can be approved, declined, in review, abandoned, expired, or awaiting user action. Expiry is distinct from abandonment. Verify the delivery before updating your records, and retrieve the current decision when reconciling a missed update. See the event guide.
How do I control my team's access to data?
Assign one console role to each team member. Didit provides five built-in roles, and organization owners can create custom roles. Grant only the resource actions the role needs; for example, read and list on sessions for a reviewer who should not change workflows. See roles and permissions.
Is Didit compliant for my clients' industries?
Configure the checks your client’s verification programme requires. White Label changes branding, but the company requesting verification remains responsible for its user journey: identify the requesting company and Didit, link the required privacy notices and terms, and collect affirmative consent where required. Review the white-label responsibilities with the client’s compliance team.
How do I integrate verification for multiple clients?
Configure client applications, branding, and workflows, then create sessions with the correct client key and workflow. Use signed session updates to receive results. The integration prompt covers those steps and the routing logic your product needs. Test each client and environment before launch; custom-domain setup also requires both domain records to resolve.
How do I route a result back to the right client?
Include your client and user references when you create a session. Signed session updates and decision reads return that reference. Use both parts to find the correct record, verify the delivery with the destination’s secret, and check that the reference belongs to that client before changing their data.
Can I add checks for one client independently?
Edit a draft of that client’s workflow, add the required checks, and publish the version. New sessions use the newly published version; sessions already in progress retain the version they started with. Other workflows keep their own configuration. Review the prices of the modules you add on the pricing page.
How does the commercial side work?
Use the published module prices to calculate your verification costs: $0.33 per full identity check, $0.20 per anti-money laundering (AML) screen, and $2.00 per business registry check. White Label adds $0.20 per check on top of the modules used. Set your product’s client pricing separately. Talk to us about your reseller requirements.

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