***

title: Re-present an ACH payment
icon: arrow-rotate-right
published: true
intro: Re-present an ACH payment if it fails.
---------------------

For clean Markdown of any page, append .md to the page URL. For a complete documentation index, see https://docs.payroc.com/full-stack-guides/take-payments/payments/llms.txt. For full documentation content, see https://docs.payroc.com/full-stack-guides/take-payments/payments/llms-full.txt.

If an ACH payment has failed, we send an email to the merchant to let them know that the payment has failed. You can integrate with our API return the reason that the payment failed and then re-present the payment.

<Note>
  **Note:** When the merchant views the reason why the payment failed, they might have to contact their customer to fix the issue before they can re-present the payment.
</Note>

## How it works

1. We email the merchant to let them know that an ACH payment has failed.
2. Merchant uses their POS to view the details of the payment and the reason the payment has failed.
3. Merchant contacts their customer to fix the issue.
4. Merchant uses their POS to re-present the payment.

## Your integration journey

1. View the payment details.
2. Re-present the payment.
3. (Optional) Re-present the payment again.

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

## Things to consider

When you re-present a payment, don't use the same paymentId that you use to retrieve the payment.

In the response of the Retrieve Payment method, our gateway sends a returns object with a new paymentId, which you need to send in the Re-present Payment request.

```json
...
"returns": [  
    {  
       "paymentId": "GIJXAU3WUJ",  
       "date": "2025-06-23",  
       "returnCode": "R01",  
       "returnReason": "Insufficient Funds",  
       "represented": false,  
       "link": {  
          "rel": "self",  
          "method": "GET",  
          "href": "https://api.payroc.com/v1/bank-transfer-payments/GIJXAU3WUJ"  
       }  
    }  
 ],
...
```

## Errors

If your request is unsuccessful, we return an error. For more information about errors, see [Errors](https://docs.payroc.com/api/errors).

## Step 1. View the payment details

To view the reason why the payment failed, send a GET request to our Bank Transfer Payments endpoint.

| Endpoint   | Prefix     | URL                                                                                                                                |
| :--------- | :--------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| Test       | `api.uat.` | [https://api.uat.payroc.com/v1/bank-transfer-payments/:paymentId](https://api.uat.payroc.com/v1/bank-transfer-payments/:paymentId) |
| Production | `api.`     | [https://api.payroc.com/v1/bank-transfer-payments/:paymentId](https://api.payroc.com/v1/bank-transfer-payments/:paymentId)         |

### Request parameters

<EndpointSchemaSnippet endpoint="GET /bank-transfer-payments/:paymentId" selector="request.path" />

### Example request

<EndpointRequestSnippet endpoint="GET /bank-transfer-payments/:paymentId" />

### Response fields

<Warning>
  **Important:** Save the paymentId from the returns object for the re-presentment.
</Warning>

If your request is successful, our gateway sends a returns object that contains a returnCode field and a returnReason field that indicates the reason the payment failed.

<EndpointSchemaSnippet endpoint="GET /bank-transfer-payments/:paymentId" selector="response.body" />

### Example response

<EndpointResponseSnippet endpoint="GET /bank-transfer-payments/:paymentId" example="Declined Payment" />

## Step 2. Re-present the payment

To retry the payment, send a POST request to our Bank Transfer Payments endpoint.

| Endpoint   | Prefix     | URL                                                                                                                                                    |
| :--------- | :--------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Test       | `api.uat.` | [https://api.uat.payroc.com/v1/bank-transfer-payments/:paymentId/represent](https://api.uat.payroc.com/v1/bank-transfer-payments/:paymentId/represent) |
| Production | `api.`     | [https://api.payroc.com/v1/bank-transfer-payments/:paymentId/represent](https://api.payroc.com/v1/bank-transfer-payments/:paymentId/represent)         |

### Request parameters

<EndpointSchemaSnippet endpoint="POST /bank-transfer-payments/:paymentId/represent" selector="request.path" />

<EndpointSchemaSnippet endpoint="POST /bank-transfer-payments/:paymentId/represent" selector="request.body" />

### Example request

<EndpointRequestSnippet endpoint="POST /bank-transfer-payments/:paymentId/represent" />

### Response fields

If your request is successful, our gateway sends the re-presentment to NACHA to retry the payment.

<EndpointSchemaSnippet endpoint="POST /bank-transfer-payments/:paymentId/represent" selector="response.body" />

### Example response

<EndpointResponseSnippet endpoint="POST /bank-transfer-payments/:paymentId/represent" example="Representment Bank Transfer Payment" />

## Step 3. (Optional) Re-present the payment again

If the re-presentment fails, you can send a second and final re-presentment request. To do this:

1. Save the paymentId from the response in Step 2. This is the paymentId of the failed re-presentment.
2. Use our [Retrieve Payment](https://docs.payroc.com/api/schema/bank-transfer-payments/payments/retrieve) method with the paymentId of the failed re-presentment. In the response, our gateway sends a returns object with a new paymentId.
3. Use our [Re-present Payment](https://docs.payroc.com/api/schema/bank-transfer-payments/payments/represent) method with this new paymentId to re-present the payment for a final time.