Skip to main content

Event Overview

Event Type: VERIFICATION_STATUS Category: Payment Verification Description: The verdict on a filed LRS verification — approved or rejected A filed verification is reviewed by us. 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 LRS_VERIFICATION_NEEDED opened. That event says what a payment owes; this one says what came of sending it.
Two verdicts, one event. 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 goes on owing something — so it is LRS_VERIFICATION_NEEDED that is raised, carrying the reviewer’s comment and the outstanding list. VERIFICATION_STATUS is only ever APPROVED or REJECTED.

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 webhook is created only if your merchant account (or parent, for sub-merchants) has an active API credential with a non-empty webhook URL.
There is no sandbox trigger for this event. It is raised by a review of a verification you filed, and a review is not something a simulator performs. Integrate the handler against the payloads on this page; you will see your first real delivery when a filed verification is reviewed.

Delivery Details

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. Prefer V2: the timestamp is inside the signed material, so a captured delivery cannot be replayed with a fresh one. V1 stays alongside it so nobody has to migrate on our schedule.

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. These are complete, unedited payloads — nothing is trimmed.
An approval’s message is an empty string, not a sentence and not null. The key is always present; on an approval there is nothing for a reviewer to say that the verdict does not already say.

Field Specifications

string
required
Always "VERIFICATION_STATUS" for this webhook event
string
required
ISO 8601 datetime when the webhook event was created, in UTC and without an offset suffix.Example: "2026-09-09T11:42:06.318204"
string
required
Envelope version (e.g. “3.0.0”)
string
required
Unique identifier for this webhook event (UUID), useful for idempotency.It is an identifier, not a sequence. The value is random and carries no order — see Ordering two verdicts.
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, which reports the same three document keys alongside satisfied and provided.

Ordering two verdicts

A payment can be reviewed more than once, so two VERIFICATION_STATUS deliveries can name the same payment_id. Order them by event_time on the envelope. It is the moment the event was created, and it is the only key on the payload that orders anything.
sequence_number does not order events. Despite the name it is a random unique identifier — a UUID — minted per event. Use it for idempotency, to recognise a redelivery of an event you already processed. Comparing two of them tells you nothing about which verdict came first.
Deliveries can also arrive out of order after a retry. Keep the verdict with the latest event_time and discard an older one that lands after it, rather than letting whatever arrived last win.

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 — asking a payer to re-send those is asking for work already done.
5

Confirm where the payment stands

Get Verification Requirements reports settlement_status, which says whether sending anything further is still possible.
A rejection here is not the same as a send-back. A send-back keeps the payment in ACTION_REQUIRED and re-raises LRS_VERIFICATION_NEEDED with the outstanding list — that is the event to act on when you are being asked for a replacement. Read settlement_status before you send anything after a REJECTED verdict.

LRS_VERIFICATION_NEEDED

What a 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.