Skip to main content

Account & KYC Webhooks

Event Types​

Event TypeDescription
account_createdA new account has been created
account_status_updatedThe account status has changed
kyc_status_updatedThe KYC verification status has changed
kyc_needs_updateAdditional KYC information is required
bank_account_linkBank account linking status has changed
kyc_verification_submittedA KYC verification was submitted for review
kyc_verification_signedThe applicant signed the verification agreement
kyc_document_uploadedDocuments were uploaded for a KYC verification
kyc_document_upload_receivedThe verification provider acknowledged a document
kyc_verification_completedA KYC verification reached a final outcome
kyb_verification_submittedA business verification was submitted for review
kyb_document_uploadedA document was uploaded for a business verification

Account Events​

Account Created​

Triggered when a new account is created in the system.

Details Schema​

FieldTypeDescription
accountIdstringUnique account identifier (UUID)
statusstringAccount status. One of: pending, active, paused, closed
accountTypestringAccount type (e.g., individual, business)
emailstringAccount email address
referencestringAccount reference identifier

Sample Payload​

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "account_created",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"accountId": "00000000-0000-0000-0000-000000000000",
"status": "pending",
"accountType": "individual",
"email": "user@example.com",
"reference": "REF-123456"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

Account Status Updated​

Triggered when an account's status changes (e.g., from pending to active after KYC approval).

Details Schema​

FieldTypeDescription
accountIdstringUnique account identifier (UUID)
statusstringNew account status. One of: pending, active, paused, closed
previousStatusstringPrevious account status
accountTypestringAccount type (e.g., individual, business)
emailstringAccount email address
referencestringAccount reference identifier

Sample Payload​

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "account_status_updated",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"accountId": "00000000-0000-0000-0000-000000000000",
"status": "active",
"previousStatus": "pending",
"accountType": "individual",
"email": "user@example.com",
"reference": "REF-123456"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

Account Statuses​

StatusDescription
pendingAccount is awaiting KYC verification
activeAccount is fully verified and active
pausedAccount is temporarily paused (e.g., KYC needs update)
closedAccount has been closed (e.g., KYC rejected)

KYC Events​

KYC Status Updated​

Triggered when a KYC verification status changes.

Details Schema​

FieldTypeDescription
kycIdstringUnique KYC record identifier (UUID)
accountIdstringAssociated account identifier (UUID)
statusstringNew KYC status. One of: pending, in_review, approved, needs_update, rejected
previousStatusstringPrevious KYC status
statusReasonstringReason for the status change (may be empty)
kycTypestringType of KYC verification. One of: card, banking

Sample Payload​

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyc_status_updated",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kycId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"status": "approved",
"previousStatus": "in_review",
"statusReason": "",
"kycType": "banking"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYC Needs Update​

Triggered when additional KYC information or documentation is required. This is a specific case of kyc_status_updated where the status transitions to needs_update.

Details Schema​

Same schema as KYC Status Updated.

Sample Payload​

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyc_needs_update",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kycId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"status": "needs_update",
"previousStatus": "in_review",
"statusReason": "Additional documentation required",
"kycType": "banking"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYC Statuses​

StatusDescription
pendingKYC verification has not started
in_reviewKYC verification is being reviewed
approvedKYC verification has been approved
needs_updateAdditional information or documentation is required
rejectedKYC verification has been rejected

KYC Types​

TypeDescription
cardCard verification
bankingBanking verification

Triggered when a bank account linking status changes.

Details Schema​

FieldTypeDescription
accountLastFourstringLast four digits of the bank account
statusstringBank account link status
statusReasonstringReason for the status

Sample Payload​

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "bank_account_link",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"accountLastFour": "1234",
"status": "active",
"statusReason": "Bank account linked successfully"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYC Verification Events​

kycType is banking or card, identifying which verification the event belongs to. Every one of these carries kycId and accountId.

KYC Verification Submitted​

Sent when a verification is handed to the provider for review.

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyc_verification_submitted",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kycId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"status": "in_review",
"previousStatus": "pending"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYC Verification Signed​

Sent when the applicant accepts the terms and signs. signedVia records the channel used.

FieldTypeDescription
kycIdstringKYC record identifier (UUID)
accountIdstringAssociated account identifier (UUID)
kycTypestringbanking or card
signedAtstringWhen the agreement was signed (ISO 8601)
signedViastringChannel the signature came through
termsAndConditionsAcceptedAtstringWhen the terms were accepted (ISO 8601)
privacyPolicyAcceptedAtstringWhen the privacy policy was accepted (ISO 8601)
{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyc_verification_signed",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kycId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"kycType": "banking",
"signedAt": "2025-01-01T00:00:00Z",
"signedVia": "dashboard",
"termsAndConditionsAcceptedAt": "2025-01-01T00:00:00Z",
"privacyPolicyAcceptedAt": "2025-01-01T00:00:00Z"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYC Document Uploaded​

Sent when documents are uploaded. files is an array — one event can cover several documents.

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyc_document_uploaded",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kycId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"kycType": "banking",
"files": [
{ "key": "kyc/00000000/passport.jpg", "size": 248311, "contentType": "image/jpeg" }
]
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYC Document Upload Received​

Sent when the verification provider acknowledges a document. This is the provider's confirmation, distinct from your upload succeeding.

FieldTypeDescription
kycIdstringKYC record identifier (UUID)
accountIdstringAssociated account identifier (UUID)
kycTypestringbanking or card
documentstringThe document the provider acknowledged
eventstringThe provider's event name
occurredAtstringWhen the provider recorded it (ISO 8601)

KYC Verification Completed​

Sent when a verification reaches a final outcome. Read the account's current status through the API rather than inferring it here.

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyc_verification_completed",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kycId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"kycType": "banking",
"completedAt": "2025-01-01T00:00:00Z"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYB Events​

Business verification. See the KYB Guide for the process these events report on.

KYB Verification Submitted​

FieldTypeDescription
kybIdstringKYB record identifier (UUID)
accountIdstringAssociated account identifier (UUID)
statusstringVerification status
statusReasonstringReason for the status, when there is one
entityTypestringLegal entity type — see Supported Entity Types
{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyb_verification_submitted",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kybId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"status": "in_review",
"entityType": "limited_liability_company"
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

KYB Document Uploaded​

Sent once per document, carrying that single file.

{
"webhookId": "00000000-0000-0000-0000-000000000000",
"type": "kyb_document_uploaded",
"accountId": "00000000-0000-0000-0000-000000000000",
"timestamp": "2025-01-01T00:00:00Z",
"details": {
"kybId": "00000000-0000-0000-0000-000000000000",
"accountId": "00000000-0000-0000-0000-000000000000",
"file": { "key": "kyb/00000000/certificate.pdf", "size": 118204, "contentType": "application/pdf" }
},
"systemNotes": "Do not rely solely on this webhook for final state. Always verify the current status via the API to ensure consistency. Consult the developer documentation and guides for more information."
}

Support and Resources​

If you need assistance or have any questions, our support team is here to help. You can contact our support team at support@blockwyre.com.

Stay Updated​

Stay up-to-date with the latest news, updates, and features from BlockWyre by following us on social media:

We are excited to have you on board and look forward to seeing how you leverage BlockWyre's powerful tools to enhance your financial operations. Happy integrating!