# Ask for a refund

> Ask for money back on a paid invoice, follow your request on the Refunds tab of Billing, and withdraw it before staff decide.

Source: https://www.coritan.com/docs/billing/refund-requests/

In the dashboard:

- /dashboard/billing/refunds: https://www.coritan.com/dashboard/billing/refunds

You can ask for all or part of what you paid on an invoice back. Coritan staff read each request and decide. An approved refund goes back to the payment you made, or to your credit balance when that payment cannot take it. The **Refunds** tab of **Billing** shows every request you sent and what happened to it.

## Before you begin

- Sign in to the [dashboard](https://www.coritan.com/dashboard).
- Find the invoice. You can ask for a refund on a paid invoice, one request at a time. [Pay an invoice](/docs/billing/invoices/#find-an-invoice) explains how to find one.

## Send a request

1. In the sidebar, select **Billing**, then the **Invoices** tab.
2. Choose the **Paid** filter, then select **View** beside the invoice.
3. Select **Ask for a refund…**.
4. Under **How much**, choose everything paid, or **Part of it** and enter the **Amount**.
5. In **Why do you want a refund?**, tell staff what happened, in at least 10 characters. They decide from what you write.
6. Select **Send request**.

A message confirms it, such as `Refund request for INV-20260925-48213 sent.` While the request is open, the invoice shows a **Refund** line with its status and amount, and **Ask for a refund…** does not appear.

## Follow a request

1. In the sidebar, select **Billing**, then the **Refunds** tab.
2. Find the invoice in **Refund requests**. The newest request is first.

Each request has one of these statuses:

| Status | Meaning |
| --- | --- |
| `Waiting for review` | Staff have not decided yet. You can withdraw it. |
| `Being refunded` | Staff are sending the refund now. |
| `Refunded` | The money went back. **Decided** says where: to the original payment method or to account credit. |
| `Declined` | Staff declined it. |
| `Withdrawn` | You withdrew it. |

When staff leave a note, it appears under the request after `Our answer:`. We also email you when staff decide.

## Withdraw a request

1. On the **Refunds** tab, select **Withdraw…** beside a request that is `Waiting for review`.
2. Select **Withdraw request**.

A message confirms it, such as `Refund request for INV-20260925-48213 withdrawn.` Staff stop reviewing it, and you can send a new request for the invoice.

## Result

When staff approve a request:

- A refund to the original payment method goes back to the card or account you paid with. Your bank can take up to ten working days to show it.
- A refund to account credit goes on your credit balance at once, and pays your next invoices ([How Coritan spends credit](/docs/billing/add-credit/#how-coritan-spends-credit)).
- The refund appears on the **Transactions** tab ([Transactions and payment attempts](/docs/billing/transactions/)).
- The invoice's paid amount goes down by the refund. An invoice refunded in full shows `refunded`.

## Troubleshooting

**Ask for a refund…** does not appear
: The invoice is not paid, nothing paid on it is left to refund, or a request for it is open already. The **Refund** line on the invoice links to the open request.

`Enter an amount up to $12.99, what was paid.`
: You asked for more than was paid on the invoice. Enter a smaller amount, or choose everything paid.

`Say why you want a refund, in at least 10 characters.`
: Tell staff what happened, in a sentence or two.

`A refund request for this invoice is already open. Withdraw it to send a new one.`
: Each invoice takes one open request. Withdraw the open one first, or wait for staff to decide.

`Too many requests for this action. Please wait and try again.`
: You can send 10 requests an hour. Wait an hour, then try again.

`We are already refunding this request, so it cannot be withdrawn.`
: Staff approved the request while you were withdrawing it. The refund goes ahead.

`This request was already decided, so it cannot be withdrawn.`
: Staff decided the request, or you withdrew it already. The tab reloads to show its status.

## Related

- [Pay an invoice](/docs/billing/invoices/)
- [Transactions and payment attempts](/docs/billing/transactions/)
- [Cancel a service](/docs/billing/cancel-a-service/)

## With the API

### List your refund requests

[`GET /billing/refund-requests`](/docs/api/reference/client/billing/#op-get-api-v1-billing-refund-requests) lists your requests, newest first and at most 200:

```bash
curl https://api.coritan.com/api/v1/billing/refund-requests \
  -H "Authorization: Bearer $CORITAN_TOKEN"
```

```json
{
  "items": [
    {
      "id": 142,
      "invoice_id": 5011,
      "invoice_number": "INV-20260925-48213",
      "amount": "12.99",
      "currency": "USD",
      "reason": "The server never started after I ordered it.",
      "status": "approved",
      "status_label": "Refunded",
      "admin_notes": "Sorry about that. We refunded the whole invoice.",
      "method": "credit",
      "method_label": "Account credit",
      "created_at": "2026-09-25T10:14:03",
      "decided_at": "2026-09-25T15:02:47",
      "can_withdraw": false
    }
  ]
}
```

`status`
: `pending` (waiting for review), `processing` (being refunded), `approved` (refunded), `rejected` (declined) or `withdrawn`. `status_label` is the name the dashboard shows.

`amount` and `currency`
: What you asked for, as a decimal string, in the invoice's currency.

`method` and `method_label`
: Where an approved refund went: `gateway` (the original payment method) or `credit` (account credit). `null` until staff approve it.

`admin_notes`
: The note staff left, or `null`.

`can_withdraw`
: `true` while you can still withdraw the request.

### Create a refund request

[`POST /billing/refund-requests`](/docs/api/reference/client/billing/#op-post-api-v1-billing-refund-requests) takes the invoice's `id`, a `reason` of 10 to 2,000 characters, and an optional `amount`. Leave `amount` out to ask for everything paid.

```bash
curl -X POST https://api.coritan.com/api/v1/billing/refund-requests \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"invoice_id": 5011, "amount": "5.00", "reason": "I cancelled the add-on the day after I paid."}'
```

It answers `201` with the request, in the shape above.

| Status | Answer |
| --- | --- |
| `404` | `Invoice not found` |
| `409` | `You can ask for a refund only on a paid invoice.` |
| `409` | `Nothing paid on this invoice is left to refund.` |
| `409` | `A refund request for this invoice is already open. Withdraw it to send a new one.` |
| `422` | `The most you can ask for on this invoice is 12.99 USD.` |
| `429` | `"error": "rate_limited"`, after 10 requests in an hour |

### Withdraw a refund request

[`POST /billing/refund-requests/{request_id}/withdraw`](/docs/api/reference/client/billing/#op-post-api-v1-billing-refund-requests-request-id-withdraw) withdraws a request that is still `pending`, and answers it with `"status": "withdrawn"`. A request that is not yours answers `404` with `Refund request not found`, and one that is no longer pending answers `409`.

## API

- `GET /api/v1/billing/refund-requests`: The account's refund requests, newest first (https://www.coritan.com/docs/api/reference/client/billing/#op-get-api-v1-billing-refund-requests)
- `POST /api/v1/billing/refund-requests`: Ask for money back on a paid invoice: all of it, or amount (https://www.coritan.com/docs/api/reference/client/billing/#op-post-api-v1-billing-refund-requests)
- `POST /api/v1/billing/refund-requests/{request_id}/withdraw`: Withdraw a request staff have not decided yet (https://www.coritan.com/docs/api/reference/client/billing/#op-post-api-v1-billing-refund-requests-request-id-withdraw)
