# Bank Payments

Test values and return codes for validating bank payment integrations in the test environment.

Before you can run live bank payments, use our test environment to check that your integration works correctly. You can use our test environment to test the following transaction types:

- Sales
- Authorizations
- Reversals
- Unreferenced refunds

In addition to testing different transaction types, you can trigger specific return codes and re-present payments.

**Note:** If you have any issues when you run our test cases, email our integrations team at [integrationsupport@payroc.com](mailto:integrationsupport@payroc.com).

<a id="before-you-begin"></a>
## Before you begin

To help you with testing, we provide you with:

- Test environment
- Test values
- Returns

<a id="test-environment"></a>
## Test environment

Send your requests to our test environment:

**Test environment base URI:** [https://api.uat.payroc.com/v1](https://api.uat.payroc.com/v1)

**Important:** Use only test bank account details in our test environment.

<a id="authenticating-your-requests"></a>
### Authenticating your requests

Use our test Identity Service to generate a Bearer token to include in the header of your requests. To generate your Bearer token, complete the following steps:

1. Include your API key in the x-api-key parameter in the header of a POST request.
2. Send your request to [https://identity.uat.payroc.com/authorize](https://identity.uat.payroc.com/authorize).

**Note:** You need to generate a new Bearer token before the previous Bearer token expires.

<a id="example-request"></a>
#### Example request

```bash
curl --location --request POST 'https://identity.uat.payroc.com/authorize' --header 'x-api-key: <api key>'
```

<a id="example-response"></a>
#### Example response

If your request is successful, we return a response that contains your Bearer token, information about its scope, and when it expires.

```json
{
  "access_token": "eyJhbGc....adQssw5c",
  "expires_in": 3600,
  "scope": "service_a service_b",
  "token_type": "Bearer"
}
```

<a id="example-request-header"></a>
#### Example request header

```bash
curl
-H "Authorization: Bearer <access token>"
```

<a id="test-values"></a>
## Test values

Use the following routing number and account number combinations to trigger specific results:

| Routing number | Account number | Result | Description |
| --- | --- | --- | --- |
| 053200983 | 11101010 | Approved | Successful transaction. |
| 053200983 | 11101011 | Declined | Generic account-level decline. |
| 053200983 | 11101012 | Declined | Routing number is incorrect. |
| 053200983 | 11101013 | Declined | Account number is incorrect. |
| 053200983 | 11101014 | Declined | Potential fraudulent transaction. |
| 053200983 | 11101015 | Warning | Warning that indicates the account structure is incorrect. |
| 053200983 | 11101016 | Declined | Daily transaction limit exceeded. |
| 053200983 | 11101017 | Declined | Transaction limit exceeded over a specific time. |
| 053200983 | 11101018 | Declined | Transaction amount exceeds the maximum limit. |
| 053200983 | 11101019 | Declined | Duplicate check number. |
| 053200983 | 11101020 | Declined | Check number too low. |
| 053200983 | 11101021 | Declined | Customer needs to provide a driver's license. |
| 053200983 | 11101022 | Declined | Customer needs to provide a phone number. |
| 053200983 | 11101023 | Declined | Incorrect driver's license format. |

You can also use the following routing number and account number combinations:

| Routing number | Account number | Result | Reason |
| --- | --- | --- | --- |
| 123123123 | 123123123 | Declined | Routing number and account number are identical. |
| 123123123 | Any other account number | Declined | Unqualified receiving bank. |
| 111111111 | 222222222 | Declined | Incorrect transit number. |

<a id="returns"></a>
## Returns

To simulate a return, send a value of `888000XX` for the account number, where `XX` is the return code without the R.

The following table shows a few examples of how to use test account numbers to trigger return codes:

| Return code | Reason | Routing number | Account number |
| --- | --- | --- | --- |
| R01 | Insufficient funds. | 053200983 | 88800001 |
| R02 | Account closed. | 053200983 | 88800002 |
| R03 | Unable to locate account. | 053200983 | 88800003 |
| R04 | Incorrect account number. | 053200983 | 88800004 |

**Note:** Each night we check for any requests that trigger a return code. It might take a day for us to create a return for the transaction.

<a id="re-presentments"></a>
### Re-presentments

For some return codes, you can choose to [re-present the payment](/api/represent-bank-transfer-payment) or [close the return](/api/close-bank-transfer-payment). You can re-present or close returns with the following return codes:

- R01
- R03
- R04
- R09

**Note:** You can re-present a payment up to two times.
