Skip to main content

Statuses and codes

This page is the authoritative vocabulary for statuses, webhook events, and structured reasons you will see in the dashboard, webhooks, and API. Prefer these enums over free-text errorMessage when branching application logic.

Payload field layout lives in Webhook Payload. Failure handling is in Failure and Review Events.


Three layers of status

A single webhook can carry different statuses at different layers. Do not treat them as synonyms.

LayerFieldScope
Delivery eventtop-level eventWhy this webhook was sent
Flow / requestflowStatus (webhook) · status on a flow result / verification request (API)Overall outcome of the verification run
Step resultdata.<type>.statusOutcome of one step (DV, PoA, form, …)

Example: a DV step can be FAILED with reasons: ["DOCUMENT_EXPIRED"] while you still handle a later step, or the whole flow can move into review — delivered as a REVIEW event with flowStatus: "REVIEW", while reading the same flow result via the API returns REQUIRES_MANUAL_REVIEW.


Webhook event values

Verification results

ValueMeaningTypical next action
COMPLETEDThe step or flow completed successfullyTrust data / flowStatus; provision the user
FAILEDThe step or flow failed automaticallyRead structured reasons; allow retry or reject
REVIEWHuman review is requiredDo not reject yet. Wait for a later final event
REJECTEDExplicit rejection (often after manual review)Treat as declined
NOTIFICATIONLifecycle notification (not a step result)Route on eventData.type

AML updates

ValueMeaning
PRODUCEDInitial AML screening result produced
REFRESHEDOngoing monitoring refreshed matches
MODERATEDAn AML match was moderated (approved / rejected / escalated)

Notification eventData.type

Used only when event is NOTIFICATION:

TypeMeaning
DOCUMENT_EXPIREDA verified identity document has expired
KYC_RESULT_EXPIREDA KYC / flow result has passed its retention or validity window
FLOW_RISK_REEVALUATEDRisk scores were recomputed (for example after tag changes)
TRANSACTION_ALERTA Transaction Monitoring rule raised an alert

Canonical webhook event types

These are the values a webhook endpoint subscribes to, and the value carried in type on a V2 payload. They are not the same vocabulary as the event field above: event is derived from a verification's status and collapses every notification to NOTIFICATION, so it cannot distinguish a DV result from a KYB result, or one notification kind from another.

Only these values are accepted. Wildcards are not: a selection is always stored as exact values, so a later addition to this catalog cannot widen a subscription you already made. The live catalog for a deployment is served by GET /organizations/{organizationId}/webhooks/events.

Verification

Event typeFired when
verification.dv.completed · .failed · .reviewA document-verification result reaches that state
verification.poa.completed · .failed · .reviewA proof-of-address result reaches that state
verification.form.completed · .failed · .reviewA form result reaches that state
verification.spid.completed · .failed · .reviewA SPID / CIE result reaches that state
verification.phone.completed · .failed · .reviewA phone-verification result reaches that state
verification.wallet.completed · .failed · .reviewA wallet result reaches that state
verification.kyb.completed · .failed · .reviewA KYB result reaches that state
verification.geolocation.completed · .failed · .reviewA geolocation result reaches that state
verification.aml.produced · .refreshed · .moderatedAn AML screening result is produced, refreshed by ongoing monitoring, or moderated
verification.document.expiredA verified identity document has expired
verification.kyc.expiredA KYC / flow result passed its validity window

Flow

Event typeFired when
flow.risk.reevaluatedRisk scores were recomputed for a flow result
flow.completedEvery step the flow asks for has a passing result. V2 only.

Transaction

Event typeFired when
transaction.alert.createdA Transaction Monitoring rule raised an alert. Not flow-bound, so an endpoint's flow filter does not apply.

KYC Passport

Event typeStatus
kyc_passport.verification.updatedReserved. Present in the catalog and subscribable, but not yet emitted. V2 only.

Availability notes

  • Events marked V2 only have no pre-registry payload, so a LEGACY_V1 endpoint cannot subscribe to them; the API rejects the combination when you save it. See Payload Versions.
  • Session webhooks cannot subscribe to transaction.alert.created or kyc_passport.verification.updated.
  • The catalog API also returns an advisory group (VERIFICATION, FLOW, TRANSACTION, KYC_PASSPORT) and flowScoped flag for building a selection UI. Groups are never stored.

Flow and verification-request status

flowStatus on result webhooks and status on verification requests / flow results describe the same verification run, but use different vocabularies. Webhooks speak the event vocabulary; the API exposes the full lifecycle.

Webhook flowStatus

StatusMeaning
PROCESSINGAutomated checks in progress
COMPLETEDFinished successfully
FAILEDFinished with an automatic failure
CANCELLEDCancelled before completion
REVIEWWaiting on a human review decision
REJECTEDExplicitly rejected

flowStatus never carries PENDING, QUEUED, or REQUIRES_MANUAL_REVIEW: webhooks are not sent for runs the user has not finished, and review states are always delivered as REVIEW.

API status (flow results / verification requests)

StatusMeaning
PENDINGCreated; user has not finished
QUEUEDWaiting to be processed
PROCESSINGAutomated checks in progress
COMPLETEDFinished successfully
FAILEDFinished with an automatic failure
CANCELLEDCancelled before completion
REQUIRES_MANUAL_REVIEWWaiting on a human review decision
REJECTEDExplicitly rejected

When a webhook reports flowStatus: "REVIEW", reading the same flow result or verification request via the API returns REQUIRES_MANUAL_REVIEW.


Step result status (data.<type>.status)

Individual step results (document verification, PoA, form, and related types) use:

StatusMeaning
PASSEDStep checks passed
FAILEDStep checks failed
PARTIALIncomplete or partially successful result
REVIEWHuman review in progress (DV only)

Document verification is the only step type that can enter review; in webhooks its result status is delivered as REVIEW, and reading the same DV result via the API returns REQUIRES_MANUAL_REVIEW. KYB results use their own vocabulary (ModerationResultStatus, below).

warning

REVIEW — at the event, flow, or step layer — means “keep pending.” Use the final COMPLETED / FAILED / REJECTED event as the decision to act on in your product.


Document verification reasons (data.dv.reasons[])

Empty when no reason is reported. Values come from the API DvReason enum.

Document quality and authenticity

CodeTypical meaning
WRONG_DOCUMENT_TYPESubmitted type does not match what the step allows
DOCUMENT_TYPE_NOT_DEFINEDType could not be determined
DOCUMENT_TYPE_CHECKType validation failed
DOCUMENT_NOT_FOUNDNo usable document in the capture
DOCUMENT_SCORE_BELOW_THRESHOLDAuthenticity / quality score below configured minimum
SECURITY_CHECK_FAILEDBuilt-in security features failed checks
DOCUMENT_ALTERATION_DETECTEDSigns of alteration
DOCUMENT_TAMPERING_DETECTEDSigns of tampering
FAKE_DOCUMENT_DETECTEDClassified as fake
SCREEN_REPLAY_ATTACK_DETECTEDScreen / replay presentation attack
PAPER_COPY_DETECTEDPaper copy rather than original
BLACK_AND_WHITE_COPYB/W copy of a color document
ELECTRONIC_DEVICECapture from another screen/device
SECURITY_TEXTSecurity text check failed
IMAGE_PATTERNSImage-pattern check failed
PHOTO_EMBEDDINGSPortrait embedding consistency failed

Country, age, and field rules

CodeTypical meaning
COUNTRY_FILTERCountry not allowed by whitelist/blacklist
DOCUMENT_COUNTRY_MISMATCHCountry does not match expected value
DOCUMENT_COUNTRY_MISSINGCountry could not be read
DATE_OF_EXPIRY_NOT_VALIDExpiry invalid or document expired
DATE_OF_EXPIRY_NOT_READABLEExpiry unreadable
DATE_OF_EXPIRY_FIELD_MISSINGExpiry field missing
DATE_OF_BIRTH_BELOW_MINIMUM_AGEBelow the flow’s minimum age
REQUIRED_FIELDS_MISMATCHRequired extracted fields inconsistent

Face, liveness, and uniqueness

CodeTypical meaning
FACE_MATCH_CHECKFace match against the document failed
FACE_MATCH_CHECK_ONE_CLICKFace match failed in a one-click / reuse path
LIVENESS_CHECK_FAILEDLiveness overall failed
LIVENESS_ANTISPOOF_FAILEDAnti-spoofing failed
LIVENESS_BRIGHTNESS_FAILEDLighting / brightness out of range
LIVENESS_EYES_CLOSED_FAILEDEyes closed
LIVENESS_WEARING_SUNGLASSES_FAILEDSunglasses detected
LIVENESS_FACE_OCCLUDED_FAILEDFace occluded
LIVENESS_SHARPNESS_FAILEDImage not sharp enough
LIVENESS_FACE_CONSISTENCY_FAILEDFace consistency across frames failed
UNIQUENESS_CHECKBiometric uniqueness / duplicate identity check failed
DOCUMENT_ALREADY_USED_BY_ANOTHER_USERDocument already bound to another identity
DOCUMENT_FINGERPRINT_COMPUTATIONDocument fingerprinting failed

Other

CodeTypical meaning
OVERALL_STATUSAggregate step status failed without a more specific code
UNKNOWNUnclassified reason

Proof of address reasons (data.poa.reason)

CodeTypical meaning
DOCUMENT_TYPE_NOT_ALLOWEDType not accepted for PoA
NAME_MISMATCHName does not match the verified identity
DATE_TOO_OLDDocument older than allowed window
INVALID_DOCUMENTDocument not valid for PoA
UNRECOGNIZED_ADDRESSAddress could not be recognized
UNKNOWNUnclassified reason

Other step types (form, phone, wallet, kyb, geolocation, spid) may expose optional reason / errorMessage strings. Prefer structured fields when present; use errorMessage for diagnostics only.


KYB and AML statuses

KYB moderation (ModerationResultStatus)

StatusMeaning
ACQUIRINGCollecting company / ownership data
PENDING_MODERATIONWaiting for review
REVIEW_REQUIREDNeeds human review
SUCCESSModerated successfully
FAILEDFailed

PEP & sanctions (KYB)

StatusMeaning
PENDINGNot started
IN_PROGRESSScreening in progress
REVIEWMatch requires review
SUCCESSCleared
FAILEDFailed

AML moderation decisions

When an AML match is moderated: approved, rejected, or escalated.

See AML and KYB for operational workflows.


Transaction monitoring decisions

Transaction monitoring returns a synchronous verdict derived from combined rule risk:

DecisionMeaning
ALLOWBelow review threshold, proceed
REVIEWAt or above review threshold, hold for investigation
BLOCKAt or above block threshold, do not proceed

See Transaction Monitoring for the Allow / Review / Block model and TM guides for rules and thresholds.


Manual review

ConceptValue / event
Flagged for reviewWebhook event: REVIEW · API result status REQUIRES_MANUAL_REVIEW
Operator decisionManual review result: approved, rejected, or failed
After decisionFollow-up webhook with COMPLETED, FAILED, or REJECTED

Do not mark the end user as rejected on REVIEW alone. See Manual review.


API errors

HTTP API failures use a structured body (BaxeError):

{
"code": 10201,
"errorTag": "invalid_api_key",
"message": "optional human-readable detail"
}
FieldMeaning
codeNumeric error code (stable enough for support; prefer errorTag in app logic when present)
errorTagMachine-readable tag from the API ErrorTags enum
messageOptional detail; do not rely on exact wording for branching

Authentication and configuration

HTTPerrorTagTypical causes
401invalid_api_keyPublishable key used on a server endpoint; typo/truncated key; request sent to the wrong host (for example docs.zyphe.com instead of api.zyphe.com); key revoked
401missing_api_keyNo x-api-key header
401 / 403origin_not_allowedPublishable key used from a browser origin not in Allowed Origins
403 / otherpermission_denied, forbiddenKey or role cannot perform the operation
4xxproduct_not_activeProduct entitlement missing (for example Export API not enabled)

Numeric code 10201 is commonly returned with errorTag: "invalid_api_key". Fix checklist:

  1. Use a secret key (zyphe_sk_…) for backend calls — API keys
  2. Call https://api.zyphe.comEnvironment setup
  3. Confirm the key still exists in the dashboard and was copied completely
  4. Align sandbox/production usage — Sandbox mode

Other tags you may see while integrating

errorTagMeaning (integration context)
flow_not_foundWrong flow id or sandbox/production mismatch
verification_request_not_foundBad VR id or sandbox mismatch
step_order_violation / step_already_completedCompleting steps out of order on the direct-API path
bad_request / request_deserializationInvalid JSON or schema
rate_limit_exceededToo many requests; back off and retry

The full ErrorTags enum is listed in the OpenAPI schema. Webhook events and result statuses above are separate from these API tags.