GateReplay: deterministic decision replay
Re-run any stored decision under its recorded policy, or a candidate one, without re-querying a provider.
Start free sandboxTalk to us50 screenings a month free, no card.
On this page
GateReplay in simple terms
GateReplay re-runs any past decision as it was made, using the evidence stored at the time and the rules in force that day. You get the same answer, every time.
You can also ask a what-if question: what would today's rules have decided on that same evidence?
IN EVERYDAY TERMSThink of the video referee: same footage, same rulebook, same call, and anyone can watch the replay again.
What it does
GateReplay re-runs the pure policy evaluator over the stored signals, coverage and receipt inputs of a past screening and returns the original decision, the replayed one, and whether they match. Pass a different policy version to ask what a stricter or looser policy would have decided on the same evidence.
Because the policy engine is a pure function of stored inputs, the answer is deterministic. Providers are never re-queried: their answers change, and that would prove nothing about the day you decided.
Why a broker needs it
An examiner's question "which policy was in force on 12 March, and what did it conclude from what you knew then?" needs a single answer. Replay gives it in the terms the receipt recorded. It also makes policy changes safer, because GateBacktest runs this same what-if call across months of history.
How it works
POST /api/v1/replay with { screeningId, policyVersion? }. Built-in rule sets are versioned and frozen so old decisions stay reproducible. Receipts issued before replay support report inputs.completeness: "partial" instead of guessing missing inputs. The console offers the same replay on every screening.
What it does not do
Replay reproduces the policy step only. It does not re-verify the transaction on-chain, re-read issuer contracts or re-screen against today's lists. A fresh screening does that, and GateMonitor already re-checks listings. A replay cannot add inputs that were not recorded at the time.
API
POST /api/v1/replay
{ "screeningId": "…", "policyVersion": "tenant-v3" } // policyVersion optional
→ {
"original": { "decision": "REVIEW", "policyVersion": "tenant-v2", "firedRuleIds": [ "…" ], "decidedAt": "…" },
"replayed": { "decision": "BLOCK_PENDING_MLRO", "policyVersion": "tenant-v3", "firedRuleIds": [ "…" ] },
"reproduced": false, "mode": "what_if", "policySource": "requested_version",
"inputs": { "completeness": "full" | "partial", … }, "receiptSigned": true
}Full reference: /docs#replay · OpenAPI 3.1