> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Refund

A Refund is one full or partial reversal of a payment, issued with [Refund Payment](/api-reference/beta/payments/refund-payment). It records how much moved, through which provider, and whether it succeeded.

Use the Refunds API to list the refunds on a payment or across an account, and to retrieve a single refund.

## Endpoints

| Endpoint | Request |
| - | - |
| [List Refunds](/api-reference/beta/refunds/list-refunds) | <Badge color="blue" size="sm" stroke>GET</Badge> `/refunds` |
| [Retrieve Refund](/api-reference/beta/refunds/retrieve-refund) | <Badge color="blue" size="sm" stroke>GET</Badge> `/refunds/{id}` |

## Attributes

<Columns cols={2}>
  <Column>
    <ResponseField name="id" type="string" required>
      Refund ID, prefixed `rf_`.
    </ResponseField>

    <ResponseField name="account_id" type="string | null" required>
      The account that issued the refund, prefixed `biz_`.
    </ResponseField>

    <ResponseField name="amount" type="object | null" required>
      The refunded amount as it settled, in the payment's settlement currency, so pages of refunds net against the payment's `refunded_amount`. Converted at the rate in force when the refund was issued, not the payment's original rate. Null only when no exchange rate is recorded for a legacy multi-currency payment.

      <Accordion title="Properties" defaultOpen={true}>
        <ResponseField name="amount" type="string" required>
          The amount in major units, as an exact decimal string — `"10.00"` is ten
          dollars. A string so no float rounds it in transit.
        </ResponseField>

        <ResponseField name="currency" type="string" required>
          Three-letter ISO 4217 currency code, lowercase.
        </ResponseField>

        <ResponseField name="decimals" type="integer" required>
          How many decimal places the amount CARRIES — the precision the charge itself
          runs at.
        </ResponseField>

        <ResponseField name="display_decimals" type="integer" required>
          How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
        </ResponseField>
      </Accordion>
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      When the refund was requested, as an ISO 8601 timestamp.
    </ResponseField>

    <ResponseField name="failure_message" type="string | null" required>
      The provider's own explanation of the failure, or null.
    </ResponseField>

    <ResponseField name="failure_reason" type="string | null" required>
      Why the refund failed, normalized across providers. Null unless the refund failed or was canceled.

      Available options: `bank_declined`, `expired_or_canceled_card`, `lost_or_stolen_card`, `insufficient_funds`, `charge_disputed`, `not_refundable`, `merchant_request`, `unknown`
    </ResponseField>

    <ResponseField name="original_amount" type="object" required>
      The refunded amount in the currency the processor moved.

      <Accordion title="Properties" defaultOpen={true}>
        <ResponseField name="amount" type="string" required>
          The amount in major units, as an exact decimal string — `"10.00"` is ten
          dollars. A string so no float rounds it in transit.
        </ResponseField>

        <ResponseField name="currency" type="string" required>
          Three-letter ISO 4217 currency code, lowercase.
        </ResponseField>

        <ResponseField name="decimals" type="integer" required>
          How many decimal places the amount CARRIES — the precision the charge itself
          runs at.
        </ResponseField>

        <ResponseField name="display_decimals" type="integer" required>
          How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
        </ResponseField>
      </Accordion>
    </ResponseField>

    <ResponseField name="payment_id" type="string" required>
      The payment this refund reverses, prefixed `pay_`.
    </ResponseField>

    <ResponseField name="provider" type="string" required>
      The payment provider that processed the refund, such as `paypal` or
      `coinbase`.
    </ResponseField>

    <ResponseField name="provider_created_at" type="string | null" required>
      When the provider created the refund, as an ISO 8601 timestamp.
    </ResponseField>

    <ResponseField name="reason" type="string | null" required>
      Why the refund was issued, when recorded.

      Available options: `duplicate`, `fraudulent`, `requested_by_customer`, `expired_uncaptured_charge`, `dispute_alert`
    </ResponseField>

    <ResponseField name="reference_status" type="string | null" required>
      Whether a banking-network tracking reference is available for this refund.

      Available options: `available`, `pending`, `unavailable`
    </ResponseField>

    <ResponseField name="reference_type" type="string | null" required>
      The kind of tracking reference, such as an acquirer reference number.

      Available options: `acquirer_reference_number`, `retrieval_reference_number`, `system_trace_audit_number`
    </ResponseField>

    <ResponseField name="reference_value" type="string | null" required>
      The tracking reference the buyer's bank can trace the refund by.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      Where the refund stands with the processor: `pending`, `requires_action`, `succeeded`, `failed`, or `canceled`.

      Available options: `pending`, `requires_action`, `succeeded`, `failed`, `canceled`
    </ResponseField>

    <ResponseField name="updated_at" type="string" required>
      When the refund last changed, as an ISO 8601 timestamp.
    </ResponseField>

    <ResponseField name="visa_rdr" type="boolean" required>
      True when the card network initiated the refund through Rapid Dispute
      Resolution.
    </ResponseField>
  </Column>

  <Column>
    <div className="api-resource-sticky-example">
      ```json Refund theme={null}
      {
      	"id": "rf_xxxxxxxxxxxxxx",
      	"payment_id": "pay_xxxxxxxxxxxxxx",
      	"account_id": "biz_xxxxxxxxxxxxxx",
      	"status": "succeeded",
      	"amount": {
      		"amount": "49.00",
      		"currency": "usd",
      		"decimals": 2,
      		"display_decimals": 2
      	},
      	"original_amount": {
      		"amount": "49.00",
      		"currency": "usd",
      		"decimals": 2,
      		"display_decimals": 2
      	},
      	"provider": "stripe",
      	"reason": "requested_by_customer",
      	"failure_reason": null,
      	"failure_message": null,
      	"reference_type": "acquirer_reference_number",
      	"reference_status": "available",
      	"reference_value": "74000006259000123456789",
      	"visa_rdr": false,
      	"provider_created_at": "2026-09-15T14:30:02.000Z",
      	"created_at": "2026-09-15T14:30:00.000Z",
      	"updated_at": "2026-09-15T14:30:05.000Z"
      }
      ```
    </div>
  </Column>
</Columns>


## Related topics

- [Refund](/api-reference/refunds/refund.md)
- [Refunds and Disputes](/developer/guides/refunds-and-disputes.md)
- [List Refunds](/api-reference/beta/refunds/list-refunds.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.