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. |
approved | KYC is approved. | Mark KYC as complete and enable KYC-gated product flows, subject to any other onboarding requirements. |
rejected | 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.
Recommended handling:
- Generate a Sumsub link for the account.
- Send the link to the applicant.
- Ask the applicant to complete the missing or corrected information.
- Wait for the next
bp.kyc.status_changedwebhook before enabling KYC-gated actions.
Generate a Sumsub 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>'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": "..."
}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 approved
approvedUse approved 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 rejected
rejectedUse rejected 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 6 days ago