> ## Documentation Index
> Fetch the complete documentation index at: https://razorpay-881012b3.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Fetch All Refunds

> Fetch all Refunds using Razorpay Refunds API.

<div style={{display:"flex",flexWrap:"wrap",alignItems:"center",gap:"0.35rem 0.9rem",border:"1px solid rgba(128,128,128,0.28)",borderRadius:"0.5rem",padding:"0.45rem 0.75rem",margin:"0 0 1.25rem",fontSize:"0.875rem"}}>
  <span style={{fontWeight:600}}>Available in</span>
  <span>🇮🇳 India</span>
  <span>🇸🇬 Singapore</span>
  <span>🇺🇸 United States</span>
</div>

Use this endpoint to retrieve details of all refunds. However, by default, only the last 10 refunds are returned. You can use count and skip query parameters to change that behaviour.

<RequestExample>
  ```bash Curl theme={null}
  curl -u [YOUR_KEY_ID]:[YOUR_KEY_SECRET] \
  -X GET https://api.razorpay.com/v1/refunds
  ```

  ```java Java theme={null}
  RazorpayClient razorpay = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");

  JSONObject params = new JSONObject();
  params.put("count","1");

  List<Refund> refund = razorpay.refunds.fetchAll(params);
  ```

  ```php PHP theme={null}
  $api = new Api($key_id, $secret);

  $api->refund->all($options);
  ```

  ```python Python theme={null}
  import razorpay
  client = razorpay.Client(auth=("YOUR_ID", "YOUR_SECRET"))

  client.refund.all(options)
  ```

  ```go Go theme={null}
  import ( razorpay "github.com/razorpay/razorpay-go" )
  client := razorpay.NewClient("YOUR_KEY_ID", "YOUR_SECRET")

  option := map[string]interface{}{
      "count" : 2
  }
  body, err := client.Payment.All(option, nil)
  ```

  ```javascript Node.js theme={null}
  var instance = new Razorpay({ key_id: 'YOUR_KEY_ID', key_secret: 'YOUR_SECRET' })

  instance.refunds.all(options)
  ```

  ```ruby Ruby theme={null}
  require "razorpay"
  Razorpay.setup('YOUR_KEY_ID', 'YOUR_SECRET')

  options = {"count":1}

  Razorpay::Refund.all(options)
  ```

  ```csharp .NET theme={null}
  //initialize the SDK client
  RazorpayClient client = new RazorpayClient("[YOUR_KEY_ID]", "[YOUR_KEY_SECRET]");

  Dictionary<string, object> paramRequest = new Dictionary<string, object>();
  paramRequest.Add("count", "1");

  List<Refund> refund = client.Refund.All(paramRequest);
  ```

  ```bash CLI theme={null}
  razorpay refunds list --count 10 --skip 0 --from 1776754530 --to 1776758130
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "entity": "collection",
    "count": 2,
    "items": [
      {
        "id": "rfnd_FFX6AnnIN3puqW",
        "entity": "refund",
        "amount": 88800,
        "currency": "INR",
        "payment_id": "pay_FFX5FdEYx8jPwA",
        "notes": {
          "comment": "Issuing an instant refund"
        },
        "receipt": null,
        "acquirer_data": {},
        "created_at": 1594982363,
        "batch_id": null,
        "status": "processed",
        "speed_processed": "optimum",
        "speed_requested": "optimum"
      },
      {
        "id": "rfnd_EqWThTE7dd7utf",
        "entity": "refund",
        "amount": 6000,
        "currency": "INR",
        "payment_id": "pay_EpkFDYRirena0f",
        "notes": {
          "comment": "Issuing a normal refund"
        },
        "receipt": null,
        "acquirer_data": {
          "arn": "10000000000000"
        },
        "created_at": 1589521675,
        "batch_id": null,
        "status": "processed",
        "speed_processed": "normal",
        "speed_requested": "normal"
      }
    ]
  }
  ```

  ```json Failure theme={null}
  {
      "error": {
          "code": "BAD_REQUEST_ERROR",
          "description": "The payment id field is required.",
          "source": "business",
          "step": "payment_initiation",
          "reason": "input_validation_failed",
          "metadata": {},
          "field": "payment_id"
      }
  }
  ```
</ResponseExample>

## Query Parameters

<ParamField query="from" type="integer">
  Unix timestamp at which the refunds were created.
</ParamField>

<ParamField query="to" type="integer">
  Unix timestamp till which the refunds were created.
</ParamField>

<ParamField query="count" type="integer">
  The number of refunds to fetch. You can fetch a maximum of 100 refunds.
</ParamField>

<ParamField query="skip" type="integer">
  The number of refunds to be skipped.
</ParamField>

## Response Parameters

<ResponseField name="id" type="string">
  The unique identifier of the refund. For example, `rfnd_FgRAHdNOM4ZVbO`.
</ResponseField>

<ResponseField name="entity" type="string">
  Indicates the type of entity. Here, it is `refund`.
</ResponseField>

<ResponseField name="amount" type="integer">
  The amount to be refunded (in the smallest unit of currency). For example, if the refund value is ₹30, it will be `3000`.
</ResponseField>

<ResponseField name="currency" type="string">
  The currency of a payment amount for which the refund is initiated. Check the list of [supported currencies](/docs/us/payments/international-payments#supported-currencies).
</ResponseField>

<ResponseField name="payment_id" type="string">
  The unique identifier of the payment for which a refund is initiated. For example, `pay_FgR9UMzgmKDJRi`.
</ResponseField>

<ResponseField name="created_at" type="integer">
  Unix timestamp at which the refund was created. For example, `1600856650`.
</ResponseField>

<ResponseField name="batch_id" type="string">
  This parameter is populated if the refund was created as part of a batch upload. For example, `batch_00000000000001`.
</ResponseField>

<ResponseField name="notes" type="json object">
  Key-value store for storing your reference data. A maximum of 15 key-value pairs can be included. For example, `"note_key": "Beam me up Scotty”`.
</ResponseField>

<ResponseField name="receipt" type="string">
  A unique identifier provided by you for your internal reference.
</ResponseField>

<ResponseField name="acquirer_data" type="object">
  An object containing a unique reference number (either RRN, ARN or UTR) that is provided by the banking partner when a refund is processed. This reference number can be used by the customer to track the status of the refund with the bank.
</ResponseField>

<ResponseField name="status" type="string">
  Indicates the state of the refund. Possible values:

  * `pending`: This state indicates that Razorpay is attempting to process the refund.
  * `processed`: This is the final state of the refund.
  * `failed`: A refund can attain the failed state in the following scenarios:<br />
    * Normal refund is not possible for a payment which is more than 6 months old.<br />
    * Instant Refund can sometimes fail because of customer's account or bank-related issues.
</ResponseField>

<ResponseField name="speed_requested" type="string">
  The processing mode of the refund seen in the refund response. <br /> This attribute is seen in the refund response only if the `speed` parameter is set in the refund request.<br />Possible values:

  * `normal`: Indicates that the refund will be processed via the normal speed. The refund will take 5-7 working days.
  * `optimum`: Indicates that the refund will be processed at an optimal speed based on Razorpay's internal fund transfer logic.
    * If the refund can be processed instantly, Razorpay will do so, irrespective of the payment method used to make the payment.
    * If an instant refund is not possible, Razorpay will initiate a refund that is processed at the normal speed.
</ResponseField>

<ResponseField name="speed_processed" type="string">
  This is a parameter in the response which describes the mode used to process a refund. <br /> This attribute is seen in the refund response only if the `speed` parameter is set in the refund request. Possible values:

  * `instant`: Indicates that the refund has been processed instantly via fund transfer.
  * `normal`: Indicates that the refund has been processed by the payment processing partner. The refund will take 5-7 working days.
</ResponseField>

## Errors

<AccordionGroup>
  <Accordion title="The API {key/secret} provided is invalid.">
    **Code:** `4xx`

    The API credentials passed in the API call differ from the ones generated on the Dashboard.

    **Solution:** The API keys must be active and entered correctly with no whitespace before or after.
  </Accordion>

  <Accordion title="The requested URL was not found on the server.">
    **Code:** `400`

    The URL is wrong or is missing something.

    **Solution:** Ensure that the URL is correct and complete.
  </Accordion>

  <Accordion title="The payment id field is required.">
    **Code:** `400`

    A GET API is executed by POST method.

    **Solution:** Use the correct method, that is, GET.
  </Accordion>

  <Accordion title="count must be an integer between 1 and 100.">
    **Code:** `400`

    An invalid value was passed for the `count` query parameter. The API returns variants of this error depending on the input: `The count must be at least 1.` (for `count=0`), `The count must be no greater than 100.` (for values above 100), `The count must be no less than 1.` (for negative values) or `The count must be an integer.` (for non-integer values like `count=abc`).

    **Solution:** Pass `count` as a positive integer between 1 and 100. For larger datasets, paginate using `skip`.
  </Accordion>

  <Accordion title="skip must be a non-negative integer.">
    **Code:** `400`

    An invalid value was passed for the `skip` query parameter. The API returns `The skip must be no less than 0.` for negative values, or `The skip must be an integer.` for non-integer values.

    **Solution:** Pass `skip` as a non-negative integer (0 or higher).
  </Accordion>

  <Accordion title="from and to must be UNIX-epoch integers.">
    **Code:** `400`

    A non-integer value (for example a human-readable date like `2024-01-01`) was passed for `from` or `to`. The API returns `The from must be an integer.` or `The to must be an integer.` respectively.

    **Solution:** Pass `from` and `to` as UNIX-epoch integers (seconds), not as human-readable dates.
  </Accordion>
</AccordionGroup>
