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 Type | Version | Description |
---|---|---|
pacs.008 | pacs.008.001.08 | FI-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.002 | pacs.002.001.10 | FI-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
pacs.008
Interbank Payment Instruction (pacs.008
)
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:
- Submit payment initiation (
pacs.008
):
POST /api/v1/payments/iso20022/fi-to-fi-customer-credit-transfer
The pacs.008
endpoint currently only supports initiating Agency Banking and Correspondent Banking payments.
Payment Status Report (pacs.002
)
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 / Requirement | Details |
---|---|
Debtor Account | The 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 Agent | Your 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 Debtor | Provide 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 / Requirement | Details |
---|---|
Payment Identification | The 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 Route | Specify the route using the following tags in <FIToFICstmrCdtTrf><CdtTrfTxInf><PmtTpInf> :- <SvcLvl><Cd> - <LclInstrm><Cd> Refer to the Routing logic guide for more details. |
Charge Bearer | Set who covers the transaction fees using:<FIToFICstmrCdtTrf><CdtTrfTxInf><ChrgBr> Refer to the Charge bearer guide for more details. |
Remittance Information | Include 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 Name | Required | Format | Description |
---|---|---|---|
Accept | Mandatory | String | Specifies the acceptable response media types. Valid values: */* , application/* , application/xml . |
Authorization | Mandatory | String | Bearer token for authentication. Example: Bearer eyJ0eXAiOiJKV1QiLCJhb... |
Content-Type | Mandatory | String | The media type of the request body. For example: multipart/form-data; boundary=-----xyz . |
X-ContentType | Optional | String | This header is not required currently but may become mandatory in future versions. Clients are encouraged to set it to text/pacs008 . |
Accept-Response | Mandatory | String | The response format requested. For payment status reports, use pacs.002.001.10 . |
Idempotency-Key | Optional | String | A 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:
Parameter | Required | Allowed Input | Description |
---|---|---|---|
pacs008 | Mandatory | UTF-8 file | The 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 Code | Content-Type | Description |
---|---|---|
200 OK | application/xml | The request was received and validated, but all payments were rejected and not sent for execution. A pacs.002 status report is generated. |
201 Accepted | application/xml | The request was received, validated, and the payments were accepted for processing. A pacs.002 status report is generated. |
201 Partially Accepted | application/xml | The 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 Code | Content-Type | Description |
---|---|---|
400 Invalid File | application/json | The request is not correctly formulated. A pacs.002 is not generated. |
400 Duplicate File | application/json | A 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 Version | application/json | The Accept-Response header specifies a response format version that is not supported by the API. No pacs.002 is generated. |
403 Forbidden | application/json | The server understood the request, but the access is not allowed (e.g., insufficient permissions). No pacs.002 is generated. |
404 Not Found | application/json | The 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 key | application/json | The Idempotency-Key has already been used for a previous request. Duplicate processing is prevented. No pacs.002 is generated. |
413 Payload too large | application/json | The 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."
}
]
}
Updated 9 days ago