State lives with each provider
No single record says where the value is between legs. The answer is assembled by querying everyone.
Cross-Border & Remittance
The sender pays locally. Value is converted, moved and paid out locally somewhere else. Each leg runs on a different provider with its own states and timing. Orangepill governs the whole movement as one economic intent, then checks the outcome against what the rails actually did.
The problem
The pay-in provider reports success. The FX leg reports success. The payout provider times out. Each dashboard is correct about its own step, and none of them can answer the question the sender is asking: did the recipient get the money?
Typical architecture today
No single record says where the value is between legs. The answer is assembled by querying everyone.
Retries, timeouts and failover are written by hand for each provider pair, and each new corridor repeats the work.
Mismatches surface in a report hours or days later, long after someone has already retried or refunded.
Orangepill model
Economic Intent ≠ Settlement Rail.
The economic intent of a remittance is simple: deliver a defined value to a recipient at the destination. The rail is only how that intent gets fulfilled. Pay-in method, liquidity source, transfer route and payout provider can all change. The intent does not.
What must be true when the remittance is finished: how much value, in which currency, for which recipient, under which constraints. It is created once and owns the outcome.
The providers and rails chosen to fulfil the intent. If one fails, another can be tried, but only under rules that know what the earlier attempt did. Changing the rail is a new attempt, not a new remittance.
This separation is what makes adding a corridor or a payout provider a routing decision instead of a product rewrite. The product keeps asking for the same thing; the runtime decides how to deliver it.
Example workflow
Orchestration decides the journey: checks, approvals, which providers to use. Execution moves the value, leg by leg, and records each effect in the ledger. Verification compares that record with what the providers report. Resolve only engages when the two cannot be reconciled from the evidence available.
| Stage | What is recorded | What can go wrong | How it is governed |
|---|---|---|---|
| Local pay-in | Collection attempt, provider reference, ledger entry for funds received | Pending, reversed or late confirmation | Conversion proceeds on established funds, or under an explicit policy exception |
| FX / liquidity | The rate applied and the conversion as its own ledger effect | Quote expiry, insufficient liquidity at the destination | Re-quote or hold under policy; the intent stays open |
| Transfer | Each attempt toward the destination and its provider reference | Timeout with unknown outcome | Attempt stays in an explicit ambiguous state until finality is established |
| Local payout | Payout attempts per provider, linked to the same intent | Rejection, timeout, return after payout | Failover only when the prior attempt can no longer pay; returns recorded against the original intent |
| Verify | Comparison of ledger and execution record with provider reports | Mismatched amount, status or timing | Divergence is flagged, not silently overwritten |
| Resolve | A case with evidence, decision and verification | Finality unclear, records disagree | Investigate → Establish → Decide → Verify; Continue · Wait · Remediate · Escalate |
When a leg goes wrong
The pay-in is confirmed and the conversion has executed. The payout request to Provider A times out. Sending the same payout through Provider B right away could pay the recipient twice. Refunding the sender could leave them paid and refunded. Neither is safe until someone knows what Provider A did.
The remittance never pretends to be complete or failed while the evidence says neither. It stays explicitly unresolved, with every attempt and ledger effect attached, until a safe disposition can be established.
Payout operations
The last leg is the one the recipient sees, and the one most exposed to local rail behaviour. The same controls apply whether the payout ends a remittance or runs on its own, such as a batch of disbursements.
Provider selection takes earlier attempts into account. A new route is never chosen as if nothing had happened.
Balances per currency and per provider come from the ledger, so you can see what can be paid where before sending.
A repeated instruction, a crashed worker or a replayed webhook does not produce a second payout.
What exists for every remittance
The ledger says where value is. Proof of Record explains how it got there. When a sender asks what happened, support answers from that record instead of three provider portals.
Capabilities used
Holds the remittance as one lifecycle across every leg, so a retry or rail change is another attempt under the same intent rather than a second remittance.
Explore Execution →Chooses pay-in, FX and payout providers under policy, and only fails over when the previous attempt can no longer create an effect.
Explore Multi-Rail Orchestration →Records each leg as ledger entries, so in-flight value and per-currency balances are derived rather than estimated.
Explore Wallet & Ledger →Takes over when a leg ends in an unknown or mismatched state, and decides what can safely happen next.
Explore Resolve →Outcome
Corridor, currency and provider coverage depends on the providers connected for your program. We confirm it during architecture mapping rather than listing it here.
Tell us how pay-in, FX and payout are connected today. We will map where the runtime would hold the intent and where your current flow can end up in an unknown state.