SEPA XML Validation

Validate SEPA XML files (pain.001 credit transfers and pain.008 direct debits): structure, IBANs, BICs, amounts and transaction counts.

Pay by wallet (x402) sepa-xml-validate

Example

Example answer
{
  "valid": false,
  "debtor": {
    "bic": null,
    "iban": null,
    "name": null
  },
  "errors": [
    {
      "path": "Document/@xmlns",
      "message": "Missing or invalid SEPA namespace. Expected urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 or pain.008.001.02."
    },
    {
      "path": "Document",
      "message": "Cannot determine SEPA message type. Expected pain.001 (credit transfer) or pain.008 (direct debit)."
    },
    {
      "path": "GrpHdr/MsgId",
      "message": "Missing MsgId (Message Identification)."
    },
    {
      "path": "GrpHdr/CreDtTm",
      "message": "Missing CreDtTm (Creation Date Time)."
    },
    {
      "path": "GrpHdr/NbOfTxs",
      "message": "Missing NbOfTxs (Number of Transactions)."
    },
    {
      "path": "PmtInf",
      "message": "No PmtInf (Payment Information) blocks found."
    }
  ],
  "schema": null,
  "currency": "EUR",
  "warnings": [],
  "message_id": null,
  "message_type": null,
  "total_amount": 0,
  "creation_date": null,
  "payment_count": 0,
  "creditor_count": 0
}

Inputs

FieldTypeRequiredWhat it is
xmlstringYesSEPA XML string

Output fields

How reliably each field appears in a successful answer.

FieldTypeAppears
validbooleanAlways (present in every successful answer)
errorsarrayAlways (present in every successful answer)
message_typestringAlways (present in every successful answer)
total_amountnumberAlways (present in every successful answer)
payment_countnumberAlways (present in every successful answer)

How to call it

The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.

# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
  -H "Authorization: Bearer $STRALE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "capability_slug": "sepa-xml-validate",
    "inputs": {
      "xml": "<root><item>test</item></root>"
    },
    "max_price_cents": 2
  }'

Limitations

  • Bank-specific XML extensions are not checked

    Validates against standard SEPA XML schemas (pain.001, pain.002) — bank-specific extensions or proprietary formats are not checked

    What to do instead: Submit a test file to your bank's validation endpoint to verify compatibility with their specific SEPA implementation