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 (LEGACY_V1)​

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
SUBMITTEDA KYB application was submitted (KYB only)Do not provision yet. Wait for a final event
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, or 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.submittedA KYB application was submitted and its checks started. Not an outcome
verification.kyb.completed · .failed · .reviewA KYB case reaches that state. See KYB event lifecycle
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 cases use their own vocabulary (KYB case status, 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 case status​

StatusMeaning
OPENThe applicant is filling in the flow. An idle draft is cancelled after 30 days and resumed on the next save
PROCESSINGSubmitted; the case's checks are running
WAITING_INPUTA document request or clarification is open with the applicant
ACTION_REQUIREDA person has to act (a screening match that holds, an escalation)
READY_FOR_REVIEWEvery check finished; waiting for a decision
APPROVEDApproved by a decision
REJECTEDRejected by a decision
CANCELLEDAbandoned, or the country changed before submission

APPROVED and REJECTED are not final: a case can be reopened by a resubmission, a quality review, or a periodic re-review. Each opening is an episode (CREATED, RESUBMITTED, QA_REOPENED, PERIODIC_REVIEW). How to work each status: Reviewing KYB cases.

KYB moderation (ModerationResultStatus)​

The deprecated data.kyb object still carries the previous ModerationResultStatus vocabulary (ACQUIRING, PENDING_MODERATION, REVIEW_REQUIRED, SUCCESS, FAILED) for existing integrations. ENRICHING no longer exists. New integrations should read the case status from data.kybCase.status.

KYB event lifecycle​

Each case transition that reaches a webhook, with the canonical event and the legacy event value:

TransitionCanonical eventLegacy event
Submission (OPEN → PROCESSING)verification.kyb.submittedSUBMITTED
→ ACTION_REQUIREDverification.kyb.reviewREVIEW
→ READY_FOR_REVIEW because the case's own checks finishednonenone
→ READY_FOR_REVIEW for any other causeverification.kyb.reviewREVIEW
Reopened (→ PROCESSING after a decision)verification.kyb.reviewREVIEW
→ APPROVEDverification.kyb.completedCOMPLETED
→ REJECTEDverification.kyb.failedFAILED
→ CANCELLEDnonenone

Only completed means the business was approved. review is also sent when an already approved company is reopened, so do not treat it as a new company. How to act on each event is in the KYB guide.

KYB decision reason codes​

A decision's reasonCode classifies why it was taken:

CodeMeaning
CDD_INCOMPLETECustomer due diligence could not be completed
SANCTIONS_CONFIRMEDA sanctions match was confirmed
PEP_CONFIRMEDA PEP match was confirmed
ADVERSE_MEDIAAdverse media about the company or its people
OUTSIDE_RISK_APPETITEThe company is outside the organization's risk appetite
SUSPECTED_FRAUDFraud is suspected
APPLICANT_UNRESPONSIVEThe applicant did not answer requests
OTHERAnything else. The default for a decision that owes a reason and sends no code

KYB decision refusals​

When a decision is refused, the error carries its own errorTag (all 400):

errorTagMeaning
kyb_case_not_decidableThe case's status does not accept this decision
kyb_case_not_readyAn approval needs the case in READY_FOR_REVIEW
kyb_case_exception_requiredThe approval rests on something that needs a recorded exception first
kyb_case_rejecting_hitA confirmed match in a category the policy rejects stands on the case
kyb_case_reason_requiredThe decision needs a reason
kyb_case_decision_not_authorizedThe approval matrix does not let this caller take this decision
kyb_case_second_signature_requiredThe confirmation of a proposal must come from a person other than the proposer

Publishing a compliance policy draft that still has open questions returns 409 with compliance_policy_open_questions.

KYB screening match resolution​

OutcomeMeaning
FALSE_POSITIVEThe match is not the subject. Needs at least one discriminator. The only outcome that releases a match
TRUE_POSITIVEThe match is the subject
UNDETERMINEDNot decided yet; the match holds
CUSTOMER_CONTACTEDWaiting on the customer; the match holds

Discriminators: DATE_OF_BIRTH, NATIONALITY, TAX_OR_ID_NUMBER, ADDRESS, GENDER, OTHER (with a note).

KYB document-request types​

Every item in a KYB document-request payload carries a requestType:

TypeMeaning
STANDARDAsks the applicant to upload a named document
CLARIFICATIONAsks the applicant to re-confirm or update specific business-information fields
UBO_DECLARATIONReopens the beneficial-owner step for a fresh declaration when ownership discovery could not resolve one
DIRECTOR_DECLARATIONThe same for the director step
OWNERSHIP_CONFIRMATIONAsks the applicant to confirm or correct the owners and directors on file, when a case is reopened

The two declaration types require ownership discovery to be enabled on the step, and block approval while outstanding.

KYB document-request status​

StatusMeaning
PENDINGAwaiting the applicant
UPLOADEDSubmitted, under review
APPROVEDAccepted (terminal)
REJECTEDRejected (terminal, cannot be reopened)

KYB screening strategy​

Which population of natural persons a KYB case must identify and screen before approval: ubo (the default), directors, or uboAndDirectors. See KYB steps and configuration.

KYB due-diligence level​

Recorded on the case as SIMPLIFIED, STANDARD (the default), or ENHANCED. ENHANCED adds a financial-documents requirement. An approver can also record it on the decision, where the dueDiligenceLevel field takes simplified, standard, or enhanced.

PEP & sanctions screening (KYB)​

StatusMeaning
PENDINGNot started
IN_PROGRESSScreening in progress
REVIEWMatch requires review
SUCCESSCleared
FAILEDFailed

AML result moderation (data.aml.status)​

These values describe the moderation state carried by AML webhook payloads. They are separate from the KYB PEP and sanctions screening states above.

StatusMeaning
PENDINGWaiting for a moderation decision
APPROVEDThe AML result was approved
REJECTEDThe AML result was rejected
ESCALATEDThe AML result was 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.com — Environment 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.