> For the complete documentation index, see [llms.txt](https://docs.nexusglobalpayments.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nexusglobalpayments.org/nexus-operation-apis/models.md).

# Models

## The ServiceRequestCategory object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestCategory":{"type":"string","enum":["PARTICIPANT_SUPPORT_AND_REQUESTS","PARTICIPANT_MANAGEMENT","INCIDENT_AND_AVAILABILITY_MANAGEMENT","DISPUTE_AND_RESOLUTION_MANAGEMENT","FEEDBACK_AND_COMPLAINT"],"description":"Primary catalog grouping of the selected ticket type, grouping the service catalog into its five primary areas. Exactly one category applies to each requestCode, so the pair is fixed by the catalog and never chosen freely: a category that does not match the selected requestCode is 400 INVALID_REQUEST. It is a classification, not a routing instruction, and does not select a recipient, fulfilment group, priority or service level."}}}}
```

## The ServiceRequestCode object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestCode":{"type":"string","enum":["TECHNICAL_SUPPORT","PARTICIPANT_SUPPORT","MTLS_CERTIFICATE_EXPIRY","CONFIDENTIAL_DISCLOSURE_REQUEST","NEXUS_PORTAL_SUPPORT","REFERENCE_DATA_CHANGE","PAYMENT_RECALL","PAYMENT_INFORMATION_REQUEST","IPSO_ONBOARDING_APPLICATION","PSP_ONBOARDING_APPLICATION","SAP_ONBOARDING_APPLICATION","PDO_ONBOARDING_APPLICATION","FXP_KYB_REQUEST","DIRECT_PARTICIPANT_WITHDRAWAL","TECHNICAL_INCIDENT","SECURITY_INCIDENT","PARTICIPANT_OUTAGE","PLANNED_DOWNTIME","DISPUTE_TRANSACTION_PROCESSING","DISPUTE_FRAUD_OR_SCAM","DISPUTE_SCHEME_NON_COMPLIANCE","RECONCILIATION_DISCREPANCY","SCHEME_FEE_QUERY","FEEDBACK_AND_COMPLAINT"],"description":"Supported ticket type, not a ServiceNow table or record class. The enum is exactly the set of service catalog items for which an IPSO or direct participant is the requester, and each value carries the catalog item name, category and recipient shown in the ServiceRequests tag. Catalog items sourced by NGO, NGP, FXP or Nexus automation are not accepted enum values."}}}}
```

## The ServiceRequestPayloadVersion object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestPayloadVersion":{"type":"string","enum":["1.0"],"description":"Version of the payload contract for the selected requestCode, independent of API /v1 and delivery release. Validate the complete code/version/recipient combination; never silently default or reinterpret unsupported versions."}}}}
```

## The IPSOId object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"IPSOId":{"type":"string","minLength":15,"maxLength":15,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}\\.[A-Z]{3}$","description":"Canonical immutable IPSOId value object: ISO 9362 11-character uppercase BIC, a dot and ISO 4217 currency code. Must resolve to the registered IPSO in the authenticated environment; syntax alone grants no communication entitlement. Not a country code, display name, email or ServiceNow sys_id."}}}}
```

## The FXPId object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"FXPId":{"type":"string","minLength":1,"maxLength":128,"description":"Scheme-assigned identifier of a registered FX Provider, as carried on Nexus participant reference data. Must resolve to an active FXP in the authenticated environment; syntax alone grants no communication entitlement. The canonical identifier format is a publication gate."}}}}
```

## The NgoServiceRequestRecipient object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"NgoServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"NGO"}},"description":"NGO support recipient. No client-selected organisation ID, assignment group or fulfilment system."}}}}
```

## The NgpServiceRequestRecipient object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"NgpServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"NGP"}},"description":"NGP scheme-authority recipient, for matters NGP owns such as suspension or termination challenges, confidential-information disclosure, scheme-fee queries and tracked NGP correspondence. A single scheme authority, so no identifier is supplied."}}}}
```

## The IpsoServiceRequestRecipient object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"IpsoServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type","ipsoId"],"properties":{"type":{"const":"IPSO"},"ipsoId":{"$ref":"#/components/schemas/IPSOId"}},"description":"Exactly one counterparty IPSO, eligible to receive this request type from the sender in the same authenticated environment. Active status, distinctness from the sender and type-specific entitlement are runtime authorisation checks. No self or bulk recipient."},"IPSOId":{"type":"string","minLength":15,"maxLength":15,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}\\.[A-Z]{3}$","description":"Canonical immutable IPSOId value object: ISO 9362 11-character uppercase BIC, a dot and ISO 4217 currency code. Must resolve to the registered IPSO in the authenticated environment; syntax alone grants no communication entitlement. Not a country code, display name, email or ServiceNow sys_id."}}}}
```

## The FxpServiceRequestRecipient object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"FxpServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type","fxpId"],"properties":{"type":{"const":"FXP"},"fxpId":{"$ref":"#/components/schemas/FXPId"}},"description":"Exactly one registered FXP, eligible to receive due-diligence submissions from the sender in the same authenticated environment. Active status and entitlement are runtime authorisation checks."},"FXPId":{"type":"string","minLength":1,"maxLength":128,"description":"Scheme-assigned identifier of a registered FX Provider, as carried on Nexus participant reference data. Must resolve to an active FXP in the authenticated environment; syntax alone grants no communication entitlement. The canonical identifier format is a publication gate."}}}}
```

## The ServiceRequestRecipient object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestRecipient":{"oneOf":[{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},{"$ref":"#/components/schemas/NgpServiceRequestRecipient"},{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},{"$ref":"#/components/schemas/FxpServiceRequestRecipient"}],"description":"Intended business recipient, fixed per requestCode: NGO for support, incident, downtime, reference-data, onboarding and participant-lifecycle requests; NGP for scheme-authority matters; a counterparty IPSO for disputes, recalls, payment-information requests and tracked participant communication; an FXP for due-diligence submissions. NGO operates the intake in every case. This field does not select a network destination or broaden the caller's access."},"NgoServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"NGO"}},"description":"NGO support recipient. No client-selected organisation ID, assignment group or fulfilment system."},"NgpServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"NGP"}},"description":"NGP scheme-authority recipient, for matters NGP owns such as suspension or termination challenges, confidential-information disclosure, scheme-fee queries and tracked NGP correspondence. A single scheme authority, so no identifier is supplied."},"IpsoServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type","ipsoId"],"properties":{"type":{"const":"IPSO"},"ipsoId":{"$ref":"#/components/schemas/IPSOId"}},"description":"Exactly one counterparty IPSO, eligible to receive this request type from the sender in the same authenticated environment. Active status, distinctness from the sender and type-specific entitlement are runtime authorisation checks. No self or bulk recipient."},"IPSOId":{"type":"string","minLength":15,"maxLength":15,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}\\.[A-Z]{3}$","description":"Canonical immutable IPSOId value object: ISO 9362 11-character uppercase BIC, a dot and ISO 4217 currency code. Must resolve to the registered IPSO in the authenticated environment; syntax alone grants no communication entitlement. Not a country code, display name, email or ServiceNow sys_id."},"FxpServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type","fxpId"],"properties":{"type":{"const":"FXP"},"fxpId":{"$ref":"#/components/schemas/FXPId"}},"description":"Exactly one registered FXP, eligible to receive due-diligence submissions from the sender in the same authenticated environment. Active status and entitlement are runtime authorisation checks."},"FXPId":{"type":"string","minLength":1,"maxLength":128,"description":"Scheme-assigned identifier of a registered FX Provider, as carried on Nexus participant reference data. Must resolve to an active FXP in the authenticated environment; syntax alone grants no communication entitlement. The canonical identifier format is a publication gate."}}}}
```

## The SupportRequestPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"SupportRequestPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own support system. Not an idempotency key, ServiceNow ID or routing instruction."}},"description":"Version 1.0 payload for TECHNICAL_SUPPORT and PARTICIPANT_SUPPORT. An empty object is valid because subject and description carry the request. Only clientReference is accepted as structured context. Specialised workflow fields, UETRs, attachments and arbitrary nested properties are not accepted and must not be smuggled into free text to invoke a workflow."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The IncidentReportPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"IncidentReportPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own incident system."},"detectedAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC instant at which the participant detected the incident."}},"description":"Version 1.0 payload for TECHNICAL_INCIDENT and SECURITY_INCIDENT. Subject and description carry the incident narrative; no credentials, keys, raw payment messages or customer data. An unplanned outage of the submitting IPSO is its own catalog item, PARTICIPANT_OUTAGE, not a technical incident."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The ParticipantOutagePayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ParticipantOutagePayloadV1":{"type":"object","additionalProperties":false,"required":["outageStartedAt"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own incident system."},"outageStartedAt":{"type":"string","format":"date-time","pattern":"Z$","description":"UTC instant at which the submitting IPSO became unavailable."},"expectedRecoveryAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC estimate of recovery; omit while recovery is not yet confirmed. Must not precede outageStartedAt."}},"description":"Version 1.0 payload for PARTICIPANT_OUTAGE, reporting a current unplanned outage of the submitting IPSO. The Payment Processing API admi.004 notification is the primary channel for this item; this intake and the Service Desk UI are the alternative channels used when the payment flow is unavailable."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The CommunicationPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"CommunicationPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting participant's own correspondence system."}},"description":"Version 1.0 payload for FEEDBACK_AND_COMPLAINT. Subject and description carry the feedback or complaint; NGO owns the documented investigation and resolution. No attachments or attachment links."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The ReferenceDataChangePayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReferenceDataChangePayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own change system."},"requestedEffectiveDate":{"type":"string","format":"date","description":"Optional requested effective date for the change. A request, not an approval; NGO governs when a change takes effect."}},"description":"Version 1.0 payload for REFERENCE_DATA_CHANGE. Describe the requested addition or amendment in the description; this API does not apply configuration changes and is not a Configuration Command API substitute."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The CertificateSupportPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"CertificateSupportPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own certificate or change system."},"certificateExpiresAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC expiry instant of the affected certificate."}},"description":"Version 1.0 payload for MTLS_CERTIFICATE_EXPIRY. Coordinates renewal only. Never include certificate material, private keys, passphrases or any credential, in the payload or in free text; a suspected compromise is a SECURITY_INCIDENT, not an expiry request."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The PaymentReferencePayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"PaymentReferencePayloadV1":{"type":"object","additionalProperties":false,"required":["uetr"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own case system."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"The single payment the request concerns."}},"description":"Version 1.0 payload for PAYMENT_RECALL and PAYMENT_INFORMATION_REQUEST. Exactly one payment per submission, for its full original amount; partial recalls are not supported. Raising either request does not recall, cancel, reverse or otherwise alter the payment. Where a recall is accepted, the destination side initiates a separate Return Payment referencing the original UETR; the original payment keeps its finality."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"}}}}
```

## The BillingQueryPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"BillingQueryPayloadV1":{"type":"object","additionalProperties":false,"required":["billingPeriod"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own finance system."},"billingPeriod":{"type":"string","pattern":"^[0-9]{4}-(0[1-9]|1[0-2])$","description":"Billing month in YYYY-MM that the query concerns."},"documentReference":{"$ref":"#/components/schemas/Identifier","description":"Optional report or statement reference the query concerns."}},"description":"Version 1.0 payload for SCHEME_FEE_QUERY. Covers Scheme Fee calculation and supporting report data for NGP investigation."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The OnboardingApplicationPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"OnboardingApplicationPayloadV1":{"type":"object","additionalProperties":false,"required":["applicantType"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting participant's own onboarding system."},"applicantType":{"type":"string","enum":["IPSO","PSP","SAP","PDO"],"description":"Category of participant the application concerns. Must be consistent with the selected requestCode."},"applicantReference":{"$ref":"#/components/schemas/Identifier","description":"Optional institutional reference for the applicant. Never a natural-person identifier."}},"description":"Version 1.0 payload for IPSO_ONBOARDING_APPLICATION, PSP_ONBOARDING_APPLICATION, SAP_ONBOARDING_APPLICATION, PDO_ONBOARDING_APPLICATION and FXP_KYB_REQUEST. Initiates the governed onboarding case only; due-diligence documents, questionnaires and evidence are exchanged through the authorised onboarding channel, never through this API."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The WithdrawalRequestPayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"WithdrawalRequestPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting participant's own case system."},"requestedEffectiveDate":{"type":"string","format":"date","description":"Optional requested withdrawal date. A request, not a decision; the governed offboarding process determines the actual effective date."}},"description":"Version 1.0 payload for DIRECT_PARTICIPANT_WITHDRAWAL. The submitting participant is the withdrawing participant, derived from credentials and never named in the body. Submitting the request begins governed offboarding; it does not itself withdraw the participant."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The PlannedDowntimePayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"PlannedDowntimePayloadV1":{"type":"object","additionalProperties":false,"required":["plannedStartAt"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own change or maintenance system."},"plannedStartAt":{"type":"string","format":"date-time","pattern":"Z$","description":"UTC instant at which planned downtime starts, or at which recovery is planned when notifying recovery only."},"plannedEndAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC instant at which planned downtime ends; must not precede plannedStartAt."}},"description":"Version 1.0 payload for PLANNED_DOWNTIME. Notifies NGO in advance of planned downtime or planned recovery of the submitting IPSO. The Payment Processing API admi.004 notification is the primary channel; this intake and the Service Desk UI are the alternative channels used when the payment flow is unavailable."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The DisputePayloadV1 object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"DisputePayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own dispute or case system; not the deduplication key."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"Optional UETR of the single disputed payment. Omit for a scheme non-compliance dispute that does not concern one payment."}},"description":"Version 1.0 payload for the four Dispute & Resolution Management intake items: DISPUTE_TRANSACTION_PROCESSING, DISPUTE_FRAUD_OR_SCAM, DISPUTE_SCHEME_NON_COMPLIANCE and RECONCILIATION_DISCREPANCY. The dispute category is the requestCode itself, so no separate category field is carried in the payload. Each item retains its bilateral-resolution entry criteria; the responding IPSO owns the dispute response under the governed dispute workflow, and NGO provides intake and routing only."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"}}}}
```

## The ServiceRequestSubmission object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestSubmission":{"type":"object","additionalProperties":false,"required":["category","requestCode","payloadVersion","recipient","subject","description","payload"],"description":"Stable request contract for submitting a Service Desk ticket. Exactly one supported ticket type must match: requestCode, category, payloadVersion and recipient type are a single approved service catalog combination, and any other combination is rejected rather than reinterpreted. The body contains no sender identity, environment override, backend record class, priority, assignment group, callback, attachment or ServiceNow identifier. Dynamic payloads remain closed and validated per profile.","properties":{"category":{"$ref":"#/components/schemas/ServiceRequestCategory"},"requestCode":{"$ref":"#/components/schemas/ServiceRequestCode"},"payloadVersion":{"$ref":"#/components/schemas/ServiceRequestPayloadVersion"},"recipient":{"$ref":"#/components/schemas/ServiceRequestRecipient"},"subject":{"type":"string","minLength":1,"maxLength":200,"pattern":"\\S","description":"Non-blank, PII-free plain-text subject; no secrets, executable markup or file content."},"description":{"type":"string","minLength":1,"maxLength":10000,"pattern":"\\S","description":"Non-blank, PII-free plain-text explanation. Do not include customer data, credentials, private keys, raw payment messages, attachments or attachment links. Free text never changes the selected profile or its permissions."},"payload":{"type":"object","description":"Structured business context validated against requestCode + payloadVersion. The selected profile determines accepted fields and values; no arbitrary ServiceNow field passthrough."}},"oneOf":[{"title":"Technical support or enquiry to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"TECHNICAL_SUPPORT"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/SupportRequestPayloadV1"}}},{"title":"General support request or enquiry to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"PARTICIPANT_SUPPORT"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/SupportRequestPayloadV1"}}},{"title":"mTLS certificate expiry support request to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"MTLS_CERTIFICATE_EXPIRY"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/CertificateSupportPayloadV1"}}},{"title":"Confidential information disclosure request to NGP, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"CONFIDENTIAL_DISCLOSURE_REQUEST"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgpServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/SupportRequestPayloadV1"}}},{"title":"Nexus Portal or PAT integration support to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"NEXUS_PORTAL_SUPPORT"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/SupportRequestPayloadV1"}}},{"title":"Participant reference-data change request to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"REFERENCE_DATA_CHANGE"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/ReferenceDataChangePayloadV1"}}},{"title":"Payment recall request to the counterparty IPSO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"PAYMENT_RECALL"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/PaymentReferencePayloadV1"}}},{"title":"Further payment information request to the counterparty IPSO, version 1.0","properties":{"category":{"const":"PARTICIPANT_SUPPORT_AND_REQUESTS"},"requestCode":{"const":"PAYMENT_INFORMATION_REQUEST"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/PaymentReferencePayloadV1"}}},{"title":"IPSO onboarding application to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_MANAGEMENT"},"requestCode":{"const":"IPSO_ONBOARDING_APPLICATION"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"allOf":[{"$ref":"#/components/schemas/OnboardingApplicationPayloadV1"},{"properties":{"applicantType":{"const":"IPSO"}}}]}}},{"title":"PSP onboarding application to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_MANAGEMENT"},"requestCode":{"const":"PSP_ONBOARDING_APPLICATION"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"allOf":[{"$ref":"#/components/schemas/OnboardingApplicationPayloadV1"},{"properties":{"applicantType":{"const":"PSP"}}}]}}},{"title":"SAP onboarding application to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_MANAGEMENT"},"requestCode":{"const":"SAP_ONBOARDING_APPLICATION"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"allOf":[{"$ref":"#/components/schemas/OnboardingApplicationPayloadV1"},{"properties":{"applicantType":{"const":"SAP"}}}]}}},{"title":"PDO onboarding application to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_MANAGEMENT"},"requestCode":{"const":"PDO_ONBOARDING_APPLICATION"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"allOf":[{"$ref":"#/components/schemas/OnboardingApplicationPayloadV1"},{"properties":{"applicantType":{"const":"PDO"}}}]}}},{"title":"CBDDQ or FXP KYB submission to the selected FXP, version 1.0","properties":{"category":{"const":"PARTICIPANT_MANAGEMENT"},"requestCode":{"const":"FXP_KYB_REQUEST"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/FxpServiceRequestRecipient"},"payload":{"allOf":[{"$ref":"#/components/schemas/OnboardingApplicationPayloadV1"},{"properties":{"applicantType":{"const":"PSP"}}}]}}},{"title":"Direct participant withdrawal request to NGO, version 1.0","properties":{"category":{"const":"PARTICIPANT_MANAGEMENT"},"requestCode":{"const":"DIRECT_PARTICIPANT_WITHDRAWAL"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/WithdrawalRequestPayloadV1"}}},{"title":"Technical incident report to NGO, version 1.0","properties":{"category":{"const":"INCIDENT_AND_AVAILABILITY_MANAGEMENT"},"requestCode":{"const":"TECHNICAL_INCIDENT"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/IncidentReportPayloadV1"}}},{"title":"Security incident report to NGO, version 1.0","properties":{"category":{"const":"INCIDENT_AND_AVAILABILITY_MANAGEMENT"},"requestCode":{"const":"SECURITY_INCIDENT"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/IncidentReportPayloadV1"}}},{"title":"Unplanned participant outage report to NGO, version 1.0","properties":{"category":{"const":"INCIDENT_AND_AVAILABILITY_MANAGEMENT"},"requestCode":{"const":"PARTICIPANT_OUTAGE"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/ParticipantOutagePayloadV1"}}},{"title":"Planned downtime or recovery notification to NGO, version 1.0","properties":{"category":{"const":"INCIDENT_AND_AVAILABILITY_MANAGEMENT"},"requestCode":{"const":"PLANNED_DOWNTIME"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/PlannedDowntimePayloadV1"}}},{"title":"Formal transaction-processing dispute with the responding IPSO, version 1.0","properties":{"category":{"const":"DISPUTE_AND_RESOLUTION_MANAGEMENT"},"requestCode":{"const":"DISPUTE_TRANSACTION_PROCESSING"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/DisputePayloadV1"}}},{"title":"Formal fraud or scam dispute with the responding IPSO, version 1.0","properties":{"category":{"const":"DISPUTE_AND_RESOLUTION_MANAGEMENT"},"requestCode":{"const":"DISPUTE_FRAUD_OR_SCAM"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/DisputePayloadV1"}}},{"title":"Formal scheme non-compliance dispute with the responding IPSO, version 1.0","properties":{"category":{"const":"DISPUTE_AND_RESOLUTION_MANAGEMENT"},"requestCode":{"const":"DISPUTE_SCHEME_NON_COMPLIANCE"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/DisputePayloadV1"}}},{"title":"Reconciliation discrepancy report to the counterparty IPSO, version 1.0","properties":{"category":{"const":"DISPUTE_AND_RESOLUTION_MANAGEMENT"},"requestCode":{"const":"RECONCILIATION_DISCREPANCY"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/DisputePayloadV1"}}},{"title":"Scheme Fee calculation or report query to NGP, version 1.0","properties":{"category":{"const":"DISPUTE_AND_RESOLUTION_MANAGEMENT"},"requestCode":{"const":"SCHEME_FEE_QUERY"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgpServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/BillingQueryPayloadV1"}}},{"title":"Feedback or complaint to NGO, version 1.0","properties":{"category":{"const":"FEEDBACK_AND_COMPLAINT"},"requestCode":{"const":"FEEDBACK_AND_COMPLAINT"},"payloadVersion":{"const":"1.0"},"recipient":{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},"payload":{"$ref":"#/components/schemas/CommunicationPayloadV1"}}}]},"ServiceRequestCategory":{"type":"string","enum":["PARTICIPANT_SUPPORT_AND_REQUESTS","PARTICIPANT_MANAGEMENT","INCIDENT_AND_AVAILABILITY_MANAGEMENT","DISPUTE_AND_RESOLUTION_MANAGEMENT","FEEDBACK_AND_COMPLAINT"],"description":"Primary catalog grouping of the selected ticket type, grouping the service catalog into its five primary areas. Exactly one category applies to each requestCode, so the pair is fixed by the catalog and never chosen freely: a category that does not match the selected requestCode is 400 INVALID_REQUEST. It is a classification, not a routing instruction, and does not select a recipient, fulfilment group, priority or service level."},"ServiceRequestCode":{"type":"string","enum":["TECHNICAL_SUPPORT","PARTICIPANT_SUPPORT","MTLS_CERTIFICATE_EXPIRY","CONFIDENTIAL_DISCLOSURE_REQUEST","NEXUS_PORTAL_SUPPORT","REFERENCE_DATA_CHANGE","PAYMENT_RECALL","PAYMENT_INFORMATION_REQUEST","IPSO_ONBOARDING_APPLICATION","PSP_ONBOARDING_APPLICATION","SAP_ONBOARDING_APPLICATION","PDO_ONBOARDING_APPLICATION","FXP_KYB_REQUEST","DIRECT_PARTICIPANT_WITHDRAWAL","TECHNICAL_INCIDENT","SECURITY_INCIDENT","PARTICIPANT_OUTAGE","PLANNED_DOWNTIME","DISPUTE_TRANSACTION_PROCESSING","DISPUTE_FRAUD_OR_SCAM","DISPUTE_SCHEME_NON_COMPLIANCE","RECONCILIATION_DISCREPANCY","SCHEME_FEE_QUERY","FEEDBACK_AND_COMPLAINT"],"description":"Supported ticket type, not a ServiceNow table or record class. The enum is exactly the set of service catalog items for which an IPSO or direct participant is the requester, and each value carries the catalog item name, category and recipient shown in the ServiceRequests tag. Catalog items sourced by NGO, NGP, FXP or Nexus automation are not accepted enum values."},"ServiceRequestPayloadVersion":{"type":"string","enum":["1.0"],"description":"Version of the payload contract for the selected requestCode, independent of API /v1 and delivery release. Validate the complete code/version/recipient combination; never silently default or reinterpret unsupported versions."},"ServiceRequestRecipient":{"oneOf":[{"$ref":"#/components/schemas/NgoServiceRequestRecipient"},{"$ref":"#/components/schemas/NgpServiceRequestRecipient"},{"$ref":"#/components/schemas/IpsoServiceRequestRecipient"},{"$ref":"#/components/schemas/FxpServiceRequestRecipient"}],"description":"Intended business recipient, fixed per requestCode: NGO for support, incident, downtime, reference-data, onboarding and participant-lifecycle requests; NGP for scheme-authority matters; a counterparty IPSO for disputes, recalls, payment-information requests and tracked participant communication; an FXP for due-diligence submissions. NGO operates the intake in every case. This field does not select a network destination or broaden the caller's access."},"NgoServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"NGO"}},"description":"NGO support recipient. No client-selected organisation ID, assignment group or fulfilment system."},"NgpServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"NGP"}},"description":"NGP scheme-authority recipient, for matters NGP owns such as suspension or termination challenges, confidential-information disclosure, scheme-fee queries and tracked NGP correspondence. A single scheme authority, so no identifier is supplied."},"IpsoServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type","ipsoId"],"properties":{"type":{"const":"IPSO"},"ipsoId":{"$ref":"#/components/schemas/IPSOId"}},"description":"Exactly one counterparty IPSO, eligible to receive this request type from the sender in the same authenticated environment. Active status, distinctness from the sender and type-specific entitlement are runtime authorisation checks. No self or bulk recipient."},"IPSOId":{"type":"string","minLength":15,"maxLength":15,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}\\.[A-Z]{3}$","description":"Canonical immutable IPSOId value object: ISO 9362 11-character uppercase BIC, a dot and ISO 4217 currency code. Must resolve to the registered IPSO in the authenticated environment; syntax alone grants no communication entitlement. Not a country code, display name, email or ServiceNow sys_id."},"FxpServiceRequestRecipient":{"type":"object","additionalProperties":false,"required":["type","fxpId"],"properties":{"type":{"const":"FXP"},"fxpId":{"$ref":"#/components/schemas/FXPId"}},"description":"Exactly one registered FXP, eligible to receive due-diligence submissions from the sender in the same authenticated environment. Active status and entitlement are runtime authorisation checks."},"FXPId":{"type":"string","minLength":1,"maxLength":128,"description":"Scheme-assigned identifier of a registered FX Provider, as carried on Nexus participant reference data. Must resolve to an active FXP in the authenticated environment; syntax alone grants no communication entitlement. The canonical identifier format is a publication gate."},"SupportRequestPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own support system. Not an idempotency key, ServiceNow ID or routing instruction."}},"description":"Version 1.0 payload for TECHNICAL_SUPPORT and PARTICIPANT_SUPPORT. An empty object is valid because subject and description carry the request. Only clientReference is accepted as structured context. Specialised workflow fields, UETRs, attachments and arbitrary nested properties are not accepted and must not be smuggled into free text to invoke a workflow."},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."},"CertificateSupportPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own certificate or change system."},"certificateExpiresAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC expiry instant of the affected certificate."}},"description":"Version 1.0 payload for MTLS_CERTIFICATE_EXPIRY. Coordinates renewal only. Never include certificate material, private keys, passphrases or any credential, in the payload or in free text; a suspected compromise is a SECURITY_INCIDENT, not an expiry request."},"ReferenceDataChangePayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own change system."},"requestedEffectiveDate":{"type":"string","format":"date","description":"Optional requested effective date for the change. A request, not an approval; NGO governs when a change takes effect."}},"description":"Version 1.0 payload for REFERENCE_DATA_CHANGE. Describe the requested addition or amendment in the description; this API does not apply configuration changes and is not a Configuration Command API substitute."},"PaymentReferencePayloadV1":{"type":"object","additionalProperties":false,"required":["uetr"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own case system."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"The single payment the request concerns."}},"description":"Version 1.0 payload for PAYMENT_RECALL and PAYMENT_INFORMATION_REQUEST. Exactly one payment per submission, for its full original amount; partial recalls are not supported. Raising either request does not recall, cancel, reverse or otherwise alter the payment. Where a recall is accepted, the destination side initiates a separate Return Payment referencing the original UETR; the original payment keeps its finality."},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"},"OnboardingApplicationPayloadV1":{"type":"object","additionalProperties":false,"required":["applicantType"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting participant's own onboarding system."},"applicantType":{"type":"string","enum":["IPSO","PSP","SAP","PDO"],"description":"Category of participant the application concerns. Must be consistent with the selected requestCode."},"applicantReference":{"$ref":"#/components/schemas/Identifier","description":"Optional institutional reference for the applicant. Never a natural-person identifier."}},"description":"Version 1.0 payload for IPSO_ONBOARDING_APPLICATION, PSP_ONBOARDING_APPLICATION, SAP_ONBOARDING_APPLICATION, PDO_ONBOARDING_APPLICATION and FXP_KYB_REQUEST. Initiates the governed onboarding case only; due-diligence documents, questionnaires and evidence are exchanged through the authorised onboarding channel, never through this API."},"WithdrawalRequestPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting participant's own case system."},"requestedEffectiveDate":{"type":"string","format":"date","description":"Optional requested withdrawal date. A request, not a decision; the governed offboarding process determines the actual effective date."}},"description":"Version 1.0 payload for DIRECT_PARTICIPANT_WITHDRAWAL. The submitting participant is the withdrawing participant, derived from credentials and never named in the body. Submitting the request begins governed offboarding; it does not itself withdraw the participant."},"IncidentReportPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own incident system."},"detectedAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC instant at which the participant detected the incident."}},"description":"Version 1.0 payload for TECHNICAL_INCIDENT and SECURITY_INCIDENT. Subject and description carry the incident narrative; no credentials, keys, raw payment messages or customer data. An unplanned outage of the submitting IPSO is its own catalog item, PARTICIPANT_OUTAGE, not a technical incident."},"ParticipantOutagePayloadV1":{"type":"object","additionalProperties":false,"required":["outageStartedAt"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own incident system."},"outageStartedAt":{"type":"string","format":"date-time","pattern":"Z$","description":"UTC instant at which the submitting IPSO became unavailable."},"expectedRecoveryAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC estimate of recovery; omit while recovery is not yet confirmed. Must not precede outageStartedAt."}},"description":"Version 1.0 payload for PARTICIPANT_OUTAGE, reporting a current unplanned outage of the submitting IPSO. The Payment Processing API admi.004 notification is the primary channel for this item; this intake and the Service Desk UI are the alternative channels used when the payment flow is unavailable."},"PlannedDowntimePayloadV1":{"type":"object","additionalProperties":false,"required":["plannedStartAt"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own change or maintenance system."},"plannedStartAt":{"type":"string","format":"date-time","pattern":"Z$","description":"UTC instant at which planned downtime starts, or at which recovery is planned when notifying recovery only."},"plannedEndAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Optional UTC instant at which planned downtime ends; must not precede plannedStartAt."}},"description":"Version 1.0 payload for PLANNED_DOWNTIME. Notifies NGO in advance of planned downtime or planned recovery of the submitting IPSO. The Payment Processing API admi.004 notification is the primary channel; this intake and the Service Desk UI are the alternative channels used when the payment flow is unavailable."},"DisputePayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own dispute or case system; not the deduplication key."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"Optional UETR of the single disputed payment. Omit for a scheme non-compliance dispute that does not concern one payment."}},"description":"Version 1.0 payload for the four Dispute & Resolution Management intake items: DISPUTE_TRANSACTION_PROCESSING, DISPUTE_FRAUD_OR_SCAM, DISPUTE_SCHEME_NON_COMPLIANCE and RECONCILIATION_DISCREPANCY. The dispute category is the requestCode itself, so no separate category field is carried in the payload. Each item retains its bilateral-resolution entry criteria; the responding IPSO owns the dispute response under the governed dispute workflow, and NGO provides intake and routing only."},"BillingQueryPayloadV1":{"type":"object","additionalProperties":false,"required":["billingPeriod"],"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting IPSO's own finance system."},"billingPeriod":{"type":"string","pattern":"^[0-9]{4}-(0[1-9]|1[0-2])$","description":"Billing month in YYYY-MM that the query concerns."},"documentReference":{"$ref":"#/components/schemas/Identifier","description":"Optional report or statement reference the query concerns."}},"description":"Version 1.0 payload for SCHEME_FEE_QUERY. Covers Scheme Fee calculation and supporting report data for NGP investigation."},"CommunicationPayloadV1":{"type":"object","additionalProperties":false,"properties":{"clientReference":{"$ref":"#/components/schemas/Identifier","description":"Optional PII-free reference in the submitting participant's own correspondence system."}},"description":"Version 1.0 payload for FEEDBACK_AND_COMPLAINT. Subject and description carry the feedback or complaint; NGO owns the documented investigation and resolution. No attachments or attachment links."}}}}
```

## The ServiceRequestId object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestId":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Opaque NGO-generated intake identifier, stable across retries and independent of any ServiceNow record ID or ticket number. Mapped internally to nexus_correlation_id for downstream deduplication and to the ticket reference in the authorised Service Desk."}}}}
```

## The ServiceRequestReceipt object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ServiceRequestReceipt":{"type":"object","additionalProperties":false,"required":["requestId","status","acceptedAt"],"properties":{"requestId":{"$ref":"#/components/schemas/ServiceRequestId"},"status":{"const":"ACCEPTED","description":"Immutable intake acknowledgement, not the current ticket lifecycle, delivery state or outcome."},"acceptedAt":{"type":"string","format":"date-time","pattern":"Z$","description":"Server-recorded UTC acceptance instant, unchanged on replay."}},"description":"Durable acceptance by NGO. Does not promise that a downstream ticket already exists. No ServiceNow-specific identifiers, polling URL or mutable processing status are exposed by this create-only API."},"ServiceRequestId":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$","description":"Opaque NGO-generated intake identifier, stable across retries and independent of any ServiceNow record ID or ticket number. Mapped internally to nexus_correlation_id for downstream deduplication and to the ticket reference in the authorised Service Desk."}}}}
```

## The OperationalQuery object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"OperationalQuery":{"type":"object","description":"Schema for the decoded query-parameter map, not a request body. Enforce first-request versus cursor-only alternatives server-side; standard OpenAPI parameter required flags cannot express them. First requests require dates and may filter directly by status; there is no view parameter. Also validate inclusive date difference <=31, retention and no future/reversed dates. pendingAgeBucket intersects current PDNG with the date range and any explicit status; incompatible status/bucket selections produce an empty eligible population. Reject unknown or repeated keys before decoding.","oneOf":[{"title":"New logical query","additionalProperties":false,"required":["fromDate","toDate"],"properties":{"fromDate":{"$ref":"#/components/parameters/FromDate/schema"},"toDate":{"$ref":"#/components/parameters/ToDate/schema"},"sendingIpso":{"$ref":"#/components/parameters/SendingIpso/schema"},"receivingIpso":{"$ref":"#/components/parameters/ReceivingIpso/schema"},"direction":{"$ref":"#/components/parameters/Direction/schema"},"pspId":{"$ref":"#/components/parameters/PspId/schema"},"status":{"$ref":"#/components/parameters/Status/schema"},"statusSource":{"$ref":"#/components/parameters/StatusSource/schema"},"pendingAgeBucket":{"$ref":"#/components/parameters/PendingAgeBucket/schema"},"pageSize":{"$ref":"#/components/parameters/PageSize/schema"}}},{"title":"Continuation of an admitted query","additionalProperties":false,"required":["cursor"],"properties":{"cursor":{"$ref":"#/components/parameters/Cursor/schema"}}}]},"ReportDate":{"type":"string","pattern":"^[0-9]{8}$","description":"A real YYYYMMDD Nexus date; validate calendar and retrieval-window rules."},"IPSOId":{"type":"string","minLength":15,"maxLength":15,"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}\\.[A-Z]{3}$","description":"Canonical immutable IPSOId value object: ISO 9362 11-character uppercase BIC, a dot and ISO 4217 currency code. Must resolve to the registered IPSO in the authenticated environment; syntax alone grants no communication entitlement. Not a country code, display name, email or ServiceNow sys_id."},"PaymentStatus":{"type":"string","enum":["ACCC","RJCT","PDNG","BLCK"],"description":"Nexus-observed source state, not a domestic balance or booking. The same values as camt.054 Ntry/Sts/Prtry; the file does not use Ntry/Sts/Cd. ACWP is received by Nexus but never sent, so it does not appear in this feed or in report totals."},"StatusSource":{"type":"string","enum":["NEXUS","DESTINATION"]}},"parameters":{"FromDate":{"schema":{"$ref":"#/components/schemas/ReportDate"}},"ToDate":{"schema":{"$ref":"#/components/schemas/ReportDate"}},"SendingIpso":{"schema":{"$ref":"#/components/schemas/IPSOId"}},"ReceivingIpso":{"schema":{"$ref":"#/components/schemas/IPSOId"}},"Direction":{"schema":{"type":"string","enum":["inbound","outbound"]}},"PspId":{"schema":{"type":"string","minLength":1,"maxLength":35}},"Status":{"schema":{"$ref":"#/components/schemas/PaymentStatus"}},"StatusSource":{"schema":{"$ref":"#/components/schemas/StatusSource"}},"PendingAgeBucket":{"schema":{"type":"string","enum":["under_5m","5m_to_1h","1h_to_8h","8h_to_30h","overdue"]}},"PageSize":{"schema":{"type":"integer","minimum":1,"maximum":2500}},"Cursor":{"schema":{"type":"string","minLength":1}}}}}
```

## The Uetr object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"}}}}
```

## The Identifier object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."}}}}
```

## The Currency object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."}}}}
```

## The NexusMessageIdentifier object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"NexusMessageIdentifier":{"type":"string","minLength":35,"maxLength":35,"pattern":"^[0-9]{8}NXPS081[A-Z0-9]{8}[A-Z0-9]{11}X$","description":"Nexus message identifier of the original pacs.008, 35 characters: YYYYMMDD + NXPS081 + sequence(8) + sender BIC-11 + literal X."}}}}
```

## The Max35Reference object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Max35Reference":{"type":"string","minLength":1,"maxLength":35,"description":"Source-owned reference, at most 35 characters, as carried in the camt.054 file. Nexus character restrictions apply."}}}}
```

## The Amount object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."}}}}
```

## The PaymentStatus object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"PaymentStatus":{"type":"string","enum":["ACCC","RJCT","PDNG","BLCK"],"description":"Nexus-observed source state, not a domestic balance or booking. The same values as camt.054 Ntry/Sts/Prtry; the file does not use Ntry/Sts/Cd. ACWP is received by Nexus but never sent, so it does not appear in this feed or in report totals."}}}}
```

## The StatusSource object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"StatusSource":{"type":"string","enum":["NEXUS","DESTINATION"]}}}}
```

## The DataQuality object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"DataQuality":{"type":"string","enum":["complete","partial","stale"]}}}}
```

## The Reason object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Reason":{"type":"object","additionalProperties":false,"required":["code","description"],"properties":{"code":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."}}}}}}
```

## The PendingReasonCode object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"PendingReasonCode":{"type":"string","enum":["AWAITING_DESTINATION_RESPONSE","DESTINATION_DELIVERY_UNCONFIRMED","DESTINATION_UNREACHABLE","UNDER_INVESTIGATION","INVALID_STATUS_RECEIVED","DESTINATION_PROCESSING"],"description":"Closed set of reasons a payment is currently PDNG. No value implies finality, a rejection or a completed payment, and none of them is a payment status in its own right. The first five are Nexus-observed (statusSource NEXUS); DESTINATION_PROCESSING is reported by the destination IPSO (statusSource DESTINATION). The set is closed: a response never carries a value outside it.\n\n| Code | Meaning |\n| --- | --- |\n| AWAITING_DESTINATION_RESPONSE | Dispatched to the destination IPSO; no status returned and the settlement timer has not expired. |\n| DESTINATION_DELIVERY_UNCONFIRMED | Delivery to the destination IPSO could not be confirmed after the retry policy was exhausted. Delivery is uncertain, not refused. |\n| DESTINATION_UNREACHABLE | Persistent connectivity, authentication or routing failure to the destination IPSO. |\n| UNDER_INVESTIGATION | The settlement timer expired and the enquiry cadence is running. This remains the reason for as long as enquiry continues, including after the investigation window closes; internal escalation and ticketing do not change it. |\n| INVALID_STATUS_RECEIVED | A destination status message arrived but failed validation, so no status was applied. A valid status message is still awaited. |\n| DESTINATION_PROCESSING | The destination IPSO reported the payment as still in progress. |"}}}}
```

## The PendingReason object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"PendingReason":{"type":"object","additionalProperties":false,"required":["code","description"],"description":"Why the payment is currently PDNG. Present only when the reason is known; absence is a missing fact, never an inferred outcome. Reporting classifies the reason from source facts and does not change payment state.","properties":{"code":{"$ref":"#/components/schemas/PendingReasonCode"},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."},"destinationReasonCode":{"type":"string","minLength":1,"description":"ISO 20022 StsRsnInf/Rsn/Cd exactly as supplied by the destination IPSO on its interim pacs.002. Omitted whenever the destination supplied no reason, and only ever present with code DESTINATION_PROCESSING. Never populated by Nexus from its own classification."}}},"PendingReasonCode":{"type":"string","enum":["AWAITING_DESTINATION_RESPONSE","DESTINATION_DELIVERY_UNCONFIRMED","DESTINATION_UNREACHABLE","UNDER_INVESTIGATION","INVALID_STATUS_RECEIVED","DESTINATION_PROCESSING"],"description":"Closed set of reasons a payment is currently PDNG. No value implies finality, a rejection or a completed payment, and none of them is a payment status in its own right. The first five are Nexus-observed (statusSource NEXUS); DESTINATION_PROCESSING is reported by the destination IPSO (statusSource DESTINATION). The set is closed: a response never carries a value outside it.\n\n| Code | Meaning |\n| --- | --- |\n| AWAITING_DESTINATION_RESPONSE | Dispatched to the destination IPSO; no status returned and the settlement timer has not expired. |\n| DESTINATION_DELIVERY_UNCONFIRMED | Delivery to the destination IPSO could not be confirmed after the retry policy was exhausted. Delivery is uncertain, not refused. |\n| DESTINATION_UNREACHABLE | Persistent connectivity, authentication or routing failure to the destination IPSO. |\n| UNDER_INVESTIGATION | The settlement timer expired and the enquiry cadence is running. This remains the reason for as long as enquiry continues, including after the investigation window closes; internal escalation and ticketing do not change it. |\n| INVALID_STATUS_RECEIVED | A destination status message arrived but failed validation, so no status was applied. A valid status message is still awaited. |\n| DESTINATION_PROCESSING | The destination IPSO reported the payment as still in progress. |"}}}}
```

## The BIC object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"BIC":{"type":"string","pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","description":"ISO 9362 Business Identifier Code as carried in camt.054 FinInstnId/BICFI: a four-letter institution code, a two-letter ISO 3166-1 country code, a two-character location code and an optional three-character branch code, giving 8 or 11 characters. Institutional identifier only, never customer data."}}}}
```

## The LEI object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"LEI":{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$","description":"ISO 17442 Legal Entity Identifier as carried in camt.054 FinInstnId/LEI. Institutional identifier only, never customer data."}}}}
```

## The AgentIdentification object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"AgentIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An agent institution as identified in camt.054 FinInstnId, copied from the pacs.008: exactly one of BICFI, LEI or ClrSysMmbId. scheme names the form and id carries the value; clearingSystemCode accompanies a clearing-system member ID when the source supplied it. Institutional identifier only, never customer data.","oneOf":[{"title":"BIC","properties":{"scheme":{"const":"BIC"},"id":{"$ref":"#/components/schemas/BIC"}},"not":{"required":["clearingSystemCode"]}},{"title":"LEI","properties":{"scheme":{"const":"LEI"},"id":{"$ref":"#/components/schemas/LEI"}},"not":{"required":["clearingSystemCode"]}},{"title":"Clearing-system member ID","properties":{"scheme":{"const":"CLEARING_MEMBER_ID"}}}],"properties":{"scheme":{"type":"string","enum":["BIC","LEI","CLEARING_MEMBER_ID"],"description":"BIC is FinInstnId/BICFI, LEI is FinInstnId/LEI and CLEARING_MEMBER_ID is FinInstnId/ClrSysMmbId/MmbId."},"id":{"type":"string","minLength":1,"maxLength":35,"description":"The identifier value, in the form named by scheme."},"clearingSystemCode":{"type":"string","minLength":1,"maxLength":5,"description":"FinInstnId/ClrSysMmbId/ClrSysId/Cd, an ISO external clearing system code. Only with CLEARING_MEMBER_ID; omitted when the source did not supply it."}}},"BIC":{"type":"string","pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","description":"ISO 9362 Business Identifier Code as carried in camt.054 FinInstnId/BICFI: a four-letter institution code, a two-letter ISO 3166-1 country code, a two-character location code and an optional three-character branch code, giving 8 or 11 characters. Institutional identifier only, never customer data."},"LEI":{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$","description":"ISO 17442 Legal Entity Identifier as carried in camt.054 FinInstnId/LEI. Institutional identifier only, never customer data."}}}}
```

## The AccountIdentification object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"AccountIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An account identifier copied from the pacs.008, as carried in camt.054 RltdPties/DbtrAcct/Id or RltdPties/CdtrAcct/Id. Identifier only: no account name, proxy, type or currency. Use it for reconciliation; it is not a query filter and must not be logged.","oneOf":[{"title":"IBAN","properties":{"scheme":{"const":"IBAN"},"id":{"pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$"}}},{"title":"Other account identifier","properties":{"scheme":{"const":"OTHER"}}}],"properties":{"scheme":{"type":"string","enum":["IBAN","OTHER"],"description":"IBAN is Id/IBAN; OTHER is Id/Othr/Id, such as a domestic account number."},"id":{"type":"string","minLength":1,"maxLength":34,"description":"The account identifier, in the form named by scheme."}}}}}}
```

## The EntryAmount object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"EntryAmount":{"type":"object","additionalProperties":false,"required":["amount","currency"],"properties":{"amount":{"$ref":"#/components/schemas/Amount"},"currency":{"$ref":"#/components/schemas/Currency"}},"description":"An amount with its currency, mirroring the camt.054 Amt element and its Ccy attribute. The currency always travels with the amount; never sum amounts across currencies."},"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."}}}}
```

## The CreditDebitIndicator object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"CreditDebitIndicator":{"type":"string","enum":["CRDT","DBIT"],"description":"camt.054 CdtDbtInd. Direction of the entry relative to the reported Nexus clearing account. Equivalent to the direction field expressed in ISO vocabulary: an outbound payment is DBIT and an inbound payment is CRDT."}}}}
```

## The BankTransactionCode object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"BankTransactionCode":{"type":"object","additionalProperties":false,"required":["domain","family","subFamily"],"description":"camt.054 BkTxCd. Domain is always PMNT and subFamily always XBCT (cross-border credit transfer). Family encodes the Nexus role for this entry and is a third equivalent view of the same fact as direction and creditDebitIndicator.","properties":{"domain":{"type":"string","const":"PMNT","description":"BkTxCd/Domn/Cd."},"family":{"type":"string","enum":["IRCT","RRCT"],"description":"BkTxCd/Domn/Fmly/Cd. IRCT when Nexus acts as Source IPSO for this entry, RRCT as Destination IPSO."},"subFamily":{"type":"string","const":"XBCT","description":"BkTxCd/Domn/Fmly/SubFmlyCd."}}}}}}
```

## The TransactionReferences object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"TransactionReferences":{"type":"object","additionalProperties":false,"required":["uetr","messageId","endToEndId"],"description":"camt.054 NtryDtls/TxDtls/Refs. Every value is copied unchanged from the original pacs.008 except clearingSystemReference, which Nexus assigns. UETR is the primary match key; the others are available for cross-validation. A reference the source did not supply is omitted rather than defaulted. messageId, endToEndId and uetr are required, as in the camt.054 file. MsgId follows the 35-character Nexus message-identifier format and the other references are at most 35 characters with Nexus character restrictions.","properties":{"messageId":{"$ref":"#/components/schemas/NexusMessageIdentifier","description":"Refs/MsgId."},"instructionId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/InstrId."},"endToEndId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/EndToEndId."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"Refs/UETR. Identical to the record's own uetr; repeated here so the Refs group maps one-to-one onto the file."},"transactionId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/TxId."},"clearingSystemReference":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/ClrSysRef, assigned by Nexus."}}},"NexusMessageIdentifier":{"type":"string","minLength":35,"maxLength":35,"pattern":"^[0-9]{8}NXPS081[A-Z0-9]{8}[A-Z0-9]{11}X$","description":"Nexus message identifier of the original pacs.008, 35 characters: YYYYMMDD + NXPS081 + sequence(8) + sender BIC-11 + literal X."},"Max35Reference":{"type":"string","minLength":1,"maxLength":35,"description":"Source-owned reference, at most 35 characters, as carried in the camt.054 file. Nexus character restrictions apply."},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"}}}}
```

## The CurrencyExchange object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"CurrencyExchange":{"type":"object","additionalProperties":false,"required":["sourceCurrency","exchangeRate"],"description":"camt.054 AmtDtls/InstdAmt/CcyXchg. Carries the agreed exchange rate applied to this payment. Transaction-time facts only; never re-derived from a current rate. SrcCcy and XchgRate are required and TrgtCcy is optional, as in the file. The same structure is used under both InstdAmt and TxAmt.","properties":{"sourceCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/SrcCcy. Equal to the currency component of the sendingIpso key."},"targetCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/TrgtCcy. Optional. Equal to the currency component of the receivingIpso key."},"exchangeRate":{"type":"string","pattern":"^(0|[1-9][0-9]{0,2})\\.[0-9]{8}$","description":"CcyXchg/XchgRate as an exact decimal string with exactly 8 fractional digits and at most 11 total digits (XSD totalDigits 11), as in the file. Required whenever currencyExchange is present."}}},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."}}}}
```

## The AmountDetails object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"AmountDetails":{"type":"object","additionalProperties":false,"required":["instructedAmount","transactionAmount"],"description":"camt.054 AmtDtls. The instructed amount with its embedded currency exchange. The instructed amount (AmtDtls/InstdAmt) and the transaction amount (AmtDtls/TxAmt) are distinct and must not be substituted for one another.","properties":{"instructedAmount":{"$ref":"#/components/schemas/EntryAmount","description":"AmtDtls/InstdAmt/Amt and its Ccy."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/InstdAmt/CcyXchg. Omitted where no exchange applies."},"transactionAmount":{"$ref":"#/components/schemas/TransactionAmount"}}},"EntryAmount":{"type":"object","additionalProperties":false,"required":["amount","currency"],"properties":{"amount":{"$ref":"#/components/schemas/Amount"},"currency":{"$ref":"#/components/schemas/Currency"}},"description":"An amount with its currency, mirroring the camt.054 Amt element and its Ccy attribute. The currency always travels with the amount; never sum amounts across currencies."},"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."},"CurrencyExchange":{"type":"object","additionalProperties":false,"required":["sourceCurrency","exchangeRate"],"description":"camt.054 AmtDtls/InstdAmt/CcyXchg. Carries the agreed exchange rate applied to this payment. Transaction-time facts only; never re-derived from a current rate. SrcCcy and XchgRate are required and TrgtCcy is optional, as in the file. The same structure is used under both InstdAmt and TxAmt.","properties":{"sourceCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/SrcCcy. Equal to the currency component of the sendingIpso key."},"targetCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/TrgtCcy. Optional. Equal to the currency component of the receivingIpso key."},"exchangeRate":{"type":"string","pattern":"^(0|[1-9][0-9]{0,2})\\.[0-9]{8}$","description":"CcyXchg/XchgRate as an exact decimal string with exactly 8 fractional digits and at most 11 total digits (XSD totalDigits 11), as in the file. Required whenever currencyExchange is present."}}},"TransactionAmount":{"type":"object","additionalProperties":false,"required":["amount","currency","currencyExchange"],"description":"camt.054 AmtDtls/TxAmt: the transaction amount with its currency exchange. Distinct from the instructed amount.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"AmtDtls/TxAmt/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of AmtDtls/TxAmt/Amt."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/TxAmt/CcyXchg."}}}}}}
```

## The TransactionAmount object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"TransactionAmount":{"type":"object","additionalProperties":false,"required":["amount","currency","currencyExchange"],"description":"camt.054 AmtDtls/TxAmt: the transaction amount with its currency exchange. Distinct from the instructed amount.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"AmtDtls/TxAmt/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of AmtDtls/TxAmt/Amt."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/TxAmt/CcyXchg."}}},"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."},"CurrencyExchange":{"type":"object","additionalProperties":false,"required":["sourceCurrency","exchangeRate"],"description":"camt.054 AmtDtls/InstdAmt/CcyXchg. Carries the agreed exchange rate applied to this payment. Transaction-time facts only; never re-derived from a current rate. SrcCcy and XchgRate are required and TrgtCcy is optional, as in the file. The same structure is used under both InstdAmt and TxAmt.","properties":{"sourceCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/SrcCcy. Equal to the currency component of the sendingIpso key."},"targetCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/TrgtCcy. Optional. Equal to the currency component of the receivingIpso key."},"exchangeRate":{"type":"string","pattern":"^(0|[1-9][0-9]{0,2})\\.[0-9]{8}$","description":"CcyXchg/XchgRate as an exact decimal string with exactly 8 fractional digits and at most 11 total digits (XSD totalDigits 11), as in the file. Required whenever currencyExchange is present."}}}}}}
```

## The ChargeRecord object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ChargeRecord":{"type":"object","additionalProperties":false,"required":["amount","currency","creditDebitIndicator","type","bearer","agent"],"description":"One camt.054 Chrgs/Rcrd. Nexus publishes one record for the Source PSP fee and one for the Destination PSP fee, each in its own currency. Charge records are never netted or summed across currencies. The file carries exactly two Chrgs/Rcrd entries, each with its agent, and so does this feed. creditDebitIndicator, type and bearer are Nexus-derived enrichment: the file carries none of Rcrd/CdtDbtInd, Rcrd/Tp or Rcrd/Br.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Rcrd/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of Rcrd/Amt."},"creditDebitIndicator":{"$ref":"#/components/schemas/CreditDebitIndicator","description":"Nexus-derived enrichment. The camt.054 file does not carry CdtDbtInd on Chrgs/Rcrd."},"type":{"type":"string","enum":["SPSP","DPSP"],"description":"Nexus-derived enrichment; the camt.054 file does not carry Rcrd/Tp. SPSP is the Source PSP fee and DPSP the Destination PSP fee."},"bearer":{"type":"string","const":"DEBT","description":"Nexus-derived enrichment; the camt.054 file does not carry Rcrd/Br. Always DEBT under the Nexus scheme rules."},"agent":{"$ref":"#/components/schemas/AgentIdentification","description":"Rcrd/Agt/FinInstnId, the institution the charge applies to."}}},"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."},"CreditDebitIndicator":{"type":"string","enum":["CRDT","DBIT"],"description":"camt.054 CdtDbtInd. Direction of the entry relative to the reported Nexus clearing account. Equivalent to the direction field expressed in ISO vocabulary: an outbound payment is DBIT and an inbound payment is CRDT."},"AgentIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An agent institution as identified in camt.054 FinInstnId, copied from the pacs.008: exactly one of BICFI, LEI or ClrSysMmbId. scheme names the form and id carries the value; clearingSystemCode accompanies a clearing-system member ID when the source supplied it. Institutional identifier only, never customer data.","oneOf":[{"title":"BIC","properties":{"scheme":{"const":"BIC"},"id":{"$ref":"#/components/schemas/BIC"}},"not":{"required":["clearingSystemCode"]}},{"title":"LEI","properties":{"scheme":{"const":"LEI"},"id":{"$ref":"#/components/schemas/LEI"}},"not":{"required":["clearingSystemCode"]}},{"title":"Clearing-system member ID","properties":{"scheme":{"const":"CLEARING_MEMBER_ID"}}}],"properties":{"scheme":{"type":"string","enum":["BIC","LEI","CLEARING_MEMBER_ID"],"description":"BIC is FinInstnId/BICFI, LEI is FinInstnId/LEI and CLEARING_MEMBER_ID is FinInstnId/ClrSysMmbId/MmbId."},"id":{"type":"string","minLength":1,"maxLength":35,"description":"The identifier value, in the form named by scheme."},"clearingSystemCode":{"type":"string","minLength":1,"maxLength":5,"description":"FinInstnId/ClrSysMmbId/ClrSysId/Cd, an ISO external clearing system code. Only with CLEARING_MEMBER_ID; omitted when the source did not supply it."}}},"BIC":{"type":"string","pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","description":"ISO 9362 Business Identifier Code as carried in camt.054 FinInstnId/BICFI: a four-letter institution code, a two-letter ISO 3166-1 country code, a two-character location code and an optional three-character branch code, giving 8 or 11 characters. Institutional identifier only, never customer data."},"LEI":{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$","description":"ISO 17442 Legal Entity Identifier as carried in camt.054 FinInstnId/LEI. Institutional identifier only, never customer data."}}}}
```

## The TransactionState object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"TransactionState":{"type":"object","required":["uetr","status","statusSource","acceptedAt","updatedAt"],"allOf":[{"if":{"required":["status"],"properties":{"status":{"const":"PDNG"}}},"then":{"not":{"required":["finalStatusAt"]}},"else":{"required":["finalStatusAt"],"not":{"required":["pendingReason"]}}},{"if":{"required":["status"],"properties":{"status":{"const":"RJCT"}}},"then":{"required":["rejectionReason"]},"else":{"not":{"required":["rejectionReason"]}}}],"description":"Optional facts are omitted if unavailable, never fabricated. Status rules: finalStatusAt is present for ACCC, RJCT and BLCK and absent for PDNG; rejectionReason is present only for RJCT; pendingReason only for PDNG. No raw messages, customer PII or full event history.","properties":{"uetr":{"$ref":"#/components/schemas/Uetr"},"status":{"$ref":"#/components/schemas/PaymentStatus"},"statusSource":{"$ref":"#/components/schemas/StatusSource"},"acceptedAt":{"type":"string","format":"date-time","description":"The instant Nexus recorded the transaction as accepted. It assigns the Nexus Day and is the basis of the date filters; pending age is measured from it. No camt.054 counterpart."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of the latest source payment-state update."},"finalStatusAt":{"type":"string","format":"date-time","description":"Present for ACCC, RJCT and BLCK; absent for PDNG."},"rejectionReason":{"$ref":"#/components/schemas/Reason","description":"Present only for RJCT, where it is required. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."},"pendingReason":{"$ref":"#/components/schemas/PendingReason","description":"Only for current PDNG. Omitted for any other status and whenever the reason is unknown. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."}}},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"},"PaymentStatus":{"type":"string","enum":["ACCC","RJCT","PDNG","BLCK"],"description":"Nexus-observed source state, not a domestic balance or booking. The same values as camt.054 Ntry/Sts/Prtry; the file does not use Ntry/Sts/Cd. ACWP is received by Nexus but never sent, so it does not appear in this feed or in report totals."},"StatusSource":{"type":"string","enum":["NEXUS","DESTINATION"]},"Reason":{"type":"object","additionalProperties":false,"required":["code","description"],"properties":{"code":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."}}},"PendingReason":{"type":"object","additionalProperties":false,"required":["code","description"],"description":"Why the payment is currently PDNG. Present only when the reason is known; absence is a missing fact, never an inferred outcome. Reporting classifies the reason from source facts and does not change payment state.","properties":{"code":{"$ref":"#/components/schemas/PendingReasonCode"},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."},"destinationReasonCode":{"type":"string","minLength":1,"description":"ISO 20022 StsRsnInf/Rsn/Cd exactly as supplied by the destination IPSO on its interim pacs.002. Omitted whenever the destination supplied no reason, and only ever present with code DESTINATION_PROCESSING. Never populated by Nexus from its own classification."}}},"PendingReasonCode":{"type":"string","enum":["AWAITING_DESTINATION_RESPONSE","DESTINATION_DELIVERY_UNCONFIRMED","DESTINATION_UNREACHABLE","UNDER_INVESTIGATION","INVALID_STATUS_RECEIVED","DESTINATION_PROCESSING"],"description":"Closed set of reasons a payment is currently PDNG. No value implies finality, a rejection or a completed payment, and none of them is a payment status in its own right. The first five are Nexus-observed (statusSource NEXUS); DESTINATION_PROCESSING is reported by the destination IPSO (statusSource DESTINATION). The set is closed: a response never carries a value outside it.\n\n| Code | Meaning |\n| --- | --- |\n| AWAITING_DESTINATION_RESPONSE | Dispatched to the destination IPSO; no status returned and the settlement timer has not expired. |\n| DESTINATION_DELIVERY_UNCONFIRMED | Delivery to the destination IPSO could not be confirmed after the retry policy was exhausted. Delivery is uncertain, not refused. |\n| DESTINATION_UNREACHABLE | Persistent connectivity, authentication or routing failure to the destination IPSO. |\n| UNDER_INVESTIGATION | The settlement timer expired and the enquiry cadence is running. This remains the reason for as long as enquiry continues, including after the investigation window closes; internal escalation and ticketing do not change it. |\n| INVALID_STATUS_RECEIVED | A destination status message arrived but failed validation, so no status was applied. A valid status message is still awaited. |\n| DESTINATION_PROCESSING | The destination IPSO reported the payment as still in progress. |"}}}}
```

## The Transaction object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Transaction":{"type":"object","unevaluatedProperties":false,"allOf":[{"$ref":"#/components/schemas/TransactionState"},{"if":{"required":["status"],"properties":{"status":{"enum":["ACCC","BLCK"]}}},"then":{"required":["bookingDateTime"]},"else":{"not":{"required":["bookingDateTime"]}}},{"if":{"required":["status"],"properties":{"status":{"const":"PDNG"}}},"then":{"required":["pendingAgeSeconds"]},"else":{"not":{"required":["pendingAgeSeconds"]}}},{"anyOf":[{"properties":{"direction":{"const":"outbound"},"creditDebitIndicator":{"const":"DBIT"},"bankTransactionCode":{"properties":{"family":{"const":"IRCT"}}}}},{"properties":{"direction":{"const":"inbound"},"creditDebitIndicator":{"const":"CRDT"},"bankTransactionCode":{"properties":{"family":{"const":"RRCT"}}}}}]}],"required":["entryAmount","creditDebitIndicator","bankTransactionCode","references","amountDetails","charges","debtorAccount","creditorAccount","instructingAgent","instructedAgent","debtorAgent","creditorAgent","intermediaryAgent1","intermediaryAgent2","direction","sourceCountry","destinationCountry"],"description":"One Operational Data Feed record: a reduced, normalised JSON representation of the corresponding camt.054 Ntry, plus the operational facts the file does not carry. It is not a lossless copy of every field the file carries.\n\nThe following feed fields correspond to camt.054 elements: entryAmount and creditDebitIndicator to Ntry/Amt and Ntry/CdtDbtInd, status to Ntry/Sts/Prtry (the file carries the status in the proprietary branch; Cd is not used), bookingDateTime to Ntry/BookgDt/DtTm, bankTransactionCode to Ntry/BkTxCd, references to NtryDtls/TxDtls/Refs, amountDetails to AmtDtls (InstdAmt and TxAmt), charges to Chrgs/Rcrd, debtorAccount and creditorAccount to RltdPties/DbtrAcct/Id and RltdPties/CdtrAcct/Id, instructingAgent, instructedAgent, debtorAgent, creditorAgent, intermediaryAgent1 and intermediaryAgent2 to RltdAgts, and acceptanceDateTime and interbankSettlementDate to RltdDts. The representation is JSON rather than XML, so the same facts can be matched across both channels without the file's element nesting or attributes. Agents carry every identification form the file allows: BIC, LEI or clearing-system member ID. charges carries Nexus-derived enrichment fields that have no XML counterpart under Chrgs/Rcrd (see ChargeRecord).\n\nThe operational facts have no camt.054 counterpart and are available only here: statusSource, acceptedAt, updatedAt, finalStatusAt, rejectionReason, pendingReason, pendingAgeSeconds, destinationAmount, sourceCountry, destinationCountry and direction. direction, creditDebitIndicator and bankTransactionCode.family are three equivalent views of the same role and never disagree.\n\nStatus rules: bookingDateTime is present only for ACCC and BLCK, and pendingAgeSeconds only for PDNG.","properties":{"entryAmount":{"$ref":"#/components/schemas/EntryAmount","description":"Ntry/Amt with its Ccy: the entry amount in the currency of the reported Nexus clearing account."},"creditDebitIndicator":{"$ref":"#/components/schemas/CreditDebitIndicator"},"bookingDateTime":{"type":"string","format":"date-time","description":"Ntry/BookgDt/DtTm: the timestamp of completion in the Nexus Gateway. Present only for ACCC and BLCK. It is not evidence of a domestic account booking."},"bankTransactionCode":{"$ref":"#/components/schemas/BankTransactionCode"},"references":{"$ref":"#/components/schemas/TransactionReferences"},"amountDetails":{"$ref":"#/components/schemas/AmountDetails"},"charges":{"type":"array","minItems":2,"maxItems":2,"items":{"$ref":"#/components/schemas/ChargeRecord"},"allOf":[{"contains":{"properties":{"type":{"const":"SPSP"}}},"minContains":1,"maxContains":1},{"contains":{"properties":{"type":{"const":"DPSP"}}},"minContains":1,"maxContains":1}],"description":"Chrgs/Rcrd: exactly two records, one for the Source PSP fee (SPSP) and one for the Destination PSP fee (DPSP)."},"debtorAccount":{"$ref":"#/components/schemas/AccountIdentification","description":"RltdPties/DbtrAcct/Id: the debtor's account identifier, copied from the pacs.008."},"creditorAccount":{"$ref":"#/components/schemas/AccountIdentification","description":"RltdPties/CdtrAcct/Id: the creditor's account identifier, copied from the pacs.008."},"instructingAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/InstgAgt, copied from the pacs.008."},"instructedAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/InstdAgt, copied from the pacs.008."},"debtorAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/DbtrAgt, the Source PSP. Matched by pspId on an outbound payment."},"creditorAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/CdtrAgt, the Destination PSP. Matched by pspId on an inbound payment."},"intermediaryAgent1":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/IntrmyAgt1, the Source SAP."},"intermediaryAgent2":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/IntrmyAgt2, the Destination SAP."},"acceptanceDateTime":{"type":"string","format":"date-time","description":"RltdDts/AccptncDtTm: the acceptance timestamp set by the Source PSP, copied from the pacs.008. Not the Nexus acceptance; see acceptedAt."},"interbankSettlementDate":{"type":"string","format":"date","description":"RltdDts/IntrBkSttlmDt."},"direction":{"type":"string","enum":["inbound","outbound"],"description":"Operational view of the same role as creditDebitIndicator and bankTransactionCode.family, relative to the authenticated IPSO. No camt.054 counterpart."},"sourceCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 source country. No camt.054 counterpart."},"destinationCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 destination country. No camt.054 counterpart."},"destinationAmount":{"$ref":"#/components/schemas/EntryAmount","description":"Destination-leg amount and currency as presented on the Transaction Dashboard. No camt.054 counterpart: the file conveys the destination leg through instructedAmount and the applied exchange rate."},"pendingAgeSeconds":{"type":"number","minimum":0,"description":"Present only for current PDNG, calculated at the page evaluatedAt from acceptedAt. A read-only reporting calculation with no camt.054 counterpart."}}},"TransactionState":{"type":"object","required":["uetr","status","statusSource","acceptedAt","updatedAt"],"allOf":[{"if":{"required":["status"],"properties":{"status":{"const":"PDNG"}}},"then":{"not":{"required":["finalStatusAt"]}},"else":{"required":["finalStatusAt"],"not":{"required":["pendingReason"]}}},{"if":{"required":["status"],"properties":{"status":{"const":"RJCT"}}},"then":{"required":["rejectionReason"]},"else":{"not":{"required":["rejectionReason"]}}}],"description":"Optional facts are omitted if unavailable, never fabricated. Status rules: finalStatusAt is present for ACCC, RJCT and BLCK and absent for PDNG; rejectionReason is present only for RJCT; pendingReason only for PDNG. No raw messages, customer PII or full event history.","properties":{"uetr":{"$ref":"#/components/schemas/Uetr"},"status":{"$ref":"#/components/schemas/PaymentStatus"},"statusSource":{"$ref":"#/components/schemas/StatusSource"},"acceptedAt":{"type":"string","format":"date-time","description":"The instant Nexus recorded the transaction as accepted. It assigns the Nexus Day and is the basis of the date filters; pending age is measured from it. No camt.054 counterpart."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of the latest source payment-state update."},"finalStatusAt":{"type":"string","format":"date-time","description":"Present for ACCC, RJCT and BLCK; absent for PDNG."},"rejectionReason":{"$ref":"#/components/schemas/Reason","description":"Present only for RJCT, where it is required. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."},"pendingReason":{"$ref":"#/components/schemas/PendingReason","description":"Only for current PDNG. Omitted for any other status and whenever the reason is unknown. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."}}},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"},"PaymentStatus":{"type":"string","enum":["ACCC","RJCT","PDNG","BLCK"],"description":"Nexus-observed source state, not a domestic balance or booking. The same values as camt.054 Ntry/Sts/Prtry; the file does not use Ntry/Sts/Cd. ACWP is received by Nexus but never sent, so it does not appear in this feed or in report totals."},"StatusSource":{"type":"string","enum":["NEXUS","DESTINATION"]},"Reason":{"type":"object","additionalProperties":false,"required":["code","description"],"properties":{"code":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."}}},"PendingReason":{"type":"object","additionalProperties":false,"required":["code","description"],"description":"Why the payment is currently PDNG. Present only when the reason is known; absence is a missing fact, never an inferred outcome. Reporting classifies the reason from source facts and does not change payment state.","properties":{"code":{"$ref":"#/components/schemas/PendingReasonCode"},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."},"destinationReasonCode":{"type":"string","minLength":1,"description":"ISO 20022 StsRsnInf/Rsn/Cd exactly as supplied by the destination IPSO on its interim pacs.002. Omitted whenever the destination supplied no reason, and only ever present with code DESTINATION_PROCESSING. Never populated by Nexus from its own classification."}}},"PendingReasonCode":{"type":"string","enum":["AWAITING_DESTINATION_RESPONSE","DESTINATION_DELIVERY_UNCONFIRMED","DESTINATION_UNREACHABLE","UNDER_INVESTIGATION","INVALID_STATUS_RECEIVED","DESTINATION_PROCESSING"],"description":"Closed set of reasons a payment is currently PDNG. No value implies finality, a rejection or a completed payment, and none of them is a payment status in its own right. The first five are Nexus-observed (statusSource NEXUS); DESTINATION_PROCESSING is reported by the destination IPSO (statusSource DESTINATION). The set is closed: a response never carries a value outside it.\n\n| Code | Meaning |\n| --- | --- |\n| AWAITING_DESTINATION_RESPONSE | Dispatched to the destination IPSO; no status returned and the settlement timer has not expired. |\n| DESTINATION_DELIVERY_UNCONFIRMED | Delivery to the destination IPSO could not be confirmed after the retry policy was exhausted. Delivery is uncertain, not refused. |\n| DESTINATION_UNREACHABLE | Persistent connectivity, authentication or routing failure to the destination IPSO. |\n| UNDER_INVESTIGATION | The settlement timer expired and the enquiry cadence is running. This remains the reason for as long as enquiry continues, including after the investigation window closes; internal escalation and ticketing do not change it. |\n| INVALID_STATUS_RECEIVED | A destination status message arrived but failed validation, so no status was applied. A valid status message is still awaited. |\n| DESTINATION_PROCESSING | The destination IPSO reported the payment as still in progress. |"},"EntryAmount":{"type":"object","additionalProperties":false,"required":["amount","currency"],"properties":{"amount":{"$ref":"#/components/schemas/Amount"},"currency":{"$ref":"#/components/schemas/Currency"}},"description":"An amount with its currency, mirroring the camt.054 Amt element and its Ccy attribute. The currency always travels with the amount; never sum amounts across currencies."},"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."},"CreditDebitIndicator":{"type":"string","enum":["CRDT","DBIT"],"description":"camt.054 CdtDbtInd. Direction of the entry relative to the reported Nexus clearing account. Equivalent to the direction field expressed in ISO vocabulary: an outbound payment is DBIT and an inbound payment is CRDT."},"BankTransactionCode":{"type":"object","additionalProperties":false,"required":["domain","family","subFamily"],"description":"camt.054 BkTxCd. Domain is always PMNT and subFamily always XBCT (cross-border credit transfer). Family encodes the Nexus role for this entry and is a third equivalent view of the same fact as direction and creditDebitIndicator.","properties":{"domain":{"type":"string","const":"PMNT","description":"BkTxCd/Domn/Cd."},"family":{"type":"string","enum":["IRCT","RRCT"],"description":"BkTxCd/Domn/Fmly/Cd. IRCT when Nexus acts as Source IPSO for this entry, RRCT as Destination IPSO."},"subFamily":{"type":"string","const":"XBCT","description":"BkTxCd/Domn/Fmly/SubFmlyCd."}}},"TransactionReferences":{"type":"object","additionalProperties":false,"required":["uetr","messageId","endToEndId"],"description":"camt.054 NtryDtls/TxDtls/Refs. Every value is copied unchanged from the original pacs.008 except clearingSystemReference, which Nexus assigns. UETR is the primary match key; the others are available for cross-validation. A reference the source did not supply is omitted rather than defaulted. messageId, endToEndId and uetr are required, as in the camt.054 file. MsgId follows the 35-character Nexus message-identifier format and the other references are at most 35 characters with Nexus character restrictions.","properties":{"messageId":{"$ref":"#/components/schemas/NexusMessageIdentifier","description":"Refs/MsgId."},"instructionId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/InstrId."},"endToEndId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/EndToEndId."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"Refs/UETR. Identical to the record's own uetr; repeated here so the Refs group maps one-to-one onto the file."},"transactionId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/TxId."},"clearingSystemReference":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/ClrSysRef, assigned by Nexus."}}},"NexusMessageIdentifier":{"type":"string","minLength":35,"maxLength":35,"pattern":"^[0-9]{8}NXPS081[A-Z0-9]{8}[A-Z0-9]{11}X$","description":"Nexus message identifier of the original pacs.008, 35 characters: YYYYMMDD + NXPS081 + sequence(8) + sender BIC-11 + literal X."},"Max35Reference":{"type":"string","minLength":1,"maxLength":35,"description":"Source-owned reference, at most 35 characters, as carried in the camt.054 file. Nexus character restrictions apply."},"AmountDetails":{"type":"object","additionalProperties":false,"required":["instructedAmount","transactionAmount"],"description":"camt.054 AmtDtls. The instructed amount with its embedded currency exchange. The instructed amount (AmtDtls/InstdAmt) and the transaction amount (AmtDtls/TxAmt) are distinct and must not be substituted for one another.","properties":{"instructedAmount":{"$ref":"#/components/schemas/EntryAmount","description":"AmtDtls/InstdAmt/Amt and its Ccy."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/InstdAmt/CcyXchg. Omitted where no exchange applies."},"transactionAmount":{"$ref":"#/components/schemas/TransactionAmount"}}},"CurrencyExchange":{"type":"object","additionalProperties":false,"required":["sourceCurrency","exchangeRate"],"description":"camt.054 AmtDtls/InstdAmt/CcyXchg. Carries the agreed exchange rate applied to this payment. Transaction-time facts only; never re-derived from a current rate. SrcCcy and XchgRate are required and TrgtCcy is optional, as in the file. The same structure is used under both InstdAmt and TxAmt.","properties":{"sourceCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/SrcCcy. Equal to the currency component of the sendingIpso key."},"targetCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/TrgtCcy. Optional. Equal to the currency component of the receivingIpso key."},"exchangeRate":{"type":"string","pattern":"^(0|[1-9][0-9]{0,2})\\.[0-9]{8}$","description":"CcyXchg/XchgRate as an exact decimal string with exactly 8 fractional digits and at most 11 total digits (XSD totalDigits 11), as in the file. Required whenever currencyExchange is present."}}},"TransactionAmount":{"type":"object","additionalProperties":false,"required":["amount","currency","currencyExchange"],"description":"camt.054 AmtDtls/TxAmt: the transaction amount with its currency exchange. Distinct from the instructed amount.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"AmtDtls/TxAmt/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of AmtDtls/TxAmt/Amt."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/TxAmt/CcyXchg."}}},"ChargeRecord":{"type":"object","additionalProperties":false,"required":["amount","currency","creditDebitIndicator","type","bearer","agent"],"description":"One camt.054 Chrgs/Rcrd. Nexus publishes one record for the Source PSP fee and one for the Destination PSP fee, each in its own currency. Charge records are never netted or summed across currencies. The file carries exactly two Chrgs/Rcrd entries, each with its agent, and so does this feed. creditDebitIndicator, type and bearer are Nexus-derived enrichment: the file carries none of Rcrd/CdtDbtInd, Rcrd/Tp or Rcrd/Br.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Rcrd/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of Rcrd/Amt."},"creditDebitIndicator":{"$ref":"#/components/schemas/CreditDebitIndicator","description":"Nexus-derived enrichment. The camt.054 file does not carry CdtDbtInd on Chrgs/Rcrd."},"type":{"type":"string","enum":["SPSP","DPSP"],"description":"Nexus-derived enrichment; the camt.054 file does not carry Rcrd/Tp. SPSP is the Source PSP fee and DPSP the Destination PSP fee."},"bearer":{"type":"string","const":"DEBT","description":"Nexus-derived enrichment; the camt.054 file does not carry Rcrd/Br. Always DEBT under the Nexus scheme rules."},"agent":{"$ref":"#/components/schemas/AgentIdentification","description":"Rcrd/Agt/FinInstnId, the institution the charge applies to."}}},"AgentIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An agent institution as identified in camt.054 FinInstnId, copied from the pacs.008: exactly one of BICFI, LEI or ClrSysMmbId. scheme names the form and id carries the value; clearingSystemCode accompanies a clearing-system member ID when the source supplied it. Institutional identifier only, never customer data.","oneOf":[{"title":"BIC","properties":{"scheme":{"const":"BIC"},"id":{"$ref":"#/components/schemas/BIC"}},"not":{"required":["clearingSystemCode"]}},{"title":"LEI","properties":{"scheme":{"const":"LEI"},"id":{"$ref":"#/components/schemas/LEI"}},"not":{"required":["clearingSystemCode"]}},{"title":"Clearing-system member ID","properties":{"scheme":{"const":"CLEARING_MEMBER_ID"}}}],"properties":{"scheme":{"type":"string","enum":["BIC","LEI","CLEARING_MEMBER_ID"],"description":"BIC is FinInstnId/BICFI, LEI is FinInstnId/LEI and CLEARING_MEMBER_ID is FinInstnId/ClrSysMmbId/MmbId."},"id":{"type":"string","minLength":1,"maxLength":35,"description":"The identifier value, in the form named by scheme."},"clearingSystemCode":{"type":"string","minLength":1,"maxLength":5,"description":"FinInstnId/ClrSysMmbId/ClrSysId/Cd, an ISO external clearing system code. Only with CLEARING_MEMBER_ID; omitted when the source did not supply it."}}},"BIC":{"type":"string","pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","description":"ISO 9362 Business Identifier Code as carried in camt.054 FinInstnId/BICFI: a four-letter institution code, a two-letter ISO 3166-1 country code, a two-character location code and an optional three-character branch code, giving 8 or 11 characters. Institutional identifier only, never customer data."},"LEI":{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$","description":"ISO 17442 Legal Entity Identifier as carried in camt.054 FinInstnId/LEI. Institutional identifier only, never customer data."},"AccountIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An account identifier copied from the pacs.008, as carried in camt.054 RltdPties/DbtrAcct/Id or RltdPties/CdtrAcct/Id. Identifier only: no account name, proxy, type or currency. Use it for reconciliation; it is not a query filter and must not be logged.","oneOf":[{"title":"IBAN","properties":{"scheme":{"const":"IBAN"},"id":{"pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$"}}},{"title":"Other account identifier","properties":{"scheme":{"const":"OTHER"}}}],"properties":{"scheme":{"type":"string","enum":["IBAN","OTHER"],"description":"IBAN is Id/IBAN; OTHER is Id/Othr/Id, such as a domestic account number."},"id":{"type":"string","minLength":1,"maxLength":34,"description":"The account identifier, in the form named by scheme."}}}}}}
```

## The TransactionPage object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"TransactionPage":{"description":"One page of at most 2,500 records from a logical query spanning at most 31 inclusive Nexus Days. Use nextCursor for remaining records; the page cap is not a total-result cap.","type":"object","additionalProperties":false,"required":["authoritative","items","returnedCount","dataAsOf","evaluatedAt","dataQuality"],"dependentRequired":{"nextCursor":["cursorExpiresAt"],"cursorExpiresAt":["nextCursor"]},"properties":{"authoritative":{"const":false},"items":{"type":"array","maxItems":2500,"items":{"$ref":"#/components/schemas/Transaction"}},"returnedCount":{"type":"integer","minimum":0,"maximum":2500,"description":"Equals items length; not total matching population."},"dataAsOf":{"type":"string","format":"date-time"},"evaluatedAt":{"type":"string","format":"date-time"},"dataQuality":{"$ref":"#/components/schemas/DataQuality"},"nextCursor":{"type":"string","minLength":1},"cursorExpiresAt":{"type":"string","format":"date-time"}}},"Transaction":{"type":"object","unevaluatedProperties":false,"allOf":[{"$ref":"#/components/schemas/TransactionState"},{"if":{"required":["status"],"properties":{"status":{"enum":["ACCC","BLCK"]}}},"then":{"required":["bookingDateTime"]},"else":{"not":{"required":["bookingDateTime"]}}},{"if":{"required":["status"],"properties":{"status":{"const":"PDNG"}}},"then":{"required":["pendingAgeSeconds"]},"else":{"not":{"required":["pendingAgeSeconds"]}}},{"anyOf":[{"properties":{"direction":{"const":"outbound"},"creditDebitIndicator":{"const":"DBIT"},"bankTransactionCode":{"properties":{"family":{"const":"IRCT"}}}}},{"properties":{"direction":{"const":"inbound"},"creditDebitIndicator":{"const":"CRDT"},"bankTransactionCode":{"properties":{"family":{"const":"RRCT"}}}}}]}],"required":["entryAmount","creditDebitIndicator","bankTransactionCode","references","amountDetails","charges","debtorAccount","creditorAccount","instructingAgent","instructedAgent","debtorAgent","creditorAgent","intermediaryAgent1","intermediaryAgent2","direction","sourceCountry","destinationCountry"],"description":"One Operational Data Feed record: a reduced, normalised JSON representation of the corresponding camt.054 Ntry, plus the operational facts the file does not carry. It is not a lossless copy of every field the file carries.\n\nThe following feed fields correspond to camt.054 elements: entryAmount and creditDebitIndicator to Ntry/Amt and Ntry/CdtDbtInd, status to Ntry/Sts/Prtry (the file carries the status in the proprietary branch; Cd is not used), bookingDateTime to Ntry/BookgDt/DtTm, bankTransactionCode to Ntry/BkTxCd, references to NtryDtls/TxDtls/Refs, amountDetails to AmtDtls (InstdAmt and TxAmt), charges to Chrgs/Rcrd, debtorAccount and creditorAccount to RltdPties/DbtrAcct/Id and RltdPties/CdtrAcct/Id, instructingAgent, instructedAgent, debtorAgent, creditorAgent, intermediaryAgent1 and intermediaryAgent2 to RltdAgts, and acceptanceDateTime and interbankSettlementDate to RltdDts. The representation is JSON rather than XML, so the same facts can be matched across both channels without the file's element nesting or attributes. Agents carry every identification form the file allows: BIC, LEI or clearing-system member ID. charges carries Nexus-derived enrichment fields that have no XML counterpart under Chrgs/Rcrd (see ChargeRecord).\n\nThe operational facts have no camt.054 counterpart and are available only here: statusSource, acceptedAt, updatedAt, finalStatusAt, rejectionReason, pendingReason, pendingAgeSeconds, destinationAmount, sourceCountry, destinationCountry and direction. direction, creditDebitIndicator and bankTransactionCode.family are three equivalent views of the same role and never disagree.\n\nStatus rules: bookingDateTime is present only for ACCC and BLCK, and pendingAgeSeconds only for PDNG.","properties":{"entryAmount":{"$ref":"#/components/schemas/EntryAmount","description":"Ntry/Amt with its Ccy: the entry amount in the currency of the reported Nexus clearing account."},"creditDebitIndicator":{"$ref":"#/components/schemas/CreditDebitIndicator"},"bookingDateTime":{"type":"string","format":"date-time","description":"Ntry/BookgDt/DtTm: the timestamp of completion in the Nexus Gateway. Present only for ACCC and BLCK. It is not evidence of a domestic account booking."},"bankTransactionCode":{"$ref":"#/components/schemas/BankTransactionCode"},"references":{"$ref":"#/components/schemas/TransactionReferences"},"amountDetails":{"$ref":"#/components/schemas/AmountDetails"},"charges":{"type":"array","minItems":2,"maxItems":2,"items":{"$ref":"#/components/schemas/ChargeRecord"},"allOf":[{"contains":{"properties":{"type":{"const":"SPSP"}}},"minContains":1,"maxContains":1},{"contains":{"properties":{"type":{"const":"DPSP"}}},"minContains":1,"maxContains":1}],"description":"Chrgs/Rcrd: exactly two records, one for the Source PSP fee (SPSP) and one for the Destination PSP fee (DPSP)."},"debtorAccount":{"$ref":"#/components/schemas/AccountIdentification","description":"RltdPties/DbtrAcct/Id: the debtor's account identifier, copied from the pacs.008."},"creditorAccount":{"$ref":"#/components/schemas/AccountIdentification","description":"RltdPties/CdtrAcct/Id: the creditor's account identifier, copied from the pacs.008."},"instructingAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/InstgAgt, copied from the pacs.008."},"instructedAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/InstdAgt, copied from the pacs.008."},"debtorAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/DbtrAgt, the Source PSP. Matched by pspId on an outbound payment."},"creditorAgent":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/CdtrAgt, the Destination PSP. Matched by pspId on an inbound payment."},"intermediaryAgent1":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/IntrmyAgt1, the Source SAP."},"intermediaryAgent2":{"$ref":"#/components/schemas/AgentIdentification","description":"RltdAgts/IntrmyAgt2, the Destination SAP."},"acceptanceDateTime":{"type":"string","format":"date-time","description":"RltdDts/AccptncDtTm: the acceptance timestamp set by the Source PSP, copied from the pacs.008. Not the Nexus acceptance; see acceptedAt."},"interbankSettlementDate":{"type":"string","format":"date","description":"RltdDts/IntrBkSttlmDt."},"direction":{"type":"string","enum":["inbound","outbound"],"description":"Operational view of the same role as creditDebitIndicator and bankTransactionCode.family, relative to the authenticated IPSO. No camt.054 counterpart."},"sourceCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 source country. No camt.054 counterpart."},"destinationCountry":{"type":"string","pattern":"^[A-Z]{2}$","description":"ISO 3166-1 alpha-2 destination country. No camt.054 counterpart."},"destinationAmount":{"$ref":"#/components/schemas/EntryAmount","description":"Destination-leg amount and currency as presented on the Transaction Dashboard. No camt.054 counterpart: the file conveys the destination leg through instructedAmount and the applied exchange rate."},"pendingAgeSeconds":{"type":"number","minimum":0,"description":"Present only for current PDNG, calculated at the page evaluatedAt from acceptedAt. A read-only reporting calculation with no camt.054 counterpart."}}},"TransactionState":{"type":"object","required":["uetr","status","statusSource","acceptedAt","updatedAt"],"allOf":[{"if":{"required":["status"],"properties":{"status":{"const":"PDNG"}}},"then":{"not":{"required":["finalStatusAt"]}},"else":{"required":["finalStatusAt"],"not":{"required":["pendingReason"]}}},{"if":{"required":["status"],"properties":{"status":{"const":"RJCT"}}},"then":{"required":["rejectionReason"]},"else":{"not":{"required":["rejectionReason"]}}}],"description":"Optional facts are omitted if unavailable, never fabricated. Status rules: finalStatusAt is present for ACCC, RJCT and BLCK and absent for PDNG; rejectionReason is present only for RJCT; pendingReason only for PDNG. No raw messages, customer PII or full event history.","properties":{"uetr":{"$ref":"#/components/schemas/Uetr"},"status":{"$ref":"#/components/schemas/PaymentStatus"},"statusSource":{"$ref":"#/components/schemas/StatusSource"},"acceptedAt":{"type":"string","format":"date-time","description":"The instant Nexus recorded the transaction as accepted. It assigns the Nexus Day and is the basis of the date filters; pending age is measured from it. No camt.054 counterpart."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of the latest source payment-state update."},"finalStatusAt":{"type":"string","format":"date-time","description":"Present for ACCC, RJCT and BLCK; absent for PDNG."},"rejectionReason":{"$ref":"#/components/schemas/Reason","description":"Present only for RJCT, where it is required. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."},"pendingReason":{"$ref":"#/components/schemas/PendingReason","description":"Only for current PDNG. Omitted for any other status and whenever the reason is unknown. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."}}},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"},"PaymentStatus":{"type":"string","enum":["ACCC","RJCT","PDNG","BLCK"],"description":"Nexus-observed source state, not a domestic balance or booking. The same values as camt.054 Ntry/Sts/Prtry; the file does not use Ntry/Sts/Cd. ACWP is received by Nexus but never sent, so it does not appear in this feed or in report totals."},"StatusSource":{"type":"string","enum":["NEXUS","DESTINATION"]},"Reason":{"type":"object","additionalProperties":false,"required":["code","description"],"properties":{"code":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."}}},"PendingReason":{"type":"object","additionalProperties":false,"required":["code","description"],"description":"Why the payment is currently PDNG. Present only when the reason is known; absence is a missing fact, never an inferred outcome. Reporting classifies the reason from source facts and does not change payment state.","properties":{"code":{"$ref":"#/components/schemas/PendingReasonCode"},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."},"destinationReasonCode":{"type":"string","minLength":1,"description":"ISO 20022 StsRsnInf/Rsn/Cd exactly as supplied by the destination IPSO on its interim pacs.002. Omitted whenever the destination supplied no reason, and only ever present with code DESTINATION_PROCESSING. Never populated by Nexus from its own classification."}}},"PendingReasonCode":{"type":"string","enum":["AWAITING_DESTINATION_RESPONSE","DESTINATION_DELIVERY_UNCONFIRMED","DESTINATION_UNREACHABLE","UNDER_INVESTIGATION","INVALID_STATUS_RECEIVED","DESTINATION_PROCESSING"],"description":"Closed set of reasons a payment is currently PDNG. No value implies finality, a rejection or a completed payment, and none of them is a payment status in its own right. The first five are Nexus-observed (statusSource NEXUS); DESTINATION_PROCESSING is reported by the destination IPSO (statusSource DESTINATION). The set is closed: a response never carries a value outside it.\n\n| Code | Meaning |\n| --- | --- |\n| AWAITING_DESTINATION_RESPONSE | Dispatched to the destination IPSO; no status returned and the settlement timer has not expired. |\n| DESTINATION_DELIVERY_UNCONFIRMED | Delivery to the destination IPSO could not be confirmed after the retry policy was exhausted. Delivery is uncertain, not refused. |\n| DESTINATION_UNREACHABLE | Persistent connectivity, authentication or routing failure to the destination IPSO. |\n| UNDER_INVESTIGATION | The settlement timer expired and the enquiry cadence is running. This remains the reason for as long as enquiry continues, including after the investigation window closes; internal escalation and ticketing do not change it. |\n| INVALID_STATUS_RECEIVED | A destination status message arrived but failed validation, so no status was applied. A valid status message is still awaited. |\n| DESTINATION_PROCESSING | The destination IPSO reported the payment as still in progress. |"},"EntryAmount":{"type":"object","additionalProperties":false,"required":["amount","currency"],"properties":{"amount":{"$ref":"#/components/schemas/Amount"},"currency":{"$ref":"#/components/schemas/Currency"}},"description":"An amount with its currency, mirroring the camt.054 Amt element and its Ccy attribute. The currency always travels with the amount; never sum amounts across currencies."},"Amount":{"type":"string","pattern":"^(0|[1-9][0-9]{0,12})(\\.[0-9]{1,5})?$","description":"Exact non-negative decimal; preserve source precision and pair with currency. At most 18 total digits and 5 fractional digits, matching the XML amount limits."},"Currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"Valid ISO 4217 code."},"CreditDebitIndicator":{"type":"string","enum":["CRDT","DBIT"],"description":"camt.054 CdtDbtInd. Direction of the entry relative to the reported Nexus clearing account. Equivalent to the direction field expressed in ISO vocabulary: an outbound payment is DBIT and an inbound payment is CRDT."},"BankTransactionCode":{"type":"object","additionalProperties":false,"required":["domain","family","subFamily"],"description":"camt.054 BkTxCd. Domain is always PMNT and subFamily always XBCT (cross-border credit transfer). Family encodes the Nexus role for this entry and is a third equivalent view of the same fact as direction and creditDebitIndicator.","properties":{"domain":{"type":"string","const":"PMNT","description":"BkTxCd/Domn/Cd."},"family":{"type":"string","enum":["IRCT","RRCT"],"description":"BkTxCd/Domn/Fmly/Cd. IRCT when Nexus acts as Source IPSO for this entry, RRCT as Destination IPSO."},"subFamily":{"type":"string","const":"XBCT","description":"BkTxCd/Domn/Fmly/SubFmlyCd."}}},"TransactionReferences":{"type":"object","additionalProperties":false,"required":["uetr","messageId","endToEndId"],"description":"camt.054 NtryDtls/TxDtls/Refs. Every value is copied unchanged from the original pacs.008 except clearingSystemReference, which Nexus assigns. UETR is the primary match key; the others are available for cross-validation. A reference the source did not supply is omitted rather than defaulted. messageId, endToEndId and uetr are required, as in the camt.054 file. MsgId follows the 35-character Nexus message-identifier format and the other references are at most 35 characters with Nexus character restrictions.","properties":{"messageId":{"$ref":"#/components/schemas/NexusMessageIdentifier","description":"Refs/MsgId."},"instructionId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/InstrId."},"endToEndId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/EndToEndId."},"uetr":{"$ref":"#/components/schemas/Uetr","description":"Refs/UETR. Identical to the record's own uetr; repeated here so the Refs group maps one-to-one onto the file."},"transactionId":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/TxId."},"clearingSystemReference":{"$ref":"#/components/schemas/Max35Reference","description":"Refs/ClrSysRef, assigned by Nexus."}}},"NexusMessageIdentifier":{"type":"string","minLength":35,"maxLength":35,"pattern":"^[0-9]{8}NXPS081[A-Z0-9]{8}[A-Z0-9]{11}X$","description":"Nexus message identifier of the original pacs.008, 35 characters: YYYYMMDD + NXPS081 + sequence(8) + sender BIC-11 + literal X."},"Max35Reference":{"type":"string","minLength":1,"maxLength":35,"description":"Source-owned reference, at most 35 characters, as carried in the camt.054 file. Nexus character restrictions apply."},"AmountDetails":{"type":"object","additionalProperties":false,"required":["instructedAmount","transactionAmount"],"description":"camt.054 AmtDtls. The instructed amount with its embedded currency exchange. The instructed amount (AmtDtls/InstdAmt) and the transaction amount (AmtDtls/TxAmt) are distinct and must not be substituted for one another.","properties":{"instructedAmount":{"$ref":"#/components/schemas/EntryAmount","description":"AmtDtls/InstdAmt/Amt and its Ccy."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/InstdAmt/CcyXchg. Omitted where no exchange applies."},"transactionAmount":{"$ref":"#/components/schemas/TransactionAmount"}}},"CurrencyExchange":{"type":"object","additionalProperties":false,"required":["sourceCurrency","exchangeRate"],"description":"camt.054 AmtDtls/InstdAmt/CcyXchg. Carries the agreed exchange rate applied to this payment. Transaction-time facts only; never re-derived from a current rate. SrcCcy and XchgRate are required and TrgtCcy is optional, as in the file. The same structure is used under both InstdAmt and TxAmt.","properties":{"sourceCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/SrcCcy. Equal to the currency component of the sendingIpso key."},"targetCurrency":{"$ref":"#/components/schemas/Currency","description":"CcyXchg/TrgtCcy. Optional. Equal to the currency component of the receivingIpso key."},"exchangeRate":{"type":"string","pattern":"^(0|[1-9][0-9]{0,2})\\.[0-9]{8}$","description":"CcyXchg/XchgRate as an exact decimal string with exactly 8 fractional digits and at most 11 total digits (XSD totalDigits 11), as in the file. Required whenever currencyExchange is present."}}},"TransactionAmount":{"type":"object","additionalProperties":false,"required":["amount","currency","currencyExchange"],"description":"camt.054 AmtDtls/TxAmt: the transaction amount with its currency exchange. Distinct from the instructed amount.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"AmtDtls/TxAmt/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of AmtDtls/TxAmt/Amt."},"currencyExchange":{"$ref":"#/components/schemas/CurrencyExchange","description":"AmtDtls/TxAmt/CcyXchg."}}},"ChargeRecord":{"type":"object","additionalProperties":false,"required":["amount","currency","creditDebitIndicator","type","bearer","agent"],"description":"One camt.054 Chrgs/Rcrd. Nexus publishes one record for the Source PSP fee and one for the Destination PSP fee, each in its own currency. Charge records are never netted or summed across currencies. The file carries exactly two Chrgs/Rcrd entries, each with its agent, and so does this feed. creditDebitIndicator, type and bearer are Nexus-derived enrichment: the file carries none of Rcrd/CdtDbtInd, Rcrd/Tp or Rcrd/Br.","properties":{"amount":{"$ref":"#/components/schemas/Amount","description":"Rcrd/Amt."},"currency":{"$ref":"#/components/schemas/Currency","description":"The Ccy attribute of Rcrd/Amt."},"creditDebitIndicator":{"$ref":"#/components/schemas/CreditDebitIndicator","description":"Nexus-derived enrichment. The camt.054 file does not carry CdtDbtInd on Chrgs/Rcrd."},"type":{"type":"string","enum":["SPSP","DPSP"],"description":"Nexus-derived enrichment; the camt.054 file does not carry Rcrd/Tp. SPSP is the Source PSP fee and DPSP the Destination PSP fee."},"bearer":{"type":"string","const":"DEBT","description":"Nexus-derived enrichment; the camt.054 file does not carry Rcrd/Br. Always DEBT under the Nexus scheme rules."},"agent":{"$ref":"#/components/schemas/AgentIdentification","description":"Rcrd/Agt/FinInstnId, the institution the charge applies to."}}},"AgentIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An agent institution as identified in camt.054 FinInstnId, copied from the pacs.008: exactly one of BICFI, LEI or ClrSysMmbId. scheme names the form and id carries the value; clearingSystemCode accompanies a clearing-system member ID when the source supplied it. Institutional identifier only, never customer data.","oneOf":[{"title":"BIC","properties":{"scheme":{"const":"BIC"},"id":{"$ref":"#/components/schemas/BIC"}},"not":{"required":["clearingSystemCode"]}},{"title":"LEI","properties":{"scheme":{"const":"LEI"},"id":{"$ref":"#/components/schemas/LEI"}},"not":{"required":["clearingSystemCode"]}},{"title":"Clearing-system member ID","properties":{"scheme":{"const":"CLEARING_MEMBER_ID"}}}],"properties":{"scheme":{"type":"string","enum":["BIC","LEI","CLEARING_MEMBER_ID"],"description":"BIC is FinInstnId/BICFI, LEI is FinInstnId/LEI and CLEARING_MEMBER_ID is FinInstnId/ClrSysMmbId/MmbId."},"id":{"type":"string","minLength":1,"maxLength":35,"description":"The identifier value, in the form named by scheme."},"clearingSystemCode":{"type":"string","minLength":1,"maxLength":5,"description":"FinInstnId/ClrSysMmbId/ClrSysId/Cd, an ISO external clearing system code. Only with CLEARING_MEMBER_ID; omitted when the source did not supply it."}}},"BIC":{"type":"string","pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","description":"ISO 9362 Business Identifier Code as carried in camt.054 FinInstnId/BICFI: a four-letter institution code, a two-letter ISO 3166-1 country code, a two-character location code and an optional three-character branch code, giving 8 or 11 characters. Institutional identifier only, never customer data."},"LEI":{"type":"string","pattern":"^[A-Z0-9]{18}[0-9]{2}$","description":"ISO 17442 Legal Entity Identifier as carried in camt.054 FinInstnId/LEI. Institutional identifier only, never customer data."},"AccountIdentification":{"type":"object","additionalProperties":false,"required":["scheme","id"],"description":"An account identifier copied from the pacs.008, as carried in camt.054 RltdPties/DbtrAcct/Id or RltdPties/CdtrAcct/Id. Identifier only: no account name, proxy, type or currency. Use it for reconciliation; it is not a query filter and must not be logged.","oneOf":[{"title":"IBAN","properties":{"scheme":{"const":"IBAN"},"id":{"pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$"}}},{"title":"Other account identifier","properties":{"scheme":{"const":"OTHER"}}}],"properties":{"scheme":{"type":"string","enum":["IBAN","OTHER"],"description":"IBAN is Id/IBAN; OTHER is Id/Othr/Id, such as a domestic account number."},"id":{"type":"string","minLength":1,"maxLength":34,"description":"The account identifier, in the form named by scheme."}}},"DataQuality":{"type":"string","enum":["complete","partial","stale"]}}}}
```

## The TrackAndTraceResult object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"TrackAndTraceResult":{"description":"Latest known state for one transaction within the retained history window, typically available within seconds. This lookup reads live payment records; it does not change payment records and is not for polling or bulk retrieval.","allOf":[{"$ref":"#/components/schemas/TransactionState"}],"type":"object","unevaluatedProperties":false,"required":["authoritative","dataAsOf","dataQuality"],"properties":{"authoritative":{"const":false},"dataAsOf":{"type":"string","format":"date-time"},"dataQuality":{"$ref":"#/components/schemas/DataQuality"}}},"TransactionState":{"type":"object","required":["uetr","status","statusSource","acceptedAt","updatedAt"],"allOf":[{"if":{"required":["status"],"properties":{"status":{"const":"PDNG"}}},"then":{"not":{"required":["finalStatusAt"]}},"else":{"required":["finalStatusAt"],"not":{"required":["pendingReason"]}}},{"if":{"required":["status"],"properties":{"status":{"const":"RJCT"}}},"then":{"required":["rejectionReason"]},"else":{"not":{"required":["rejectionReason"]}}}],"description":"Optional facts are omitted if unavailable, never fabricated. Status rules: finalStatusAt is present for ACCC, RJCT and BLCK and absent for PDNG; rejectionReason is present only for RJCT; pendingReason only for PDNG. No raw messages, customer PII or full event history.","properties":{"uetr":{"$ref":"#/components/schemas/Uetr"},"status":{"$ref":"#/components/schemas/PaymentStatus"},"statusSource":{"$ref":"#/components/schemas/StatusSource"},"acceptedAt":{"type":"string","format":"date-time","description":"The instant Nexus recorded the transaction as accepted. It assigns the Nexus Day and is the basis of the date filters; pending age is measured from it. No camt.054 counterpart."},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp of the latest source payment-state update."},"finalStatusAt":{"type":"string","format":"date-time","description":"Present for ACCC, RJCT and BLCK; absent for PDNG."},"rejectionReason":{"$ref":"#/components/schemas/Reason","description":"Present only for RJCT, where it is required. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."},"pendingReason":{"$ref":"#/components/schemas/PendingReason","description":"Only for current PDNG. Omitted for any other status and whenever the reason is unknown. camt.054 carries the status code but no status reason, so this fact has no counterpart in the file."}}},"Uetr":{"type":"string","format":"uuid","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"},"PaymentStatus":{"type":"string","enum":["ACCC","RJCT","PDNG","BLCK"],"description":"Nexus-observed source state, not a domestic balance or booking. The same values as camt.054 Ntry/Sts/Prtry; the file does not use Ntry/Sts/Cd. ACWP is received by Nexus but never sent, so it does not appear in this feed or in report totals."},"StatusSource":{"type":"string","enum":["NEXUS","DESTINATION"]},"Reason":{"type":"object","additionalProperties":false,"required":["code","description"],"properties":{"code":{"type":"string","minLength":1},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."}}},"PendingReason":{"type":"object","additionalProperties":false,"required":["code","description"],"description":"Why the payment is currently PDNG. Present only when the reason is known; absence is a missing fact, never an inferred outcome. Reporting classifies the reason from source facts and does not change payment state.","properties":{"code":{"$ref":"#/components/schemas/PendingReasonCode"},"description":{"type":"string","minLength":1,"description":"Approved PII-free reason text, not raw participant/customer free text."},"destinationReasonCode":{"type":"string","minLength":1,"description":"ISO 20022 StsRsnInf/Rsn/Cd exactly as supplied by the destination IPSO on its interim pacs.002. Omitted whenever the destination supplied no reason, and only ever present with code DESTINATION_PROCESSING. Never populated by Nexus from its own classification."}}},"PendingReasonCode":{"type":"string","enum":["AWAITING_DESTINATION_RESPONSE","DESTINATION_DELIVERY_UNCONFIRMED","DESTINATION_UNREACHABLE","UNDER_INVESTIGATION","INVALID_STATUS_RECEIVED","DESTINATION_PROCESSING"],"description":"Closed set of reasons a payment is currently PDNG. No value implies finality, a rejection or a completed payment, and none of them is a payment status in its own right. The first five are Nexus-observed (statusSource NEXUS); DESTINATION_PROCESSING is reported by the destination IPSO (statusSource DESTINATION). The set is closed: a response never carries a value outside it.\n\n| Code | Meaning |\n| --- | --- |\n| AWAITING_DESTINATION_RESPONSE | Dispatched to the destination IPSO; no status returned and the settlement timer has not expired. |\n| DESTINATION_DELIVERY_UNCONFIRMED | Delivery to the destination IPSO could not be confirmed after the retry policy was exhausted. Delivery is uncertain, not refused. |\n| DESTINATION_UNREACHABLE | Persistent connectivity, authentication or routing failure to the destination IPSO. |\n| UNDER_INVESTIGATION | The settlement timer expired and the enquiry cadence is running. This remains the reason for as long as enquiry continues, including after the investigation window closes; internal escalation and ticketing do not change it. |\n| INVALID_STATUS_RECEIVED | A destination status message arrived but failed validation, so no status was applied. A valid status message is still awaited. |\n| DESTINATION_PROCESSING | The destination IPSO reported the payment as still in progress. |"},"DataQuality":{"type":"string","enum":["complete","partial","stale"]}}}}
```

## The ReportDate object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportDate":{"type":"string","pattern":"^[0-9]{8}$","description":"A real YYYYMMDD Nexus date; validate calendar and retrieval-window rules."}}}}
```

## The ReportChecksum object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportChecksum":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"description":"One named checksum of the exact protected .xml.gpg bytes delivered by both API and SFTP, not the decrypted XML or manifest JSON. SHA256 is the only approved algorithm and is a cryptographic digest; it does not replace Nexus signature verification. New algorithms require an approved, published definition before the producer emits them.","properties":{"algorithm":{"type":"string","minLength":1,"pattern":"^[A-Z][A-Z0-9-]*$","not":{"pattern":"\\s"},"description":"Canonical case-sensitive algorithm name with no whitespace. Deliberately an extensible response string, not a closed enum, so existing clients can tolerate additional algorithms. SHA256 is the only approved name and is mandatory."},"value":{"type":"string","minLength":1,"pattern":"^[0-9a-f]+$","not":{"pattern":"\\s"},"description":"Lowercase hexadecimal digest with no whitespace, including leading zeroes. Exactly 64 characters for SHA256; any newly approved algorithm must publish its digest length and computation rules."}},"allOf":[{"if":{"required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"then":{"properties":{"algorithm":{"const":"SHA256"},"value":{"minLength":64,"maxLength":64}}}}]}}}}
```

## The ReportChecksums object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportChecksums":{"type":"array","minItems":1,"uniqueItems":true,"items":{"$ref":"#/components/schemas/ReportChecksum"},"description":"Unordered algorithm/value entries. Exactly one SHA256 entry is required and must be neither missing, duplicated nor replaced by an unknown algorithm. Additional approved algorithms may be appended without changing the file shape. Clients locate the digest by algorithm, never by array position, tolerate unsupported additional entries and still verify SHA256 and the Nexus signature. Every algorithm name must be unique: contains/maxContains enforce the single mandatory name; the producer must also check uniqueness of any future names because uniqueItems alone compares whole objects, not algorithm keys.","allOf":[{"contains":{"type":"object","required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"minContains":1,"maxContains":1}]},"ReportChecksum":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"description":"One named checksum of the exact protected .xml.gpg bytes delivered by both API and SFTP, not the decrypted XML or manifest JSON. SHA256 is the only approved algorithm and is a cryptographic digest; it does not replace Nexus signature verification. New algorithms require an approved, published definition before the producer emits them.","properties":{"algorithm":{"type":"string","minLength":1,"pattern":"^[A-Z][A-Z0-9-]*$","not":{"pattern":"\\s"},"description":"Canonical case-sensitive algorithm name with no whitespace. Deliberately an extensible response string, not a closed enum, so existing clients can tolerate additional algorithms. SHA256 is the only approved name and is mandatory."},"value":{"type":"string","minLength":1,"pattern":"^[0-9a-f]+$","not":{"pattern":"\\s"},"description":"Lowercase hexadecimal digest with no whitespace, including leading zeroes. Exactly 64 characters for SHA256; any newly approved algorithm must publish its digest length and computation rules."}},"allOf":[{"if":{"required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"then":{"properties":{"algorithm":{"const":"SHA256"},"value":{"minLength":64,"maxLength":64}}}}]}}}}
```

## The ReportFile object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportFile":{"type":"object","additionalProperties":false,"required":["sequence","name","records","sizeBytes","checksums","url","expiresAt"],"description":"One published file of the report, enriched with transient API download credentials. Its name, record count, size and checksum do not change when a link is reissued.","properties":{"sequence":{"type":"integer","minimum":1,"description":"Part number of this file within the report, starting at 1. It is the final segment of the file name, and the highest sequence in the report equals fileCount."},"name":{"type":"string","pattern":"^NEXUS_CAMT054_[A-Za-z0-9._-]+_[0-9]{8}_v[1-9][0-9]*_[1-9][0-9]*\\.xml\\.gpg$","description":"Published file name: NEXUS_CAMT054_<IPSO-ID>_<YYYYMMDD>_v<closeVersion>_<seq>.xml.gpg. The IPSO-ID, date, version and part segments must match participant, nexusDay, closeVersion and sequence."},"records":{"type":"integer","minimum":0,"description":"Number of records in this file; includes zero-activity reports."},"sizeBytes":{"type":"integer","minimum":1,"description":"Byte length of the exact protected delivered file, not the decrypted XML size."},"checksums":{"$ref":"#/components/schemas/ReportChecksums"},"url":{"type":"string","format":"uri","pattern":"^https://","description":"Response-only signed URL bound to this exact file/version and authorised IPSO. Start the download before expiry; a started transfer may finish later. Never persist it as business data, log it, or forward an Operations OAuth token or RFC 9421 signature to its host. The download carries no RFC 9421 signature; verify the bytes against the SHA256 checksum in this signed manifest."},"expiresAt":{"type":"string","format":"date-time","description":"Exclusive expiry instant, link issuance plus exactly 300 seconds. Not generatedAt plus 300 seconds and not report retention expiry. Response-only; a new link may have a new expiry without changing publication facts."}}},"ReportChecksums":{"type":"array","minItems":1,"uniqueItems":true,"items":{"$ref":"#/components/schemas/ReportChecksum"},"description":"Unordered algorithm/value entries. Exactly one SHA256 entry is required and must be neither missing, duplicated nor replaced by an unknown algorithm. Additional approved algorithms may be appended without changing the file shape. Clients locate the digest by algorithm, never by array position, tolerate unsupported additional entries and still verify SHA256 and the Nexus signature. Every algorithm name must be unique: contains/maxContains enforce the single mandatory name; the producer must also check uniqueness of any future names because uniqueItems alone compares whole objects, not algorithm keys.","allOf":[{"contains":{"type":"object","required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"minContains":1,"maxContains":1}]},"ReportChecksum":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"description":"One named checksum of the exact protected .xml.gpg bytes delivered by both API and SFTP, not the decrypted XML or manifest JSON. SHA256 is the only approved algorithm and is a cryptographic digest; it does not replace Nexus signature verification. New algorithms require an approved, published definition before the producer emits them.","properties":{"algorithm":{"type":"string","minLength":1,"pattern":"^[A-Z][A-Z0-9-]*$","not":{"pattern":"\\s"},"description":"Canonical case-sensitive algorithm name with no whitespace. Deliberately an extensible response string, not a closed enum, so existing clients can tolerate additional algorithms. SHA256 is the only approved name and is mandatory."},"value":{"type":"string","minLength":1,"pattern":"^[0-9a-f]+$","not":{"pattern":"\\s"},"description":"Lowercase hexadecimal digest with no whitespace, including leading zeroes. Exactly 64 characters for SHA256; any newly approved algorithm must publish its digest length and computation rules."}},"allOf":[{"if":{"required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"then":{"properties":{"algorithm":{"const":"SHA256"},"value":{"minLength":64,"maxLength":64}}}}]}}}}
```

## The ReportProtection object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportProtection":{"type":"object","additionalProperties":false,"required":["algorithm","keyId"],"description":"A cryptographic operation applied to the published file, naming the algorithm and the key the IPSO must use to verify or decrypt it.","properties":{"algorithm":{"type":"string","minLength":1,"description":"Approved algorithm name."},"keyId":{"type":"string","minLength":1,"description":"Identifier of the key used, so the IPSO can select the right key across a rotation."}}}}}}
```

## The ReportManifest object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportManifest":{"type":"object","additionalProperties":false,"required":["manifestVersion","reportType","participant","nexusDay","closeVersion","generatedAt","periodStart","periodEnd","dataAsOf","fileCount","totalRecords","totals","signature","encryption","files"],"description":"The manifest of a completely published report. This is the same manifest, with the same field names, that accompanies the file on SFTP; the API response adds only the per-file signed url and expiresAt, which exist for this response alone and are never stored. The reported period is the single Nexus Day named by nexusDay, and periodEnd is inclusive. fileCount equals the files length and the highest file sequence; totalRecords equals both the sum of files.records and the sum of the status totals. Enforce cross-field equality, real-calendar and day-boundary rules and filename identity server-side; JSON Schema alone does not express these arithmetic and cross-field invariants.","properties":{"manifestVersion":{"type":"string","const":"1.0","description":"Version of the manifest structure, independent of closeVersion, the ISO message version and /v1."},"reportType":{"type":"string","const":"CAMT054"},"participant":{"$ref":"#/components/schemas/Identifier","description":"Reporting identifier of the authenticated IPSO, as used in the file's IPSO-ID segment. Derived from the trusted IPSO/environment binding; never a caller-selected participant filter."},"nexusDay":{"$ref":"#/components/schemas/ReportDate","description":"Reported Nexus Day in YYYYMMDD, corresponding to the requested date and its SGT day boundaries."},"closeVersion":{"type":"integer","minimum":1,"description":"Version of the close for this Nexus Day. A correction is published as a higher closeVersion; always use the highest closeVersion available."},"generatedAt":{"type":"string","format":"date-time","description":"Publication timestamp of this close version; unchanged when a signed link is reissued."},"periodStart":{"type":"string","format":"date-time","description":"Start of the reported Nexus Day, 00:00:00 SGT."},"periodEnd":{"type":"string","format":"date-time","description":"Inclusive end of the reported Nexus Day, 23:59:59 SGT."},"dataAsOf":{"type":"string","format":"date-time"},"fileCount":{"type":"integer","minimum":1,"description":"Number of files in this report, equal to the files length and to the highest file sequence. A report is at least one file, including a zero-activity day; larger reports may be split across several files."},"totalRecords":{"type":"integer","minimum":0,"description":"Equals the sum of files.records and the sum of the status totals; zero is valid for a published zero-activity report."},"totals":{"type":"object","additionalProperties":false,"required":["ACCC","RJCT","PDNG","BLCK"],"properties":{"ACCC":{"type":"integer","minimum":0},"RJCT":{"type":"integer","minimum":0},"PDNG":{"type":"integer","minimum":0},"BLCK":{"type":"integer","minimum":0}}},"signature":{"$ref":"#/components/schemas/ReportProtection","description":"The Nexus signature over the report, which the IPSO must verify before loading the data."},"encryption":{"$ref":"#/components/schemas/ReportProtection","description":"The encryption applied to the report, identifying the key the IPSO decrypts with."},"files":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/ReportFile"}}}},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."},"ReportDate":{"type":"string","pattern":"^[0-9]{8}$","description":"A real YYYYMMDD Nexus date; validate calendar and retrieval-window rules."},"ReportProtection":{"type":"object","additionalProperties":false,"required":["algorithm","keyId"],"description":"A cryptographic operation applied to the published file, naming the algorithm and the key the IPSO must use to verify or decrypt it.","properties":{"algorithm":{"type":"string","minLength":1,"description":"Approved algorithm name."},"keyId":{"type":"string","minLength":1,"description":"Identifier of the key used, so the IPSO can select the right key across a rotation."}}},"ReportFile":{"type":"object","additionalProperties":false,"required":["sequence","name","records","sizeBytes","checksums","url","expiresAt"],"description":"One published file of the report, enriched with transient API download credentials. Its name, record count, size and checksum do not change when a link is reissued.","properties":{"sequence":{"type":"integer","minimum":1,"description":"Part number of this file within the report, starting at 1. It is the final segment of the file name, and the highest sequence in the report equals fileCount."},"name":{"type":"string","pattern":"^NEXUS_CAMT054_[A-Za-z0-9._-]+_[0-9]{8}_v[1-9][0-9]*_[1-9][0-9]*\\.xml\\.gpg$","description":"Published file name: NEXUS_CAMT054_<IPSO-ID>_<YYYYMMDD>_v<closeVersion>_<seq>.xml.gpg. The IPSO-ID, date, version and part segments must match participant, nexusDay, closeVersion and sequence."},"records":{"type":"integer","minimum":0,"description":"Number of records in this file; includes zero-activity reports."},"sizeBytes":{"type":"integer","minimum":1,"description":"Byte length of the exact protected delivered file, not the decrypted XML size."},"checksums":{"$ref":"#/components/schemas/ReportChecksums"},"url":{"type":"string","format":"uri","pattern":"^https://","description":"Response-only signed URL bound to this exact file/version and authorised IPSO. Start the download before expiry; a started transfer may finish later. Never persist it as business data, log it, or forward an Operations OAuth token or RFC 9421 signature to its host. The download carries no RFC 9421 signature; verify the bytes against the SHA256 checksum in this signed manifest."},"expiresAt":{"type":"string","format":"date-time","description":"Exclusive expiry instant, link issuance plus exactly 300 seconds. Not generatedAt plus 300 seconds and not report retention expiry. Response-only; a new link may have a new expiry without changing publication facts."}}},"ReportChecksums":{"type":"array","minItems":1,"uniqueItems":true,"items":{"$ref":"#/components/schemas/ReportChecksum"},"description":"Unordered algorithm/value entries. Exactly one SHA256 entry is required and must be neither missing, duplicated nor replaced by an unknown algorithm. Additional approved algorithms may be appended without changing the file shape. Clients locate the digest by algorithm, never by array position, tolerate unsupported additional entries and still verify SHA256 and the Nexus signature. Every algorithm name must be unique: contains/maxContains enforce the single mandatory name; the producer must also check uniqueness of any future names because uniqueItems alone compares whole objects, not algorithm keys.","allOf":[{"contains":{"type":"object","required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"minContains":1,"maxContains":1}]},"ReportChecksum":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"description":"One named checksum of the exact protected .xml.gpg bytes delivered by both API and SFTP, not the decrypted XML or manifest JSON. SHA256 is the only approved algorithm and is a cryptographic digest; it does not replace Nexus signature verification. New algorithms require an approved, published definition before the producer emits them.","properties":{"algorithm":{"type":"string","minLength":1,"pattern":"^[A-Z][A-Z0-9-]*$","not":{"pattern":"\\s"},"description":"Canonical case-sensitive algorithm name with no whitespace. Deliberately an extensible response string, not a closed enum, so existing clients can tolerate additional algorithms. SHA256 is the only approved name and is mandatory."},"value":{"type":"string","minLength":1,"pattern":"^[0-9a-f]+$","not":{"pattern":"\\s"},"description":"Lowercase hexadecimal digest with no whitespace, including leading zeroes. Exactly 64 characters for SHA256; any newly approved algorithm must publish its digest length and computation rules."}},"allOf":[{"if":{"required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"then":{"properties":{"algorithm":{"const":"SHA256"},"value":{"minLength":64,"maxLength":64}}}}]}}}}
```

## The ReportDownload object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"ReportDownload":{"description":"The manifest of the latest published report for the requested Nexus Day, with a signed download link per file. A link is valid for exactly 300 seconds from issuance for initiation. Re-requesting an expired or interrupted link consumes a further retrieval allowance unit. Always use the highest closeVersion, verify the signature and the SHA-256 checksum, and decrypt with the key named in the manifest before loading the data.","type":"object","additionalProperties":false,"required":["manifest"],"properties":{"manifest":{"$ref":"#/components/schemas/ReportManifest"}}},"ReportManifest":{"type":"object","additionalProperties":false,"required":["manifestVersion","reportType","participant","nexusDay","closeVersion","generatedAt","periodStart","periodEnd","dataAsOf","fileCount","totalRecords","totals","signature","encryption","files"],"description":"The manifest of a completely published report. This is the same manifest, with the same field names, that accompanies the file on SFTP; the API response adds only the per-file signed url and expiresAt, which exist for this response alone and are never stored. The reported period is the single Nexus Day named by nexusDay, and periodEnd is inclusive. fileCount equals the files length and the highest file sequence; totalRecords equals both the sum of files.records and the sum of the status totals. Enforce cross-field equality, real-calendar and day-boundary rules and filename identity server-side; JSON Schema alone does not express these arithmetic and cross-field invariants.","properties":{"manifestVersion":{"type":"string","const":"1.0","description":"Version of the manifest structure, independent of closeVersion, the ISO message version and /v1."},"reportType":{"type":"string","const":"CAMT054"},"participant":{"$ref":"#/components/schemas/Identifier","description":"Reporting identifier of the authenticated IPSO, as used in the file's IPSO-ID segment. Derived from the trusted IPSO/environment binding; never a caller-selected participant filter."},"nexusDay":{"$ref":"#/components/schemas/ReportDate","description":"Reported Nexus Day in YYYYMMDD, corresponding to the requested date and its SGT day boundaries."},"closeVersion":{"type":"integer","minimum":1,"description":"Version of the close for this Nexus Day. A correction is published as a higher closeVersion; always use the highest closeVersion available."},"generatedAt":{"type":"string","format":"date-time","description":"Publication timestamp of this close version; unchanged when a signed link is reissued."},"periodStart":{"type":"string","format":"date-time","description":"Start of the reported Nexus Day, 00:00:00 SGT."},"periodEnd":{"type":"string","format":"date-time","description":"Inclusive end of the reported Nexus Day, 23:59:59 SGT."},"dataAsOf":{"type":"string","format":"date-time"},"fileCount":{"type":"integer","minimum":1,"description":"Number of files in this report, equal to the files length and to the highest file sequence. A report is at least one file, including a zero-activity day; larger reports may be split across several files."},"totalRecords":{"type":"integer","minimum":0,"description":"Equals the sum of files.records and the sum of the status totals; zero is valid for a published zero-activity report."},"totals":{"type":"object","additionalProperties":false,"required":["ACCC","RJCT","PDNG","BLCK"],"properties":{"ACCC":{"type":"integer","minimum":0},"RJCT":{"type":"integer","minimum":0},"PDNG":{"type":"integer","minimum":0},"BLCK":{"type":"integer","minimum":0}}},"signature":{"$ref":"#/components/schemas/ReportProtection","description":"The Nexus signature over the report, which the IPSO must verify before loading the data."},"encryption":{"$ref":"#/components/schemas/ReportProtection","description":"The encryption applied to the report, identifying the key the IPSO decrypts with."},"files":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/ReportFile"}}}},"Identifier":{"type":"string","minLength":1,"maxLength":128,"description":"Source-owned institutional/operational identifier, not customer PII."},"ReportDate":{"type":"string","pattern":"^[0-9]{8}$","description":"A real YYYYMMDD Nexus date; validate calendar and retrieval-window rules."},"ReportProtection":{"type":"object","additionalProperties":false,"required":["algorithm","keyId"],"description":"A cryptographic operation applied to the published file, naming the algorithm and the key the IPSO must use to verify or decrypt it.","properties":{"algorithm":{"type":"string","minLength":1,"description":"Approved algorithm name."},"keyId":{"type":"string","minLength":1,"description":"Identifier of the key used, so the IPSO can select the right key across a rotation."}}},"ReportFile":{"type":"object","additionalProperties":false,"required":["sequence","name","records","sizeBytes","checksums","url","expiresAt"],"description":"One published file of the report, enriched with transient API download credentials. Its name, record count, size and checksum do not change when a link is reissued.","properties":{"sequence":{"type":"integer","minimum":1,"description":"Part number of this file within the report, starting at 1. It is the final segment of the file name, and the highest sequence in the report equals fileCount."},"name":{"type":"string","pattern":"^NEXUS_CAMT054_[A-Za-z0-9._-]+_[0-9]{8}_v[1-9][0-9]*_[1-9][0-9]*\\.xml\\.gpg$","description":"Published file name: NEXUS_CAMT054_<IPSO-ID>_<YYYYMMDD>_v<closeVersion>_<seq>.xml.gpg. The IPSO-ID, date, version and part segments must match participant, nexusDay, closeVersion and sequence."},"records":{"type":"integer","minimum":0,"description":"Number of records in this file; includes zero-activity reports."},"sizeBytes":{"type":"integer","minimum":1,"description":"Byte length of the exact protected delivered file, not the decrypted XML size."},"checksums":{"$ref":"#/components/schemas/ReportChecksums"},"url":{"type":"string","format":"uri","pattern":"^https://","description":"Response-only signed URL bound to this exact file/version and authorised IPSO. Start the download before expiry; a started transfer may finish later. Never persist it as business data, log it, or forward an Operations OAuth token or RFC 9421 signature to its host. The download carries no RFC 9421 signature; verify the bytes against the SHA256 checksum in this signed manifest."},"expiresAt":{"type":"string","format":"date-time","description":"Exclusive expiry instant, link issuance plus exactly 300 seconds. Not generatedAt plus 300 seconds and not report retention expiry. Response-only; a new link may have a new expiry without changing publication facts."}}},"ReportChecksums":{"type":"array","minItems":1,"uniqueItems":true,"items":{"$ref":"#/components/schemas/ReportChecksum"},"description":"Unordered algorithm/value entries. Exactly one SHA256 entry is required and must be neither missing, duplicated nor replaced by an unknown algorithm. Additional approved algorithms may be appended without changing the file shape. Clients locate the digest by algorithm, never by array position, tolerate unsupported additional entries and still verify SHA256 and the Nexus signature. Every algorithm name must be unique: contains/maxContains enforce the single mandatory name; the producer must also check uniqueness of any future names because uniqueItems alone compares whole objects, not algorithm keys.","allOf":[{"contains":{"type":"object","required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"minContains":1,"maxContains":1}]},"ReportChecksum":{"type":"object","additionalProperties":false,"required":["algorithm","value"],"description":"One named checksum of the exact protected .xml.gpg bytes delivered by both API and SFTP, not the decrypted XML or manifest JSON. SHA256 is the only approved algorithm and is a cryptographic digest; it does not replace Nexus signature verification. New algorithms require an approved, published definition before the producer emits them.","properties":{"algorithm":{"type":"string","minLength":1,"pattern":"^[A-Z][A-Z0-9-]*$","not":{"pattern":"\\s"},"description":"Canonical case-sensitive algorithm name with no whitespace. Deliberately an extensible response string, not a closed enum, so existing clients can tolerate additional algorithms. SHA256 is the only approved name and is mandatory."},"value":{"type":"string","minLength":1,"pattern":"^[0-9a-f]+$","not":{"pattern":"\\s"},"description":"Lowercase hexadecimal digest with no whitespace, including leading zeroes. Exactly 64 characters for SHA256; any newly approved algorithm must publish its digest length and computation rules."}},"allOf":[{"if":{"required":["algorithm"],"properties":{"algorithm":{"const":"SHA256"}}},"then":{"properties":{"algorithm":{"const":"SHA256"},"value":{"minLength":64,"maxLength":64}}}}]}}}}
```

## The Error object

```json
{"openapi":"3.1.0","info":{"title":"Nexus Operations IPSO API","version":"0.4.0"},"components":{"schemas":{"Error":{"type":"object","additionalProperties":false,"required":["statusCode","reasonCode","name","description"],"description":"Payment Processing-compatible rejection envelope. RJCT concerns this API request, not a payment state. Reason code and name must match the defined pair. Description is PII-free and does not reveal unauthorised object existence.","properties":{"statusCode":{"const":"RJCT"},"reasonCode":{"type":"string"},"name":{"type":"string"},"description":{"type":"string","minLength":1}},"oneOf":[{"properties":{"reasonCode":{"const":"TE001"},"name":{"const":"INVALID_REQUEST"}}},{"properties":{"reasonCode":{"const":"TE099"},"name":{"const":"INTERNAL_ERROR"}}},{"properties":{"reasonCode":{"const":"AE001"},"name":{"const":"AUTH_TOKEN_MISSING"}}},{"properties":{"reasonCode":{"const":"AE002"},"name":{"const":"AUTH_TOKEN_INVALID"}}},{"properties":{"reasonCode":{"const":"AE003"},"name":{"const":"MTLS_AUTH_FAILED"}}},{"properties":{"reasonCode":{"const":"AE004"},"name":{"const":"ACCESS_DENIED"}}},{"properties":{"reasonCode":{"const":"AE005"},"name":{"const":"MESSAGE_SIGNATURE_INVALID"}}},{"properties":{"reasonCode":{"const":"BE901"},"name":{"const":"REPORT_NOT_FOUND"}}},{"properties":{"reasonCode":{"const":"BE902"},"name":{"const":"REPORT_NOT_READY"}}},{"properties":{"reasonCode":{"const":"BE903"},"name":{"const":"REPORT_OUTSIDE_RETRIEVAL_WINDOW"}}},{"properties":{"reasonCode":{"const":"BE904"},"name":{"const":"TRANSACTION_NOT_FOUND"}}},{"properties":{"reasonCode":{"const":"BE905"},"name":{"const":"RANGE_TOO_WIDE"}}},{"properties":{"reasonCode":{"const":"BE906"},"name":{"const":"QUERY_TOO_LARGE"}}},{"properties":{"reasonCode":{"const":"BE907"},"name":{"const":"RESULT_TOO_LARGE"}}},{"properties":{"reasonCode":{"const":"BE908"},"name":{"const":"RATE_LIMIT_EXCEEDED"}}},{"properties":{"reasonCode":{"const":"BE909"},"name":{"const":"CONCURRENCY_LIMIT_EXCEEDED"}}},{"properties":{"reasonCode":{"const":"BE910"},"name":{"const":"DAILY_ALLOWANCE_EXCEEDED"}}},{"properties":{"reasonCode":{"const":"BE911"},"name":{"const":"IDENTICAL_QUERY_TOO_SOON"}}},{"properties":{"reasonCode":{"const":"BE912"},"name":{"const":"IDEMPOTENCY_KEY_CONFLICT"}}}]}}}}
```
