Production is locked until a market agreement is recorded

Markets, money and addresses

Six markets, six currencies, nine rails and three address styles — and why none of them come from the device locale.

Platform9 min

A market is the unit of configuration: it decides the currency, the rails, the address style, the OTP channels, the timezone and the tax model. A customer in Luanda with an English phone still sees AOA, because the market decides and the device does not.

The six markets

Markets, currencies, cells and rails
marketCityCurrencyCellAddressRails
pt-lisLisboaEUReu-weststreetMB Way, card, cash
ao-ladLuandaAOAaf-southlandmarkMulticaixa Express, Unitel Money, cash
mz-mpmMaputoMZNaf-southlandmarkM-Pesa, e-Mola, cash
cv-raiPraiaCVEeu-westmixedVinti4, cash
gw-oxbBissauXOFeu-westlandmarkOrange Money, cash
st-tmsSão ToméSTNeu-westlandmarkcash

Money is always two values

An amount is an integer in the minor unit plus a currency code. There is no float anywhere in the API, and no amount without a currency beside it.

GET /v1/markets
[  {    "id": "ao-lad", "currency": "AOA",    "minor_exponent": 2, "symbol": "Kz", "symbol_position": "after"  },  {    "id": "cv-rai", "currency": "CVE",    "minor_exponent": 2, "symbol": "$", "symbol_position": "cifrao"  },  {    "id": "gw-oxb", "currency": "XOF",    "minor_exponent": 0, "symbol": "FCFA", "symbol_position": "after"  }]
  • Praia writes the cifrão as the decimal separator: 99000 CVE is 990$00, not 990,00$.
  • Bissau has no minor unit: minor_exponent is 0 and 3000 XOF is 3 000 FCFA.
  • Angola, Mozambique, Bissau and São Tomé hide zero decimals; Lisboa and Praia keep them.
  • Thousands are a narrow no-break space in every lusophone market, and the symbol is glued to the number.

Paying from one market, delivering in another

A diaspora order is paid in the payer's market and fulfilled in the recipient's. Both amounts travel, the payer's first, with the rate and the instant it was taken. The recipient never sees the payer's currency.

cross_market on a Praia delivery paid in Lisboa
{  "currency": "CVE",  "totals": { "total_minor": 99000 },  "cross_market": {    "payer_market_id": "pt-lis",    "payer_currency": "EUR",    "charged_minor": 898,    "fx_rate": 110.265,    "fx_snapshot_at": "2026-10-06T18:02:15+01:00",    "recipient_name": "Joana Mendes (mãe)"  }}

Address styles

Address style per market and what is required
address_styleMarketsRequired
landmarkLuanda, Maputo, Bissau, São Tomébairro + landmark + phone. A street is optional metadata.
mixedPraiabairro + phone; a landmark is strongly recommended.
streetLisboastreet + number + postcode + phone.

Cells

Markets are grouped into cells that fail independently. eu-west carries Lisboa, Praia, Bissau and São Tomé; af-south carries Luanda and Maputo. A cell in island mode keeps taking orders and reconciles afterwards, and the status page reports per cell, not per region.

Keep going