A2A Banking

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.

0 / 14

What the bank apps show

Mock UIs that mirror your customers' experience in real time.
9:41●●● ▮
Bank A
Sender
Saba mobile
Alice Mohamed
New transfer
Amount
50,000 DJF
To
Bob Hassan
EAB-0001234567
At bank
EABKDJJDXXX
Confirm
Routed via Meras A2A
● SendHistoryAccountsMore
9:41●●● ▮
Bank B
Receiver
EAB online
Bob Hassan
💤

App in background

● SendHistoryAccountsMore

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

succeededACSC
Nostro impact
bnk_BSAB+50,000 DJF
bnk_EAB-50,000 DJF

Timeline

  1. 0msBank A
    POST /banking/v1/transfers
  2. 5msMerasPay
    mTLS cert fingerprint matched → bnk_xyz
  3. 6msMerasPay
    JWS signature verified
  4. 10msMerasPay
    Idempotency — UETR not seen before
  5. 12msMerasPay
    Creditor bank EABKDJJDXXX resolved + active
  6. 14msMerasPay
    Per-tx cap OK
  7. 18msMerasPay
    Creditor nostro liquidity sufficient
  8. 22msMerasPay
    AML — debtor clean
  9. 23msMerasPay
    AML — creditor clean
  10. 26msMerasPay
    Below approval threshold
  11. 30msMerasPay
    Ledger: DR nostro_at_A 50,000 / CR nostro_at_B 50,000
  12. 38msMerasPay
    HTTP 200 — pacs.002 ACSC
  13. 45msMerasPay
    Webhook a2a.transfer.succeeded dispatched
  14. 50msBank B
    Bank B credits Bob's account

Reading the timeline

Each row shows the actor (Bank A, MerasPay, Bank B, Admin / Compliance), the event label, an optional detail string (e.g. the actual nostro balance at decision time), and whether the step succeeded (green) or failed/held (red / amber). Steps not yet reached are dimmed.

Status codes you will see

CodeMeaningHTTPScenarios
ACSCAccepted — settlement completed200Happy path, duplicate replay
ACWPAccepted without posting — pending review202Sanctions, high value
RJCTRejected200AM04, AC01, return
AM04Insufficient nostro liquidity200Liquidity scenario
AC01Incorrect account number200Bad account scenario
FF08Invalid end-to-end ID (sanctions hold)202Sanctions scenario

Next steps