- 18 Sep 2024
- 8 Minutes to read
- Print
- DarkLight
Receiving payments (pain.001)
- Updated on 18 Sep 2024
- 8 Minutes to read
- Print
- DarkLight
This tutorial describes how you can use information from notifications to get details about incoming payments with the Payments Hub API.
For this tutorial, consider a scenario where you have registered to receive a notification whenever you receive a new payment. When an incoming payment notification arrives, the beneficiary wants to see the payment amount and who has sent it. The Payments Hub API can be used to retrieve these details. The tutorial describes how you can retrieve the payment details using the ISO pain.001 message.
Note
The instructions in this tutorial apply to the sandbox environment.
The pain.001 requests are not currently supported in the sandbox.
Prerequisites
Before obtaining the access token, make sure you have a public-private key pair that you can use to sign JWT Bearer tokens.
Click here to email your public key, along with the kid and iss claim values you will use in your JWT Bearer tokens.
Note
The public key must be created with RSA and sent in PEM format, without password encryption, and must have a length of at least 2048 bits. If these criteria are not met, the token will be rejected.
If you don't have a public-private key pair yet, you can use a predefined JWT Bearer token in the sandbox with no need to create or sign your own tokens for authentication:
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InByb1BheW1lbnRzSHViU2IifQ.eyJzdWIiOiJxTWtaOTBxb0hBTjVJbkE2V2xNYVZBaE41dDhBQWVPeCIsImlzcyI6IlNhbnRhbmRlciIsImlhdCI6MTcxMDg0MjgwNCwibmJmIjoxNzEwODQyODA0LCJleHAiOjE3NDIzNzg4MDQsImp0aSI6ImM3YWY0Yzg0LTRkYzQtNDM2Mi05OTA2LWM5ZTg5N2YyNzUzOCJ9.LOaGmVUnQ6I0HYUQWA1y2vUhREaJrAasAxDlqAnxKbEYGmjP6AKeIViLdkBVVPTUWRETxmnlU6fBQRYU0BN8NEJ9dd_uJ20uiPGWp1ieTFvee27LbqqqS-4AbwD_oJluBUzb77cx4P_1o35gFskcFjbzdl5ert4xJvpbXNOQYa0C7f4YQ6wMLjCGkbdhimwRxeOEGVdYiRoVEizkPpNgUZi_H3o58gATIJ4rSSWqLmKvy9aBlK_YAT947klkJI-ej22KU8qgLCInBbBGdoW9gjg8Zpmizs7Xc7eAvNm7QRiAzd1NT6dgX3hAYDJz2m2dnZYS6zE_UPWOi5cbAyQggw
Authenticate to get an access token
The Payments Hub API endpoints are protected with OAUTH 2.0 JWT Bearer grant. To use the API, you must create a JWT Bearer token and use it to get an access token:
To create a JWT Bearer token, see the Appendix in Authentication guide. For a predefined token that you can use in the sandbox for testing purposes, see Authentication.
For detailed instructions on how to get the access token, see Authentication guide.
Retrieve the payment details
This section describes how to retrieve the details of the incoming payment via a pain.001 HTTP request to the Payments Hub API. To send this request, you need to provide the Payments Hub ID that was provided in the notification. For information, see Notifications. This section also illustrates a successful response.
Note
Notifications are not used in the sandbox environment.
Request
Create and send a request using the following operation:
GET https://sandbox.api.pagonxt.com/payments/pain001/v09/{paymentsHubId}
Headers
The request must contain the headers shown in the following table.
Table: Retrieve payment details – Required request headers.
Header name | Description | Required/ Optional | Values |
---|---|---|---|
Authorization | Authorization basic security header. To create the value, use the client ID (user) and client secret (password) you received when registering your app. | Required | Bearer <Access token> |
X-Client-Id | Client ID | Required | <Client ID> |
Accept | Format of the response body | Required | application/json |
Parameters
The request must contain the path parameter shown in the following table.
Table: Retrieve payment details – Request parameters.
Parameter type | Parameter name | Description | Data format | Required/ Optional |
---|---|---|---|---|
Path | paymentsHubId | Payments Hub ID related to the payment whose details you want to retrieve. This is the value you received in the notification. | String | Required |
Request example
The following example illustrates the request using raw HTTP code:
GET /payments/pain001/v09/YOUR_PAYMENTS_HUB_ID HTTP/1.1
Host: sandbox.api.pagonxt.com
Content-Type: application/json
Authorization: Bearer YOUR_ACCESS_TOKEN
X-Client-Id: YOUR_CLIENT_ID
Response
If the request is valid, you receive an HTTP 200 OK response, which means that the payment details were successfully retrieved. For further details of HTTP response codes and instructions on how to handle errors, see HTTP codes and request error handling.
In addition to the response code, the response body returns the cstmrCdtTrfInitn JSON object, which contains a pain.001 ISO message.
Response body
The following table shows the response body elements that are relevant for the current use case. For details on all the response body elements, see the Message field definition for pain.001.
Extract the value of the pmtInf.dbtr.nm and pmtInf.cdtTrfTxInf.amt.instdAmt keys to see the debtor name and amount for the payment.
Table: Retrieve payment details – Relevant response body elements.
Element | Description | Data type |
---|---|---|
grpHdr.nbOfTxs | Number of transactions within the message. Value: 1 | String |
grpHdr.initgPty.nm | Name of the payment initiating party (debtor or a party acting on behalf of the debtor) | String |
grpHdr.msgId | Message ID, which uniquely identifies each request that was sent. This ID is used internally for idempotency of the API. | String |
grpHdr.creDtTm | Date and time of the payment request | String |
pmtInf.pmtInfId | Unique identification of the payment information group within the request | String |
pmtInf.pmtMtd | Payment method used. The value is TRF. | String |
pmtInf.btchBookg | Whether a single entry per individual transaction or a batch entry for the sum of the amounts of all transactions within the group is requested. The value is false. | Boolean |
pmtInf.reqdExctnDt | Date when the initiating party wants the clearing agent to process the payment | String |
pmtInf.pmtTpInf.svcLvl.prtry | Proprietary service level. The value is FP. | String |
pmtInf .dbtr .dbtrAcct .dbtrAgt | Data structures containing the details for the debtor, the debtor’s account, and the debtor agent | Object |
pmtInf.cdtTrfTxInf.pmtId.instrId | Instruction ID used to uniquely identify the instruction | String |
pmtInf.cdtTrfTxInf.pmtId.endToEndId | End-to-end ID, which can be used to track the transaction between payment systems. | String |
pmtInf.cdtTrfTxInf.pmtTpInf.lclInstrm.prtry | Faster Payments Scheme (FPS) processing code. The possible values are:
| String |
pmtInf.cdtTrfTxInf .intrmyAgt1 .intrmyAgt1Acct | Data structures containing the details for the intermediary agent, and the intermediary agent’s account. These structures are used only for overseas payments (payments originating from outside the UK). | Object |
pmtInf.cdtTrfTxInf.amt | Data structure containing the amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party. The currency is GBP and the amount is a positive value. | Object |
pmtInf.cdtTrfTxInf .cdtr .cdtrAgt .cdtrAcct | Data structures containing the details for the creditor, the creditor’s account, and the creditor agent | Object |
pmtInf.cdtTrfTxInf.rmtInf | Data structure containing remittance details, either in unstructured or structured form | Object |
Example response body:
{
"cstmrCdtTrfInitn":
{
"grpHdr":
{
"nbOfTxs": "1",
"initgPty":
{
"nm": "CROSSFITXP"
},
"msgId": "SGP01234567890123",
"creDtTm": "2024-03-08T18:04:25.000Z"
},
"pmtInf":
[
{
"pmtInfId": "SGP01234567890123",
"pmtMtd": "TRF",
"btchBookg": false,
"reqdExctnDt": "2024-03-08",
"pmtTpInf":
{
"svcLvl":
{
"prtry": "FP"
}
},
"dbtr":
{
"nm": "CROSSFIT EXPERIENCE (UK) LIMITED",
"pstlAdr":
{
"ctry": "GB"
}
},
"dbtrAcct":
{
"id":
{
"othr":
{
"id": "12345678"
}
}
},
"dbtrAgt":
{
"finInstnId":
{
"clrSysMmbId":
{
"mmbId": "000000"
}
}
},
"cdtTrfTxInf":
[
{
"pmtId":
{
"endToEndId": "Sarah Connor"
},
"pmtTpInf":
{
"lclInstrm":
{
"prtry": "10"
}
},
"amt":
{
"instdAmt":
{
"ccy": "GBP",
"value": 1500
}
},
"cdtr":
{
"nm": "John Doe",
"pstlAdr":
{
"ctry": "GB"
}
},
"cdtrAcct":
{
"id":
{
"othr":
{
"id": "01234567"
}
}
},
"cdtrAgt":
{
"finInstnId":
{
"clrSysMmbId":
{
"mmbId": "000000"
},
"pstlAdr":
{
"ctry": "GB"
}
}
},
"rmtInf":
{
"strd":
[
{
"cdtrRefInf":
{
"ref": "CROSSFIT PAYROLL"
}
}
],
"ustrd":
[
"CROSSFIT PAYROLL"
]
}
}
]
}
]
}
}