# Refunding with the API

You can refund transactions processed with Finix programmatically using the Finix API instead of a user interface. The API supports refunds for both online and in-person payments.

## Refunding Online Payments

To refund a `Transfer` via API, [create a reversal Transfer](https://docs.finix.com/api/transfers/createtransferreversal). Pass the `id` query parameter set to the original `Transfer` you want to refund.

Include an `amount` equal to or less than the payment to refund. Enter a value less than the payment amount for a partial refund.

- Example
- API Definition

```
post
/transfers/{transfer_id}/reversals

Sandbox server  
https://finix.sandbox-payments-api.com/transfers/{transfer_id}/reversals

```

cURL

```
curl -i -X POST \
  -u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
  https://finix.sandbox-payments-api.com/transfers/TRnErBfrHLgdAi3BqAkWLN27/reversals \
  -H 'Content-Type: application/json' \
  -H 'Finix-Version: 2022-02-01' \
  -d '{
    "refund_amount": 662154
  }'
```

A successful request returns a `201 Created` status code, with the response body containing:

- `parent_transfer` representing the `Transfer` that was reversed.
- `state`:
  - Initially set to `PENDING` to indicate that the refund is still processing.
  - Changes to `SUCCEEDED` when the refund is processed.
- `type` set to `REVERSAL`.

- Example
- API Definition

Transfer - Reversal

```
{
  "id": "TRi87Kgx6NdZFXkQtLXQ9NMJ",
  "created_at": "2025-08-05T17:22:50.40Z",
  "updated_at": "2025-08-05T17:22:50.44Z",
  "amount": 50,
  "currency": "USD",
  "state": "PENDING",
  "type": "REVERSAL",
  "_links": {
    "application": {
      "href": "https://finix.sandbox-payments-api.com/applications/APc9vhYcPsRuTSpKD9KpMtPe"
    }
  }
}
```

The `state` will be `SUCCEEDED` when the refund finishes processing. Buyers will see the refund credited within 5-10 business days, depending on their bank. Refunds can't be canceled once processed.

---

## Refunding Card-Present Payments

Which refund method to use for card-present payments depends on how much time has passed since the original transaction. For debit transactions, the determining factor is whether the batch is still open; for credit transactions, whether it's within 45 days.

- [Referenced Refunds](https://docs.finix.com/guides/after-the-payment/refunds/api#referenced-refunds) — Reverse the original `Transfer` directly using its ID. No card swipe required in most cases.
- [Unreferenced Refunds](https://docs.finix.com/guides/after-the-payment/refunds/api#unreferenced-refunds) — Create a new `Transfer` unlinked from the original. The cardholder must swipe their card to authorize the refund. Only available for physically swiped transactions.

### Referenced Refunds

Use a referenced refund when:

- The payment type was `credit` and the transaction is within 45 days (regardless of batch status).
- The payment type was `debit` and the transaction is in the current open batch.

To perform the refund, [reverse the original Transfer](https://docs.finix.com/api/transfers/createtransferreversal):

- Example
- API Definition

```
post
/transfers/{transfer_id}/reversals

Sandbox server
https://finix.sandbox-payments-api.com/transfers/{transfer_id}/reversals

```

cURL

```
curl -i -X POST \
  -u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
  https://finix.sandbox-payments-api.com/transfers/TRnErBfrHLgdAi3BqAkWLN27/reversals \
  -H 'Content-Type: application/json' \
  -H 'Finix-Version: 2022-02-01' \
  -d '{
    "device": "DVtk6E4eWHsMzgZXvFaaUigM",
    "refund_amount": 150
  }'
```

A successful request returns a `201 Created` status code, with the response body containing:

- `state`:
  - Initially set to `PENDING` to indicate that the refund is still processing.
  - Changes to `SUCCEEDED` when the refund is processed.
- `type` is set to `REVERSAL`.

- Example
- API Definition

Reversed Card-Present Transfer Referencing Parent

```
{
  "id": "TRh57kBu89GbiaPmQ243DMUV",
  "created_at": "2024-12-23T05:54:03.62Z",
  "amount": 150,
  "currency": "USD",
  "state": "SUCCEEDED",
  "type": "REVERSAL",
  "_links": {
    "application": {
      "href": "https://finix.sandbox-payments-api.com/applications/APeUbTUjvYb1CdPXvNcwW1wP"
    }
  }
}
```

### Unreferenced Refunds

Use an unreferenced refund when:

- The payment type is `debit` and the transaction is no longer in the batch.
- The payment type is `credit` and the transaction is no longer in the batch and older than 45 days.

To perform the unreferenced refund, [create a Transfer](https://docs.finix.com/api/transfers/createtransfer) with `operation_key: CARD_PRESENT_UNREFERENCED_REFUND`. The cardholder must swipe their card to authorize the refund.

Card-not-present transactions (e.g., eCommerce) do not support unreferenced refunds.

- Example
- API Definition

```
post
/transfers

Sandbox server
https://finix.sandbox-payments-api.com/transfers

```

cURL

```
curl -i -X POST \
  -u USfdccsr1Z5iVbXDyYt7hjZZ:313636f3-fac2-45a7-bff7-a334b93e7bda \
  https://finix.sandbox-payments-api.com/transfers \
  -H 'Content-Type: application/json' \
  -H 'Finix-Version: 2022-02-01' \
  -d '{
    "amount": 150,
    "currency": "USD",
    "device": "DVoDo7F6yYCnX2d6Fj9hvsd",
    "operation_key": "CARD_PRESENT_UNREFERENCED_REFUND"
  }'
```

A successful request returns a `201 Created` status code, with the response body containing:

- `operation_key` is set to `CARD_PRESENT_UNREFERENCED_REFUND`.
- `state`:
  - Initially set to `PENDING` to indicate that the refund is still processing.
  - Changes to `SUCCEEDED` when the refund is processed.
- `type` is set to `CREDIT` or `DEBIT` based on the original transfer type, rather than `REVERSAL`.

- Example
- API Definition

Card Present Transfer without Parent Reference

```
{
  "id": "TRo5JpCqMY26ufvRdTJ8715j",
  "created_at": "2025-11-19T20:31:16.48Z",
  "amount": 150,
  "currency": "USD",
  "state": "SUCCEEDED",
  "type": "CREDIT",
  "_links": {
    "application": {
      "href": "https://finix.sandbox-payments-api.com/applications/APc9vhYcPsRuTSpKD9KpMtPe"
    }
  }
}
```
