Transfer lifecycle simulator
Step through exactly what the MerasPay A2A engine does for each scenario — sanctions checks, liquidity gates, 4-eyes approval, duplicate detection, and post-settlement returns. Fully client-side: no credentials required, no real money moves.
Seven scenarios covered
Happy path — settles in <100 ms
All checks pass. Ledger posts atomically; Bank B notified via webhook.
AM04 — insufficient liquidity
Creditor bank's nostro is below the transfer amount. Rejected upfront; rebalance queued.
Sanctions hit → ACWP hold
AML screen matches creditor name. Transfer held; compliance reviews; released or rejected.
High value → 4-eyes approval
Amount exceeds threshold. Auto-routed to a second admin before any ledger posting.
Duplicate UETR — idempotent replay
Retry arrives with the same UETR. Original pacs.002 replayed; no double-charge.
AC01 — incorrect account
Creditor account fails pre-validation at the creditor bank. Rejected before any ledger entry.
Post-settlement return (pacs.004)
Bank A initiates a return after settlement. Inverse ledger legs restore both nostros.
Interactive simulator
Select a scenario from the dropdown, then hit Play to auto-step through the timeline, or use Step to advance one event at a time. The pacs.008 envelope on the left reflects the request payload; the timeline on the right shows each engine decision with timing.
Interactive simulator
Step through real lifecycle events. Pure simulation — no API calls, no real money. Pick a scenario, then play or step.
Customer at Bank A pays a customer at Bank B. Sanctions clear; liquidity is sufficient; amount under approval threshold.
What the bank apps show
Mock UIs that mirror your customers' experience in real time.App in background
pacs.008 (JSON envelope)
{
"type": "pacs.008.001.08",
"msg_id": "BANKA-2026-05-24-000123",
"settlement": {
"method": "CLRG",
"clearing_system": "MERAS"
},
"transactions": [
{
"uetr": "11111111-2222-3333-4444-555555555555",
"end_to_end_id": "ORD-42",
"amount_minor": 50000,
"currency": "DJF",
"debtor": {
"name": "Alice Mohamed",
"account": "DJ81000010000000000000123"
},
"debtor_agent": "BSABDJJDXXX",
"creditor": {
"name": "Bob Hassan",
"account": "EAB-0001234567"
},
"creditor_agent": "EABKDJJDXXX",
"charge_bearer": "SLEV"
}
]
}Final outcome
Timeline
- 0msBank APOST /banking/v1/transfers
- 5msMerasPaymTLS cert fingerprint matched → bnk_xyz
- 6msMerasPayJWS signature verified
- 10msMerasPayIdempotency — UETR not seen before
- 12msMerasPayCreditor bank EABKDJJDXXX resolved + active
- 14msMerasPayPer-tx cap OK
- 18msMerasPayCreditor nostro liquidity sufficient
- 22msMerasPayAML — debtor clean
- 23msMerasPayAML — creditor clean
- 26msMerasPayBelow approval threshold
- 30msMerasPayLedger: DR nostro_at_A 50,000 / CR nostro_at_B 50,000
- 38msMerasPayHTTP 200 — pacs.002 ACSC
- 45msMerasPayWebhook a2a.transfer.succeeded dispatched
- 50msBank BBank B credits Bob's account
Reading the timeline
Status codes you will see
| Code | Meaning | HTTP | Scenarios |
|---|---|---|---|
| ACSC | Accepted — settlement completed | 200 | Happy path, duplicate replay |
| ACWP | Accepted without posting — pending review | 202 | Sanctions, high value |
| RJCT | Rejected | 200 | AM04, AC01, return |
| AM04 | Insufficient nostro liquidity | 200 | Liquidity scenario |
| AC01 | Incorrect account number | 200 | Bad account scenario |
| FF08 | Invalid end-to-end ID (sanctions hold) | 202 | Sanctions scenario |
Next steps
Test credentials, deterministic scenario keys, and BICs for connecting your real systems.
Conformance suite, mTLS cert provisioning, nostro funding, and go-live sign-off.
Full pacs.008, pacs.002, pacs.004, camt.056 schema with required/optional annotations.
Complete ISO 20022 reason code list with MerasPay-specific extensions.