SWIFT MX/CBPR+ enforcement · 14 Nov 2026

The SWIFT structured-address mandate, end to end.

On November 14, 2026, SWIFT enforces the structured form of <PstlAdr> on cross-border MX flows. Debtor and creditor addresses must populate <StrtNm>, <BldgNb>, <PstCd>, <TwnNm>, <Ctry>. The unstructured <AdrLine> form is rejected. This page is the readiness hub: the summary, the engineer-grade checklist, the live lint, the bank-by-bank matrix, and the FAQ.

What changes

One field-shape change. Three downstream consequences.

The mandate itself is small: the unstructured <AdrLine> form of <PstlAdr> is no longer accepted; the structured form is required. The downstream consequences are three:

  • 01
    Field-presence enforcement. Every debtor and creditor party needs five fields populated: street_name, building_number, post_code, town_name, country. Missing any one is a reject.
  • 02
    Character-set folding. The SWIFT "x" character set is Latin-only. Accented characters in <Nm> and the structured-address fields require an ASCII-fold pass at emission.
  • 03
    Per-bank overlays. Several major banks add overlays — country-sub-division required for US / CA / DE, IBAN-country consistency check on CH, building-name when building-number is empty on HSBC.

Before · unstructured (post-mandate reject)

<PstlAdr>
  <AdrLine>Bahnhofstrasse 45</AdrLine>
  <AdrLine>8001 Zürich</AdrLine>
  <Ctry>CH</Ctry>
</PstlAdr>

After · structured + ASCII-folded (post-mandate accept)

<PstlAdr>
  <StrtNm>Bahnhofstrasse</StrtNm>
  <BldgNb>45</BldgNb>
  <PstCd>8001</PstCd>
  <TwnNm>Zurich</TwnNm>
  <Ctry>CH</Ctry>
</PstlAdr>

Bank-readiness checklist

Seven items. Six weeks of work.

The migration plan for a treasury team that already emits pain.001 today. Two weeks for a team that emits MT103 today.

  1. 01

    Inventory every <AdrLine> emission path

    grep your codebases for <AdrLine> occurrences inside pain.001 builders. Every occurrence is a future reject on November 14.

  2. 02

    Inventory every party block

    Dbtr, Cdtr, UltmtDbtr, UltmtCdtr, InitgPty. Each has its own <PstlAdr>. Each needs structured.

  3. 03

    Map your customer-data shape

    Is the address freeform, structured, or hybrid? If freeform, schedule a one-time backfill to structured form.

  4. 04

    Add a pre-emission lint

    Reject the build if any required structured field is empty. Use lib/address-lint.ts in the browser or POST /v1/address/restructure server-side.

  5. 05

    Add an ASCII-fold pass

    Latin-only constraint requires a fold over <Nm>, <StrtNm>, <TwnNm>, <CtrySubDvsn>. Pick a per-locale rule and document it.

  6. 06

    UAT against each bank

    Submit a structured-address pain.001 to each bank UAT environment before November 14. Capture pain.002 reasons, tune per-bank rule packs.

  7. 07

    Cut over with a shadow lane

    Run MT103 and pain.001 in parallel for the first week of production. Reconcile camt.053 inbound to confirm parity. Switch off MT103.

Live lint widget

Paste an address. See the verdict.

Pure local — same heuristic the agent-tier isocompliant.lint_address tool runs in your IDE. No network call. Algorithm at lib/address-lint.ts.

Pure local — does the address have the five ISO 20022 structured fields the SWIFT Nov 14, 2026 mandate requires? No network call. Algorithm at lib/address-lint.ts.

Try a sample

Verdict

Paste an address to lint it.

Embed the same widget on your own internal wiki — see the snippet below. For programmatic restructuring of freeform-to-structured at scale, use POST /v1/address/restructure.

Bank-by-bank readiness

Where each bank stands.

iso-compliant publishes a per-bank readiness page for each rule pack on the registry. Tier 1 (shipped) is empty today; Tier 2 (in development) is UBS Switzerland and PostFinance Switzerland; Tier 3 (planned) is the next ten. Every cell links to the per-bank page.

BankCountryISO profileStatusMandate
UBS SwitzerlandSwitzerlandpain.001.001.09.ch.03ShippedEnforced · Nov 14
PostFinance SwitzerlandSwitzerlandpain.001.001.09.ch.03In DevelopmentEnforced · Nov 14
Deutsche BankGermanypain.001.001.09 (CGI-MP v3)PlannedEnforced · Nov 14
BNP ParibasFrancepain.001.001.09 (Connexis Cash)PlannedEnforced · Nov 14
ING BankNetherlandspain.001.001.09 (SEPA + CGI-MP)PlannedEnforced · Nov 14
Crédit Agricole CIBFrancepain.001.001.09 (CGI-MP)PlannedEnforced · Nov 14
HSBC UKUnited Kingdompain.001.001.09 (CBPR+)PlannedEnforced · Nov 14
JPMorgan ChaseUnited Statespain.001.001.09 (CBPR+ + US ACH)PlannedEnforced · Nov 14
CitiUnited Statespain.001.001.09 (CitiConnect + CBPR+)PlannedEnforced · Nov 14
Bank of AmericaUnited Statespain.001.001.09 (CashPro + CBPR+)PlannedEnforced · Nov 14
DBS BankSingaporepain.001.001.09 (DBS IDEAL + CBPR+)PlannedEnforced · Nov 14
ANZAustraliapain.001.001.09 (Transactive Global + CBPR+)PlannedEnforced · Nov 14

Embed

"Is your bank ready?" widget snippet.

Drop this iframe into your internal wiki or your customer-facing payment-readiness portal. It loads the same widget that runs on this page — no API key, pure browser-side.

<iframe
  src="https://iso-compliant.com/structured-address?embed=1"
  width="100%"
  height="640"
  style="border:1px solid #e5e7eb;border-radius:12px"
  title="Structured-address lint by iso-compliant">
</iframe>

Embed mode strips the global nav, footer, and surrounding content so only the live lint widget renders inside your iframe — and the response is served with framing-permissive headers (Content-Security-Policy: frame-ancestors *). The widget remains pure browser-side (no API key, no network call).

FAQ

Answers to the eight questions buyers ask first.

What is the SWIFT structured-address mandate?

On November 14, 2026, SWIFT enforces the structured form of <PstlAdr> on cross-border MX (ISO 20022) payments. Debtor and creditor addresses must populate <StrtNm>, <BldgNb>, <PstCd>, <TwnNm>, <Ctry>. The unstructured <AdrLine> form is rejected at the SWIFT FINplus layer.

Which messages are affected?

Cross-border MX customer-credit-transfer initiation (pain.001.001.09), the inter-bank pacs.008.001.08, the status pacs.002.001.10, and the receivable camt.053 / camt.054. Customer-facing surfaces are pain.001 (outbound) and camt.053 (inbound).

Does it affect SEPA domestic flows?

The November 14 SWIFT cutover applies to cross-border MX. SEPA SCT / SDD have their own structured-address direction-of-travel — the 2026 EPC rulebook recommends structured, and full SEPA enforcement is expected in 2027 on a separate timeline.

What about US Fedwire and UK FPS?

US Fedwire migrated to ISO 20022 in March 2025 with a structured-address path under the Fed implementation guide. UK FPS migrates to ISO 20022 under the New Payments Architecture on a separate 2025–2027 timeline. Both rails are aligning on the same structured form, on different dates.

What is the character-set rule?

SWIFT MX / CBPR+ pins the "x" character set: Latin alphabet, digits, and a constrained punctuation list. Accented characters (ä, é, ñ) and non-Latin scripts (Cyrillic, Han, Arabic) are rejected. An ASCII-fold pass at emission is mandatory for any field that may contain non-Latin content.

How do I tell whether my pain.001 emitter is ready?

Search your codebase for occurrences of "<AdrLine>" in pain.001 emission. If none, you are likely already structured. If any, you have work to do. Use the live lint widget on this page to test individual addresses, or POST /v1/address/restructure to programmatically restructure freeform addresses at scale.

What if my CRM only has freeform addresses?

POST /v1/address/restructure takes a freeform address line (up to 280 chars) and emits the structured form with a confidence label (high / medium / low) and a list of caveats. Route high-confidence results to the pain.001 builder; route medium / low through a human-review queue.

Are bank-specific overlays a thing?

Yes. Several major banks layer additional rules on top of the SWIFT minimum — Deutsche Bank requires <CtrySubDvsn> for DE / US / CA addresses; UBS Switzerland adds an IBAN-country consistency check; HSBC requires <BldgNm> when <BldgNb> is empty. See the per-bank pages at /banks/[slug].

Ship the mandate, this quarter

Sandbox API key. Five minutes to first structured-address pain.001.

Point your existing SDK at api.iso-compliant.com and emit a mandate-compliant pain.001 today.