Brand the verification flow, configure client applications, and route results through your product. White Label adds $0.20 per check to the modules used.
Your platformOne integrationEvery client runs on it.Build once
01client_01app_nwp_01Approved
Identity + liveness
02client_02app_lkm_02In Review
Identity + liveness + business
03client_03app_fwr_03Approved
Identity + liveness + sanctions
Didit runs underneathRun verification with your configured brand.White labelPer-client apps
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
01
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.
Integrate
Embed the verification flow in your app, open the hosted page, or send the user a link. Use a separate application for sandbox tests and live verifications.
Guide the user through the flow
Apply your colours, logo, and typography, then serve the flow from your subdomain. Enable the custom style on each workflow. Retain the required notices that identify Didit as the verification provider.
Receive the results
Receive signed updates when the verification changes. Your own reference links the result to the user. Retrieve the result on request, or review it in the console.
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.
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.
ColoursTypographyLogoCorner radius$0.20on top of the modules used
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.
Use separate applications for clients and environments. Enforce client access in your product.
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.
One integration, a different workflow per clientPublish each client’s workflow with the checks it needs.
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.
Signed webhookhttps://yourbrand.com/webhooksX-Signature-V2vendor_dataclient_01:user_42
On-demand fetchPull the decision whenever your system needs it.Retrieve on requestvendor_dataclient_01:user_42
ConsoleOpen the full session, its evidence and its audit trail.Manual reviewvendor_dataclient_01:user_42
Read one result in three places. Match your reference to the correct client and user.
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.
Anti-money laundering (AML) enabled for client_01Publish the draft
Turn a module on for one clientPublish the changes for new sessions. Existing sessions keep their version.500 free workflow checks
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.
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.
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 supportIn-console AI agent, docs, and community.
Usethepublished module pricestocalculateyourverificationcosts:$0.33perfullidentitycheck,$0.20peranti-moneylaundering(AML)screen,and$2.00perbusinessregistrycheck.WhiteLabeladds$0.20percheckontopofthemodulesused.Setyourproduct’sclientpricingseparately.Talk to usaboutyourresellerrequirements.