Partners are not required to implement this exact contract. Meridian adapts to existing partner APIs during onboarding. See Credit API for how that integration works.
Message format
Messages use the ISO 20022 XML tag names as JSON keys, so the structure maps one to one onto the ISO 20022 message definitions:Lifecycle
Meridian drives every credit through the same sequence:1
Prepare Credit: create (optional)
POST /credits registers the pacs.008 ahead of any processing. The bank persists it and returns RCVD. No checks against the recipient account, and no money movement.2
Prepare Credit: validate (optional but recommended)
POST /credits/validate confirms the recipient account can receive the credit, returning ACCP or RJCT. No funds move, and it is safe to call repeatedly.3
Execute Credit: commit
POST /credits/commit executes the transfer. It is idempotent on EndToEndId.4
Confirm Credit: get transaction status
GET /credits/{endToEndId} returns the current credit status. Meridian’s workflow engine polls this until the credit reports ACSC or RJCT, and may also call it before commit as a pre-check. Until the bank receives a commit, the endpoint must return 404 rather than a status, even for a credit that was created or validated. Meridian treats the 404 as “not yet committed” rather than a failure.5
Confirm Credit: status webhook (optional)
Proactively push the final pacs.002 to Meridian instead of waiting for polling.
Create and validate are independent. Meridian may call validate without a prior create, and commit without either. Every request carries the full pacs.008, so no step depends on bank-side state from an earlier one.
Status codes
Every response reports a status inTxInfAndSts[0].TxSts, using ISO 20022 codes. Create and validate report the outcome of that call only. The credit status starts at commit.
Create and validate responses
These do not set the credit status, and the status endpoint does not report them.
Validate reports the eligibility check as of the call, so repeated calls can return different results. A validate call never changes the credit status.
Credit status
Commit, the status endpoint, and the status webhook report these values. Before commit, the status endpoint returns404.
The credit status moves only forward, from
ACSP to ACSC or RJCT, though skipping ACSP is fine. Terminal statuses must never change once reported. PDNG is exempt from the ordering: you can report it at any point after commit and follow it with any status.
Response model
If your core system can settle synchronously, return a final result (ACSC or RJCT) straight from commit so Meridian can update the customer sooner. This is an optimization, not a requirement. Meridian polls the status endpoint until the credit is terminal either way.
Most partners settle asynchronously, and that is the expected case. Return ACSP from commit and expose the final state via GET /credits/{endToEndId} and, ideally, the status webhook. Align the polling and retry strategy with Meridian during onboarding.
When you cannot determine the outcome
ReportPDNG when you genuinely do not know the result yet, such as a timeout inside your core system or an unreachable downstream rail. It is not a terminal status, so Meridian keeps polling, and you can follow it with any other status later.
Rejection reasons
EveryRJCT must carry an ISO 20022 reason code in StsRsnInf[].Rsn.Cd. Meridian maps these codes to customer-facing outcomes. Meridian holds a rejection without a reason for manual review instead of reversing it automatically, which delays the customer.
Idempotency
EndToEndId is Meridian’s unique identifier for the credit and serves as the idempotency key. If you receive a commit for an EndToEndId you already processed, return the original outcome and do not credit twice. If the payload differs from the original request for the same EndToEndId, return 409. Meridian sets GrpHdr.CreDtTm each time it builds a request, so leave it out of the comparison.
Business failures vs transport failures
When you reject a credit on business rules, such as a closed account, an exceeded limit, or a compliance block, return a200 response. The response carries a pacs.002 with TxSts: RJCT and a reason code. Reserve 4xx and 5xx for malformed requests, authentication failures, and genuine server faults.
Conventions
These are the conventions used throughout this specification. Meridian can adapt to the bank’s preferred formats during onboarding.- Amounts (
Amt) are JSON numbers with up to 2 decimal places. Parse them into a decimal type, never a binary float. Currencies are ISO 4217 codes. - Country codes are ISO 3166-1 alpha-2 (
PH,US). - Timestamps are ISO 8601 with a timezone offset or
Z. EndToEndIdandInstrIdcan be up to 64 characters, andMsgIdup to 83. Both are longer than the ISO 20022Max35Textlimit.- All requests and responses are
application/jsonover HTTPS (TLS 1.2+). - Ignore JSON properties you do not recognize. Meridian may add optional fields without a version change.