Skip to main content

Event Overview

Event Type: VERIFICATION_STATUS Category: Payment Verification Description: The verdict on a filed verification — approved or rejected A filed verification is reviewed by EximPe. This webhook carries the conclusion of that review: the verdict, the reviewer’s comment, and the state of every document slot on the verification at that moment. It is the event that closes the loop the ask opened — LRS_VERIFICATION_NEEDED on an LRS payment, VERIFICATION_NEEDED on a B2B services payment. Those events say what a payment owes; this one says what came of sending it. VERIFICATION_STATUS fires on an approval and on a rejection, in the same shape. verification_status is the only key that tells them apart.
A send-back is not a verdict, and does not arrive here. When a review sends a verification back for changes, the payment keeps owing something, so the ask is raised again with the reviewer’s comment: LRS_VERIFICATION_NEEDED on an LRS payment, VERIFICATION_NEEDED on a B2B services payment. VERIFICATION_STATUS is only ever APPROVED or REJECTED. A rejection is final: the payment moves to NOT_APPLICABLE and a full refund is raised, so read settlement_status before you send anything after a REJECTED verdict.

When the webhook is sent

  1. A review approves the verification. verification_status is APPROVED and message is an empty string — an approval has nothing to say beyond itself.
  2. A review rejects the verification. verification_status is REJECTED and message carries the reviewer’s comment verbatim.
The same two events are raised for an LRS, a B2B services and a B2B goods payment. Where each review outcome is announced: The webhook is created only if your merchant account (or parent, for sub-merchants) has a webhook URL configured.

Delivery Details

Delivery: immediate, not batched.

Headers

Verifying. The body is serialised once and those exact bytes are both sent and signed, so hashing the raw request body as received is correct — do not re-serialise the parsed JSON first. Both signature headers are sent. Verify V2 (recommended) or V1 — see Verifying webhooks.

Payload Schema

The payment, the verdict, the reviewer’s comment, and every document slot on the verification. data holds exactly five keys on both verdicts.

Field Specifications

string
required
Always "VERIFICATION_STATUS" for this webhook event
string
required
UTC, no timezone suffix, e.g. "2026-09-09T11:42:06.318204". Parse tolerantly — fractional seconds can be absent.
string
required
API version of your account, e.g. "3.0.0"
string
required
Unique ID of this event (a UUID, not an ordering counter). A retry resends the same value; use it to de-duplicate.
object
required
The payment, the verdict, and the documents it was reached on

documents is the whole slate

documents lists every active document slot on the verification, not only the ones that failed.
  • On a rejection, it shows what failed alongside what passed — so a payer is asked to replace one file, not all of them.
  • On an approval, it is the record of what was accepted and the state each document ended in.
Two things never appear:
  • Superseded documents. Re-uploading a document gives you a new ref and the newer row supersedes the older; only the current row for each slot is listed.
  • The files themselves. No document file, URL or download link is ever included in a webhook payload. ref identifies the upload; it is not a link to it.
A slot listed here is a slot on this verification. For the whole checklist, including fields, optional items and what is still outstanding, call Get Verification Requirements (LRS or B2B services), which reports the same three document keys alongside satisfied and provided.

What to do when you receive it

1

Respond 2xx, then verify the signature

Acknowledge as soon as you have accepted the payload, so the delivery is not retried, and verify the signature against the raw body before acting on it.
2

Route on verification_status

APPROVED and REJECTED are the only two values. Treat anything else as unknown and log it rather than guessing.
3

On APPROVED, record it and stop chasing the payer

Nothing further is needed from either of you. PAYMENT_SETTLED is the next event in this payment’s life.
4

On REJECTED, show what failed

data.message is the verdict on the verification; each entry with doc_status: "REJECTED" carries the reason for that document in rejection_reason. Entries that read VERIFIED need nothing, so do not ask the payer to re-send them.
5

Confirm where the payment stands

Get Verification Requirements — LRS or B2B services — reports settlement_status, which says whether sending anything further is still possible.

LRS_VERIFICATION_NEEDED

What a payment owes — including after a send-back.

VERIFICATION_NEEDED

What a B2B services payment owes — including after a send-back.

Get Verification Requirements

The whole set, on demand, with settlement_status.

Upload Document

Where a ref comes from, and how to replace a file.

PAYMENT_SETTLED

The next event after an approval.