ISO 20022 Validation API Active
Enterprise payment message validation using real XSD schema checking via xmllint. Returns signed evidence packs with accept/reject decisions.
How It Works
1. Submit ISO 20022 XML message via POST
2. Server validates against official XSD schemas using xmllint
3. Returns evidence pack with decision, errors, SHA-256 hash, and TTL
4. Evidence is signed via ECDSA and independently verifiable
Endpoints
Validate an ISO 20022 XML message against its XSD schema.
Request
curl -X POST \ -H "Content-Type: application/xml" \ --data-binary @payment.xml \ "https://api.feedoracle.io/api/v3/iso20022/validate?type=pain.001.001.09"
Response (Valid)
{
"evidence_type": "ISO20022_SCHEMA_VALIDATION",
"methodology_version": "iso20022-validation/1.0.0",
"message_type": "pain.001.001.09",
"message_info": {
"name": "Customer Credit Transfer Initiation",
"category": "Payments Initiation"
},
"validation_result": {
"decision": "ACCEPTED",
"reason_code": "SCHEMA_VALID",
"errors": []
},
"integrity": {
"algorithm": "SHA-256",
"input_hash": "75301922bd518e..."
},
"generated_at": "2026-02-02T21:51:10Z",
"valid_until": "2026-02-02T21:56:10Z"
}
Response (Invalid)
{
"validation_result": {
"decision": "REJECTED",
"reason_code": "SCHEMA_INVALID",
"errors": [
"Line 6: Element NbOfTxs not expected. Expected: CreDtTm",
"Line 10: Value 'INVALID' not in set {'CHK', 'TRF'}",
"Line 11: Missing child element(s). Expected: Amt"
]
}
}
List all supported ISO 20022 message types.
Get a valid sample XML message for testing.
Service health check.
Supported Message Types
| Type | Name | Category | Status |
|---|---|---|---|
pain.001.001.09 | Customer Credit Transfer Initiation | Payments Initiation | Yes Live |
Additional types (pacs.008, camt.053) planned for future releases.
Validation Engine
Technical Stack
- Schema Engine:
xmllint(libxml2) - XSD Standard: ISO 20022 message definitions
- Namespace:
urn:iso:std:iso:20022:tech:xsd:{msg_type} - Timeout: 10 seconds per validation
- Max Errors: 5 per response
Reason Codes
| Code | Decision | Meaning |
|---|---|---|
SCHEMA_VALID | ACCEPTED | XML conforms to XSD schema |
SCHEMA_INVALID | REJECTED | XSD validation errors found |
SCHEMA_NOT_FOUND | REJECTED | No XSD available for message type |
VALIDATION_ERROR | REJECTED | Processing error during validation |
Evidence Integrity
- Input Hash: SHA-256 of the submitted XML content
- TTL: 300 seconds (5 minutes)
- Signature: ECDSA via
/signendpoint - Verification: Independent via JWKS at
/jwks
The input hash ensures the evidence pack is bound to the exact XML that was validated. Any modification invalidates the hash.
Enterprise Use Cases
DORA Compliance: Prove to regulators that payment messages are schema-validated with signed, time-bound evidence.
Vendor Risk Assessment: Verify that third-party payment systems produce standards-compliant messages.
Same Framework, Different Vertical
ISO 20022 validation uses the same Evidence Pack framework as all other FeedOracle verticals:
| Vertical | Evidence Type | Validation |
|---|---|---|
| Insurance | DORA_EVIDENCE | Third-party risk checks |
| Carbon | CARBON_DISCLOSURE | Art.66 sustainability data |
| Stablecoin | MICA_COMPLIANCE_CHECK | EU register verification |
| Payments | ISO20022_SCHEMA_VALIDATION | XSD schema + xmllint |
Generate → Verify → Force Fail. Same pattern everywhere.
Try It
# Validate a payment message curl -X POST -H "Content-Type: application/xml" \ --data-binary @payment.xml \ "https://api.feedoracle.io/api/v3/iso20022/validate" # Get sample XML curl https://api.feedoracle.io/api/v3/iso20022/sample/pain.001.001.09 # Interactive demo → ISO 20022 Validation Demo