Skip to main content
Use this page to understand the message document you send to the Payout Origination API before you Base64-encode it.
Use pacs008 as the {format} path parameter when submitting this message type: POST /v1/payout-origination/pacs008
Meridian accepts pacs.008.* as one of the supported payout origination formats. You must submit the full original ISO 20022 XML document as a single opaque payload. Do not split the message into API fields or convert it into another structure.

Meridian intake requirements

ItemRequirement
Message familypacs.008.*
Document formatISO 20022 XML
Submission modelBase64-encode the full message document and send it as the request body
Content typetext/plain
Transaction blocksExactly one CdtTrfTxInf block per submitted message
TransformationsDo not flatten, normalize, or partially serialize the message before encoding

What Meridian means by full pacs.008

Meridian expects the complete business message content for the payment instruction you are submitting. That means you should preserve:
  • the original XML structure
  • the version-specific namespace
  • the element hierarchy
  • the values and formatting used in the original message
The API treats the Base64 body as an opaque artifact at intake. Meridian does not expect you to map pacs.008 fields into separate JSON properties.

High-level document structure

A pacs.008 message is an ISO 20022 customer credit transfer instruction. The exact variant depends on the message version you use, but the structure is typically organized like this:
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.xx">
  <FIToFICstmrCdtTrf>
    <GrpHdr>
      ...
    </GrpHdr>
    <CdtTrfTxInf>
      ...
    </CdtTrfTxInf>
  </FIToFICstmrCdtTrf>
</Document>
In most integrations:
  • Document is the XML root element
  • FIToFICstmrCdtTrf contains the credit transfer message
  • GrpHdr contains message-level metadata
  • CdtTrfTxInf contains the payment transaction details
Depending on the pacs.008 version and network rules, the document may include one or more transaction blocks and additional optional elements. For Meridian Payout Origination, the submitted message must contain exactly one CdtTrfTxInf block. Messages with multiple transaction blocks are outside the documented contract for this API.

Common sections

The table below describes the sections most integrators will recognize in a pacs.008 document. Exact child elements vary by schema version and implementation profile.
SectionPurpose
GrpHdrMessage-level identifiers, creation time, settlement information, and transaction count
PmtIdEnd-to-end and transaction reference identifiers
IntrBkSttlmAmtInterbank settlement amount and currency
IntrBkSttlmDtSettlement date
Dbtr and DbtrAcctDebtor party and account information
DbtrAgtDebtor agent or sending institution
CdtrAgtCreditor agent or receiving institution
Cdtr and CdtrAcctCreditor party and account information
RmtInfRemittance information
Purp or CtgyPurpPayment purpose or category purpose when applicable

Settlement currency

The Ccy attribute on IntrBkSttlmAmt in your submitted message determines the payout currency and flows through to amounts.debit.currency and amounts.credit.currency in the transaction model.
<IntrBkSttlmAmt Ccy="USD">4800.00</IntrBkSttlmAmt>
CurrencyStatus
USDSupported
EURComing soon
GBPComing soon
AUDComing soon

Practical expectations

When you prepare a message for Meridian:
  • send a complete pacs.008 message document, not a fragment
  • preserve the schema namespace that matches your chosen pacs.008 version
  • preserve the original identifiers used for the payment instruction
  • include exactly one CdtTrfTxInf block in each submitted message
  • keep the XML as the source artifact that you encode and submit
  • validate the message against your own network and schema rules before encoding
If your implementation profile requires additional envelopes or headers outside the Document payload, align that packaging with Meridian during onboarding. The ingestion endpoint itself expects the encoded payload to contain the message document you want processed.

Example skeleton

This example shows the shape Meridian expects at a document level. It is intentionally abbreviated and not a complete, schema-valid payment message.
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.xx">
  <FIToFICstmrCdtTrf>
    <GrpHdr>
      <MsgId>20260407-000123</MsgId>
      <CreDtTm>2026-04-07T20:11:40Z</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <SttlmInf>
        <SttlmMtd>CLRG</SttlmMtd>
      </SttlmInf>
    </GrpHdr>
    <CdtTrfTxInf>
      <PmtId>
        <InstrId>ABC-12345</InstrId>
        <EndToEndId>E2E-12345</EndToEndId>
        <TxId>TX-12345</TxId>
      </PmtId>
      <IntrBkSttlmAmt Ccy="USD">1250.00</IntrBkSttlmAmt>
      <IntrBkSttlmDt>2026-04-08</IntrBkSttlmDt>
      <Dbtr>
        <Nm>Sender Name</Nm>
      </Dbtr>
      <DbtrAgt>
        <FinInstnId>
          <BICFI>AAAAUS33XXX</BICFI>
        </FinInstnId>
      </DbtrAgt>
      <CdtrAgt>
        <FinInstnId>
          <BICFI>BBBBGB22XXX</BICFI>
        </FinInstnId>
      </CdtrAgt>
      <Cdtr>
        <Nm>Receiver Name</Nm>
      </Cdtr>
      <RmtInf>
        <Ustrd>Invoice 100045</Ustrd>
      </RmtInf>
    </CdtTrfTxInf>
  </FIToFICstmrCdtTrf>
</Document>

Before you submit

Before calling POST /v1/payout-origination/pacs008:
  1. Build or receive the complete pacs.008 message document.
  2. Validate the XML and business content in your own system.
  3. Base64-encode that message document.
  4. Send the encoded payload to Meridian with HMAC authentication headers and a separate Idempotency-Key header.

Transaction model mapping

Use this section to understand how Meridian maps a submitted pacs.008 message into the internal transaction model that GET /v1/transactions and GET /v1/transactions/{id} expose. The read APIs return Meridian’s internal transaction model, not the original XML. Each submitted message must contain exactly one CdtTrfTxInf block.

Mapping table

Transaction fieldpacs.008 sourceNotes
messageIdGrpHdr/MsgIdMeridian uses the message identifier from the submitted pacs.008 as the message correlation ID
externalIdCdtTrfTxInf/PmtId/TxIdThis is the primary business reference exposed as externalId
amounts.debit.amountCdtTrfTxInf/IntrBkSttlmAmtUses the numeric value from the interbank settlement amount
amounts.debit.currencyCdtTrfTxInf/IntrBkSttlmAmt/@CcyUses the currency attribute from the interbank settlement amount
amounts.credit.amountCdtTrfTxInf/IntrBkSttlmAmtCurrently mirrors the same settlement amount
amounts.credit.currencyCdtTrfTxInf/IntrBkSttlmAmt/@CcyCurrently mirrors the same settlement currency
debitInstrument.originator.displayNameCdtTrfTxInf/Dbtr/NmDebtor name
debitInstrument.originator.accountNumberCdtTrfTxInf/DbtrAcct/...Use the debtor account identifier Meridian receives in the message
creditInstrument.beneficiaryAccount.displayNameCdtTrfTxInf/Cdtr/NmCreditor name
creditInstrument.beneficiaryAccount.idCdtTrfTxInf/CdtrAcct/...Use the creditor account identifier Meridian receives in the message
creditInstrument.beneficiaryAccount.currencyCdtTrfTxInf/IntrBkSttlmAmt/@CcyThe current documented example uses the settlement currency
source.typeInternal value external_submissionCurrent documented behavior for pacs.008-ingested transactions

Internal fields

These transaction fields are internal Meridian fields and are not sourced directly from the pacs.008 payload:
  • status
  • statusReason
  • createdAt
  • updatedAt
  • relatedTransactionId

Example mapping

Given this pacs.008 fragment:
<GrpHdr>
  <MsgId>20260407-000123</MsgId>
</GrpHdr>
<CdtTrfTxInf>
  <PmtId>
    <InstrId>ABC-12345</InstrId>
    <EndToEndId>E2E-12345</EndToEndId>
    <TxId>TX-12345</TxId>
  </PmtId>
  <IntrBkSttlmAmt Ccy="USD">1250.00</IntrBkSttlmAmt>
  <Dbtr>
    <Nm>Sender Name</Nm>
  </Dbtr>
  <DbtrAcct>
    <Id>
      <Othr>
        <Id>123456789</Id>
      </Othr>
    </Id>
  </DbtrAcct>
  <Cdtr>
    <Nm>Receiver Name</Nm>
  </Cdtr>
  <CdtrAcct>
    <Id>
      <Othr>
        <Id>987654321</Id>
      </Othr>
    </Id>
  </CdtrAcct>
</CdtTrfTxInf>
The transaction model can look like this:
{
  "id": "txn_01JVY8Y4N9X2M6S5Q7T1",
  "messageId": "20260407-000123",
  "source": {
    "type": "external_submission",
    "externalSubmission": {
      "id": "sub_01JVY8Y4N9X2M6S5Q7T1",
      "displayName": "Customer message submission"
    }
  },
  "type": "transfer",
  "status": "PENDING",
  "statusReason": null,
  "externalId": "TX-12345",
  "relatedTransactionId": null,
  "amounts": {
    "debit": {
      "amount": "1250.00",
      "currency": "USD"
    },
    "credit": {
      "amount": "1250.00",
      "currency": "USD"
    },
    "fees": [],
    "exchangeRate": "1.0000"
  },
  "debitInstrument": {
    "type": "ORIGINATOR",
    "originator": {
      "displayName": "Sender Name",
      "accountNumber": "123456789"
    }
  },
  "creditInstrument": {
    "type": "BENEFICIARY_ACCOUNT",
    "beneficiaryAccount": {
      "id": "987654321",
      "displayName": "Receiver Name",
      "currency": "USD"
    }
  }
}