---
title: "ARS — Address Resolution Service"
url: "https://dev.ionova.ai/apis/ars-address-resolution-service-4/versions/fdd2c316-7f84-4f04-8bb7-64e9bf97893b"
---

# ARS — Address Resolution Service

OpenAPI specification document.

```json
{"openapi":"3.0.3","info":{"title":"ARS — Address Resolution Service","description":"The Address Resolution Service (ARS) v4.3 provides ISO 20022 postal address\nvalidation, classification, conversion, rendering, and compliance assessment\nacross 24 endpoints organised into 5 functional layers.\n\n## Payment Scheme Coverage\nARS supports 11 payment schemes across SEPA, cross-border, and high-value\npayment systems:\n\n| Category | Schemes | Scope |\n|----------|---------|-------|\n| **SEPA** | SCT, SCT_INST, SDD_CORE, SDD_B2B, OCT_INST | 41 SEPA countries. Subject to the 22 Nov 2026 EPC address-format cutover. |\n| **Cross-border** | CBPRPLUS | SWIFT CBPR+ global correspondent banking. |\n| **High-value / RTGS** | CHAPS, T2, EURO1, FEDWIRE | UK, Eurozone, US high-value payment systems. |\n| **Other** | OTHER | Extensible for additional domestic/regional schemes. |\n\n## Three Editions, Four Market Segments\nThe same 24-endpoint API is packaged into three named editions, each\ntargeting specific market segments with segment-specific defaults,\nassurance levels, and positioning:\n\n| Edition | Market Segment | Core Challenge |\n|---------|---------------|----------------|\n| **ioNova ARS Treasury** | Corporate End-Users | Ensure every outgoing address is compliant before the bank sees it. Clean beneficiary data at source. |\n| **ioNova ARS Banking** | Corporate Banks | Gate-keep inbound payment files from clients AND correct addresses inline before entering the inter-PSP space. |\n| **ioNova ARS Transact** | Correspondent FIs, Transaction Banks | Correct non-compliant addresses in transit without becoming a bottleneck in the payment chain. Provide compliance infrastructure to FI clients AND enforce address quality at the network boundary. |\n\nAll three editions use the identical API surface. The edition determines\ndefault configuration (scheme, assurance level) — not which endpoints are\navailable.\n\n## AutoCorrect vs PreCheck\n| Pattern | Endpoints | Decision values | Use case |\n|---------|-----------|-----------------|----------|\n| **AutoCorrect** | Convert (EP-04, EP-12) | ACCEPT, REJECT, PARTIAL_SUCCESS | Correct addresses during processing — postal verification, entity extraction, normalisation. Start here. |\n| **PreCheck** | Check (EP-03, EP-10) | COMPLIANT, NOT_COMPLIANT | Structural validation only, no postal lookup. Sub-100ms. Use as a lightweight pre-filter or standalone compliance gate. |\n| **Full Pipeline** | Process (EP-01, EP-08) | ACCEPT, REJECT, PARTIAL_SUCCESS | Runs the complete 7-step pipeline: classify → validate → date-legality → normalise → verify → convert → revalidate. |\n\n## Request Routing — Party vs Message\n| I have... | I call... | I get... |\n|-----------|-----------|----------|\n| One extracted address | `/process-party-address` | One result |\n| Many extracted addresses | `/process-batch-party-address` | Array of results |\n| A complete ISO 20022 message | `/process-message-party-addresses` | All party addresses discovered + processed |\n| Many complete messages | `/process-batch-message-party-addresses` | Array of message results |\n\n## PostalAddress24 Variants\n`partyRole` determines which XSD variant applies:\n\n| Variant | Party Roles | TownName / Country | FULLY_UNSTRUCTURED allowed? |\n|---------|-------------|---------------------|------------------------------|\n| __1 | debtor, creditor | Optional | Yes, INBOUND only, until the SR2026 cutover (2026-11-15T02:30:00Z); banned OUTBOUND post-cutover |\n| __2 | ultimate_debtor, ultimate_creditor, initiating_party | Mandatory | Never (REG-05) |\n\n## Status Taxonomy\n**AutoCorrect** (`AutoCorrectStatus`, address-level): VALIDATED (already\ncompliant), REPAIRED (corrected, confidence ≥ threshold),\nPARTIALLY_REPAIRED (corrected, confidence < threshold), NOT_REPAIRED\n(cannot be corrected — manual intervention required).\n\n**PreCheck** (`PreCheckStatus`): COMPLIANT, NOT_COMPLIANT.\n\n**Top-level `Decision`**: ACCEPT, REJECT, PARTIAL_SUCCESS — the overall\noutcome returned by Process and Convert endpoints, derived from the\nper-address statuses above.\n\n## Standards\nISO 20022 | EPC153-22 v2.1 | PMPG Hybrid Postal Address v1.12 |\nPMPG Grace Period Guide | CBPRPlus SR2025 | EU Regulation 2023/1113\n\n## Content Types\nAll POST endpoints accept and return `application/json` (primary) and\n`application/xml` (ISO 20022 native format). GET endpoints return\n`application/json` only.\nWhen using XML: `Content-Type: application/xml`, `Accept: application/xml`.\n\n## Security\n- **Transport**: TLS 1.2+ mandatory.\n- **Authentication**: JWT Bearer (RS256/PS256) + API Key — dual factor,\n  OAuth 2.0 Client Credentials grant.\n- **Correlation**: `X-Request-ID` + `Idempotency-Key` on every write request.\n- **Integrity**: HTTP Message Signatures (RFC 9421) over `Content-Digest`\n  (RFC 9530) — required in production on batch and R-transaction message\n  endpoints, optional elsewhere.\n- **Data handling**: no address content persisted beyond the request lifecycle.\n\n## Authentication\nAll endpoints (except `/health`) require dual authentication:\n- `Authorization: Bearer <JWT>` — OAuth 2.0 bearer token\n- `APIKey: <api-key>` — API key as second factor\n\n## Processing Precedence\nARS resolves processing parameters using a three-tier model:\n1. **channelProfile** (primary) — loaded via `channelName`; establishes all defaults\n   for this channel/scheme/direction combination. (Channel profile management,\n   EP-25/26/27, is in early access and not yet generally available.)\n2. **processingOptions** (override) — per-request deviations from channelProfile.\n   Sole function: modify specific channelProfile values for one request only.\n3. **context** (fallback + analytics) — last-resort fallback for any unresolved\n   parameter; all context fields always written to the audit trail.\n\n## Version History\n| Version | Summary |\n|---------|---------|\n| 4.1.0 | PreCheck/AutoCorrect patterns, status taxonomy, structured reason codes. |\n| 4.2.0 | Consolidated release — all v4.1 enhancements integrated. |\n| 4.3.0 | channelProfile model (early access), PARTIAL_SUCCESS decision added. |\n","version":"4.3.1","termsOfService":"https://www.ionova.ai/terms-of-service","contact":{"name":"ioNova Support","email":"support@ionova.ai"}},"servers":[{"url":"https://api-uat.ionova.ai/ars","description":"UAT (test data only)"}],"security":[{"ApiKeyAuth":[]}],"tags":[{"name":"Layer 1 — Party Address","description":"Single address in, single result out. Ideal for real-time form validation,\nCRM import, and individual address remediation.\n"},{"name":"Layer 1 — Regulatory","description":"R-transaction exemption assessment at party address level."},{"name":"Layer 2 — Message","description":"Complete ISO 20022 message in — all party addresses discovered and processed\nautomatically via XPath registry.\n"},{"name":"Layer 2 — Regulatory","description":"R-transaction exemption assessment at message level."},{"name":"Layer 3 — Regulatory","description":"Address mandate determination under EU Regulation 2023/1113."},{"name":"Layer 4 — Reference","description":"Read-only reference data. Cache aggressively — changes only with regulatory updates."},{"name":"Layer 5 — Config","description":"Account profile and channelProfile management."},{"name":"Layer 5 — Health","description":"Service availability. No authentication required."}],"paths":{"/process-party-address":{"post":{"tags":["Layer 1 — Party Address"],"summary":"EP-01 — Process Party Address","description":"Full 7-step pipeline on a single party address: classify → validate →\ndate-legality → normalise → verify (postal DB) → convert → revalidate.\nReturns ACCEPT/REJECT with verification score, extracted identifiers, and full issue log.\n\n**partyRole** is supplied via `context.partyRole` (or pre-configured in the\nchannelProfile's `channelSelection.partyRole`) — it determines the PostalAddress24\nXSD variant (__1 or __2), driving AdrLine limits and TownName/Country requirements.\n\n**Business Rules:**\n- R-01: partyRole (resolved from context or channelProfile) determines PostalAddress24 variant (__1 or __2).\n- R-02: If executionDatetime ≥ 2026-11-22T02:30:00Z, SR2026 rules apply — FULLY_UNSTRUCTURED rejected.\n- R-03: For __2 parties (ultimate_debtor, ultimate_creditor, initiating_party),\n  FULLY_UNSTRUCTURED is NEVER permitted — not even during grace period (REG-05).\n- R-04: BIC/LEI/IBAN in AddressLine extracted if identification field empty; conflict flagged but not moved.\n- R-05: TownName or Country in both structured fields AND AddressLine raises WARNING.\n- R-06: Only postal fields sent to postal DB — names, BICs, IBANs, LEIs excluded.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"processPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessPartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","postalAddress":{"streetName":"Unter den Linden","buildingNumber":"10","postCode":"10117","townName":"Berlin","country":"DE"},"processingOptions":{"quality":"premium","targetFormat":"FULLY_STRUCTURED"},"context":{"partyRole":"creditor","source":"PAYMENT_HUB","reference":"TXN-20261015-001"}}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessPartyAddressRequest"},"example":"<ProcessPartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <PstlAdr>\n    <StrtNm>Unter den Linden</StrtNm>\n    <BldgNb>10</BldgNb>\n    <PstCd>10117</PstCd>\n    <TwnNm>Berlin</TwnNm>\n    <Ctry>DE</Ctry>\n  </PstlAdr>\n  <processingOptions>\n    <quality>premium</quality>\n    <targetFormat>FULLY_STRUCTURED</targetFormat>\n  </processingOptions>\n  <context>\n    <partyRole>creditor</partyRole>\n    <source>PAYMENT_HUB</source>\n    <reference>TXN-20261015-001</reference>\n  </context>\n</ProcessPartyAddressRequest>\n"}}},"responses":{"200":{"description":"Processing completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessPartyAddressResponse"},"example":"<ProcessPartyAddressResponse>\n  <decision>ACCEPT</decision>\n  <result>\n    <partyRole>creditor</partyRole>\n    <inputFormat>FULLY_STRUCTURED</inputFormat>\n    <outputFormat>FULLY_STRUCTURED</outputFormat>\n    <status>VALIDATED</status>\n    <PstlAdr>\n      <StrtNm>Unter den Linden</StrtNm>\n      <BldgNb>10</BldgNb>\n      <PstCd>10117</PstCd>\n      <TwnNm>Berlin</TwnNm>\n      <Ctry>DE</Ctry>\n    </PstlAdr>\n    <verification>\n      <status>verified</status>\n      <score>0.98</score>\n    </verification>\n  </result>\n  <statistics>\n    <processingTimeMs>45</processingTimeMs>\n    <totalRecords>1</totalRecords>\n    <acceptedRecords>1</acceptedRecords>\n  </statistics>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ProcessPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/process-batch-party-address":{"post":{"tags":["Layer 1 — Party Address"],"summary":"EP-02 — Process Batch Party Address","description":"Batch version of EP-01. Up to 1,000 transaction sets, each containing up to 10\nparty addresses (max 10,000 addresses per call). Each address processed independently.\n\n**Business Rules:**\n- Requires HTTP Message Signature (RFC 9421) and Idempotency-Key header in production.\n- Each address processed independently — failure in one does not affect others.\n- Maximum: 1,000 transaction sets per call; 10 addresses per set.\n- PARTIAL_SUCCESS if at least one address accepted and at least one rejected.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"processBatchPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/ContentDigest"},{"$ref":"#/components/parameters/Signature"},{"$ref":"#/components/parameters/SignatureInput"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessBatchPartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","transactionSets":[{"transactionSetId":"SET-001","addresses":[{"postalAddress":{"streetName":"Rue de la Loi","buildingNumber":"200","postCode":"1040","townName":"Brussels","country":"BE"},"context":{"partyRole":"debtor"}},{"postalAddress":{"streetName":"Unter den Linden","buildingNumber":"10","postCode":"10117","townName":"Berlin","country":"DE"},"context":{"partyRole":"creditor"}}]}]}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessBatchPartyAddressRequest"},"example":"<ProcessBatchPartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <transactionSets>\n    <transactionSet>\n      <transactionSetId>SET-001</transactionSetId>\n      <addresses>\n        <address>\n          <PstlAdr>\n            <StrtNm>Rue de la Loi</StrtNm>\n            <BldgNb>200</BldgNb>\n            <PstCd>1040</PstCd>\n            <TwnNm>Brussels</TwnNm>\n            <Ctry>BE</Ctry>\n          </PstlAdr>\n          <context>\n            <partyRole>debtor</partyRole>\n          </context>\n        </address>\n        <address>\n          <PstlAdr>\n            <StrtNm>Unter den Linden</StrtNm>\n            <BldgNb>10</BldgNb>\n            <PstCd>10117</PstCd>\n            <TwnNm>Berlin</TwnNm>\n            <Ctry>DE</Ctry>\n          </PstlAdr>\n          <context>\n            <partyRole>creditor</partyRole>\n          </context>\n        </address>\n      </addresses>\n    </transactionSet>\n  </transactionSets>\n</ProcessBatchPartyAddressRequest>\n"}}},"responses":{"200":{"description":"Batch processing completed","headers":{"Content-Digest":{"$ref":"#/components/headers/ContentDigestResp"},"Signature":{"$ref":"#/components/headers/SignatureResp"},"Signature-Input":{"$ref":"#/components/headers/SignatureInputResp"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessBatchPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessBatchPartyAddressResponse"},"example":"<ProcessBatchPartyAddressResponse>\n  <decision>ACCEPT</decision>\n  <transactionSets>\n    <transactionSet>\n      <transactionSetId>SET-001</transactionSetId>\n      <decision>ACCEPT</decision>\n    </transactionSet>\n  </transactionSets>\n  <statistics>\n    <totalRecords>2</totalRecords>\n    <acceptedRecords>2</acceptedRecords>\n    <processingTimeMs>120</processingTimeMs>\n  </statistics>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ProcessBatchPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/check-party-address":{"post":{"tags":["Layer 1 — Party Address"],"summary":"EP-03 — Check Party Address (ARS PreCheck)","description":"Structural validation only — no postal DB lookup, no conversion. Sub-100ms.\nReturns COMPLIANT or NOT_COMPLIANT with structured reason codes (FMT, FLD, REG prefixes).\n\n**v4.2 change:** No longer performs postal database verification.\nPure structural validation only. Use EP-01 or EP-04 for postal verification.\n\n**Business Rules:**\n- Does NOT perform postal DB verification.\n- Does NOT enforce cutover date-legality as a blocking action (flags REG-03 informationally).\n- partyRole defaults to `debtor` if omitted.\n- R-transaction message types return HTTP 422 REG-06.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"checkPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckPartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","postalAddress":{"addressLine":["10 Unter den Linden","10117 Berlin"],"country":"DE"},"context":{"partyRole":"creditor"}}},"application/xml":{"schema":{"$ref":"#/components/schemas/CheckPartyAddressRequest"},"example":"<CheckPartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <PstlAdr>\n    <AdrLine>10 Unter den Linden</AdrLine>\n    <AdrLine>10117 Berlin</AdrLine>\n    <Ctry>DE</Ctry>\n  </PstlAdr>\n  <context>\n    <partyRole>creditor</partyRole>\n  </context>\n</CheckPartyAddressRequest>\n"}}},"responses":{"200":{"description":"Structural check completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/CheckPartyAddressResponse"},"example":"<CheckPartyAddressResponse>\n  <status>NOT_COMPLIANT</status>\n  <valid>false</valid>\n  <format>FULLY_UNSTRUCTURED</format>\n  <reasons>\n    <reason>\n      <code>FMT-01</code>\n      <severity>ERROR</severity>\n      <field>postalAddress</field>\n      <message>Address is FULLY_UNSTRUCTURED — not permitted post SR2026 for OUTBOUND.</message>\n      <ruleSource>EPC153-22 v2.1 §6.3</ruleSource>\n    </reason>\n  </reasons>\n</CheckPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/convert-party-address":{"post":{"tags":["Layer 1 — Party Address"],"summary":"EP-04 — Convert Party Address (ARS AutoCorrect)","description":"Converts a single party address to the requested target format.\nOUTBOUND (default): SR2026 enforcement applies.\nINBOUND: downgrade to FULLY_UNSTRUCTURED permitted — output is internal-use-only,\nmust never be re-injected into outgoing payment messages.\n\n**Business Rules:**\n- C-01: targetFormat `auto` selects FULLY_STRUCTURED for __2 parties; HYBRID for SR2026 unstructured input.\n- C-02: FULLY_UNSTRUCTURED is never valid for __2 variant parties — HTTP 422.\n- C-03: OUTBOUND + SR2026 + post-cutover: FULLY_UNSTRUCTURED target rejected. INBOUND: skipped.\n- C-04: PMPG non-duplication enforced on all HYBRID outputs.\n- C-05: OUTBOUND fallback chain: FULLY_STRUCTURED → HYBRID → REJECT.\n- C-06: outputFormat ≠ targetFormat: WARNING explains fallback used.\n- C-07: Postal verification payload — address fields only; no names/BICs/IBANs/LEIs.\n- C-08: Input already at targetFormat → returned unchanged with confidence 1.0.\n- C-09: INBOUND HYBRID→UNSTRUCTURED: existing AdrLine preserved in lines 1–2.\n- C-10: INBOUND STRUCTURED→UNSTRUCTURED: all 14 fields rendered per PMPG §5 priority.\n- C-11: Truncation with PMPG '+' marker at limit-1.\n- C-12: INBOUND downgrade always includes INFO issue marking result as internal-use-only.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"convertPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertPartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","name":"PETRA DUPONT","postalAddress":{"addressLine":["CITY HALL GROTE MARKT 1","1000 BRUSSELS"],"country":"BE"},"processingOptions":{"targetFormat":"HYBRID"}}},"application/xml":{"schema":{"$ref":"#/components/schemas/ConvertPartyAddressRequest"},"example":"<ConvertPartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <Nm>PETRA DUPONT</Nm>\n  <PstlAdr>\n    <AdrLine>CITY HALL GROTE MARKT 1</AdrLine>\n    <AdrLine>1000 BRUSSELS</AdrLine>\n    <Ctry>BE</Ctry>\n  </PstlAdr>\n  <processingOptions>\n    <targetFormat>HYBRID</targetFormat>\n  </processingOptions>\n</ConvertPartyAddressRequest>\n"}}},"responses":{"200":{"description":"Conversion completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ConvertPartyAddressResponse"},"example":"<ConvertPartyAddressResponse>\n  <status>REPAIRED</status>\n  <success>true</success>\n  <inputFormat>FULLY_UNSTRUCTURED</inputFormat>\n  <outputFormat>HYBRID</outputFormat>\n  <PstlAdr>\n    <PstCd>1000</PstCd>\n    <TwnNm>BRUSSELS</TwnNm>\n    <Ctry>BE</Ctry>\n    <AdrLine>CITY HALL GROTE MARKT 1</AdrLine>\n  </PstlAdr>\n  <confidence>\n    <overall>0.91</overall>\n  </confidence>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ConvertPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/render-party-address":{"post":{"tags":["Layer 1 — Party Address"],"summary":"EP-05 — Render Party Address","description":"Renders a structured or hybrid address into AddressLine-only format following\nPMPG Section 5 mapping priorities. Country always preserved separately.\n\n**PMPG mapping priority:**\n- Line 1 (street-level): StreetName+BuildingNumber, BuildingName, Floor, PostBox, Room, Department, SubDepartment.\n- Line 2 (locality): PostCode+TownName, CountrySubDivision, TownLocationName, DistrictName.\n- Country: always output separately — never embedded in rendered lines.\n\nFor MT RTGS compatibility: maxLines=3, maxLineLength=35.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"renderPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderPartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","name":"JOHN SMITH","postalAddress":{"streetName":"Hoogstraat","buildingNumber":"6","floor":"18th Floor","postCode":"1000","townName":"Brussels","country":"BE"},"maxLines":2,"maxLineLength":70}},"application/xml":{"schema":{"$ref":"#/components/schemas/RenderPartyAddressRequest"},"example":"<RenderPartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <Nm>JOHN SMITH</Nm>\n  <PstlAdr>\n    <StrtNm>Hoogstraat</StrtNm>\n    <BldgNb>6</BldgNb>\n    <Flr>18th Floor</Flr>\n    <PstCd>1000</PstCd>\n    <TwnNm>Brussels</TwnNm>\n    <Ctry>BE</Ctry>\n  </PstlAdr>\n  <maxLines>2</maxLines>\n  <maxLineLength>70</maxLineLength>\n</RenderPartyAddressRequest>\n"}}},"responses":{"200":{"description":"Rendering completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RenderPartyAddressResponse"},"example":"<RenderPartyAddressResponse>\n  <decision>ACCEPT</decision>\n  <result>\n    <inputFormat>FULLY_STRUCTURED</inputFormat>\n    <outputFormat>FULLY_UNSTRUCTURED</outputFormat>\n    <PstlAdr>\n      <AdrLine>HOOGSTRAAT 6, 18TH FLOOR</AdrLine>\n      <AdrLine>BE,BRUSSELS,1000</AdrLine>\n      <Ctry>BE</Ctry>\n    </PstlAdr>\n    <dataLoss>false</dataLoss>\n  </result>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</RenderPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/classify-party-address":{"post":{"tags":["Layer 1 — Party Address"],"summary":"EP-06 — Classify Party Address","description":"Lightest available endpoint. Returns format classification only — no validation,\nverification, conversion, or normalisation. Extremely low latency.\n\n**Classification logic:**\n- FULLY_STRUCTURED: Country + TownName present AND no AddressLine.\n- HYBRID: Country + TownName present AND AddressLine present.\n- FULLY_UNSTRUCTURED: anything else.\n\nNo issues[] or reasons[] in response. Context fields are analytics only.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"classifyPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyPartyAddressRequest"},"example":{"postalAddress":{"postCode":"1000","townName":"Brussels","country":"BE","addressLine":["CITY HALL GROTE MARKT 1"]}}},"application/xml":{"schema":{"$ref":"#/components/schemas/ClassifyPartyAddressRequest"},"example":"<ClassifyPartyAddressRequest>\n  <PstlAdr>\n    <PstCd>1000</PstCd>\n    <TwnNm>Brussels</TwnNm>\n    <Ctry>BE</Ctry>\n    <AdrLine>CITY HALL GROTE MARKT 1</AdrLine>\n  </PstlAdr>\n</ClassifyPartyAddressRequest>\n"}}},"responses":{"200":{"description":"Classification completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ClassifyPartyAddressResponse"},"example":"<ClassifyPartyAddressResponse>\n  <format>HYBRID</format>\n  <hasAddressLine>true</hasAddressLine>\n  <addressLineCount>1</addressLineCount>\n  <hasStructuredFields>true</hasStructuredFields>\n  <hasTownName>true</hasTownName>\n  <hasCountry>true</hasCountry>\n</ClassifyPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/r-transaction-party-address":{"post":{"tags":["Layer 1 — Regulatory"],"summary":"EP-07 — R-Transaction Party Address","description":"Evaluates EPC Section 8.3 exemption for a single R-transaction address.\nThe address is NEVER modified.\n\n**Exemption logic:**\n- originalExecutionDatetime < 2026-11-22T02:30:00Z → exempt; unstructured accepted.\n- originalExecutionDatetime ≥ cutover → SR2026 enforcement applies.\n- Not provided → exemptionApplicable: null; structural validation attempted.\n\nEPC §8.3: pain.002 and pain.007 report structural issues as warnings only.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"rTransactionPartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RTransactionPartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","postalAddress":{"addressLine":["10 Unter den Linden","10117 Berlin"],"country":"DE"},"originalExecutionDatetime":"2026-10-01T08:00:00Z"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RTransactionPartyAddressRequest"},"example":"<RTransactionPartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <PstlAdr>\n    <AdrLine>10 Unter den Linden</AdrLine>\n    <AdrLine>10117 Berlin</AdrLine>\n    <Ctry>DE</Ctry>\n  </PstlAdr>\n  <originalExecutionDatetime>2026-10-01T08:00:00Z</originalExecutionDatetime>\n</RTransactionPartyAddressRequest>\n"}}},"responses":{"200":{"description":"R-transaction assessment completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RTransactionPartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RTransactionPartyAddressResponse"},"example":"<RTransactionPartyAddressResponse>\n  <decision>ACCEPT</decision>\n  <rTransactionContext>\n    <exemptionApplicable>true</exemptionApplicable>\n    <cutoverDatetime>2026-11-22T02:30:00Z</cutoverDatetime>\n    <originalIsPreCutover>true</originalIsPreCutover>\n  </rTransactionContext>\n  <result>\n    <rTransactionExempt>true</rTransactionExempt>\n  </result>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</RTransactionPartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/process-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-08 — Process Message Party Addresses","description":"Message-level equivalent of EP-01. Submit a complete ISO 20022 message — ARS\ndiscovers all party addresses via XPath registry, applies the correct\nPostalAddress24 variant per role, and runs the full 7-step pipeline.\n\n**XPath registry covers:**\n- pain.001: debtor, creditor, ultimate_debtor, ultimate_creditor, initiating_party (5 roles)\n- pain.008: creditor, debtor, initiating_party (3 roles)\n- pacs.008: debtor, creditor, ultimate_debtor, ultimate_creditor (4 roles)\n- pacs.003: debtor, creditor (2 roles)\n- pacs.009: debtor, creditor (2 roles)\n\nEither messageContent or messageXml required. If both, messageXml takes precedence.\nOCT_INST: payer address always mandatory regardless of EEA status.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"processMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMessageRequest"},"example":{"channelName":"MY_CBPR_OUT","executionDatetime":"2026-10-15T10:00:00Z","messageXml":"<Document>...</Document>"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessMessageRequest"},"example":"<ProcessMessagePartyAddressesRequest>\n  <channelName>MY_CBPR_OUT</channelName>\n  <executionDatetime>2026-10-15T10:00:00Z</executionDatetime>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n</ProcessMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Message processing completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessMessageResponse"},"example":"<ProcessMessagePartyAddressesResponse>\n  <decision>ACCEPT</decision>\n  <messageType>pacs.008</messageType>\n  <scheme>CBPRPLUS</scheme>\n  <discoveredAddresses>2</discoveredAddresses>\n  <results>\n    <result>\n      <partyRole>debtor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Dbtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <inputFormat>HYBRID</inputFormat>\n      <outputFormat>FULLY_STRUCTURED</outputFormat>\n      <status>REPAIRED</status>\n    </result>\n  </results>\n  <statistics>\n    <totalRecords>2</totalRecords>\n    <acceptedRecords>2</acceptedRecords>\n    <processingTimeMs>180</processingTimeMs>\n  </statistics>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ProcessMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/process-batch-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-09 — Process Batch Message Party Addresses","description":"Batch version of EP-08. Accepts up to 100 complete ISO messages per call.\nEach message processed independently through the full pipeline.\n\nRequires HTTP Message Signature (RFC 9421) and Idempotency-Key header in production.\nMaximum 100 messages per call.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"processBatchMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/ContentDigest"},{"$ref":"#/components/parameters/Signature"},{"$ref":"#/components/parameters/SignatureInput"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessBatchMessageRequest"},"example":{"channelName":"MY_CBPR_OUT","messages":[{"messageType":"pacs.008","scheme":"CBPRPLUS","schemeVersion":"SR2026","executionDatetime":"2026-10-15T10:00:00Z","messageXml":"<Document>...</Document>"}]}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessBatchMessageRequest"},"example":"<ProcessBatchMessagePartyAddressesRequest>\n  <channelName>MY_CBPR_OUT</channelName>\n  <messages>\n    <message>\n      <messageType>pacs.008</messageType>\n      <scheme>CBPRPLUS</scheme>\n      <schemeVersion>SR2026</schemeVersion>\n      <executionDatetime>2026-10-15T10:00:00Z</executionDatetime>\n      <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n    </message>\n  </messages>\n</ProcessBatchMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Batch message processing completed","headers":{"Content-Digest":{"$ref":"#/components/headers/ContentDigestResp"},"Signature":{"$ref":"#/components/headers/SignatureResp"},"Signature-Input":{"$ref":"#/components/headers/SignatureInputResp"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessBatchMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ProcessBatchMessageResponse"},"example":"<ProcessBatchMessagePartyAddressesResponse>\n  <decision>ACCEPT</decision>\n  <messageResults>\n    <messageResult>\n      <decision>ACCEPT</decision>\n      <messageType>pacs.008</messageType>\n      <scheme>CBPRPLUS</scheme>\n      <discoveredAddresses>2</discoveredAddresses>\n    </messageResult>\n  </messageResults>\n  <statistics>\n    <totalRecords>2</totalRecords>\n    <acceptedRecords>2</acceptedRecords>\n    <processingTimeMs>350</processingTimeMs>\n  </statistics>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ProcessBatchMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/check-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-10 — Check Message Party Addresses (ARS PreCheck)","description":"Message-level structural validation. Discovers all party addresses, classifies each,\nand runs structural validation. No postal DB, no conversion.\n\n**Typical workflow:** Check → COMPLIANT: transmit. NOT_COMPLIANT: call EP-12 (AutoCorrect).\n\nv4.2 change: No longer performs postal DB verification.\nR-transaction types return HTTP 422 REG-06.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"checkMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","messageXml":"<Document>...</Document>"}},"application/xml":{"schema":{"$ref":"#/components/schemas/CheckMessageRequest"},"example":"<CheckMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n</CheckMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Message check completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/CheckMessageResponse"},"example":"<CheckMessagePartyAddressesResponse>\n  <messageStatus>NOT_COMPLIANT</messageStatus>\n  <compliantCount>1</compliantCount>\n  <nonCompliantCount>1</nonCompliantCount>\n  <discoveredAddresses>2</discoveredAddresses>\n  <results>\n    <result>\n      <partyRole>debtor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Dbtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <format>FULLY_UNSTRUCTURED</format>\n      <status>NOT_COMPLIANT</status>\n      <reasons>\n        <reason>\n          <code>FMT-01</code>\n          <severity>ERROR</severity>\n          <field>postalAddress</field>\n          <message>FULLY_UNSTRUCTURED not permitted post SR2026 cutover.</message>\n          <ruleSource>EPC153-22 v2.1 §6.3</ruleSource>\n        </reason>\n      </reasons>\n    </result>\n  </results>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</CheckMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/classify-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-11 — Classify Message Party Addresses","description":"Message-level equivalent of EP-06. Discovers and classifies every party address in a\nsubmitted ISO 20022 message. No validation, verification, or conversion.\n\nNo issues[] or reasons[] in response. Context fields are analytics only.\nVery low latency — ideal for routing decisions and dashboard aggregation.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"classifyMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","messageXml":"<Document>...</Document>"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ClassifyMessageRequest"},"example":"<ClassifyMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n</ClassifyMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Message classification completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ClassifyMessageResponse"},"example":"<ClassifyMessagePartyAddressesResponse>\n  <messageType>pacs.008</messageType>\n  <scheme>SCT</scheme>\n  <discoveredAddresses>2</discoveredAddresses>\n  <classifications>\n    <classification>\n      <partyRole>debtor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Dbtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <format>FULLY_UNSTRUCTURED</format>\n      <hasTownName>false</hasTownName>\n      <hasCountry>true</hasCountry>\n      <addressLineCount>2</addressLineCount>\n    </classification>\n    <classification>\n      <partyRole>creditor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Cdtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <format>HYBRID</format>\n      <hasTownName>true</hasTownName>\n      <hasCountry>true</hasCountry>\n      <addressLineCount>1</addressLineCount>\n    </classification>\n  </classifications>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ClassifyMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/convert-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-12 — Convert Message Party Addresses (ARS AutoCorrect)","description":"Message-level equivalent of EP-04. Converts all party addresses in an ISO 20022 message\nand returns correctedMessageXml with repaired addresses written back in-place.\n\nEither messageContent or messageXml required. If both, messageXml takes precedence.\nR-transaction types return HTTP 422 REG-06.\nFULLY_UNSTRUCTURED blocked for __2 parties regardless of direction.\nPARTIALLY_REPAIRED: VALIDATED/REPAIRED addresses written back; NOT_REPAIRED retain original.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"convertMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","messageType":"pacs.008","scheme":"SCT","targetFormat":"auto","returnCorrectedMessage":true,"messageXml":"<Document>...</Document>"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ConvertMessageRequest"},"example":"<ConvertMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <messageType>pacs.008</messageType>\n  <scheme>SCT</scheme>\n  <targetFormat>auto</targetFormat>\n  <returnCorrectedMessage>true</returnCorrectedMessage>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n</ConvertMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Message conversion completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ConvertMessageResponse"},"example":"<ConvertMessagePartyAddressesResponse>\n  <messageStatus>REPAIRED</messageStatus>\n  <correctedMessageXml><![CDATA[<Document>...</Document>]]></correctedMessageXml>\n  <validatedCount>0</validatedCount>\n  <repairedCount>2</repairedCount>\n  <partiallyRepairedCount>0</partiallyRepairedCount>\n  <notRepairedCount>0</notRepairedCount>\n  <discoveredAddresses>2</discoveredAddresses>\n  <statistics>\n    <totalRecords>2</totalRecords>\n    <repairedRecords>2</repairedRecords>\n    <processingTimeMs>220</processingTimeMs>\n  </statistics>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ConvertMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/render-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-13 — Render Message Party Addresses","description":"Message-level equivalent of EP-05. Discovers all party addresses and renders each\nto unstructured AddressLine format using PMPG Section 5 mapping priorities.\nCountry always preserved separately — never embedded in address lines.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"renderMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","messageXml":"<Document>...</Document>"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RenderMessageRequest"},"example":"<RenderMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n</RenderMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Message render completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RenderMessageResponse"},"example":"<RenderMessagePartyAddressesResponse>\n  <decision>ACCEPT</decision>\n  <messageType>pacs.008</messageType>\n  <scheme>SCT</scheme>\n  <discoveredAddresses>2</discoveredAddresses>\n  <results>\n    <result>\n      <partyRole>debtor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Dbtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <PstlAdr>\n        <AdrLine>HOOGSTRAAT 6, 18TH FLOOR</AdrLine>\n        <AdrLine>1000 BRUSSELS</AdrLine>\n        <Ctry>BE</Ctry>\n      </PstlAdr>\n      <dataLoss>false</dataLoss>\n    </result>\n  </results>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</RenderMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/extract-message-party-addresses":{"post":{"tags":["Layer 2 — Message"],"summary":"EP-14 — Extract Message Party Addresses","description":"Non-destructive address inventory. Returns format, XPath, XSD variant, raw address fields,\nisMandatory, and complianceReady for every party address. Nothing processed or modified.\n\nPrimary endpoint for SR2026 pre-migration assessment.\nIdeal for PMPG self-check framework (Grace Period Guide Section 11).\n\n- isMandatory: uses sendingCountry and receivingCountry from context or channelProfile.\n- complianceReady: evaluates against SR2026 rules (FULLY_STRUCTURED or HYBRID = true).\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"extractMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","executionDatetime":"2026-10-15T10:00:00Z","messageXml":"<Document>...</Document>","context":{"sendingCountry":"DE","receivingCountry":"FR"}}},"application/xml":{"schema":{"$ref":"#/components/schemas/ExtractMessageRequest"},"example":"<ExtractMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <executionDatetime>2026-10-15T10:00:00Z</executionDatetime>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n  <context>\n    <sendingCountry>DE</sendingCountry>\n    <receivingCountry>FR</receivingCountry>\n  </context>\n</ExtractMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Extraction completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ExtractMessageResponse"},"example":"<ExtractMessagePartyAddressesResponse>\n  <messageType>pacs.008</messageType>\n  <scheme>SCT</scheme>\n  <discoveredAddresses>2</discoveredAddresses>\n  <partyAddresses>\n    <partyAddress>\n      <partyRole>debtor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Dbtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <format>FULLY_UNSTRUCTURED</format>\n      <PstlAdr>\n        <AdrLine>10 Unter den Linden</AdrLine>\n        <AdrLine>10117 Berlin</AdrLine>\n        <Ctry>DE</Ctry>\n      </PstlAdr>\n      <isMandatory>true</isMandatory>\n      <complianceReady>false</complianceReady>\n    </partyAddress>\n    <partyAddress>\n      <partyRole>creditor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Cdtr/PstlAdr</xpath>\n      <postalAddressVariant>__1</postalAddressVariant>\n      <format>HYBRID</format>\n      <PstlAdr>\n        <PstCd>75001</PstCd>\n        <TwnNm>Paris</TwnNm>\n        <Ctry>FR</Ctry>\n        <AdrLine>1 Rue de Rivoli</AdrLine>\n      </PstlAdr>\n      <isMandatory>false</isMandatory>\n      <complianceReady>true</complianceReady>\n    </partyAddress>\n  </partyAddresses>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</ExtractMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/r-transaction-message-party-addresses":{"post":{"tags":["Layer 2 — Regulatory"],"summary":"EP-15 — R-Transaction Message Party Addresses","description":"Message-level equivalent of EP-07. Submit a complete R-transaction message — ARS\nauto-extracts originalExecutionDatetime from XML, evaluates EPC §8.3 exemption\nfor each address. No address ever modified.\n\nAuto-extraction looks for OrgnlGrpInf/OrgnlCreDtTm and TxInf/OrgnlTxRef/IntrBkSttlmDt.\nIf exemptionApplicable is TRUE, all addresses accepted regardless of format.\n\nRequires HTTP Message Signature in production.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"rTransactionMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"$ref":"#/components/parameters/ContentDigest"},{"$ref":"#/components/parameters/Signature"},{"$ref":"#/components/parameters/SignatureInput"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RTransactionMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","originalExecutionDatetime":"2026-10-01T08:00:00Z","messageXml":"<Document>...</Document>"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RTransactionMessageRequest"},"example":"<RTransactionMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <originalExecutionDatetime>2026-10-01T08:00:00Z</originalExecutionDatetime>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n</RTransactionMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"R-transaction message assessment completed","headers":{"Content-Digest":{"$ref":"#/components/headers/ContentDigestResp"},"Signature":{"$ref":"#/components/headers/SignatureResp"},"Signature-Input":{"$ref":"#/components/headers/SignatureInputResp"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RTransactionMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/RTransactionMessageResponse"},"example":"<RTransactionMessagePartyAddressesResponse>\n  <decision>ACCEPT</decision>\n  <messageType>pacs.004</messageType>\n  <originalExecutionDatetime>2026-10-01T08:00:00Z</originalExecutionDatetime>\n  <rTransactionContext>\n    <exemptionApplicable>true</exemptionApplicable>\n    <cutoverDatetime>2026-11-22T02:30:00Z</cutoverDatetime>\n    <originalIsPreCutover>true</originalIsPreCutover>\n  </rTransactionContext>\n  <discoveredAddresses>2</discoveredAddresses>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</RTransactionMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/mandate-party-address":{"post":{"tags":["Layer 3 — Regulatory"],"summary":"EP-16 — Mandate Party Address","description":"Answers: must this party provide an address for this transaction?\nBased on payment scheme, party role, and EEA status of payer/payee PSPs\nunder EU Regulation 2023/1113.\n\n**Mandate rules:**\n- OCT Inst: payer address ALWAYS mandatory regardless of EEA status.\n- SCT / SCT_INST / SDD_CORE / SDD_B2B: payer address mandatory only if either PSP\n  is in a non-EEA SEPA country. Payee address always optional.\n- 11 non-EEA SEPA countries: Andorra, UK, Gibraltar, Vatican City, Monaco,\n  San Marino, Switzerland, Saint-Pierre-et-Miquelon, Guernsey, Jersey, Isle of Man.\n\nchannelName is required — loads pspCountry, payerPspCountry, payeePspCountry, scheme defaults.\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"mandatePartyAddress","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MandatePartyAddressRequest"},"example":{"channelName":"MY_SEPA_SCT","processingOptions":{"payerPspCountry":"CH","payeePspCountry":"DE"},"context":{"partyRole":"debtor"}}},"application/xml":{"schema":{"$ref":"#/components/schemas/MandatePartyAddressRequest"},"example":"<MandatePartyAddressRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <processingOptions>\n    <payerPspCountry>CH</payerPspCountry>\n    <payeePspCountry>DE</payeePspCountry>\n  </processingOptions>\n  <context>\n    <partyRole>debtor</partyRole>\n  </context>\n</MandatePartyAddressRequest>\n"}}},"responses":{"200":{"description":"Mandate determination completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MandatePartyAddressResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/MandatePartyAddressResponse"},"example":"<MandatePartyAddressResponse>\n  <partyRole>debtor</partyRole>\n  <addressMandatory>true</addressMandatory>\n  <reason>Payer PSP country CH is a non-EEA SEPA member — address mandatory under EU Regulation 2023/1113 Art 4.</reason>\n  <ruleSource>EU Regulation 2023/1113 Art 4</ruleSource>\n</MandatePartyAddressResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/mandate-message-party-addresses":{"post":{"tags":["Layer 3 — Regulatory"],"summary":"EP-17 — Mandate Message Party Addresses","description":"Message-level equivalent of EP-16. Evaluates every party address in the message\nand returns addressMandatory, addressPresent, and addressCompliant for each.\n\naddressCompliant reflects SR2026 rules regardless of schemeVersion — always forward-looking.\naddressMandatory: true + addressPresent: false = compliance gap causing payment rejection.\n\nProcessing precedence: channelProfile → processingOptions → context.\n","operationId":"mandateMessagePartyAddresses","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MandateMessageRequest"},"example":{"channelName":"MY_SEPA_SCT","executionDatetime":"2026-10-15T10:00:00Z","messageXml":"<Document>...</Document>","context":{"sendingCountry":"CH","receivingCountry":"DE"}}},"application/xml":{"schema":{"$ref":"#/components/schemas/MandateMessageRequest"},"example":"<MandateMessagePartyAddressesRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <executionDatetime>2026-10-15T10:00:00Z</executionDatetime>\n  <messageXml><![CDATA[<Document>...</Document>]]></messageXml>\n  <context>\n    <sendingCountry>CH</sendingCountry>\n    <receivingCountry>DE</receivingCountry>\n  </context>\n</MandateMessagePartyAddressesRequest>\n"}}},"responses":{"200":{"description":"Message mandate assessment completed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MandateMessageResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/MandateMessageResponse"},"example":"<MandateMessagePartyAddressesResponse>\n  <messageType>pacs.008</messageType>\n  <scheme>SCT</scheme>\n  <partyMandates>\n    <partyMandate>\n      <partyRole>debtor</partyRole>\n      <xpath>/Document/FIToFICstmrCdtTrf/CdtTrfTxInf/Dbtr/PstlAdr</xpath>\n      <addressMandatory>true</addressMandatory>\n      <addressPresent>false</addressPresent>\n      <addressCompliant>false</addressCompliant>\n      <reason>Payer PSP in non-EEA SEPA country CH — address mandatory under EU Reg 2023/1113 Art 4.</reason>\n    </partyMandate>\n  </partyMandates>\n  <timestamp>2026-10-15T10:30:00Z</timestamp>\n</MandateMessagePartyAddressesResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/countries":{"get":{"tags":["Layer 4 — Reference"],"summary":"EP-18 — Countries","description":"Returns all countries with SEPA/EEA membership and ISO 3166-1 alpha-2 codes.\n30 EEA SEPA countries and 11 non-EEA SEPA countries/territories.\nNon-EEA SEPA membership triggers mandatory payer address under EU Reg 2023/1113.\nNo request body or query parameters. Cache aggressively.\n","operationId":"getCountries","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Country list returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountriesResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/countries/{code}":{"get":{"tags":["Layer 4 — Reference"],"summary":"EP-19 — Country Detail","description":"Returns full country detail including PMPG element usage indicators for all\n14 PostalAddress24 structured fields. Returns HTTP 404 if code not found.\n","operationId":"getCountryDetail","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"name":"code","in":"path","required":true,"description":"ISO 3166-1 alpha-2 country code (e.g. DE, GB, CH)","schema":{"type":"string","pattern":"^[A-Z]{2}$","example":"DE"}}],"responses":{"200":{"description":"Country detail returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryDetailResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/schemes":{"get":{"tags":["Layer 4 — Reference"],"summary":"EP-20 — Schemes","description":"Returns all 11 payment schemes supported by ARS v4.3. No request body. Cache aggressively.","operationId":"getSchemes","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Scheme list returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemesResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/schemes/{scheme}/message-types":{"get":{"tags":["Layer 4 — Reference"],"summary":"EP-21 — Scheme Message Types","description":"Returns message types for the specified scheme with party role XPaths,\nPostalAddress24 variants, and mandate flags.\nStatic mandate flag: true for OCT Inst payer. Context-dependent mandates use EP-16/EP-17.\nReturns HTTP 404 if scheme code not recognised.\n","operationId":"getSchemeMessageTypes","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"name":"scheme","in":"path","required":true,"description":"Payment scheme code","schema":{"$ref":"#/components/schemas/SchemeCode"}}],"responses":{"200":{"description":"Scheme message types returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemeMessageTypesResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/profile":{"get":{"tags":["Layer 5 — Config"],"summary":"EP-22 — Get Profile","description":"Returns the complete account-level profile: account_id, region, community,\nformatLimits, and channelProfiles[] summary.\n\n[v4.3] Channel-specific settings (scheme, schemeVersion, direction, outputMode,\ntargetFormat, quality, timezone, repairConfidenceThreshold) are managed via\nchannelProfile endpoints (EP-25/EP-26/EP-27). Only institutional fallbacks remain here.\n","operationId":"getProfile","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Profile returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]},"patch":{"tags":["Layer 5 — Config"],"summary":"EP-23 — Update Profile","description":"Updates account-level fields using PATCH semantics — only provided fields updated.\nChanges take effect immediately.\n\n[v4.3] Only account-level institutional fallback fields patchable here:\nregion, pspCountry, timezone, quality, repairConfidenceThreshold.\nChannel-specific settings must be managed via EP-25/EP-26.\n","operationId":"updateProfile","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"},"example":{"region":"europe_sepa","pspCountry":"DE","timezone":"Europe/Berlin","quality":"standard","repairConfidenceThreshold":0.8}},"application/xml":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"},"example":"<UpdateProfileRequest>\n  <region>europe_sepa</region>\n  <pspCountry>DE</pspCountry>\n  <timezone>Europe/Berlin</timezone>\n  <quality>standard</quality>\n  <repairConfidenceThreshold>0.80</repairConfidenceThreshold>\n</UpdateProfileRequest>\n"}}},"responses":{"200":{"description":"Profile updated — full profile returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/channel-profile":{"post":{"tags":["Layer 5 — Config"],"summary":"EP-25 — Register Channel Profile","description":"Registers a new named channel profile storing default processing parameters for a\nspecific channel/scheme/direction combination. Once registered, reference by channelName\nin EP-01 through EP-17 to auto-apply all channel defaults.\n\nchannelName must be unique per account. HTTP 409 if name already exists.\nUse DELETE + POST to rename. Changes via EP-26 take effect immediately for all\nsubsequent requests using this channelName.\n","operationId":"createChannelProfile","parameters":[{"$ref":"#/components/parameters/XRequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChannelProfileRequest"},"example":{"channelName":"MY_SEPA_SCT","channelSelection":{"channel":"sepa","scheme":"SCT","schemeVersion":"SR2026","direction":"OUTBOUND","pspCountry":"DE","timezone":"Europe/Berlin"},"corridor":{"sendingCountry":"DE","receivingCountry":"FR","currency":"EUR"},"preferences":{"outputMode":"EPC","autoRepairMode":"STANDARD","targetFormat":"auto","quality":"standard","repairConfidenceThreshold":0.8}}},"application/xml":{"schema":{"$ref":"#/components/schemas/CreateChannelProfileRequest"},"example":"<RegisterChannelProfileRequest>\n  <channelName>MY_SEPA_SCT</channelName>\n  <channelSelection>\n    <channel>sepa</channel>\n    <scheme>SCT</scheme>\n    <schemeVersion>SR2026</schemeVersion>\n    <direction>OUTBOUND</direction>\n    <pspCountry>DE</pspCountry>\n    <timezone>Europe/Berlin</timezone>\n  </channelSelection>\n  <corridor>\n    <sendingCountry>DE</sendingCountry>\n    <receivingCountry>FR</receivingCountry>\n    <currency>EUR</currency>\n  </corridor>\n  <preferences>\n    <outputMode>EPC</outputMode>\n    <autoRepairMode>STANDARD</autoRepairMode>\n    <targetFormat>auto</targetFormat>\n    <quality>standard</quality>\n    <repairConfidenceThreshold>0.80</repairConfidenceThreshold>\n  </preferences>\n</RegisterChannelProfileRequest>\n"}}},"responses":{"201":{"description":"Channel profile registered","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelProfileResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ChannelProfileResponse"},"example":"<ChannelProfileResponse>\n  <channelName>MY_SEPA_SCT</channelName>\n  <channelSelection>\n    <channel>sepa</channel>\n    <scheme>SCT</scheme>\n    <schemeVersion>SR2026</schemeVersion>\n    <direction>OUTBOUND</direction>\n    <pspCountry>DE</pspCountry>\n    <timezone>Europe/Berlin</timezone>\n  </channelSelection>\n  <corridor>\n    <sendingCountry>DE</sendingCountry>\n    <receivingCountry>FR</receivingCountry>\n    <currency>EUR</currency>\n  </corridor>\n  <preferences>\n    <outputMode>EPC</outputMode>\n    <autoRepairMode>STANDARD</autoRepairMode>\n    <targetFormat>auto</targetFormat>\n    <quality>standard</quality>\n    <repairConfidenceThreshold>0.80</repairConfidenceThreshold>\n  </preferences>\n  <createdAt>2026-03-01T09:00:00Z</createdAt>\n  <updatedAt>2026-03-01T09:00:00Z</updatedAt>\n</ChannelProfileResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/channel-profile/{name}":{"patch":{"tags":["Layer 5 — Config"],"summary":"EP-26 — Update Channel Profile","description":"Updates an existing named channel profile using PATCH semantics — only provided\nfields updated. All other profile values remain unchanged.\nChanges take effect immediately for all subsequent requests using this channelName.\nchannelName cannot be changed — use DELETE + POST to rename.\n","operationId":"updateChannelProfile","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"name":"name","in":"path","required":true,"description":"channelName of the profile to update","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChannelProfileRequest"},"example":{"channelSelection":{"schemeVersion":"SR2026"},"preferences":{"repairConfidenceThreshold":0.85}}},"application/xml":{"schema":{"$ref":"#/components/schemas/UpdateChannelProfileRequest"},"example":"<UpdateChannelProfileRequest>\n  <channelSelection>\n    <schemeVersion>SR2026</schemeVersion>\n  </channelSelection>\n  <preferences>\n    <repairConfidenceThreshold>0.85</repairConfidenceThreshold>\n  </preferences>\n</UpdateChannelProfileRequest>\n"}}},"responses":{"200":{"description":"Channel profile updated — full profile returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelProfileResponse"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ChannelProfileResponse"},"example":"<ChannelProfileResponse>\n  <channelName>MY_SEPA_SCT</channelName>\n  <channelSelection>\n    <schemeVersion>SR2026</schemeVersion>\n  </channelSelection>\n  <preferences>\n    <repairConfidenceThreshold>0.85</repairConfidenceThreshold>\n  </preferences>\n  <updatedAt>2026-05-01T09:00:00Z</updatedAt>\n</ChannelProfileResponse>\n"}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/UnprocessableEntity"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]},"get":{"tags":["Layer 5 — Config"],"summary":"EP-27 — Read Channel Profile","description":"Returns the complete channel profile for the specified channelName, including all\nchannelSelection, corridor, and preferences fields.\nReturns HTTP 404 if channelName not found.\n","operationId":"getChannelProfile","parameters":[{"$ref":"#/components/parameters/XRequestId"},{"name":"name","in":"path","required":true,"description":"channelName of the profile to read","schema":{"type":"string"}}],"responses":{"200":{"description":"Channel profile returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelProfileResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}},"security":[{"ApiKeyAuth":[]}]}},"/health":{"get":{"tags":["Layer 5 — Health"],"summary":"EP-24 — Health","description":"Returns the operational status of the ARS service. No API key or bearer token required.\nSuitable for uptime monitoring, load balancer health probes, and status dashboards.\n","operationId":"getHealth","security":[{"ApiKeyAuth":[]}],"parameters":[{"$ref":"#/components/parameters/XRequestId"}],"responses":{"200":{"description":"Health status returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"500":{"$ref":"#/components/responses/InternalServerError"}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your ioNova platform API key. Generate it from your organisation admin in the ioNova app, then paste it here to test."}},"parameters":{"XRequestId":{"name":"X-Request-ID","in":"header","required":false,"schema":{"type":"string","format":"uuid"},"description":"Client-supplied correlation ID echoed in response headers for tracing."},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":64},"description":"Idempotency key for safe retry of POST requests. Duplicate submissions with the same key return the cached response."},"ContentDigest":{"name":"Content-Digest","in":"header","required":false,"schema":{"type":"string"},"description":"SHA-256 digest of the request body (RFC 9530). Required input for HTTP\nMessage Signature verification on this request. Optional in sandbox;\nrequired in production for operations that mandate signing (see operation\ndescription).\n"},"Signature":{"name":"Signature","in":"header","required":false,"schema":{"type":"string"},"description":"HTTP Message Signature (RFC 9421) over the request, including the\nContent-Digest header. Optional in sandbox; required in production for\noperations that mandate signing (see operation description).\n"},"SignatureInput":{"name":"Signature-Input","in":"header","required":false,"schema":{"type":"string"},"description":"Signature metadata (RFC 9421) — identifies the signature algorithm,\ncovered components, and key identifier used to produce the Signature\nheader. Required whenever Signature is present.\n"}},"headers":{"ContentDigestResp":{"description":"SHA-256 digest of the response body (RFC 9530).","schema":{"type":"string"}},"SignatureResp":{"description":"Server-generated HTTP Message Signature (RFC 9421) over the response.","schema":{"type":"string"}},"SignatureInputResp":{"description":"Signature metadata (RFC 9421) for SignatureResp.","schema":{"type":"string"}}},"responses":{"BadRequest":{"description":"Bad Request — malformed request body or invalid parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":400,"message":"Request body is not valid JSON.","requestId":"b1a2c3d4-0000-0000-0000-000000000000"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>400</code>\n  <message>Request body is not valid JSON.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000000</requestId>\n</ErrorResponse>\n"}}},"Unauthorized":{"description":"Unauthorized — missing or invalid authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":401,"message":"Authentication credentials are missing or invalid.","requestId":"b1a2c3d4-0000-0000-0000-000000000001"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>401</code>\n  <message>Authentication credentials are missing or invalid.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000001</requestId>\n</ErrorResponse>\n"}}},"NotFound":{"description":"Not Found — the requested resource does not exist.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":404,"message":"The requested resource was not found.","requestId":"b1a2c3d4-0000-0000-0000-000000000002"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>404</code>\n  <message>The requested resource was not found.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000002</requestId>\n</ErrorResponse>\n"}}},"Conflict":{"description":"Conflict — a channelProfile with this name already exists.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":409,"message":"A channelProfile with this name already exists.","requestId":"b1a2c3d4-0000-0000-0000-000000000003"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>409</code>\n  <message>A channelProfile with this name already exists.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000003</requestId>\n</ErrorResponse>\n"}}},"UnprocessableEntity":{"description":"Unprocessable Entity — semantic validation failure (e.g. R-transaction type submitted to a non-R endpoint).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":422,"message":"R-transaction message types (e.g. pacs.002) are not permitted on this endpoint. Use /r-transaction-message-party-addresses.","requestId":"b1a2c3d4-0000-0000-0000-000000000004"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>422</code>\n  <message>R-transaction message types (e.g. pacs.002) are not permitted on this endpoint.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000004</requestId>\n</ErrorResponse>\n"}}},"TooManyRequests":{"description":"Too Many Requests — rate limit exceeded.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":429,"message":"Rate limit exceeded. Retry after 10 seconds.","requestId":"b1a2c3d4-0000-0000-0000-000000000005"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>429</code>\n  <message>Rate limit exceeded. Retry after 10 seconds.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000005</requestId>\n</ErrorResponse>\n"}}},"InternalServerError":{"description":"Internal Server Error — unexpected server-side failure.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"code":500,"message":"An unexpected error occurred. Please contact support with your requestId.","requestId":"b1a2c3d4-0000-0000-0000-000000000006"}},"application/xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ErrorResponse>\n  <code>500</code>\n  <message>An unexpected error occurred.</message>\n  <requestId>b1a2c3d4-0000-0000-0000-000000000006</requestId>\n</ErrorResponse>\n"}}}},"schemas":{"SchemeCode":{"type":"string","description":"Payment scheme identifier.","enum":["SCT","SCT_INST","SDD_CORE","SDD_B2B","OCT_INST","CBPRPLUS","CHAPS","T2","EURO1","FEDWIRE","OTHER"]},"SchemeVersion":{"type":"string","description":"ISO 20022 scheme version / SR year.","enum":["SR2025","SR2026"]},"Direction":{"type":"string","description":"Payment processing direction. OUTBOUND = sending; INBOUND = receiving.","enum":["OUTBOUND","INBOUND"]},"PartyRole":{"type":"string","description":"ISO 20022 party role. Determines the PostalAddress24 XSD variant:\n- **__2 variant** (ultimate_debtor, ultimate_creditor, initiating_party):\n  TownName AND Country are MANDATORY. FULLY_UNSTRUCTURED is NEVER permitted (REG-05).\n- **__1 variant** (debtor, creditor):\n  Max 3 AddressLines. FULLY_UNSTRUCTURED is permitted until SR2026 cutover (2026-11-22T02:30:00Z) for INBOUND;\n  banned OUTBOUND post-cutover.\n","enum":["debtor","creditor","ultimate_debtor","ultimate_creditor","initiating_party"]},"AddressFormat":{"type":"string","description":"Detected or target address format classification.","enum":["FULLY_STRUCTURED","HYBRID","FULLY_UNSTRUCTURED"]},"TargetFormat":{"type":"string","description":"Target conversion format. `auto` lets ARS select the best achievable format.\n","enum":["auto","FULLY_STRUCTURED","HYBRID","FULLY_UNSTRUCTURED"]},"OutputMode":{"type":"string","description":"Address line rendering constraints applied during output formatting.\n- EPC: 2 lines × 70 chars\n- CBPR_PLUS: 3 lines × 35 chars\n- MT_LEGACY: 2 lines × 35 chars\n- COMPLIANCE: 7 lines × 70 chars\n","enum":["EPC","CBPR_PLUS","MT_LEGACY","COMPLIANCE"]},"Quality":{"type":"string","description":"Postal database verification depth.","enum":["premium","standard","basic"]},"AutoRepairMode":{"type":"string","description":"ARS AutoCorrect repair aggressiveness level.","enum":["CONSERVATIVE","STANDARD","AGGRESSIVE"]},"AutoCorrectStatus":{"type":"string","description":"Outcome of AutoCorrect processing for an address.","enum":["VALIDATED","REPAIRED","PARTIALLY_REPAIRED","NOT_REPAIRED"]},"PreCheckStatus":{"type":"string","description":"Outcome of structural pre-check validation.","enum":["COMPLIANT","NOT_COMPLIANT"]},"Decision":{"type":"string","description":"Top-level processing decision.","enum":["ACCEPT","REJECT","PARTIAL_SUCCESS"]},"MessageType":{"type":"string","description":"ISO 20022 message type. R-transaction types (pain.002, pain.007, pacs.002,\npacs.004, camt.029, camt.052, camt.053, camt.054, camt.055, camt.056, camt.058, camt.110, camt.111) must be submitted to R-transaction endpoints only\n(EP-07, EP-15). Submitting them to Check/Convert endpoints returns HTTP 422 (REG-06).\n","enum":["pain.001","pain.002","pain.007","pain.008","pacs.002","pacs.003","pacs.004","pacs.008","pacs.009","pacs.010","camt.029","camt.052","camt.053","camt.054","camt.055","camt.056","camt.057","camt.058","camt.060","camt.105","camt.106","camt.107","camt.108","camt.109","camt.110","camt.111"]},"ChannelType":{"type":"string","description":"Payment delivery channel type.","enum":["api","file","other"]},"PostalAddress":{"type":"object","description":"ISO 20022 PostalAddress24 object. All 14 structured fields are supported.\nCountry is strongly recommended for all submissions.\nAddressLine is limited to max 7 elements in schema; practical publishing limits\nare governed by OutputMode (EPC=2, CBPR_PLUS=3, MT_LEGACY=2, COMPLIANCE=7).\nPMPG non-duplication rule: structured fields (TownName, Country) must NOT also\nappear in AddressLine simultaneously.\n","properties":{"addressLine":{"type":"array","items":{"type":"string","maxLength":70},"maxItems":7,"description":"Unstructured address lines (max 70 chars each). Max 3 for __1 variant parties, max 2 for __2 variant parties.","xml":{"name":"AdrLine","wrapped":false}},"streetName":{"type":"string","maxLength":70,"xml":{"name":"StrtNm"}},"buildingNumber":{"type":"string","maxLength":16,"xml":{"name":"BldgNb"}},"buildingName":{"type":"string","maxLength":35,"xml":{"name":"BldgNm"}},"floor":{"type":"string","maxLength":70,"xml":{"name":"Flr"}},"postBox":{"type":"string","maxLength":16,"xml":{"name":"PstBx"}},"room":{"type":"string","maxLength":70,"xml":{"name":"Room"}},"postCode":{"type":"string","maxLength":16,"xml":{"name":"PstCd"}},"townName":{"type":"string","maxLength":35,"description":"Required for __2 variant parties (ultimate_debtor, ultimate_creditor, initiating_party). Best practice for all.","xml":{"name":"TwnNm"}},"townLocationName":{"type":"string","maxLength":35,"xml":{"name":"TwnLctnNm"}},"districtName":{"type":"string","maxLength":35,"xml":{"name":"DstrctNm"}},"countrySubDivision":{"type":"string","maxLength":35,"xml":{"name":"CtrySubDvsn"}},"country":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2. Strongly recommended. Required for __2 variant parties.","xml":{"name":"Ctry"}},"countryOfResidence":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2. Country where the party is resident. Distinct from country in the postal address.","xml":{"name":"CtryOfRes"}}}},"PostalAddressXml":{"type":"object","description":"ISO 20022 XML tag equivalents of PostalAddress. Alternative input format — clients\nmay supply either postalAddress (JSON) or postalAddressXml (XML tag names), not both.\n","properties":{"AdrLine":{"type":"array","items":{"type":"string","maxLength":70},"maxItems":7,"xml":{"wrapped":false}},"StrtNm":{"type":"string","maxLength":70},"BldgNb":{"type":"string","maxLength":16},"BldgNm":{"type":"string","maxLength":35},"Flr":{"type":"string","maxLength":70},"PstBx":{"type":"string","maxLength":16},"Room":{"type":"string","maxLength":70},"PstCd":{"type":"string","maxLength":16},"TwnNm":{"type":"string","maxLength":35},"TwnLctnNm":{"type":"string","maxLength":35},"DstrctNm":{"type":"string","maxLength":35},"CtrySubDvsn":{"type":"string","maxLength":35},"Ctry":{"type":"string","pattern":"^[A-Z]{2}$"},"CtryOfRes":{"type":"string","pattern":"^[A-Z]{2}$"}}},"Identification":{"type":"object","description":"Optional party identifiers. Used for entity conflict detection (R-04).","properties":{"organisationId":{"type":"object","xml":{"name":"OrgId"},"properties":{"anyBic":{"type":"string","description":"BIC (8 or 11 chars).","xml":{"name":"AnyBIC"}},"lei":{"type":"string","description":"Legal Entity Identifier (20 chars).","xml":{"name":"LEI"}},"other":{"type":"string","description":"Other organisation identifier.","xml":{"name":"Othr"}}}},"privateId":{"type":"object","xml":{"name":"PrvtId"},"properties":{"other":{"type":"string","description":"Private individual identifier.","xml":{"name":"Othr"}}}}}},"ProcessingOptions":{"type":"object","xml":{"name":"ProcessingOptions"},"description":"Per-request overrides of the channelProfile configuration. Only fields present\nhere override the corresponding channelProfile value. Fields absent here fall\nthrough to channelProfile. This is NOT a general-purpose configuration block —\nit only overrides values already set in channelProfile.\n","properties":{"scheme":{"allOf":[{"$ref":"#/components/schemas/SchemeCode"}],"description":"Per-request override of channelProfile.scheme."},"schemeVersion":{"allOf":[{"$ref":"#/components/schemas/SchemeVersion"}],"description":"Per-request override of channelProfile.schemeVersion. SR2025 or SR2026."},"quality":{"allOf":[{"$ref":"#/components/schemas/Quality"}],"description":"Per-request override of channelProfile.quality."},"verification":{"type":"boolean","description":"Per-request override. When false, skips postal DB lookup. Forced false for Basic quality."},"detectMisplacedIdentifiers":{"type":"boolean","description":"Per-request override. When true, flags BIC/LEI/IBAN found in AddressLine (R-04)."},"validateNameContent":{"type":"boolean","description":"Per-request override. When true, checks for party name duplication in address lines (R-05)."},"redaction":{"type":"string","enum":["NONE","PARTIAL","FULL"],"description":"Per-request override. PII redaction level applied to response address fields."},"targetFormat":{"allOf":[{"$ref":"#/components/schemas/TargetFormat"}],"description":"Per-request override of channelProfile default targetFormat."},"repairConfidenceThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Per-request override of channelProfile.repairConfidenceThreshold (0.0–1.0)."},"payerPspCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Per-request override of channelProfile.payerPspCountry. ISO 3166-1 alpha-2."},"payeePspCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Per-request override of channelProfile.payeePspCountry. ISO 3166-1 alpha-2."}}},"Context":{"type":"object","xml":{"name":"Context"},"description":"Analytics/audit passthrough AND processing fallback layer.\nFields labelled \"Analytics + Processing fallback\" are used as last-resort defaults\nwhen both channelProfile and processingOptions leave a parameter unresolved.\nPure analytics fields are written to the ARS audit log but do not affect processing.\nProcessing precedence: channelProfile → processingOptions → context.\n","properties":{"name":{"type":"string","description":"Analytics only. ISO 20022 party name used for entity conflict detection."},"scheme":{"allOf":[{"$ref":"#/components/schemas/SchemeCode"}],"description":"Analytics + Processing fallback. Payment scheme."},"schemeVersion":{"allOf":[{"$ref":"#/components/schemas/SchemeVersion"}],"description":"Analytics + Processing fallback. SR2025 or SR2026. Controls post-cutover enforcement."},"executionDatetime":{"type":"string","format":"date-time","description":"Analytics + Processing fallback. Payment execution datetime in ISO 8601 UTC. Used for SR2026 cutover enforcement (cutover = 2026-11-22T02:30:00Z)."},"direction":{"allOf":[{"$ref":"#/components/schemas/Direction"}],"description":"Analytics + Processing fallback. OUTBOUND | INBOUND."},"partyRole":{"allOf":[{"$ref":"#/components/schemas/PartyRole"}],"description":"Analytics + Processing fallback. Party role for this request."},"outputMode":{"allOf":[{"$ref":"#/components/schemas/OutputMode"}],"description":"Analytics + Processing fallback. Address line rendering constraints."},"sendingCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Analytics + Processing fallback. Country of the sending PSP (ISO 3166-1 alpha-2)."},"receivingCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Analytics + Processing fallback. Country of the receiving PSP."},"messageType":{"allOf":[{"$ref":"#/components/schemas/MessageType"}],"description":"Analytics + Processing fallback. ISO 20022 message type."},"timezone":{"type":"string","description":"Analytics + Processing fallback. IANA timezone for executionDatetime evaluation."},"inputFormat":{"allOf":[{"$ref":"#/components/schemas/AddressFormat"}],"description":"Analytics only. Format of the originating input."},"outputFormat":{"allOf":[{"$ref":"#/components/schemas/AddressFormat"}],"description":"Analytics only. Expected output format."},"source":{"type":"string","description":"Analytics only. Sending system identifier (e.g. PAYMENT_HUB, SWIFT_ALLIANCE)."},"sender":{"type":"string","description":"Analytics only. BIC of the sending institution."},"receiver":{"type":"string","description":"Analytics only. BIC of the receiving institution."},"paymentMethod":{"type":"string","description":"Analytics only. Payment method for audit reporting."},"channel":{"allOf":[{"$ref":"#/components/schemas/ChannelType"}],"description":"Analytics only. Delivery channel for audit."},"application":{"type":"string","description":"Analytics only. Caller application identifier."},"reference":{"type":"string","description":"Analytics only. Business reference for audit trail (e.g. payment ID, batch ID)."},"partyType":{"type":"string","enum":["COMPANY","INDIVIDUAL"],"description":"Analytics only. Whether the party is a company or individual."}}},"ReasonCode":{"type":"object","xml":{"name":"ReasonCode"},"description":"Structured reason code. Prefix indicates category:\nFMT = format, FLD = field, REG = regulatory, ENT = entity, VRF = verification, CNV = conversion.\n","required":["code","severity","message"],"properties":{"code":{"type":"string","description":"Reason code in PREFIX-NN format (e.g. FMT-01, REG-05, VRF-03).","example":"REG-05"},"severity":{"type":"string","enum":["ERROR","WARNING","INFO"],"description":"Severity level."},"field":{"type":"string","description":"ISO 20022 field name the reason applies to (e.g. TownName, AddressLine)."},"message":{"type":"string","description":"Human-readable explanation."},"ruleSource":{"type":"string","description":"Regulatory reference (e.g. EPC SCT Rulebook §3.4, CBPR+ MP §2.1)."}}},"Issue":{"type":"object","xml":{"name":"Issue"},"description":"Legacy issue object. Preserved for backward compatibility with v4.0 integrations.\nNew integrations should use reasons[] instead.\n","properties":{"severity":{"type":"string","enum":["ERROR","WARNING","INFO"]},"code":{"type":"string"},"message":{"type":"string"},"field":{"type":"string"}}},"Statistics":{"type":"object","xml":{"name":"Statistics"},"description":"Processing statistics block returned on all endpoints.","properties":{"processingTimeMs":{"type":"integer","description":"Total processing time in milliseconds."},"totalRecords":{"type":"integer","description":"Total number of records submitted."},"processedRecords":{"type":"integer","description":"Number of records successfully processed."},"acceptedCount":{"type":"integer"},"rejectedCount":{"type":"integer"}}},"RTransactionContext":{"type":"object","xml":{"name":"RTransactionContext"},"description":"R-transaction exemption assessment result.","properties":{"exemptionApplicable":{"type":"boolean","nullable":true,"description":"TRUE if original predates SR2026 cutover and exemption applies; FALSE if postdates; null if originalExecutionDatetime not provided."},"cutoverDatetime":{"type":"string","format":"date-time","description":"Always 2026-11-22T02:30:00Z — the SR2026 cutover reference datetime.","example":"2026-11-22T02:30:00Z"},"originalIsPreCutover":{"type":"boolean","description":"TRUE if the original payment execution datetime predates the SR2026 cutover."}}},"AddressResult":{"type":"object","description":"Full address processing result object (used in EP-01 and all Layer 1 responses).","xml":{"name":"AddressResult"},"properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"inputFormat":{"allOf":[{"$ref":"#/components/schemas/AddressFormat"}],"description":"Format detected in the submitted address."},"outputFormat":{"allOf":[{"$ref":"#/components/schemas/AddressFormat"}],"description":"Format of the processed output address."},"status":{"$ref":"#/components/schemas/AutoCorrectStatus"},"output":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"description":"Processed PostalAddress24 output.","xml":{"name":"PstlAdr"}},"verification":{"type":"object","description":"Postal DB verification result.","properties":{"status":{"type":"string","enum":["verified","partial","unverified"]},"score":{"type":"number","minimum":0,"maximum":1}}},"extractedIdentifiers":{"type":"object","description":"Identifiers extracted from AddressLine (R-04 entity extraction).","properties":{"bic":{"type":"string"},"lei":{"type":"string"},"iban":{"type":"string"}}},"detectedNameInAddress":{"type":"string","description":"Party name text found embedded within address lines (R-05 PMPG non-duplication)."},"confidence":{"type":"object","description":"Overall confidence score (0.0–1.0) and per-field confidence scores.","properties":{"overall":{"type":"number","minimum":0,"maximum":1},"fields":{"type":"object","additionalProperties":{"type":"number"}}}},"canonical":{"type":"object","description":"Canonical normalised address and SHA-256 fingerprint. Present when `include` contains `canonical`.","properties":{"address":{"$ref":"#/components/schemas/PostalAddress"},"fingerprint":{"type":"string","description":"SHA-256 hash of the canonical address for deduplication."}}},"rTransactionExempt":{"type":"boolean","description":"TRUE if this address is exempt from SR2026 enforcement under EPC §8.3."},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/ReasonCode"}}}},"MessageAddressResult":{"xml":{"name":"MessageAddressResult"},"allOf":[{"$ref":"#/components/schemas/AddressResult"},{"type":"object","properties":{"xpath":{"type":"string","description":"XPath location of this party address within the ISO 20022 message."},"postalAddressVariant":{"type":"string","enum":["__1","__2"],"description":"PostalAddress24 XSD variant (__1 = debtor/creditor, __2 = ultimate/initiating)."}}}]},"ErrorResponse":{"type":"object","xml":{"name":"ErrorResponse"},"description":"Standard error envelope returned on 4xx and 5xx responses.","properties":{"code":{"type":"integer","description":"HTTP status code."},"message":{"type":"string","description":"Human-readable error description."},"requestId":{"type":"string","description":"Correlation ID for support."}}},"ChannelSelection":{"type":"object","xml":{"name":"ChannelSelection"},"description":"Channel identification block for channelProfile registration and retrieval.","required":["channel"],"properties":{"channel":{"allOf":[{"$ref":"#/components/schemas/ChannelType"}],"description":"Payment delivery channel type. Required."},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"schemeVersion":{"$ref":"#/components/schemas/SchemeVersion"},"direction":{"$ref":"#/components/schemas/Direction"},"messageType":{"$ref":"#/components/schemas/MessageType"},"partyRole":{"allOf":[{"$ref":"#/components/schemas/PartyRole"}],"description":"Default party role. Determines PostalAddress24 XSD variant."},"pspCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"PSP home country for this channel. Overrides account-level pspCountry."},"payerPspCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Default payer PSP country for EEA mandate determination."},"payeePspCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Default payee PSP country for EEA mandate determination."},"timezone":{"type":"string","description":"Default IANA timezone for executionDatetime evaluation (e.g. Europe/Frankfurt)."}}},"Corridor":{"type":"object","xml":{"name":"Corridor"},"description":"Default corridor (geographic routing) block for a channelProfile.","properties":{"sendingCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Default sending PSP country (ISO 3166-1 alpha-2)."},"receivingCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Default receiving PSP country (ISO 3166-1 alpha-2)."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Default transaction currency (ISO 4217, e.g. EUR, GBP, USD)."}}},"ChannelPreferences":{"type":"object","xml":{"name":"ChannelPreferences"},"description":"Output and behaviour preference defaults for a channelProfile.","properties":{"outputMode":{"$ref":"#/components/schemas/OutputMode"},"autoRepairMode":{"$ref":"#/components/schemas/AutoRepairMode"},"enforcePostNovember2026":{"type":"boolean","description":"When true, force SR2026 rules even if schemeVersion=SR2025."},"targetFormat":{"$ref":"#/components/schemas/TargetFormat"},"quality":{"$ref":"#/components/schemas/Quality"},"repairConfidenceThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Default minimum confidence score for REPAIRED classification (0.0–1.0)."}}},"CreateChannelProfileRequest":{"type":"object","xml":{"name":"CreateChannelProfileRequest"},"description":"Request body for EP-25 — Register Channel Profile.","required":["channelName","channelSelection"],"properties":{"channelName":{"type":"string","description":"Unique name for this channel profile. Must be unique per account. Use DELETE + POST to rename.","example":"CBPR_OUTBOUND_US"},"channelSelection":{"$ref":"#/components/schemas/ChannelSelection"},"corridor":{"$ref":"#/components/schemas/Corridor"},"preferences":{"$ref":"#/components/schemas/ChannelPreferences"}}},"UpdateChannelProfileRequest":{"type":"object","xml":{"name":"UpdateChannelProfileRequest"},"description":"Request body for EP-26 — Update Channel Profile (PATCH semantics).\nOnly fields provided are updated. channelName cannot be changed via PATCH.\n","properties":{"channelSelection":{"type":"object","description":"PATCH of channelSelection block. Only provided sub-fields are updated.","properties":{"channel":{"$ref":"#/components/schemas/ChannelType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"schemeVersion":{"$ref":"#/components/schemas/SchemeVersion"},"direction":{"$ref":"#/components/schemas/Direction"},"messageType":{"$ref":"#/components/schemas/MessageType"},"partyRole":{"$ref":"#/components/schemas/PartyRole"},"pspCountry":{"type":"string","pattern":"^[A-Z]{2}$"},"payerPspCountry":{"type":"string","pattern":"^[A-Z]{2}$"},"payeePspCountry":{"type":"string","pattern":"^[A-Z]{2}$"},"timezone":{"type":"string"}}},"corridor":{"type":"object","properties":{"sendingCountry":{"type":"string","pattern":"^[A-Z]{2}$"},"receivingCountry":{"type":"string","pattern":"^[A-Z]{2}$"},"currency":{"type":"string","pattern":"^[A-Z]{3}$"}}},"preferences":{"type":"object","properties":{"outputMode":{"$ref":"#/components/schemas/OutputMode"},"autoRepairMode":{"$ref":"#/components/schemas/AutoRepairMode"},"enforcePostNovember2026":{"type":"boolean"},"targetFormat":{"$ref":"#/components/schemas/TargetFormat"},"quality":{"$ref":"#/components/schemas/Quality"},"repairConfidenceThreshold":{"type":"number","minimum":0,"maximum":1}}}}},"ChannelProfileResponse":{"type":"object","xml":{"name":"ChannelProfileResponse"},"description":"Full channel profile returned by EP-25 (201), EP-26 (200), and EP-27 (200).","properties":{"channelName":{"type":"string","example":"CBPR_OUTBOUND_US"},"channelSelection":{"$ref":"#/components/schemas/ChannelSelection"},"corridor":{"$ref":"#/components/schemas/Corridor"},"preferences":{"$ref":"#/components/schemas/ChannelPreferences"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when this channel profile was first registered."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp when this channel profile was last updated."}}},"FormatLimits":{"type":"object","xml":{"name":"FormatLimits"},"description":"Default address line count and length limits for the account.","properties":{"maxLines":{"type":"integer","description":"Default maximum address lines.","example":3},"maxLineLength":{"type":"integer","description":"Default maximum characters per line.","example":35}}},"ChannelProfileSummary":{"type":"object","xml":{"name":"ChannelProfileSummary"},"description":"Summary entry for a channelProfile in the account profile listing.","properties":{"channelName":{"type":"string"},"channel":{"$ref":"#/components/schemas/ChannelType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"schemeVersion":{"$ref":"#/components/schemas/SchemeVersion"},"direction":{"$ref":"#/components/schemas/Direction"},"outputMode":{"$ref":"#/components/schemas/OutputMode"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ProfileResponse":{"type":"object","xml":{"name":"ProfileResponse"},"description":"Account-level profile. Contains institutional fallback settings and\na listing of all registered channelProfiles.\n[v4.3] scheme, schemeVersion, direction, targetFormat, autoRepairMode,\npspCountry, timezone, quality, repairConfidenceThreshold have been moved\nto channelProfile. The account profile now retains only institution-level\nfallback values (pspCountry, timezone, quality, repairConfidenceThreshold).\n","properties":{"account_id":{"type":"string","description":"Unique account identifier.","example":"acc_8f2a91bc"},"region":{"type":"string","description":"Deployment region for data residency (EU-based data centres).","example":"europe_sepa"},"community":{"type":"string","description":"Account community / tier classification. System-assigned.","example":"premium_tier"},"formatLimits":{"$ref":"#/components/schemas/FormatLimits"},"channelProfiles":{"type":"array","description":"Array of all registered channelProfiles for this account. Each entry is a summary.","items":{"$ref":"#/components/schemas/ChannelProfileSummary"}}}},"UpdateProfileRequest":{"type":"object","xml":{"name":"UpdateProfileRequest"},"description":"PATCH body for EP-23. Only account-level fields are patchable here.\n[v4.3] Channel-specific settings (scheme, schemeVersion, direction, outputMode,\nautoRepairMode, targetFormat) are now managed via EP-26 channelProfile PATCH.\n","properties":{"region":{"type":"string","description":"Deployment region for data residency. One of: europe_sepa, us_east, ap_southeast."},"pspCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"Account-level institutional PSP country fallback (ISO 3166-1 alpha-2)."},"timezone":{"type":"string","description":"Account-level institutional timezone fallback. Overridden by channelProfile."},"quality":{"allOf":[{"$ref":"#/components/schemas/Quality"}],"description":"Account-level institutional quality fallback. Overridden by channelProfile."},"repairConfidenceThreshold":{"type":"number","minimum":0,"maximum":1,"description":"Account-level institutional confidence threshold fallback (0.0–1.0)."}}},"ProcessPartyAddressRequest":{"type":"object","description":"EP-01 request. Full ARS AutoCorrect processing on a single party address.\nProcessing precedence: channelProfile → processingOptions → context.\n","xml":{"name":"ProcessPartyAddressRequest"},"properties":{"channelName":{"type":"string","description":"Name of a registered channelProfile. Loads all channel defaults."},"name":{"type":"string","description":"ISO 20022 party name. Used for entity conflict detection and name-in-address detection.","xml":{"name":"Nm"}},"postalAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"xml":{"name":"PstlAdr"}},"postalAddressXml":{"allOf":[{"$ref":"#/components/schemas/PostalAddressXml"}],"description":"ISO 20022 XML tag equivalents. Alternative to postalAddress.","xml":{"name":"PstlAdr"}},"identification":{"allOf":[{"$ref":"#/components/schemas/Identification"}],"xml":{"name":"Id"}},"countryOfResidence":{"type":"string","pattern":"^[A-Z]{2}$","xml":{"name":"CtryOfRes"}},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"},"include":{"type":"array","items":{"type":"string","enum":["canonical","traceability","actions"]},"description":"Optional response enrichment fields."}}},"ProcessPartyAddressResponse":{"type":"object","xml":{"name":"ProcessPartyAddressResponse"},"properties":{"decision":{"$ref":"#/components/schemas/Decision"},"result":{"$ref":"#/components/schemas/AddressResult"},"statistics":{"$ref":"#/components/schemas/Statistics"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"},"description":"Ordered issue list. Preserved for backward compatibility."},"timestamp":{"type":"string","format":"date-time"}}},"ProcessBatchPartyAddressRequest":{"type":"object","xml":{"name":"ProcessBatchPartyAddressRequest"},"description":"EP-02 batch request. Up to 1,000 transaction sets per call.","required":["transactionSets"],"properties":{"channelName":{"type":"string"},"transactionSets":{"type":"array","maxItems":1000,"items":{"type":"object","required":["transactionSetId","addresses"],"properties":{"transactionSetId":{"type":"string","description":"Client-assigned identifier for the transaction set."},"addresses":{"type":"array","maxItems":10,"items":{"$ref":"#/components/schemas/ProcessPartyAddressRequest"},"description":"Array of 1–10 ProcessPartyAddressRequest objects."}}}},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"},"include":{"type":"array","items":{"type":"string"}}}},"ProcessBatchPartyAddressResponse":{"type":"object","xml":{"name":"ProcessBatchPartyAddressResponse"},"properties":{"decision":{"$ref":"#/components/schemas/Decision"},"statistics":{"$ref":"#/components/schemas/Statistics"},"transactionSets":{"type":"array","items":{"type":"object","properties":{"transactionSetId":{"type":"string"},"decision":{"$ref":"#/components/schemas/Decision"},"results":{"type":"array","items":{"$ref":"#/components/schemas/AddressResult"}}}}},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}},"timestamp":{"type":"string","format":"date-time"}}},"CheckPartyAddressRequest":{"type":"object","description":"EP-03 request. Structural check only — no AutoCorrect repair.","xml":{"name":"CheckPartyAddressRequest"},"properties":{"channelName":{"type":"string"},"postalAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"xml":{"name":"PstlAdr"}},"postalAddressXml":{"allOf":[{"$ref":"#/components/schemas/PostalAddressXml"}],"xml":{"name":"PstlAdr"}},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"CheckPartyAddressResponse":{"type":"object","xml":{"name":"CheckPartyAddressResponse"},"properties":{"status":{"$ref":"#/components/schemas/PreCheckStatus"},"valid":{"type":"boolean","description":"TRUE if no structural errors. Preserved for backward compatibility."},"format":{"$ref":"#/components/schemas/AddressFormat"},"fieldResults":{"type":"array","description":"Per-field structural compliance detail.","items":{"type":"object","properties":{"field":{"type":"string"},"status":{"$ref":"#/components/schemas/PreCheckStatus"},"message":{"type":"string"}}}},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/ReasonCode"}},"statistics":{"$ref":"#/components/schemas/Statistics"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}}}},"ConvertPartyAddressRequest":{"type":"object","description":"EP-04 request. Format conversion to targetFormat.","xml":{"name":"ConvertPartyAddressRequest"},"properties":{"channelName":{"type":"string"},"name":{"type":"string","description":"ISO 20022 party name. Used for entity conflict detection.","xml":{"name":"Nm"}},"postalAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"xml":{"name":"PstlAdr"}},"postalAddressXml":{"allOf":[{"$ref":"#/components/schemas/PostalAddressXml"}],"xml":{"name":"PstlAdr"}},"identification":{"allOf":[{"$ref":"#/components/schemas/Identification"}],"xml":{"name":"Id"}},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"},"include":{"type":"array","items":{"type":"string"}}}},"ConvertPartyAddressResponse":{"type":"object","xml":{"name":"ConvertPartyAddressResponse"},"properties":{"status":{"$ref":"#/components/schemas/AutoCorrectStatus"},"success":{"type":"boolean","description":"TRUE if conversion achieved target or fallback format. Preserved for backward compatibility."},"inputFormat":{"$ref":"#/components/schemas/AddressFormat"},"outputFormat":{"$ref":"#/components/schemas/AddressFormat"},"correctedAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"description":"Corrected PostalAddress24 fields. null when status = NOT_REPAIRED.","nullable":true,"xml":{"name":"PstlAdr"}},"confidence":{"type":"object","properties":{"overall":{"type":"number"},"fields":{"type":"object","additionalProperties":{"type":"number"}}}},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/ReasonCode"}},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}},"statistics":{"$ref":"#/components/schemas/Statistics"},"timestamp":{"type":"string","format":"date-time"}}},"RenderPartyAddressRequest":{"type":"object","description":"EP-05 request. Formats address into unstructured lines per OutputMode limits.","xml":{"name":"RenderPartyAddressRequest"},"properties":{"channelName":{"type":"string"},"name":{"type":"string","description":"ISO 20022 party name. Included in rendered output when present.","xml":{"name":"Nm"}},"postalAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"xml":{"name":"PstlAdr"}},"postalAddressXml":{"allOf":[{"$ref":"#/components/schemas/PostalAddressXml"}],"xml":{"name":"PstlAdr"}},"maxLines":{"type":"integer","description":"Maximum output lines. Overrides channelProfile format limits."},"maxLineLength":{"type":"integer","description":"Maximum chars per output line. Overrides channelProfile. Default 35."},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"RenderPartyAddressResponse":{"type":"object","xml":{"name":"RenderPartyAddressResponse"},"properties":{"decision":{"type":"string","enum":["ACCEPT","PARTIAL_SUCCESS"]},"result":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"inputFormat":{"$ref":"#/components/schemas/AddressFormat"},"outputFormat":{"$ref":"#/components/schemas/AddressFormat"},"status":{"type":"string"},"output":{"type":"object","xml":{"name":"PstlAdr"},"properties":{"addressLine":{"type":"array","items":{"type":"string"},"xml":{"name":"AdrLine","wrapped":false}},"country":{"type":"string","description":"Country code — always preserved separately.","xml":{"name":"Ctry"}}}},"dataLoss":{"type":"boolean","description":"TRUE if truncation occurred during rendering."},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/ReasonCode"}}}},"statistics":{"$ref":"#/components/schemas/Statistics"},"timestamp":{"type":"string","format":"date-time"}}},"ClassifyPartyAddressRequest":{"type":"object","description":"EP-06 request. Lightweight classification only — no repair.","xml":{"name":"ClassifyPartyAddressRequest"},"properties":{"channelName":{"type":"string"},"postalAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"xml":{"name":"PstlAdr"}},"postalAddressXml":{"allOf":[{"$ref":"#/components/schemas/PostalAddressXml"}],"xml":{"name":"PstlAdr"}},"context":{"allOf":[{"$ref":"#/components/schemas/Context"}],"description":"Analytics only for this endpoint — no processing fallback."}}},"ClassifyPartyAddressResponse":{"type":"object","xml":{"name":"ClassifyPartyAddressResponse"},"properties":{"format":{"$ref":"#/components/schemas/AddressFormat"},"hasAddressLine":{"type":"boolean"},"addressLineCount":{"type":"integer"},"hasStructuredFields":{"type":"boolean"},"hasTownName":{"type":"boolean"},"hasCountry":{"type":"boolean"}}},"RTransactionPartyAddressRequest":{"type":"object","description":"EP-07 request. R-transaction address exemption assessment.","required":["postalAddress"],"xml":{"name":"RTransactionPartyAddressRequest"},"properties":{"channelName":{"type":"string"},"postalAddress":{"allOf":[{"$ref":"#/components/schemas/PostalAddress"}],"description":"The exact address as it appears in the R-message. Must not be altered.","xml":{"name":"PstlAdr"}},"originalExecutionDatetime":{"type":"string","format":"date-time","description":"When the original payment was executed. Determines SR2026 exemption eligibility."},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"RTransactionPartyAddressResponse":{"type":"object","xml":{"name":"RTransactionPartyAddressResponse"},"properties":{"decision":{"$ref":"#/components/schemas/Decision"},"rTransactionContext":{"$ref":"#/components/schemas/RTransactionContext"},"result":{"allOf":[{"$ref":"#/components/schemas/AddressResult"}],"description":"Address exactly as submitted — NO repair is applied."},"statistics":{"$ref":"#/components/schemas/Statistics"},"timestamp":{"type":"string","format":"date-time"}}},"MessageRequestBase":{"type":"object","xml":{"name":"MessageRequestBase"},"description":"Common fields shared by all Layer 2 message-level endpoints.","properties":{"channelName":{"type":"string","description":"Name of a registered channelProfile. Loads scheme, direction, outputMode, and other defaults."},"executionDatetime":{"type":"string","format":"date-time","description":"Transaction execution datetime for SR2026 cutover enforcement."},"messageContent":{"type":"object","description":"JSON equivalent of the ISO 20022 message. One of messageContent or messageXml required."},"messageXml":{"type":"string","description":"Raw ISO 20022 XML string. Takes precedence over messageContent if both provided."},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"},"include":{"type":"array","items":{"type":"string"}}}},"ProcessMessageRequest":{"allOf":[{"$ref":"#/components/schemas/MessageRequestBase"}],"description":"EP-08 request. Full ARS AutoCorrect on all party addresses in an ISO 20022 message.","xml":{"name":"ProcessMessageRequest"}},"ProcessMessageResponse":{"type":"object","xml":{"name":"ProcessMessageResponse"},"properties":{"decision":{"$ref":"#/components/schemas/Decision"},"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"discoveredAddresses":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MessageAddressResult"}},"statistics":{"$ref":"#/components/schemas/Statistics"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}},"timestamp":{"type":"string","format":"date-time"}}},"ProcessBatchMessageRequest":{"type":"object","xml":{"name":"ProcessBatchMessageRequest"},"description":"EP-09 batch request. Up to 100 messages per call.","required":["messages"],"properties":{"channelName":{"type":"string"},"messages":{"type":"array","maxItems":100,"items":{"type":"object","required":["messageType","scheme"],"properties":{"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"schemeVersion":{"$ref":"#/components/schemas/SchemeVersion"},"executionDatetime":{"type":"string","format":"date-time"},"messageContent":{"type":"object"},"messageXml":{"type":"string"}}}},"context":{"$ref":"#/components/schemas/Context"}}},"ProcessBatchMessageResponse":{"type":"object","xml":{"name":"ProcessBatchMessageResponse"},"properties":{"decision":{"$ref":"#/components/schemas/Decision"},"messageResults":{"type":"array","items":{"type":"object","properties":{"decision":{"$ref":"#/components/schemas/Decision"},"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"discoveredAddresses":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MessageAddressResult"}}}}},"statistics":{"$ref":"#/components/schemas/Statistics"},"timestamp":{"type":"string","format":"date-time"}}},"CheckMessageRequest":{"type":"object","xml":{"name":"CheckMessageRequest"},"description":"EP-10 request. Structural PreCheck on all party addresses in message.","properties":{"channelName":{"type":"string"},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"CheckMessageResponse":{"type":"object","xml":{"name":"CheckMessageResponse"},"properties":{"messageStatus":{"$ref":"#/components/schemas/PreCheckStatus"},"compliantCount":{"type":"integer"},"nonCompliantCount":{"type":"integer"},"discoveredAddresses":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string"},"postalAddressVariant":{"type":"string","enum":["__1","__2"]},"format":{"$ref":"#/components/schemas/AddressFormat"},"status":{"$ref":"#/components/schemas/PreCheckStatus"},"fieldResults":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"status":{"$ref":"#/components/schemas/PreCheckStatus"}}}},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/ReasonCode"}},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}}}}},"timestamp":{"type":"string","format":"date-time"}}},"ClassifyMessageRequest":{"type":"object","xml":{"name":"ClassifyMessageRequest"},"description":"EP-11 request. Classification of all party addresses in message.","properties":{"channelName":{"type":"string"},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"context":{"allOf":[{"$ref":"#/components/schemas/Context"}],"description":"Analytics only for this endpoint."}}},"ClassifyMessageResponse":{"type":"object","xml":{"name":"ClassifyMessageResponse"},"properties":{"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"discoveredAddresses":{"type":"integer"},"classifications":{"type":"array","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string"},"postalAddressVariant":{"type":"string","enum":["__1","__2"]},"format":{"$ref":"#/components/schemas/AddressFormat"},"hasTownName":{"type":"boolean"},"hasCountry":{"type":"boolean"},"addressLineCount":{"type":"integer"}}}},"timestamp":{"type":"string","format":"date-time"}}},"ConvertMessageRequest":{"type":"object","xml":{"name":"ConvertMessageRequest"},"description":"EP-12 request. Format conversion on all party addresses in message.","required":["messageType","scheme","targetFormat"],"properties":{"channelName":{"type":"string"},"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"targetFormat":{"$ref":"#/components/schemas/TargetFormat"},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"perAddressOverrides":{"type":"array","description":"Per-party-role direction and outputMode overrides for mixed-direction messages.","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"direction":{"$ref":"#/components/schemas/Direction"},"outputMode":{"$ref":"#/components/schemas/OutputMode"}}}},"returnCorrectedMessage":{"type":"boolean","description":"Default true when messageXml provided. Returns correctedMessageXml in response."},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"ConvertMessageResponse":{"type":"object","xml":{"name":"ConvertMessageResponse"},"properties":{"messageStatus":{"$ref":"#/components/schemas/AutoCorrectStatus"},"correctedMessageXml":{"type":"string","nullable":true,"description":"Complete corrected ISO 20022 XML. null when returnCorrectedMessage=false."},"validatedCount":{"type":"integer"},"repairedCount":{"type":"integer"},"partiallyRepairedCount":{"type":"integer"},"notRepairedCount":{"type":"integer"},"discoveredAddresses":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string"},"status":{"$ref":"#/components/schemas/AutoCorrectStatus"},"inputFormat":{"$ref":"#/components/schemas/AddressFormat"},"outputFormat":{"$ref":"#/components/schemas/AddressFormat"},"correctedAddress":{"$ref":"#/components/schemas/PostalAddress"},"confidence":{"type":"object","properties":{"overall":{"type":"number"},"fields":{"type":"object","additionalProperties":{"type":"number"}}}},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/ReasonCode"}}}}},"statistics":{"$ref":"#/components/schemas/Statistics"},"timestamp":{"type":"string","format":"date-time"}}},"RenderMessageRequest":{"type":"object","xml":{"name":"RenderMessageRequest"},"description":"EP-13 request. Renders all party addresses in message into unstructured lines.","properties":{"channelName":{"type":"string"},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"RenderMessageResponse":{"type":"object","xml":{"name":"RenderMessageResponse"},"properties":{"decision":{"type":"string","enum":["ACCEPT","PARTIAL_SUCCESS"]},"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"discoveredAddresses":{"type":"integer"},"results":{"type":"array","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string"},"postalAddressVariant":{"type":"string","enum":["__1","__2"]},"status":{"type":"string"},"output":{"type":"object","properties":{"addressLine":{"type":"array","items":{"type":"string"}},"country":{"type":"string"}}},"dataLoss":{"type":"boolean"}}}},"statistics":{"$ref":"#/components/schemas/Statistics"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}},"timestamp":{"type":"string","format":"date-time"}}},"ExtractMessageRequest":{"type":"object","xml":{"name":"ExtractMessageRequest"},"description":"EP-14 request. Extracts and inventories all party addresses in message.","properties":{"channelName":{"type":"string"},"executionDatetime":{"type":"string","format":"date-time"},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"allOf":[{"$ref":"#/components/schemas/Context"}],"description":"Provide sendingCountry and receivingCountry for accurate mandate assessment."},"include":{"type":"array","items":{"type":"string"}}}},"ExtractMessageResponse":{"type":"object","xml":{"name":"ExtractMessageResponse"},"properties":{"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"discoveredAddresses":{"type":"integer"},"partyAddresses":{"type":"array","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string"},"postalAddressVariant":{"type":"string","enum":["__1","__2"]},"format":{"$ref":"#/components/schemas/AddressFormat"},"postalAddress":{"$ref":"#/components/schemas/PostalAddress"},"identification":{"$ref":"#/components/schemas/Identification"},"countryOfResidence":{"type":"string","pattern":"^[A-Z]{2}$"},"isMandatory":{"type":"boolean","description":"Whether this address is legally required for this scheme and corridor."},"complianceReady":{"type":"boolean","description":"Whether this address would pass SR2026 post-cutover enforcement."}}}},"timestamp":{"type":"string","format":"date-time"}}},"RTransactionMessageRequest":{"type":"object","xml":{"name":"RTransactionMessageRequest"},"description":"EP-15 request. R-transaction exemption assessment for all addresses in message.","properties":{"channelName":{"type":"string"},"originalExecutionDatetime":{"type":"string","format":"date-time","description":"Optional — ARS auto-extracts from message XML if not provided."},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"$ref":"#/components/schemas/Context"}}},"RTransactionMessageResponse":{"type":"object","xml":{"name":"RTransactionMessageResponse"},"properties":{"decision":{"$ref":"#/components/schemas/Decision"},"messageType":{"$ref":"#/components/schemas/MessageType"},"originalExecutionDatetime":{"type":"string","format":"date-time"},"rTransactionContext":{"$ref":"#/components/schemas/RTransactionContext"},"discoveredAddresses":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/MessageAddressResult"}},"statistics":{"$ref":"#/components/schemas/Statistics"},"issues":{"type":"array","items":{"$ref":"#/components/schemas/Issue"}},"timestamp":{"type":"string","format":"date-time"}}},"MandatePartyAddressRequest":{"type":"object","xml":{"name":"MandatePartyAddressRequest"},"description":"EP-16 request. Address mandate determination for a single party.\nProcessing precedence: channelProfile → processingOptions → context.\n","required":["channelName"],"properties":{"channelName":{"type":"string","description":"Required. Name of a registered channelProfile. Loads pspCountry, payerPspCountry, payeePspCountry, scheme, schemeVersion."},"processingOptions":{"allOf":[{"$ref":"#/components/schemas/ProcessingOptions"}],"description":"Per-request overrides — scheme, schemeVersion, payerPspCountry, payeePspCountry."},"context":{"allOf":[{"$ref":"#/components/schemas/Context"}],"description":"Provide sendingCountry/receivingCountry as fallback for EEA determination."}}},"MandatePartyAddressResponse":{"type":"object","xml":{"name":"MandatePartyAddressResponse"},"properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"addressMandatory":{"type":"boolean","description":"TRUE if address is legally required for this transaction context."},"reason":{"type":"string","description":"Plain-English explanation of mandate determination."},"ruleSource":{"type":"string","description":"Regulatory reference (e.g. EU Regulation 2023/1113 Art 4, OCT Inst Rulebook §3.2)."}}},"MandateMessageRequest":{"type":"object","xml":{"name":"MandateMessageRequest"},"description":"EP-17 request. Address mandate determination for all parties in message.","properties":{"channelName":{"type":"string"},"executionDatetime":{"type":"string","format":"date-time"},"messageContent":{"type":"object"},"messageXml":{"type":"string"},"processingOptions":{"$ref":"#/components/schemas/ProcessingOptions"},"context":{"allOf":[{"$ref":"#/components/schemas/Context"}],"description":"Provide sendingCountry and receivingCountry for accurate EEA mandate determination."}}},"MandateMessageResponse":{"type":"object","xml":{"name":"MandateMessageResponse"},"properties":{"messageType":{"$ref":"#/components/schemas/MessageType"},"scheme":{"$ref":"#/components/schemas/SchemeCode"},"partyMandates":{"type":"array","items":{"type":"object","properties":{"partyRole":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string"},"addressMandatory":{"type":"boolean"},"addressPresent":{"type":"boolean"},"addressCompliant":{"type":"boolean","description":"TRUE if address is STRUCTURED or HYBRID (SR2026 forward-looking compliance)."},"reason":{"type":"string"}}}}}},"PmpgUsageIndicator":{"type":"string","description":"PMPG element usage indicator for a PostalAddress24 field in a given country.\nM=Mandatory, E=Expected, O=Optional, C=Conditional, N=Not used.\n","enum":["M","E","O","C","N"]},"CountriesResponse":{"type":"object","xml":{"name":"CountriesResponse"},"properties":{"countries":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","pattern":"^[A-Z]{2}$"},"name":{"type":"string"},"sepaMember":{"type":"boolean"},"eeaMember":{"type":"boolean"}}}}}},"CountryDetailResponse":{"type":"object","xml":{"name":"CountryDetailResponse"},"properties":{"code":{"type":"string","pattern":"^[A-Z]{2}$"},"name":{"type":"string"},"sepaMember":{"type":"boolean"},"eeaMember":{"type":"boolean"},"elementUsage":{"type":"object","description":"PMPG usage indicators for all 14 PostalAddress24 structured fields. M=Mandatory, E=Expected, O=Optional, C=Conditional, N=Not used.","properties":{"streetName":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"buildingNumber":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"buildingName":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"floor":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"postBox":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"room":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"postCode":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"townName":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"townLocationName":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"districtName":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"countrySubDivision":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"country":{"$ref":"#/components/schemas/PmpgUsageIndicator"},"addressLine":{"$ref":"#/components/schemas/PmpgUsageIndicator"}}}}},"SchemesResponse":{"type":"object","xml":{"name":"SchemesResponse"},"properties":{"schemes":{"type":"array","items":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/SchemeCode"},"name":{"type":"string"},"description":{"type":"string"},"messageTypes":{"type":"array","items":{"$ref":"#/components/schemas/MessageType"}}}}}}},"SchemeMessageTypesResponse":{"type":"object","xml":{"name":"SchemeMessageTypesResponse"},"properties":{"scheme":{"$ref":"#/components/schemas/SchemeCode"},"messageTypes":{"type":"array","items":{"type":"object","properties":{"messageType":{"$ref":"#/components/schemas/MessageType"},"name":{"type":"string"},"domain":{"type":"string","enum":["inter_psp","customer_to_psp"],"description":"inter_psp or customer_to_psp — message domain."},"partyRoles":{"type":"array","items":{"type":"object","properties":{"role":{"$ref":"#/components/schemas/PartyRole"},"xpath":{"type":"string","description":"XPath to the PostalAddress24 element in this message type."},"postalAddressVariant":{"type":"string","enum":["__1","__2"]},"isMandatory":{"type":"boolean","description":"Static mandate flag (true for OCT Inst payer; context-dependent for others)."}}}}}}}}},"HealthResponse":{"type":"object","xml":{"name":"HealthResponse"},"properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"],"description":"Operational status of the ARS service."},"version":{"type":"string","description":"Current ARS version (e.g. 4.3.0).","example":"4.3.0"},"timestamp":{"type":"string","format":"date-time","description":"Current server time in ISO 8601 UTC format."}}}}}}
```
