ISO 20022 pain.001 Customer Credit Transfer Initiation Parser
Corporate treasury and ERP payment initiation parser converting pain.001 XML files into structured JSON.
Quick Technical Summary: Corporate treasury and ERP payment initiation parser converting pain.001 XML files into structured JSON. Implementation conforms to ISO 20022 XML Financial Schemas.
Specification & Structural Breakdown
The pain.001 (Customer Credit Transfer Initiation) message is used by corporations and SMEs to instruct their banks to execute single payments or payroll batches.
Extracts Payment Information (PmtInf) blocks with requested execution date (ReqdExctnDt), payment method, and charge bearer.
| XML Path | Description | Extracted JSON Field | Standard |
|---|---|---|---|
| CstmrCdtTrfInitn/GrpHdr/CtrlSum | Control Sum Total | controlSum | Monetary batch total |
| PmtInf/ReqdExctnDt/Dt | Requested Execution Date | executionDate | ISO Date YYYY-MM-DD |
| PmtInf/CdtTrfTxInf/Amt/InstdAmt | Instructed Amount | amount | Currency + Value |
Test ISO 20022 pain.001 Customer Credit Transfer Initiation Parser Live
Paste raw inputs up to 32KB and inspect deterministic parsed JSON in real-time across 330+ Cloudflare edge locations. Pure compute, zero cold-starts.
Parsed JSON Response Model
The edge microservice transforms input payloads into strongly-typed hierarchical JSON with zero cold starts:
{
"messageType": "pain.001.001.09",
"debtor": {
"name": "CORP HOLDINGS LTD",
"iban": "GB29NWBK60161331926819"
},
"batchTotal": {
"currency": "GBP",
"value": 45000,
"transactionCount": 12
},
"executionDate": "2026-09-01"
}
Copy-Paste Integration Code
Integrate this validator directly into your application using your production API key:
curl --request POST \
--url "https://iso-20022-financial-message-parser-validator.stanzaapi.com/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>"
}'
const response = await fetch("https://iso-20022-financial-message-parser-validator.stanzaapi.com/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);
import requests
import json
url = "https://iso-20022-financial-message-parser-validator.stanzaapi.com/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())
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
)
func main() {
url := "https://iso-20022-financial-message-parser-validator.stanzaapi.com/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 & Technical Notes
Yes, EPC SEPA pain.001.001.03 and .09 formats with structured creditor references (ISO 11649 RF Creditor Reference) are fully supported.
Related ISO 20022 Financial Message Parser & Validator API Formats
Explore sibling specifications and standards in the same developer cluster:
ISO 20022 pacs.008 FI to FI Customer Credit Transfer Parser
Parse interbank pacs.008 SWIFT MX payment messages into structured JSON with full UETR and agent routing extraction.
View Format →ISO 20022 pacs.002 Payment Status Report (Settlement Confirmation)
Parse payment status reports and rejection reason codes from pacs.002 SWIFT MX messages into JSON.
View Format →ISO 20022 pain.002 Customer Payment Status Report Parser
Parse bank acknowledgment and error feedback messages from pain.002 XML into clean JSON.
View Format →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 Format →