Cbpr+ Address requirements — check your payment xml free

Lint ISO 20022 pacs.008, pacs.009 and pain.001 XML for postal addresses CBPR+ will not accept: unstructured blocks, missing Ctry or TwnNm, and values duplicated between a structured field and AdrLine. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Install free

Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.

VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker Hub
ext install ReadyStack.cbpr-address-lint
npx @readystack/cbpr-address-lint <file>
npx @readystack/cbpr-address-lint --mcp

Team? One key for every ReadyStack linter, 5 seats, $149 once

Get the full rule table as a PDF
All 9 rules CBPR+ Structured Address Lint checks, each with its source and date, on printable pages you can hand to your team or auditor. We email it now, and once more only if a rule changes. No newsletter.

Get the full version $29

Exports a dated CBPR+ address audit file, CSV and Markdown, covering every ISO 20022 message in the workspace, with the rule citation per finding, so the evidence leaves the editor as a file you can hand to your correspondent bank, your migration programme or your auditor. $29 once, one licence key

One payment, one licence key for this tool. The key is shown right after payment.

A correspondent bank charges $15 to $40 to repair one cross-border payment by hand; the average fee for a rejected or repaired payment is reported at about $12.

Buy the full version — $29

Need more than this one? ReadyStack Pass opens all 462 files and 471 full versions — $29/month or $199/year. See the Pass →

ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

CBPR+ Structured Address Lint

Six of the nine CBPR+ postal-address rules are the ones that get a cross-border payment repaired by hand, and a single sample pacs.008 in this repository breaks all six - 13 findings, 9 of them errors, across all 4 party address blocks in one message. If you are a payments-integration developer at a bank, a PSP or a treasury software vendor, that file is the one your mapping code generates.

Here is the shape that does it:

<PstlAdr> <AdrLine>Unit 7, Canary Wharf Business Park</AdrLine> <AdrLine>London E14 5AB, United Kingdom</AdrLine> </PstlAdr>

That is a legal ISO 20022 postal address and it validates against the schema. It is also the one address shape CBPR+ is removing, and every agent on the route has to take it apart by hand.

The dates, and why your assistant gets them wrong

On 2025-11-22 the hybrid postal address option went live in CBPR+. Town and country go in dedicated elements, at most two AdrLine occurrences remain, and - this is the part that surprises people - a component that owns a structured element must not also be echoed in an address line. Removal of fully unstructured addresses was set for 2026-11-14. Then, on 2026-08-27, Swift deferred the payments-related Standards Release 2026 changes, including that removal, and said a revised timetable would be announced by December 2026.

So the cliff moved and the hybrid rules did not. A model trained before August 2026 tells you the November 2026 date is firm; a model trained after it tells you the whole thing is postponed. Both answers get you a repaired payment, because a malformed hybrid is rejected today.

What a malformed hybrid looks like

<StrtNm>Via Roma</StrtNm> <BldgNb>12</BldgNb> <PstCd>20121</PstCd> <TwnNm>Milano</TwnNm> <AdrLine>Via Roma 12, 20121 Milano</AdrLine> <Ctry>ITA</Ctry>

Run the linter over that block and it returns 5 errors: four dup_in_adrline, one for each of street, building number, postcode and town repeated inside the address line, plus one ctry_code because ITA is three letters and CountryCode is ISO 3166-1 alpha-2. Nothing here is a typo - somebody kept the legacy free-text address alongside the new structured one.

A third block - a Swiss agent address with no Ctry, an ampersand in Dept and the house number left inside StrtNm - returns 4 findings. Same tool, three different party blocks, three different answers: 1, 5 and 4.

The 9 rules

Six errors: unstructured_only, no_country, no_town, dup_in_adrline, adrline_max2, ctry_code. Three warnings: adrline_70 past Max70Text, charset for a character outside the permitted SWIFT set, and bldgnb_in_strtnm for a house number with no dedicated element.

What it costs to not run it

A correspondent bank charges $15 to $40 to repair one cross-border payment by hand, and the average fee for a rejected or repaired payment is reported at about $12. That is per payment. A bad address template does not produce one bad payment, it produces every payment it generates until somebody notices.

Free, and where the key starts

Free, with no key: open any pacs.008, pacs.009 or pain.001 and get every failing address block named, on the line where it fails, with the rule behind it. That is the whole job for one file and it finishes there.

The paid layer sits on a different axis - ownership. It exports a dated CBPR+ address audit, CSV and Markdown, for every message in the workspace, with the rule citation per finding, so the evidence leaves the editor as a file you can hand to your bank or your auditor. The same engine runs free in the browser, with nothing uploaded.

15 seconds — what it actually does

Questions people ask

What does CBPR+ Structured Address Lint actually do?

It reads the PstlAdr blocks in your ISO 20022 XML - pacs.008, pacs.009, pain.001 - and flags each one that breaks a CBPR+ postal-address rule, on the line where it breaks, with the rule behind it. 9 rules, 6 of them errors. It runs on the file in your editor and, with a key, across the whole workspace into a dated audit file.

Who is this for?

Payments-integration developers and ISO 20022 migration engineers at banks, PSPs and treasury software vendors - the people who write the mapping code or review what a code assistant generated. If you own a pacs.008 template, an ERP payment export, or the address mapping from a customer master file, this is your file.

Why doesn't schema validation catch this?

Because a malformed hybrid address is schema-valid. XSD checks types and lengths, so a block that repeats Milano in both TwnNm and an AdrLine passes. The CBPR+ usage guidelines sit above the schema: hybrid rules live since 2025-11-22, and the unstructured cutover deferred 2026-08-27. A general chatbot gets those two dates wrong in both directions.

What is free and what needs a licence key?

Free, with no key: lint the file open in your editor against all 9 rules and see every failing address block with its line number. That finishes the job for one file. The paid layer is ownership - a dated CSV and Markdown audit of every message in the workspace, written to disk as evidence you can hand over. $29 once.

What would this cost without the tool?

A correspondent bank charges $15 to $40 to repair one cross-border payment by hand, and the average fee for a rejected or repaired payment is reported at about $12. Those are per payment, and a bad address template repeats on every payment it generates. The extension is $29 once, and the file check is free.

Why not just ask ChatGPT or another AI chat?

A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. CBPR+ Structured Address Lint checks the file you open against 9 rules, each naming its legal or official basis, from a rule set dated 2026-09-20, and points at the exact line. For a filing, an audit or a client you need that dated result on your own files.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.

Embed this tool on your site (free)

Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.

 All embeddable tools

For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →