Static snapshot. A frozen copy of the operator dashboard, safe to open anywhere. The buttons below are drawn but inert — recording a verification and being refused the release is a state change, so it runs on the live app: python src/demo.py --serve.

BaseDrift

payout pout_0063
Inbox · ← All decisions
Released
Routine payment — nothing was being changed
R2a_no_change_confirmed
Semantic layer read this as a payment follow-up, and the payout destination is confirmed unchanged against the vendor master. 389749432707 (payout fund account) is a known account for this vendor

Verification — what would release this

Ask the supplier to send Rs 1 from this account, and no other:
389749432707
chosen because 389749432707: 73 settled payout(s), added 2024-02-27 via onboarding, verified by onboarding_kyc
Two people, not one. Whoever records the verification outcome must not be whoever releases the payment. A compromised or complicit AP clerk who can do both approves their own request, and the control is theatre. This is enforced when the button is pressed, not only drawn on the screen.

What was checked

Supplier
VEND0009
Destination account
389749432707
Destination came from
The payout itself — the payout's own fund account, never the email [razorpay_fund_account]
Fund account
fa_0063
Amount
Rs 15,000.00
Change request
doc_b9d006d1fb24a03b
Correlated by
Named on the payout [explicit_note]
Evidence source
Replayed perfect extraction [replayed_perfect_extraction]
Semantic reading
PAYMENT_FOLLOWUP / NONE / NONE

Accounts on file for this supplier

AccountAddedVerifiedSettled
389749432707
AXIS0507186 · active
At onboarding
2024-02-27
Verified at onboarding (KYC)73
payouts
This paymentPrimary
869882785401
UTIB0006409 · active
Added because of an email request
2024-03-15
Verified by a rupee from the account18
payouts
503912487953
AXIS0398759 · active
Added because of an email request
2025-09-08
Verified by a callback2
payouts
237977812271
KKBK0205993 · active
Added through the supplier portal
2025-11-10
Verified at onboarding (KYC)28
payouts
815725785561
SBIN0522276 · active
Added because of an email request
2026-06-19
Never verified outside email0
payouts
Never established
An account is established once something outside email has confirmed it — onboarding checks, a rupee from the account, a callback — or once it has actually carried a payout. Being on file is not the same thing: an account can be on file because one email asked for it and nobody checked. The engine treats those as unconfirmed rather than as wrong, so they hold rather than reject.

Identity checks — against your supplier records

result
check
finding
OK
Destination account
account_continuity
389749432707 (payout fund account) is a known account for this vendor
from Payout, against our records

What this maps to at RazorpayX

POST /v1/payouts/pout_0063/approve
payout released from pending

Action plans. Nothing in this repository calls Razorpay.