Architecture

Partner integration


What a sub-agent can realistically obtain, and why the project must never wait for an API.

This is the most uncertain part of the project, and the only one we cannot settle on our own. This page sets out what we know, what we do not know yet, and the architecture that lets us start without waiting for the answer.

A shift of perspective

The Western Union, Ria and MoneyGram APIs are not designed for sub-agents. They address fintechs and banks wanting to embed money transfer into their own product — not a counter wanting its own operations back.

The real chain is this:

Network (Western Union, Ria…)
        ↓
Master agent / bank  ← this is where the network contract sits
        ↓
Sub-agent  ← this is where you are

You most likely have no direct contractual relationship with the network. You have one with a bank or master agent, who holds the contract.

The first step, the cheapest and the fastest. Ask your master agent for the daily settlement file — the detailed statement of your operations, in CSV or Excel. That document already exists, it is owed to you, and it is enough to feed AiO. Days rather than months. In most cases this single step makes the API unnecessary.

The four access levels

One operations module, driven by a configuration record per partner. The level reached depends on what the partner grants, and it can change over the product's life through configuration.

What the teller actually does

  1. 1

    The teller enters on the partner terminal

  2. 2

    AiO pulls the operation right after

  3. 3

    Everything is pre-filled automatically

  4. 4

    The teller confirms the cash movement

Re-keying left

Near zero

Regulatory exposure

No exposure

Build effort

Medium

Realistic access

Plausible

The sweet spot. You get most of the benefit with none of level 1's constraints — because reading your own data is not a regulated activity.

What we will not do

Scraping the partner portals. Technically possible, but it breaks on every interface change and is generally barred by agency contracts — it would put your agent status at risk. You wrote “or other authorised methods” yourself; we read that the same way.

The last two levels depend on no external authorisation. Your principal agent already sends you a daily statement: that is the raw material for import. Version 1 is fully functional with those two levels alone, for all six partners — which is what lets the project reach completion without depending on a third party's calendar.

What is configurable, and what is not

The phrase "adding a partner means filling in a form" is true in one case out of two. Here is the exact distinction.

SituationTreatment
Protocol, exchange format and authentication already supported by the moduleConfiguration — no specific development
New file format, known protocolAdding a field-mapping profile — assisted configuration, without touching the core
Proprietary protocol, signature or certification path not yet supportedAn adapter is built, quoted and scheduled separately if it falls outside the scope settled at framing

The scope frozen at framing states, partner by partner, which of these three situations each falls into, based on the information available at that time.

Read or write: the distinction that changes everything

Do not ask for “an API”. Ask which one — there are two natures, and they commit you to very different things.

A read API hands back your own operations. Reading your own data is not a regulated activity: no exposure, no new liability.

A write API creates the transfer. AiO then stops recording what happened elsewhere: it makes it happen. Three things shift.

Regulatory status. In the CEMAC zone, the reform under way explicitly creates a category of payment service operators covering payment initiation, subject to approval by the national monetary authority after COBAC opinion. If AiO initiates transactions, the question “who is the licensed operator” arises immediately. It does not arise at all while AiO merely records.

Liability. Today, if the partner terminal fails, that is the partner's problem. If AiO initiates and fails midway, it is ours — and yours. Cash out of the till with no reference issued is real money to be found.

The technical difficulty changes order of magnitude. The concrete problem:

AiO calls the API. The network drops. Did the operation go through or not?

It went through and you retry → double transfer, money genuinely lost. It did not and you do not retry → the customer paid, nothing was sent.

You cannot guess. You need an idempotency key accepted by the partner, a status query endpoint, and a reconciliation loop that settles the uncertain cases. This is the hardest part of payments engineering — and it does not exist at all in read-only mode.

Our recommendation. Even if a write API became available, we would not put it in version 1. The read API already removes most of the re-keying for a fraction of the risk. Write access remains possible afterwards, as a separate decision — legal as much as technical.

Where each partner stands

The state of each partner programme, to the best of our knowledge today. To be confirmed contract in hand.

PartnerProgrammeEntry point
Western UnionFormal Partnership Program: enrolment, API key, dedicated sandboxdeveloper.westernunion.com · wuconnect@westernunion.com
MoneyGramContract and partner/agent agreement signed before any testingdeveloper.moneygram.com
Ria (Euronet)Full API or turnkey hosted solutionBecome a digital partner
Small World⚠️ See below—
JUBA ExpressRegional player, no public programme identifiedDirect commercial contact
KORIRegional player, no public programme identifiedDirect commercial contact
Small World has ceased trading. Small World Financial Services entered special administration on 18 June 2024 and stopped receiving and processing operations through its agents, branches, websites and applications. Around 6,000 outlets were affected in the UK.This partner appears on your list. The corresponding configuration record is delivered and the module supports it; whether an exploitable flow exists, however, does not depend on us. If you wish to substitute another network, the substitution is made at framing, with no impact on the price.

What an API partnership application requires

If the API route is pursued, here is what will be asked — and it explains why it is rarely within reach of a counter:

  • Registered legal entity, with articles and accounts
  • Regulatory status: licensed payment institution, or partnership with a licensed one
  • Written AML/CFT programme and a named compliance officer
  • Due diligence pack: beneficial owners, governance, insurance
  • Volume commitments — this is a commercial partnership, not a subscription
  • Technical certification: sandbox → certification → production

Realistic timeline: 3 to 9 months, dominated by legal and compliance, not by engineering.

The sequence we recommend

1. Ask the master agent for the statements. No cost, a few days, solves most of the need.

2. Re-read every agency contract. What it permits regarding exports and third-party processing is written there — and so are the clauses barring scraping.

3. Start the API applications in parallel, without depending on them. If they succeed, we add a connector — a short job, since the module is already in place.

This is exactly why the architecture provides four levels. The project must never wait for an API. It starts on statements, and any access obtained later is a gain, not a condition.

Where exceptions end up

An imported statement is not a reconciled statement. Whatever does not match lands in the same place: the exception queue. It is the screen nobody designs and everybody uses — the branch manager's screen at 6 p.m., when the count does not come out right.

Select a row: the three reconciliation sources appear, and the diverging one is highlighted. That is the whole job of the system — saying not "there is a discrepancy" but "here is which of the three sources disagrees with the other two".

Exception queue

2 untreated
RefBranchPartnerGapAgeStatus
EX-2418AG01Western Union−5 0004 h Untreated
EX-2417AG03Ria+12 5009 h Untreated
EX-2415AG01MoneyGram−11 j In progress
EX-2411AG02JUBA−80 0002 j In progress
EX-2406AG03KORI03 j Resolved

EX-2418 · AG01 · Western Union

Counter posting250 000
Partner statement250 000
Cash count245 000

Reading

The till counts 5,000 less than the posting. The partner statement confirms the posting: the gap is physical, not accounting.

A day with an untreated exception does not close.

What we commit to

On a subject half of which is outside our control, the commitment must be precise. Here it is, as it appears in the dossier.

  1. Deliver the module and its exception queue for all six partners, on statement import and assisted entry.
  2. Supply the access request pack for each operator — recipient, exact name of the access, documents required — so your agency can start the process without delay.
  3. Connect one API whose access is opened and documented before the end of month 6, provided its protocol falls into the first two situations above. Included in the price.
  4. Quote separately for further connections, or those opened after month 6. With the module already in place, those connections are short.

In version 1, no real-time connection is promised: an agent starting out does not obtain API access in the first year, and an access opened mid-project could not be built, certified by the network and accepted within six months. The connection therefore belongs to phase 3, triggered when a network opens one to you. Writing it into V1 would be promising a calendar that neither you nor we control.

The deliverable that unblocks connection pricing: an anonymised export of one day of operations, for each partner. It will tell us exactly which fields the statement provides — therefore exactly what the teller will not have to re-key.