---
title: ISO 20022 Financial Message Parser & Validator API | SWIFT MX XML to JSON
description: Parse and validate SWIFT MX & FedNow ISO 20022 XML messages (pacs.008, pacs.002, pain.001, pain.002, camt.053, camt.054) into strongly-typed JSON.
canonical: https://stanzaapi.com/tools/iso20022-parser/
---

[Home](/)/[API Directory](/tools/)/ISO 20022 Financial Message Parser & Validator API

 <5ms Edge Latency99.9% SLA AvailableVerified: Sep 2026V8 Pure ComputeFintech & Banking

# ISO 20022 Financial Message Parser & Validator API

Transform complex SWIFT MX, SEPA, and FedNow ISO 20022 XML payloads into validated, hierarchical JSON in sub-5ms pure compute.

[Subscribe & Get API Key →](/tools/pricing)[⚡ Live Playground](#live-playground)[Specs (8)](#specifications)

 Interactive Edge Workbench

## ⚡ Live Pure-Compute Playground

 Test deterministic edge parsing with sub-2ms execution across 330+ Cloudflare V8 edge locations. Zero persistent storage, zero cold-starts, pure function $f(x)=y$.

32KB Demo Cap60 req/min Burst<2ms V8 ComputeZero Data Retention

input.xml0 B

 Reset

1

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.10"><FICdtTrf><GrpHdr><MsgId>MSG20260901-001</MsgId><CreDtTm>2026-09-01T08:30:00Z</CreDtTm><NbOfTxs>1</NbOfTxs><CtrlSum>2500.00</CtrlSum></GrpHdr></FICdtTrf></Document>

 RUN VALIDATION (<5ms) [ CHECKSUM: AWAITING RUN ]

output.jsondemo-ready

Status: Ready Copy

```
{
  "status": "Click RUN VALIDATION to execute on the Cloudflare edge..."
}
```

Sandbox Quota: Free Tier (50 reqs/mo) • Production keys from $29/mo[Get Free Sandbox Key →](/login?email=)

Need 512KB+ Payloads, High-Throughput & 99.9% Production SLA?

Direct API keys include pooled monthly quotas, zero cold-starts, and HIPAA BAA eligibility on the Mega tier.

[Get Production API Key →](/pricing)

## Key Capabilities & Performance Architecture

- ✓Native parsing for pacs.008, pacs.002, pain.001, pain.002, camt.053, and camt.054 financial XML schemas
- ✓Automatic Business Application Header (head.001 / BAH) extraction and routing reconciliation
- ✓Full extraction of debtor/creditor agents (BIC/SWIFT), accounts (IBAN/BBAN), and remittance data (UETR, EndToEndId)
- ✓Zero cold-starts, sub-5ms latency on Cloudflare Workers edge nodes across 300+ global data centers
- ✓ReDoS-safe linear SAX XML tokenization with strict 512KB payload limits

## Message Type Specifications (8 Specifications)

Explore full structural breakdowns, checksum logic, and field schemas for every supported format.

[ISO 20022 pacs.008 Credit Transfer Parser & Schema Validator — Parse interbank pacs.008 SWIFT MX payment messages into structured JSON with full UETR and agent routing extraction. — View Specification →](/tools/iso20022-parser/messages/pacs-008-credit-transfer)[ISO 20022 pacs.002 Payment Status Parser & Schema Validator — Parse payment status reports and rejection reason codes from pacs.002 SWIFT MX messages into JSON. — View Specification →](/tools/iso20022-parser/messages/pacs-002-payment-status)[ISO 20022 pain.001 Customer Credit Transfer Initiation Parser — Corporate treasury and ERP payment initiation parser converting pain.001 XML files into structured JSON. — View Specification →](/tools/iso20022-parser/messages/pain-001-customer-credit-transfer)[ISO 20022 pain.002 Customer Payment Status Report Parser — Parse bank acknowledgment and error feedback messages from pain.002 XML into clean JSON. — View Specification →](/tools/iso20022-parser/messages/pain-002-payment-status-report)[ISO 20022 camt.053 Bank-to-Customer Account Statement Parser — Parse end-of-day camt.053 electronic bank statement files, balances, and line item transactions into JSON. — View Specification →](/tools/iso20022-parser/messages/camt-053-bank-statement)[ISO 20022 camt.054 Bank-to-Customer Debit/Credit Notification Parser — Real-time intra-day camt.054 bank notification parser for immediate payment reconciliation in JSON. — View Specification →](/tools/iso20022-parser/messages/camt-054-debit-credit-notification)[Free Online ISO 20022 XML to JSON Converter & SWIFT MX Inspector — Instant, zero-install ISO 20022 XML to JSON converter running on Cloudflare Workers edge isolates. Parses pacs.008, pacs.002, pain.001, pain.002, camt.053, and camt.054 into typed JSON in sub-5ms. — View Specification →](/tools/iso20022-parser/converter/iso20022-to-json)[Free camt.053 Bank Statement XML to CSV & Excel Converter — Transform hierarchical ISO 20022 camt.053 bank-to-customer statements into flat, spreadsheet-ready CSV tables for financial reconciliation, treasury auditing, and accounting. — View Specification →](/tools/iso20022-parser/converter/camt-053-to-csv)

## API Endpoints & Request Signatures

| Method | Path | Description |
| --- | --- | --- |
| `POST` | `/api/v1/iso20022/parse` | Parse raw ISO 20022 XML into structured JSON |
| `POST` | `/api/v1/iso20022/validate` | Validate ISO 20022 XML schema structure and business rules |

## Sample Response JSON Payload

All endpoints deliver strongly-typed envelopes with deterministic parsing and performance metrics.

HTTP 200 Response PayloadCopy

```
{
  "success": true,
  "data": {
    "messageType": "pacs.008.001.08",
    "messageId": "MSG20260830-01",
    "creationDateTime": "2026-08-30T12:00:00Z",
    "numberOfTransactions": 1,
    "settlementAmount": {
      "currency": "EUR",
      "value": 150000
    },
    "uetr": "eb9b1248-8422-441a-8c85-80252f9b8830",
    "debtor": {
      "name": "ACME CORP",
      "iban": "DE89370400440532013000",
      "bic": "DBEUMM21XXX"
    },
    "creditor": {
      "name": "GLOBAL LOGISTICS SAS",
      "iban": "FR7630006000011234567890189",
      "bic": "BNPAFRPPXXX"
    }
  },
  "meta": {
    "latency_ms": 1.95,
    "version": "1.0.0"
  }
}
```

## Multi-Language Integration Code

Copy and paste ready-to-run snippets with your direct API credentials:

cURLCopy

```
curl --request POST \
  --url "https://api.stanzaapi.com/iso20022-parser/api/v1/iso20022/parse" \
  --header "Content-Type: application/json" \
  --header "x-api-key: YOUR_API_KEY" \
  --data '{
  "rawXml": "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08\"><FIToFICstmrCdtTrf><GrpHdr><MsgId>MSG20260830-01</MsgId><CreDtTm>2026-08-30T12:00:00Z</CreDtTm><NbOfTxs>1</NbOfTxs><SttlmInf><SttlmMtd>CLRG</SttlmMtd></SttlmInf></GrpHdr><CdtTrfTxInf><PmtId><EndToEndId>E2E-991823</EndToEndId><UETR>eb9b1248-8422-441a-8c85-80252f9b8830</UETR></PmtId><IntrBkSttlmAmt Ccy=\"EUR\">150000.00</IntrBkSttlmAmt><Dbtr><Nm>ACME CORP</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>DBEUMM21XXX</BICFI></FinInstnId></DbtrAgt><CdtrAgt><FinInstnId><BICFI>BNPAFRPPXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>GLOBAL LOGISTICS SAS</Nm></Cdtr><CdtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></CdtrAcct></CdtTrfTxInf></FIToFICstmrCdtTrf></Document>"
}'
```

Node.js (Fetch)Copy

```
const response = await fetch("https://api.stanzaapi.com/iso20022-parser/api/v1/iso20022/parse", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "x-api-key": process.env.API_KEY || "YOUR_API_KEY"
  },
  body: JSON.stringify({
  "rawXml": "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08\"><FIToFICstmrCdtTrf><GrpHdr><MsgId>MSG20260830-01</MsgId><CreDtTm>2026-08-30T12:00:00Z</CreDtTm><NbOfTxs>1</NbOfTxs><SttlmInf><SttlmMtd>CLRG</SttlmMtd></SttlmInf></GrpHdr><CdtTrfTxInf><PmtId><EndToEndId>E2E-991823</EndToEndId><UETR>eb9b1248-8422-441a-8c85-80252f9b8830</UETR></PmtId><IntrBkSttlmAmt Ccy=\"EUR\">150000.00</IntrBkSttlmAmt><Dbtr><Nm>ACME CORP</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>DBEUMM21XXX</BICFI></FinInstnId></DbtrAgt><CdtrAgt><FinInstnId><BICFI>BNPAFRPPXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>GLOBAL LOGISTICS SAS</Nm></Cdtr><CdtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></CdtrAcct></CdtTrfTxInf></FIToFICstmrCdtTrf></Document>"
})
});

const data = await response.json();
console.log(data);
```

Python (Requests)Copy

```
import requests
import json

url = "https://api.stanzaapi.com/iso20022-parser/api/v1/iso20022/parse"
headers = {
    "Content-Type": "application/json",
    "x-api-key": "YOUR_API_KEY"
}
payload = {
    "rawXml": "<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08\"><FIToFICstmrCdtTrf><GrpHdr><MsgId>MSG20260830-01</MsgId><CreDtTm>2026-08-30T12:00:00Z</CreDtTm><NbOfTxs>1</NbOfTxs><SttlmInf><SttlmMtd>CLRG</SttlmMtd></SttlmInf></GrpHdr><CdtTrfTxInf><PmtId><EndToEndId>E2E-991823</EndToEndId><UETR>eb9b1248-8422-441a-8c85-80252f9b8830</UETR></PmtId><IntrBkSttlmAmt Ccy=\"EUR\">150000.00</IntrBkSttlmAmt><Dbtr><Nm>ACME CORP</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>DBEUMM21XXX</BICFI></FinInstnId></DbtrAgt><CdtrAgt><FinInstnId><BICFI>BNPAFRPPXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>GLOBAL LOGISTICS SAS</Nm></Cdtr><CdtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></CdtrAcct></CdtTrfTxInf></FIToFICstmrCdtTrf></Document>"
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())
```

GoCopy

```
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	url := "https://api.stanzaapi.com/iso20022-parser/api/v1/iso20022/parse"
	payload := []byte(`{"rawXml":"<Document xmlns=\"urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08\"><FIToFICstmrCdtTrf><GrpHdr><MsgId>MSG20260830-01</MsgId><CreDtTm>2026-08-30T12:00:00Z</CreDtTm><NbOfTxs>1</NbOfTxs><SttlmInf><SttlmMtd>CLRG</SttlmMtd></SttlmInf></GrpHdr><CdtTrfTxInf><PmtId><EndToEndId>E2E-991823</EndToEndId><UETR>eb9b1248-8422-441a-8c85-80252f9b8830</UETR></PmtId><IntrBkSttlmAmt Ccy=\"EUR\">150000.00</IntrBkSttlmAmt><Dbtr><Nm>ACME CORP</Nm></Dbtr><DbtrAcct><Id><IBAN>DE89370400440532013000</IBAN></Id></DbtrAcct><DbtrAgt><FinInstnId><BICFI>DBEUMM21XXX</BICFI></FinInstnId></DbtrAgt><CdtrAgt><FinInstnId><BICFI>BNPAFRPPXXX</BICFI></FinInstnId></CdtrAgt><Cdtr><Nm>GLOBAL LOGISTICS SAS</Nm></Cdtr><CdtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></CdtrAcct></CdtTrfTxInf></FIToFICstmrCdtTrf></Document>"}`)

	req, _ := http.NewRequest("POST", url, bytes.NewBuffer(payload))
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("x-api-key", os.Getenv("API_KEY"))

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
```

## Frequently Asked Questions

Which ISO 20022 message types are supported?

The engine natively supports pacs.008 (Financial Institutional Customer Credit Transfer), pacs.002 (Payment Status Report), pain.001 (Customer Credit Transfer Initiation), pain.002 (Customer Payment Status), camt.053 (Bank-to-Customer Statement), and camt.054 (Debit/Credit Notification).

Does this handle FedNow and SEPA ISO 20022 implementations?

Yes. The parser adheres to SWIFT MX ISO 20022, EPC SEPA Rulebooks, and US Federal Reserve FedNow Service XML schemas.

How is the Unique End-to-End Transaction Reference (UETR) extracted?

The parser automatically locates and extracts RFC 4122 UUID v4 UETR tags from PmtId/UETR elements across payment messages for global SWIFT gpi tracking.

## Complementary Enterprise APIs

Seamlessly orchestrate data pipelines across adjacent financial, regulatory, and supply-chain protocols:

[SWIFT & ISO 13616 IBAN Validator → — Sanitize debtor and creditor account identifiers before generating pacs.008 payment instructions.](/tools/iban-validator/)[Peppol BIS Billing 3.0 → — Cross-reference automated payments against structured e-invoices and credit notes.](/tools/peppol-validator/)[Healthcare EDI ANSI X12 → — Parse and validate enterprise EDI transactions including 835 remittance and 837 claims.](/tools/x12-parser/)
