Skip to main content

Supported Events

Overview

This page lists webhook event suffixes Verifik can emit. Your HTTP listener receives a type built as ${projectFlow.type}_${suffix} (for Smart Enroll flows, projectFlow.type is usually onboarding, so you see onboarding_email_validation_created, not only email_validation_created).

Spanish: Eventos soportados.

HTTP request body

Every delivery is an HTTP POST to your ProjectFlow webhook URL with JSON:

{
"type": "onboarding_email_validation_created",
"object": { }
}
  • type — Full string: ${projectFlow.type}_${suffix}. Match on this value in your code.
  • object — Primary entity snapshot (IDs and fields). OTP values are stripped before send.

Nothing is queued if the flow has no webhook or the code path does not attach one.

Quick rule

Tables below show the suffix only. Your logs will show the prefixed type (e.g. onboarding_… or login_…).

Typical onboarding timeline

Order varies by project (optional steps, skip KYC, gateways). This diagram shows a common happy path and where major events appear. Parallel steps (email vs phone) are simplified.

flowchart TD
insert["User starts sign-up"] -->|"app_registration_created"| syncForm["sync: signUpForm"]
syncForm -->|"app_registration_sync_sign_up_form"| emailPhone["Email + phone OTP"]
emailPhone -->|"email_validation_* / phone_validation_*"| syncMore["sync: instructions / document / liveness"]
syncMore -->|"app_registration_sync_*"| doc["Document validation"]
doc -->|"document_validation_created"| lookup["Source lookup"]
lookup -->|"document_validation_source_lookup"| live["Liveness / biometric"]
live -->|"biometric_validation_validated"| face["Face compare optional"]
face -->|"face_verification_compare"| endSync["sync: end"]
endSync -->|"app_registration_completed"| done["COMPLETED"]
endSync -->|"app_registration_needs_manual_verification"| manual["Manual review"]
manual -->|"document_validation_manual_verification_required"| resolve["Resolve + sync end"]
resolve -->|"app_registration_completed"| done
skipPath["skipKYC allowed"] -->|"app_registration_completed_without_kyc"| done
Manual verification vs completed

If the registration or document is in NEEDS_MANUAL_VERIFICATION, sync with step: "end" may emit app_registration_needs_manual_verification instead of app_registration_completed until blockers are cleared. A second completed event can arrive later after resolution and another sync (or adminOverride). Real delivery order over the network can differ by milliseconds.


Reference tables (by lifecycle order)

1. App registration (app_registration_*)

Event suffixWhen it firesMain object entityNotes
app_registration_createdNew registration after insert / initappRegistrationIncludes projectFlow context when populated
app_registration_sync_<step>sync while status stays ONGOINGappRegistration<step> is snake_case: e.g. sign_up_form, instructions, document, liveness, skip_kyc
app_registration_completedsync end (or staff path) when requirements pass and status becomes COMPLETEDappRegistration
app_registration_needs_manual_verificationsync end (or rules) when blocked by manual review / completenessappRegistration
app_registration_completed_without_kycskipKYC when flow allows skip and status COMPLETED_WITHOUT_KYCappRegistration
app_registration_failedsync end with request FAILED when completeness allows that outcomeappRegistration
app_registration_person_already_setLiveness/person attach when person already linkedappRegistrationError shape: error, statusCode, message

2. Email validation (email_validation_*)

Event suffixWhen it firesMain object entityNotes
email_validation_createdFirst OTP email sentemailValidation
email_validation_resendResend OTP while prior send still validemailValidationSecond send for same pending validation
email_validation_validatedCorrect OTP (or valid demo OTP on demo projects)emailValidation
email_validation_failedStatus moves to failedemailValidationPart of email_validation_{status} pattern
email_validation_otp_incorectWrong OTP submittedemailValidationSpelling incorect matches API
email_validation_expiredSession expired (~10 min)emailValidation

3. Phone validation (phone_validation_*)

Event suffixWhen it firesMain object entityNotes
phone_validation_createdFirst OTP message sent (SMS/WhatsApp)phoneValidation
phone_validation_resendResend OTP for same pending validationphoneValidationCooldown may apply; force can bypass in API
phone_validation_validatedCorrect OTPphoneValidation
phone_validation_failedStatus moves to failedphoneValidationPart of phone_validation_{status} pattern
phone_validation_otp_incorectWrong OTPphoneValidation
phone_validation_expiredSession expiredphoneValidation

4. Document validation (document_validation_*)

Event suffixWhen it firesMain object entityNotes
document_validation_createdNew document validation starteddocumentValidationOften includes appRegistration, email, phone
document_validation_source_lookupGovernment / data source lookup finisheddocumentValidation
document_validation_data_source_errorSource returned invalid/empty or name mismatchdocumentValidationMay include isSupported, infoValidationSupportedReason, notSupportedData
document_validation_manual_verification_requiredDocument moved to manual reviewdocumentValidationLinked app registration may become NEEDS_MANUAL_VERIFICATION
Event suffixWhen it firesMain object entityNotes
biometric_validation_newStatus newbiometricValidationDynamic: biometric_validation_{status}
biometric_validation_validatedStatus validatedbiometricValidation
biometric_validation_failedStatus failedbiometricValidation
biometric_validation_created_personPerson created from biometric flowbiometricValidation
biometric_validation_liveness_failedLiveness step failed explicitlybiometricValidation
biometrics_liveness_score_not_acceptableLiveness score below project thresholdbiometricValidationPayload may include projectFlow

6. Face verification (face_verification_*)

Event suffixWhen it firesMain object entityNotes
face_verification_compareFace compare finished (e.g. selfie vs document)appRegistrationIncludes compareResult

7. Information validation (information_validation_*)

Event suffixWhen it firesMain object entityNotes
information_validation_background_checkBackground / criminal checks completedinformationValidation
information_validation_updatedData synced from document-driven flowsinformationValidationEmission depends on webhook context on document/flow

Full type examples

Suffix (from tables)Example full type
email_validation_createdonboarding_email_validation_created
app_registration_sync_sign_up_formonboarding_app_registration_sync_sign_up_form
app_registration_completedonboarding_app_registration_completed