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:
- 01Field-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.
- 02Character-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. - 03Per-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.
- 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.
- 02
Inventory every party block
Dbtr, Cdtr, UltmtDbtr, UltmtCdtr, InitgPty. Each has its own <PstlAdr>. Each needs structured.
- 03
Map your customer-data shape
Is the address freeform, structured, or hybrid? If freeform, schedule a one-time backfill to structured form.
- 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.
- 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.
- 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.
- 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.
| Bank | Country | ISO profile | Status | Mandate |
|---|---|---|---|---|
| UBS Switzerland | Switzerland | pain.001.001.09.ch.03 | Shipped | Enforced · Nov 14 |
| PostFinance Switzerland | Switzerland | pain.001.001.09.ch.03 | In Development | Enforced · Nov 14 |
| Deutsche Bank | Germany | pain.001.001.09 (CGI-MP v3) | Planned | Enforced · Nov 14 |
| BNP Paribas | France | pain.001.001.09 (Connexis Cash) | Planned | Enforced · Nov 14 |
| ING Bank | Netherlands | pain.001.001.09 (SEPA + CGI-MP) | Planned | Enforced · Nov 14 |
| Crédit Agricole CIB | France | pain.001.001.09 (CGI-MP) | Planned | Enforced · Nov 14 |
| HSBC UK | United Kingdom | pain.001.001.09 (CBPR+) | Planned | Enforced · Nov 14 |
| JPMorgan Chase | United States | pain.001.001.09 (CBPR+ + US ACH) | Planned | Enforced · Nov 14 |
| Citi | United States | pain.001.001.09 (CitiConnect + CBPR+) | Planned | Enforced · Nov 14 |
| Bank of America | United States | pain.001.001.09 (CashPro + CBPR+) | Planned | Enforced · Nov 14 |
| DBS Bank | Singapore | pain.001.001.09 (DBS IDEAL + CBPR+) | Planned | Enforced · Nov 14 |
| ANZ | Australia | pain.001.001.09 (Transactive Global + CBPR+) | Planned | Enforced · 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.