Docs / API and agents

Business verification (KYB)

How an organization administrator verifies the business with Didit, and how the signed webhook moves the status.

GET /v1/kyb returns whether verification is available and the latest status for the active organization. POST /v1/kyb/sessions starts a check and returns the hosted Didit link (url) the business contact opens. Didit runs the check (https://docs.didit.me/business-verification/quickstart); VendorLogic stores only the session status.

Who can use it#

Holders of the org.kyb permission: by default the Owner and Administrator of a supplier or customer organization. Without it both endpoints answer 403. An already approved business gets 409 on a new start.

Statuses#

Not Started, In Progress, In Review, Awaiting User, Resubmitted, then the final Approved, Declined or Kyc Expired (https://docs.didit.me/integration/verification-statuses). A late delivery never reopens a final status.

Webhook#

POST /v1/webhooks/didit is public; the HMAC-SHA256 of the body (X-Signature or X-Signature-V2, with X-Timestamp within five minutes) is the only credential (https://docs.didit.me/integration/webhooks). The payload is Didit's flat v3 envelope (webhook_type, session_id, status, session_kind at the top level). Only status.updated events of business sessions for a session VendorLogic started are applied; each applied change is audited (kyb.started, kyb.status_changed) with no personal data.

Setup#

Set DIDIT_API_KEY, DIDIT_WORKFLOW_ID (the Business Verification workflow) and DIDIT_WEBHOOK_SECRET on the services container, and add https://<host>/v1/webhooks/didit as a webhook destination in the Didit console. Unset, the start endpoint answers 503 naming the variables and the rest of the app is unaffected.

Making it mandatory (KYB_REQUIRED)#

Off by default. With KYB_REQUIRED=1 on the services container, every business (including organizations that predate onboarding) needs an Approved verification before its gated actions: a supplier cannot publish its credit application, a customer cannot submit one while signed in, and the customer cannot skip the step. The answer is the usual 409 onboarding_incomplete with missing: ["kyb"]. Declined and Kyc Expired can be started again; In Review waits for Didit. If Didit is not configured the step is "not needed" and nothing is blocked. GET /v1/kyb returns required (the switch) and, in verification, the sessionId of the latest check.

Verification is a step of "Finish setting up". Suppliers need it to publish, install a connector or use agent write tools while Didit is configured; customers may skip it unless KYB_REQUIRED is on. See Onboarding steps and gates.