- 10 Sep 2024
- 3 Minutes to read
- Print
- DarkLight
Sandbox environment
- Updated on 10 Sep 2024
- 3 Minutes to read
- Print
- DarkLight
This document provides information about the Payments Hub ISO20022 API sandbox environment and the values you can use there to test various operations.
The sandbox is dynamic and stores all made requests. You must first make a POST-type request to generate a payment and receive a Payments Hub ID for it. You can then use the GET-type requests to retrieve information with the same Payments Hub ID.
Note
The pain.001 requests are not currently supported in the sandbox.
Authentication credentials
The following credentials can be used in the sandbox environment to retrieve an access token:
Client ID:
qMkZ90qoHAN5InA6WlMaVAhN5t8AAeOx
Note
The sandbox Client ID can also be used in the sandbox as the value of the X-Client-Id header parameter for your API requests.
Client Secret:
4EPA1MolP1ajyVeU
Predefined JSON Web Token (JWT) Bearer token:
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6InByb1BheW1lbnRzSHViU2IifQ.eyJzdWIiOiJxTWtaOTBxb0hBTjVJbkE2V2xNYVZBaE41dDhBQWVPeCIsImlzcyI6IlNhbnRhbmRlciIsImlhdCI6MTcxMDg0MjgwNCwibmJmIjoxNzEwODQyODA0LCJleHAiOjE3NDIzNzg4MDQsImp0aSI6ImM3YWY0Yzg0LTRkYzQtNDM2Mi05OTA2LWM5ZTg5N2YyNzUzOCJ9.LOaGmVUnQ6I0HYUQWA1y2vUhREaJrAasAxDlqAnxKbEYGmjP6AKeIViLdkBVVPTUWRETxmnlU6fBQRYU0BN8NEJ9dd_uJ20uiPGWp1ieTFvee27LbqqqS-4AbwD_oJluBUzb77cx4P_1o35gFskcFjbzdl5ert4xJvpbXNOQYa0C7f4YQ6wMLjCGkbdhimwRxeOEGVdYiRoVEizkPpNgUZi_H3o58gATIJ4rSSWqLmKvy9aBlK_YAT947klkJI-ej22KU8qgLCInBbBGdoW9gjg8Zpmizs7Xc7eAvNm7QRiAzd1NT6dgX3hAYDJz2m2dnZYS6zE_UPWOi5cbAyQggw
You can also generate your own JWT Bearer tokens in the sandbox, but there are some prerequisites before doing so. For more information, see Authentication guide.
You can access to Sandbox environment from this URL:
https://sandbox.api.pagonxt.com/payments/ and find the endpoints in API Explorer
Payments Hub ISO20022 API POST requests
When making POST-type requests in the sandbox, note that:
The sandbox supports idempotency for POST-type requests, meaning that payment requests with the same message ID do not create duplicate payments. When sending a payment request with a new message ID, you receive an HTTP 201 Created response, and the response body contains the Payments Hub ID for the payment request. If you send another payment request with the same message ID, you receive an HTTP 200 OK response, and the response body contains the Payments Hub ID of the original payment request.
POST-type requests require an SCA JWT Bearer token whose hd claim must match the request body content. The tutorials and Postman collection contain predefined requests and matching SCA JWT Bearer tokens for testing purposes.
To test the functionality of payment requests rejected for different reasons, the sandbox has specific request body values that can be used in POST-type requests to generate rejections. The Postman collection uses these values in separate API requests. If you are not using the Postman collection, the tables in the following sections contain request body values that you can use in your POST-type requests to generate rejections.
Sandbox-specific request body values (FP)
The following table provides sandbox-specific request body values that can be used in Faster Payments (FP) POST-type requests to generate payment rejections.
Table: POST-type request body values for generating Faster Payments (FP) rejections.
ISO20022 message type | Payment scheme | Rejection reason | Request body value causing the rejection |
---|---|---|---|
pacs.008.08 | FP (domestic) | Creditor account number not 8 digits | cdtTrfTxInf.cdtrAcct.id.iban = GB91BARC090231 |
pacs.008.08 | FP (domestic) | Creditor sort code all zeroes | cdtTrfTxInf.cdtrAcct.id.iban = GB91BARC00000034945865 |
pacs.008.08 | FP (domestic) | Creditor sort code ineligible for FPS | cdtTrfTxInf.cdtrAcct.id.iban = GB91BARC10101034945865 |
pacs.008.08 | FP (domestic) | Invalid creditor account number | cdtTrfTxInf.cdtrAcct.id.iban = GB91BARC09023134945865 |
pacs.008.08 | FP (domestic) | Invalid creditor name | cdtTrfTxInf.cdtr.nm = 12345678901234567890123456789012345678901 |
pacs.008.08 | FP (domestic) | Invalid debtor name | cdtTrfTxInf.dbtr.nm = 12345678901234567890123456789012345678901 |
pacs.008.08 | FP (domestic) | Invalid FPS processing code | cdtTrfTxInf.pmtTpInf.prtr = XXX |
pacs.008.08 | FP (overseas) | Creditor sort code all zeroes | cdtTrfTxInf.cdtrAgt.finInstnId.clrSysMmbId.mmbId = 000000 |
pacs.008.08 | FP (overseas) | Invalid characters in creditor sort code | cdtTrfTxInf.cdtrAgt.finInstnId.clrSysMmbId.mmbId = A00000 |
pacs.008.08 | FP (overseas) | Invalid creditor account | cdtTrfTxInf.cdtrAcct.id.iban = GB91BARC090231 |
pacs.008.08 | FP (overseas) | Invalid debtor account | cdtTrfTxInf.dbtrAcct.id.othr.id = “ “ |
pacs.008.08 | FP (overseas) | Invalid exchange rate | cdtTrfTxInf.xchgRate = 0 |
pacs.008.08 | FP (overseas) | Invalid original amount | cdtTrfTxInf.instdAmt.value = 0 |
pacs.008.08 | FP (overseas) | Invalid payment code | TBD |
pacs.008.08 | FP (overseas) | Missing creditor name | cdtTrfTxInf.cdtr.nm missing |
pacs.008.08 | FP (overseas) | Missing debtor name | cdtTrfTxInf.dbtr.nm missing |
pacs.008.08 | FP (overseas) | Missing end to end ID | cdtTrfTxInf.pmtId.endToEndId = “ “ |
pacs.008.08 | FP | Invalid chars in transaction ID | cdtTrfTxInf.pmtId.txId = payment-id ¿¿¿¿¿ |
pacs.008.08 | FP | Invalid creditor address | cdtTrfTxInf.cdtr.pstlAdr = "addressline1 addressline1 addressline1 addressline1 addressline1 addr", "addressline2 addressline2 addressline2 addressline2 addressline2 addr", "addressline3 addressline3 addressline3 addressline3 addressline3 addr", "addressline4 addressline4 addressline4 addressline4 addressline4 addr" |
pacs.008.08 | FP | Invalid debtor address | cdtTrfTxInf.dbtr.pstlAdr = "addressline1 addressline1 addressline1 addressline1 addressline1 addr", "addressline2 addressline2 addressline2 addressline2 addressline2 addr", "addressline3 addressline3 addressline3 addressline3 addressline3 addr", "addressline4 addressline4 addressline4 addressline4 addressline addr" |
pacs.008.08 | FP | Invalid structured creditor reference | cdtTrfTxInf.rmtInf.strd.cdtrRefInf.ref = validref123 !!! |
pacs.008.08 | FP | Invalid amount | cdtTrfTxInf.intrBkSttlmAmt.value = 250000.01 |
pacs.008.08 | FP | Invalid currency | cdtTrfTxInf.intrBkSttlmAmt.ccy = EUR |
pacs.004.09 | FP | Debtor sort code all zeroes | txInf.orgnlTxRef.dbtrAgt.finInstnId.clrSysMmbId.mmbId = 000000 |
pacs.004.09 | FP | Debtor sort code not 6 digits | txInf.orgnlTxRef.dbtrAgt.finInstnId.clrSysMmbId.mmbId = 1234 |
pacs.004.09 | FP | Debtor sort code not eligible for FPS | txInf.orgnlTxRef.dbtrAgt.finInstnId.clrSysMmbId.mmbId = 123456 |
pacs.004.09 | FP | Invalid debtor account number | txInf.orgnlTxRef.dbtrAcct.id.othe.id = 12 |
pacs.004.09 | FP | Invalid payment code | txInf.orgnlTxRef.pmtTpInf.lclInstrm.prtry = SIP |
pacs.004.09 | FP | Invalid structured creditor reference | txInf.orgnlTxRef.rmtInf.strd.cdtrRefInf.ref = reference! |
Sandbox-specific request body values (SCT and SCT Inst)
The following table provides sandbox-specific request body values that can be used in SEPA Credit Transfer (SCT) and SEPA Instant Credit Transfer (SCT Inst) POST-type requests to generate payment rejections.
Table: POST-type request body values for generating SEPA Credit Transfer (SCT) and SEPA Instant Credit Transfer (SCT Inst) rejections.
ISO20022 message type | Payment scheme | Rejection reason | Request body value causing the rejection |
---|---|---|---|
pacs.008.08 | SCT | Amount has too many decimals | cdtTrfTxInf.intrBkSttlmAmt.value = 1.001 |
pacs.008.08 | SCT | Amount is zero | cdtTrfTxInf.intrBkSttlmAmt.value = 0 |
pacs.008.08 | SCT | Amount more than limit | cdtTrfTxInf.intrBkSttlmAmt.value = 1000000000 |
pacs.008.08 | SCT | Blocked account | cdtTrfTxInf.dbtrAcct.id.iban = BY86AKBB10100000002966000000 |
pacs.008.08 | SCT | Creditor address empty | cdtTrfTxInf.cdtrAgt.finInstnId.bicfi = AUBKPHMM |
pacs.008.08 | SCT | Debtor address empty | cdtTrfTxInf.dbtr.pstlAdr missing |
pacs.008.08 | SCT | Insufficient funds (in the debtor account) | cdtTrfTxInf.dbtrAcct.id.iban = GR9608100010000001234567890 |
pacs.008.08 | SCT | Invalid category purpose code | cdtTrfTxInf.pmtTpInf.ctgyPurp.cd = XXXX |
pacs.008.08 | SCT | Invalid charge bearer | cdtTrfTxInf.chrgBr = DEBT |
pacs.008.08 | SCT | Invalid currency | cdtTrfTxInf.intrBkSttlmAmt.ccy = GBP |
pacs.008.08 | SCT | Invalid debtor IBAN | cdtTrfTxInf.dbtrAcct = KK9300492060833000002503 |
pacs.008.08 | SCT | Invalid message ID | grpHdr.msgId = MsgId-469587752!! |
pacs.008.08 | SCT | Transaction ID duplicity | cdtTrfTxInf.pmtId.txId = txId-duplicity-error-test |
pacs.008.08 | SCT Inst | Amount more than limit | cdtTrfTxInf.intrBkSttlmAmt.value = 1000001 |
pacs.004.09 | SCT | Duplicated | txInf.rtrId = transactionId-xxxx |
pacs.004.09 | SCT Inst | Invalid reason code | txInf.retrRsnInf.rsn.cd = DS0B |
camt.056.08 | SCT | Invalid reason code | undrlyg.txInf.cxlRsnInf.rsn.cd = AC01 |
camt.056.08 | SCT Inst | Originator name missing | undrlyg.txInf.cxlRsnInf.orgtr.nm missing |