Handle KYC status webhooks
Handle KYC status_changed webhooks for pending, resubmission_required, manual_review, approved, and rejected outcomes.
Handle KYC status webhooks by updating the applicant’s onboarding state based on the latest data.kyc.status value.
KYC status handling
Due sends KYC status updates through the bp.kyc.status_changed webhook event. Use data.id as the account ID and data.kyc.status as the current KYC status.
{
"id": "wh_evt__123",
"type": "bp.kyc.status_changed",
"data": {
"id": "acct_98765ABCDE",
"kyc": {
"status": "manual_review",
"link": "https://..."
}
},
"occurredAt": "2025-09-22T12:00:00Z"
}Handle every status explicitly in your onboarding flow:
| Status | Meaning | Recommended handling |
|---|---|---|
pending | The applicant still has missing information to complete. | Keep the applicant in onboarding. Prompt them to continue the KYC flow and complete the missing information. |
resubmission_required | The applicant must resubmit some information. | Generate a Sumsub link and send it to the applicant so they can complete or correct the missing information. |
manual_review | Due is reviewing the case internally. | Show a review-in-progress state. The SLA is 24 hours on weekdays and 48 hours on weekends. |
passed | KYC is approved. | Mark KYC as complete and enable KYC-gated product flows, subject to any other onboarding requirements. |
failed | KYC reached a final rejected status. | Mark KYC as rejected and keep KYC-gated product flows blocked. |
1. Handle pending
pendingUse pending when the applicant has not completed all required KYC information.
Recommended handling:
- Keep the account in onboarding.
- Prompt the applicant to continue the KYC flow.
- Keep KYC-gated actions disabled until the status changes.
2. Handle resubmission_required
resubmission_requiredUse resubmission_required when the applicant must correct or resubmit information. Complete the submission through the hosted flow or the API, then wait for the next bp.kyc.status_changed webhook before enabling KYC-gated actions.
Option A — Hosted
Use the hosted flow when you want Sumsub to collect the required information from the applicant.
- Create a KYC session for the account.
- Send the returned
linkto the applicant, or use the returnedaccessTokento initialize the Sumsub WebSDK in your application. - Ask the applicant to complete the missing or corrected information.
- Wait for the webhook event that follows completion.
Completing the hosted session closes the submission automatically.
Create a KYC session:
curl --request POST \
--url https://api.due.network/v1/kyc/session \
--header 'Due-Account-Id: <ACCOUNT_ID>' \
--header 'accept: application/json' \
--header 'authorization: Bearer <API_KEY>'If an existing link has expired, force a new link:
curl --request POST \
--url https://api.due.network/v1/kyc/session \
--header 'Due-Account-Id: <ACCOUNT_ID>' \
--header 'accept: application/json' \
--header 'authorization: Bearer <API_KEY>' \
--header 'content-type: application/json' \
--data '
{
"force": true
}
'A successful response returns a link and access token:
{
"link": "https://...",
"accessToken": "..."
}Option B — API
Use the API flow when you collect and submit the applicant's KYC information in your own experience.
- Call
GET /v1/kyc/submissionsto find the account's open submission. - Read the submission's
requirementsand collect only the information those requirements request. - Submit the required data to the corresponding endpoint:
POST /v1/kyc/submissions/{submissionId}/infofor applicant information.POST /v1/kyc/submissions/{submissionId}/documentsfor documents.POST /v1/kyc/submissions/{submissionId}/questionnairesfor questionnaire answers.POST /v1/kyc/submissions/{submissionId}/agreementsfor accepted agreements.POST /v1/kyc/submissions/{submissionId}/relationsfor required relations.
- Call
POST /v1/kyc/submissions/{submissionId}/completeafter you satisfy the submission requirements. - Wait for the next
bp.kyc.status_changedwebhook before enabling KYC-gated actions.
Requests for information
An RFI (request for information) is separate from the KYC submission and resubmission flow. Do not treat an RFI as a KYC requirement or complete a KYC submission solely because you responded to an RFI.
3. Handle manual_review
manual_reviewUse manual_review when the case is under internal review by Due.
Recommended handling:
- Show a review-in-progress state to the applicant.
- Do not ask the applicant to resubmit information unless the status changes to
resubmission_required. - Use the review SLA in your support messaging:
- Weekdays: 24 hours
- Weekends: 48 hours
4. Handle passed
passedUse passed when KYC has passed.
Recommended handling:
- Mark KYC as complete for the account.
- Enable product flows that require KYC.
- Store the approved state so the applicant does not repeat KYC unnecessarily.
5. Handle failed
failedUse failed when KYC has reached a final rejected status.
Recommended handling:
- Mark KYC as rejected.
- Keep KYC-gated product flows blocked.
- Treat the status as final unless Due provides a new status update.
Updated 27 days ago