ACH Refund Transaction
Return funds to customers via ACH refund transactions
ACH Refund
An ACH Refund transaction returns funds to a customer's bank account by reversing a previously settled ACH Sale transaction.
Key Requirements
- The original ACH Sale transaction must be settled before a refund can be processed
- Settlement typically occurs 1-3 business days after the original transaction
- Refunds cannot exceed the original transaction amount
Important: Unlike card transactions, ACH transactions cannot be voided. If you need to cancel an ACH transaction before settlement, you must wait for it to settle and then issue a refund.
Endpoint
POST /v1/transactions
Request Format
{
"type": "refund",
"transactionId": "txn_original_sale_id",
"amount": 5000,
"currency": "USD"
}Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
type | string | Yes | Must be "refund" |
transactionId | string | Yes | ID of the original settled ACH Sale transaction |
amount | integer | No | Refund amount in cents. If not specified, refunds the full amount. |
currency | string | Yes | Must be "USD" |
Full Refund Example
Refund the entire amount of the original transaction:
{
"type": "refund",
"transactionId": "txn_01abc123def456",
"currency": "USD"
}Partial Refund Example
Refund a portion of the original transaction:
{
"type": "refund",
"transactionId": "txn_01abc123def456",
"amount": 2500,
"currency": "USD"
}Response Format
{
"id": "txn_refund_xyz789",
"type": "refund",
"amount": 5000,
"fee": 0,
"currency": "USD",
"merchantId": "mid_abc123",
"transactionId": "txn_01abc123def456",
"authorization": {
"status": "P",
"processorCode": "00",
"processorMessage": "ACH refund submitted",
"approvedAmount": 0
},
"payment": {
"type": "personalChecking",
"last4": "6789",
"bin": "987654321"
},
"processor": {
"id": "pfmCon_xyz789",
"name": "Payrix",
"routingSource": "plan"
},
"createdOn": "2024-01-18T14:30:00Z"
}Transaction Statuses
| Status | Code | Description |
|---|---|---|
| Pending | P | Refund submitted to ACH network |
| Approved | A | Refund successfully processed, funds returned |
| Declined | D | Refund was declined |
| Error | E | An error occurred |
Timing Considerations
Settlement Timeline
Day 1: Original ACH Sale submitted (status: Pending)
Day 2-3: ACH network processes the sale
Day 3-4: Sale settles (status: Approved)
Day 4+: Refund can now be submitted
Refund submitted: (status: Pending)
1-3 days later: Refund settles (status: Approved)
When to Use Refund vs. Void
| Scenario | Action |
|---|---|
| Transaction is pending | Wait for settlement, then refund |
| Transaction is settled | Submit a refund |
| Need immediate reversal | Not possible with ACH - must wait for settlement |
Note: ACH does not support void transactions. The error "Void is not supported for ACH transactions" will be returned if attempted.
Multiple Partial Refunds
You can issue multiple partial refunds against a single transaction, as long as the total refunded amount does not exceed the original transaction amount.
Example: Original sale of $100.00
Refund 1: $25.00 ✓
Refund 2: $30.00 ✓
Refund 3: $50.00 ✗ (exceeds remaining $45.00)
Refund 3: $45.00 ✓
Error Messages
These are Preczn API errors returned when a request fails validation or processing. The error and message fields correspond to the API response format documented in the ACH Error Reference.
Refund Errors
| Error | Message | Cause | Solution |
|---|---|---|---|
| Not Found | Transaction Id Not Found | Invalid transactionId | Verify the transaction ID is correct |
| Bad Request | Amount to refund should be equal or less than the original transaction | Refund amount exceeds original or remaining balance | Reduce the refund amount |
| Bad Request | Transaction type does not support refund | Original transaction type doesn't support refunds | Only sale transactions can be refunded |
For a complete list of errors, see the ACH Error Reference.
Webhooks
Subscribe to webhook events to track refund status:
| Event | Description |
|---|---|
transaction.pending | Refund submitted to ACH network |
transaction.approved | Refund settled, funds returned to customer |
transaction.declined | Refund was declined |
transaction.errored | An error occurred |
Best Practices
- Wait for settlement - Always verify the original transaction has settled before attempting a refund
- Track refund totals - Keep track of partial refunds to avoid exceeding the original amount
- Use webhooks - Monitor refund status via webhooks rather than polling
- Communicate with customers - Set expectations that ACH refunds take 1-3 business days
Updated 2 days ago
