Skip to main content
This guide is the companion to the quickstart. It covers the architecture, every integration decision, and the operational patterns that make KYB reliable in production.

Architecture

Authentication

All requests require the x-api-key header with your application’s API key. See API authentication for key rotation, environment separation, and scopes.

Session creation

Single endpoint: POST /v3/session/. The workflow’s type determines whether the session is KYC or KYB — no explicit “business” flag is needed. Recommended fields on creation: Full schema: create session. The response url is a hosted verification link. Options for delivery:
  • Email it from your own platform.
  • Embed it in your onboarding UI as a link.
  • Open it in an in-app webview (iOS / Android / React Native).
You can customize the hosted experience — logo, color, domain, email templates — via White-label.

Polling vs webhooks

Webhooks are the recommended pattern. Didit POSTs completion events to your subscribed endpoint as soon as processing finishes. Polling is supported for development or when your webhook endpoint is unreachable:
  • Poll GET /v3/session/{id}/decision/ with exponential backoff (every 10s initially, up to 60s).
  • Stop polling when status is one of APPROVED, DECLINED, IN_REVIEW.
Polling at high frequency may hit rate limits. Always prefer webhooks in production.

Webhook handling

Subscribe to the events you care about — the same events cover both KYC and KYB, with session_kind: "business" inside the payload to identify business-session events:
  • status.updated — session status changed. Filter on data.session_kind === "business" for KYB sessions.
  • data.updated — session data changed (registry refresh, key-people submission, documents, ongoing AML). Same session_kind filter applies.
  • business.status.updated / business.data.updated — the linked Business entity changed.
Full event catalog: KYB webhooks. Signature verification and retry semantics: webhooks reference.

Handling decisions

See KYB statuses for the full state machine and reason codes.

Resubmission flow

When a Business Verification (KYB) session transitions to RESUB_REQUESTED (or a feature is marked for resubmission), the business needs to upload corrected or additional data. You can:
  • Re-deliver the same url — the hosted flow picks up where resubmission is needed.
  • Open a case in the Business Console to track the back-and-forth internally.

Business profile aggregation

If you pass vendor_data on session creation, Didit aggregates all sessions for that business into a single Business entity. Use the entity’s features map to answer “is this business fully verified right now?” without iterating sessions. Benefits:
  • Periodic re-KYB flows append to the same profile.
  • Transactions monitored against the same vendor_data carry the business’s risk context.
  • UBOs and officers linked to User entities populate cross-entity relationships.

Best practices

Error handling

Full rate limiting reference.

Next steps

Webhooks

Every KYB event and payload.

Statuses

State machine reference.

Response schema

Decoding the KYB decision.