FI-to-FI Credit Transfers (Pacs.008)

Initiate financial institution–to–financial institution credit transfers with pacs.008

Banking Circle supports interbank payment initiation and status reporting using the ISO 20022 pacs.008 and pacs.002 message formats.

ISO 20022 Versions

Banking Circle currently supports the following ISO 20022 message versions for interbank payment initiation and status reporting:

Message TypeVersionDescription
pacs.008pacs.008.001.08FI-To-FI Customer Credit Transfer V8 – Used to instruct the movement of funds between financial institutions on behalf of a customer. Typically used in correspondent banking or clearing/settlement environments.
pacs.002pacs.002.001.10FI-To-FI Payment Status Report V10 – Sent by the receiving agent to the previous party in the payment chain to inform about the status of a pacs.008 message.

Note: For detailed field definitions and schema reference, see the official SWIFT standards page for pacs.008.001.08.

All references to pacs.008 and pacs.002 in this documentation refer to these specific versions unless otherwise stated.

Initiating Payments with pacs.008

Interbank Payment Instruction (pacs.008)

The pacs.008 message is used to instruct a financial institution to transfer funds to another financial institution on behalf of a customer.

It is submitted in XML format and adheres to the ISO 20022 standard for interbank credit transfers. You can initiate payments and receive corresponding status updates via the following API endpoint:

The pacs.008 endpoint currently only supports initiating Agency Banking and Correspondent Banking payments.

Payment Status Report (pacs.002)

The pacs.002 message is used to deliver status updates for a previously submitted pacs.008 payment instruction. It provides structured information regarding the transaction’s processing outcome, such as acceptance, rejection, or pending, for each message or transaction.

The required content headers and message structures for both the request and response are detailed in the subsequent sections.

Message Structure & Field Interpretation

To successfully initiate a payment, the file submitted should fulfill the following conditions:

  • Adhere to the pacs.008 standard
  • Only be used for Agency Banking or Correspondent Banking payments
  • Meet the message field requirements listed below

Requirements

Field / RequirementDetails
Debtor AccountThe account number issued by you, which will be sent to the creditor as the debtor account, should be included in the following tag:

<FIToFICstmrCdtTrf><CdtTrfTxInf><DbtrAcct><Id>

Must be an IBAN or account number. If not an IBAN, include the BIC or NCC under which the account number was issued.
Debtor AgentYour BIC must be provided here:

<FIToFICstmrCdtTrf><CdtTrfTxInf><DbtrAgt><FinInstnId><BICFI>
Debtor Agent Account The Nostro account with Banking Circle on which the payments are settled. Must be an IBAN.

<FIToFICstmrCdtTrf><CdtTrfTxInf><DbtrAgtAcct><Id><IBAN>
Purpose Code<FIToFICstmrCdtTrf><CdtTrfTxInf><Purp><Cd>

Mandatory for CNH payments to China.
Debtor / Ultimate DebtorProvide the name and address of the payer in either tag:
<Dbtr> or <UltmtDbtr>

If both are populated, Ultimate Debtor will override the debtor name. Read the guide on debtor and ultimate debtor for more details.

Optional tags

Field / RequirementDetails
Payment IdentificationThe following tags contained in <FIToFICstmrCdtTrf><CdtTrfTxInf><PmtId> can be used to include a payment ID:

- <EndToEndId>, mandatory. Returned in pacs.002 as <OrgnlPmtInfId> and will be carried on as Remittance Information Line 1 of the outgoing payment
- <InstrId>. Returned in the pacs.002 as <OrgInstrId> but won't be carried on
- <TxId>. Returned in the pacs.002 under <OrgInstrId> and will appear in reconciliation reports.
- <UETR>. Returned in the pacs.002 under <OrgInstrId> but won't be carried on
Payment RouteSpecify the route using the following tags in <FIToFICstmrCdtTrf><CdtTrfTxInf><PmtTpInf>:

- <SvcLvl><Cd>
- <LclInstrm><Cd>Refer to the Routing logic guide for more details.
Charge BearerSet who covers the transaction fees using:

<FIToFICstmrCdtTrf><CdtTrfTxInf><ChrgBr>

Refer to the Charge bearer guide for more details.
Remittance InformationInclude remittance information using:

<FIToFICstmrCdtTrf><CdtTrfTxInf><RmtInf><Ustrd>

FX

FX payments are not supported at this time.

Currently, the Interbank Settlement Amount and Currency are copied into both the Transfer Currency and Amount Currency fields.

This is equivalent to initiating a payment without specifying a transfer currency.

Additional tags

Any additional tag included in the file that isn't mandatory according to the Swift pacs.008 standard and listed in the above sections will be ignored.

Request Format

Request Headers

Below are the required headers for the request:

Header NameRequiredFormatDescription
AcceptMandatoryStringSpecifies the acceptable response media types. Valid values: */*, application/*, application/xml.
AuthorizationMandatoryStringBearer token for authentication. Example: Bearer eyJ0eXAiOiJKV1QiLCJhb...
Content-TypeMandatoryStringThe media type of the request body. For example: multipart/form-data; boundary=-----xyz.
X-ContentTypeOptionalStringThis header is not required currently but may become mandatory in future versions. Clients are encouraged to set it to text/pacs008.
Accept-ResponseMandatoryStringThe response format requested. For payment status reports, use pacs.002.001.10.
Idempotency-KeyOptionalStringA unique value for retry identification. This allows safe retries of the same request without duplicating transactions. Maximum length: 100 characters. Example: 2b7b05ad-4411-4a19-8c95-2508b17e0fd8.

Request Body

The body of the request should contain the pacs.001 XML file. Below is the specification:

ParameterRequiredAllowed InputDescription
pacs008MandatoryUTF-8 fileThe XML file containing the pacs.008 message for payment initiation. This is the primary input for the payment request.

Response Format

For every initiated pacs.008 XML message, we respond with a pacs.002 XML message or an error response. The FI to FI Payment Status Report (pacs.002) provides the status of the initiated credit transfer and gives information about the success or failure of the payment.

Banking Circle API performs a combination of API, XSD, and upfront validations before returning the response. Below are the possible response codes and their descriptions:

Success Responses

Response CodeContent-TypeDescription
200 OKapplication/xmlThe request was received and validated, but all payments were rejected and not sent for execution. A pacs.002 status report is generated.
201 Acceptedapplication/xmlThe request was received, validated, and the payments were accepted for processing. A pacs.002 status report is generated.
201 Partially Acceptedapplication/xmlThe request was received, validated, and the payments were partially accepted for processing. A pacs.002 status report is generated.

Note: Both 200 and 201 responses will include the following headers:

  • Content-Length: Indicates the length of the response body in bytes.
  • X-Correlation-ID: A GUID used to trace and correlate HTTP requests between client and server.
  • Request-Context: Used for cross-component correlation, particularly when two of your applications use distinct instrumentation keys.

Error Responses

Response CodeContent-TypeDescription
400 Invalid Fileapplication/jsonThe request is not correctly formulated. A pacs.002 is not generated.
400 Duplicate Fileapplication/jsonA file with the same content has already been submitted. The system rejects exact duplicates to prevent reprocessing. No pacs.002 is generated.
400 Unsupported Accept Response Versionapplication/jsonThe Accept-Response header specifies a response format version that is not supported by the API. No pacs.002 is generated.
403 Forbiddenapplication/jsonThe server understood the request, but the access is not allowed (e.g., insufficient permissions). No pacs.002 is generated.
404 Not Foundapplication/jsonThe requested resource (e.g. account) does not exist or the user does not have permission to access it. A pacs.002 is not generated.
409 Duplicate Idempotency keyapplication/jsonThe Idempotency-Key has already been used for a previous request. Duplicate processing is prevented. No pacs.002 is generated.
413 Payload too largeapplication/jsonThe submitted file or subsequent response file exceeds the server’s size limit. The request is rejected and no pacs.002 is generated.

Error response examples:

400 – Bad Request (Invalid Structure)

This response is triggered when the header, query or body is not correctly formatted.

{
    "Id": "175e13af-f084-4c3c-a039-9df2df790893",
    "Type": "Pacs008",
    "Errors": [
        {
            "ErrorCode": "InvalidRequest",
            "ErrorDescription": "Unknow error occurred. The Accept-Response header is missing. Please specify one of the supported versions: 'pacs.002.001.10'"
        }
    ]
}

400 – Bad Request (XSD Validation Failure)

This response is triggered when the request is processed successfully, but the XSD validation fails.

{
  "Id": "d2404f75-e011-4683-9d2d-efd30943c6b8",
  "Type": "Pacs008",
  "Errors": [
    {
      "ErrorCode": "InvalidFile",
      "ErrorDescription": "The element 'PmtId' in namespace 'urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08' has invalid child element 'TxId' in namespace 'urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08'. List of possible elements expected: 'EndToEndId' in namespace 'urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08'."
    }
  ]
}

400 – Bad Request (Duplicate File)

This response is triggered when the submitted file has already been processed and is rejected to prevent duplication.

{
  "Id": "d2404f75-e011-4683-9d2d-efd30943c6b8",
  "Type": "Pacs008",
  "Errors": [
    {
      "ErrorCode": "DuplicateFileUpload",
      "ErrorDescription": "The file with the same content has been already uploaded. Change the content of the file and upload it again."
    }
  ]
}

400 – Bad Request (Unsupported Accept-Response Version)

Returned when the Accept-Response header includes a version that is not supported by the API.

{
  "Id": "d2404f75-e011-4683-9d2d-efd30943c6b8",
  "Type": "Pacs008",
  "Errors": [
    {
      "ErrorCode": "UnsupportedAcceptResponseVersion",
      "ErrorDescription": "The response version requested in the Accept-Response header is currently not supported. Supported versions are: pacs.002.001.10"
    }
  ]
}

404 – Not Found

Returned when the requested resource does not exist or the user does not have permission to access it for example, attempting to retrieve data for a non-existent or unauthorized account.

{
  "errors": [
    {
      "httpStatus": 404,
      "errorCode": null,
      "keyOrMessage": "Not Found",
      "interpolations": [],
      "details": null,
      "exception": null
    }
  ],
  "account": null,
  "_links": null
}

409 – Conflict (Duplicate Idempotency Key)

This response is triggered when the Idempotency-Key has already been used in a previous request. The server prevents duplicate processing.

{
  "Id": "d2404f75-e011-4683-9d2d-efd30943c6b8",
  "Type": "Pacs008",
  "Errors": [
    {
      "PaymentBulkId": "fa5eba78-a2a5-4ceb-916a-d3fd355c94cb",
      "ErrorCode": "DuplicateIdempotencyKey",
      "ErrorDescription": "Identical Idempotency Key is already uploaded once for this user."
    }
  ]
}