Reference

Global Payouts — Dependency Map

Status: Living reference · Globalized Commerce settlement layer Scope: How an agentic purchase gets from authorized to money-in-a-bank, per market, and what each market depends on.

Companion to FUNCTIONAL-SPEC.md §"Glossary — Globalized Commerce". This document is the payouts dependency map: who is the Merchant of Record per market, in what currency it settles, and the legal/contract blocker that gates going local.


1. The core principle

**The Stripe API is global for acceptance, but a Stripe account is a single Merchant of Record (MoR).**

One Stripe account can charge a card (or a Google Pay / wallet token) from a shopper anywhere, but it settles in its home country's currency to a home-country bank. "Going global" therefore splits into two independent questions:

  1. Acceptance — can we charge this shopper's instrument? (Almost always yes, via the wallet → Stripe.)
  2. Payout / MoR — which legal entity receives the money, in what currency, to which bank? (Singular per Stripe account.)

The settlement layer models this explicitly so the truth is visible per market rather than assumed.


2. The dependency map

Reference account: yslnew — a US Stripe account (USD, payouts to a US bank, charges_enabled). Every non-US sale is therefore cross-border under the US entity until a per-region entity exists.

MARKET     MoR ENTITY (who is paid)        ACQUIRER       PAYOUT → BANK         DEPENDENCY / BLOCKER
──────────────────────────────────────────────────────────────────────────────────────────────────
US         yslnew (US) — LIVE              Stripe US      USD → US bank         ✅ none (clear proof_of_liveness)
CA/GB/EU   yslnew (US) — x-border          Stripe US      USD → US (FX)         ⚠ local-currency payout needs a CA/UK/EU Stripe entity
JP         yslnew (US) — x-border          Stripe US      USD → US (FX)         ⚠ JPY local + Konbini/PayPay needs a Stripe KK (JP entity)
AE         yslnew (US) — x-border          Stripe US      USD → US (FX)         ⚠ local needs a UAE Stripe entity (lone open ME market)
KR         Platform KR (Korean Biz ID)     Kakao Pay      KRW → KR bank         🔴 Kakao 가맹점 contract + 전자금융거래법 / escrow (구매안전)
CN / TW    Platform local entity           domestic PG    local → local bank    🔴 local entity + domestic PG contract
KP/IR/SY   —                               —              —                     ⛔ sanctioned — never

The three columns that drive everything: (1) the legal entity that is MoR, (2) local-currency payout vs USD cross-border, (3) the gating contract/entity.


3. MoR classes

The Payments operator screen (/embed/payments → Rails tab) labels every market with one of:

MoR classMeaningMarkets today
localSettled by a Stripe entity in that country, local-currency payoutUS
x-borderAccepted under the US entity, settled USD (FX) — works now, no local entityJP, DE, FR, CA, GB, AU, SG, AE
domesticOff-Stripe — a domestic acquirer (Kakao / PG) under a local entityKR, CN, TW
blockedSanctioned — never settableKP, IR, SY

/commerce/markets stamps this per market (mor), derived from the Stripe home country + the market registry's acquirer. It flips from x-border → local automatically the moment a regional Stripe entity is registered (acquirer stripe_xborder → stripe_native).


4. Per-region paths


5. How the architecture encodes the map


6. Cross-cutting dependencies (every market)

These gate all payouts regardless of region:


7. Wallet rails (the instrument layer)

Wallets are acceptance, not MoR — they tokenize and settle via the PSP socket:

WalletStatusSettles viaSurface
Google Paywired live (needs keys + Google Wallet Console)Stripe socket (gateway token)prominent — nests into OAuth
Apple PayscaffoldStripe socket (PKPaymentToken)prominent — iOS checkout
Samsung PayscaffoldStripe x-border / domestic PGsecondary — /payments
Kakao PayliveKakao (domestic, KR)KR
Cash App / Venmolive (manual)wallet deep-linkcross-platform

A Google Pay purchase in any market settles through whatever MoR that market resolves to in the map above.


8. Current status

The dependency that turns most ⚠/🟡 rows green is the same one each time: a legal entity in that market (a regional Stripe account, or a local merchant registration + domestic PG contract). The code is already shaped to flip on that.