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

# Create a refund

> POST /api/refunds — request a full or partial refund for a checkout.

Creates an asynchronous refund request against a successful checkout. See the [refunds guide](/guides/refunds) for the lifecycle and constraints.

<Note>
  Rate limited to **1 request per second**.
</Note>

## Request

Headers: `Authorization: Bearer <client_secret>`, `Content-Type: application/json`, and `X-Signature` ([request signing](/authentication#request-signing)).

<ParamField body="checkout_id" type="string (uuid)" required>
  The ID of the checkout to refund — the `data.id` from [create checkout](/api-reference/create-checkout).
</ParamField>

<ParamField body="amount" type="integer" required>
  Amount to refund, in pence. Up to the checkout amount minus any previously refunded amounts. Partial refunds are supported; issue several if needed.
</ParamField>

### Example

```bash theme={null}
curl -X POST https://uat-secure.choosefloat.com/api/refunds \
  -H "Authorization: Bearer $FLOAT_CLIENT_SECRET" \
  -H "Content-Type: application/json" \
  -H "X-Signature: $SIGNATURE" \
  -d '{
    "checkout_id": "9b2f61c4-6c1e-4b7a-9a1d-3f2a8c0de111",
    "amount": 100000
  }'
```

## Response

```json 200 theme={null}
{
  "data": {
    "id": "5d1a7c9e-2222-4444-8888-aa11bb22cc33",
    "type": "refund_requests",
    "attributes": {
      "amount": 100000,
      "currency": "GBP",
      "status": "requested",
      "created_at": "2026-07-17T11:00:00Z"
    }
  }
}
```

<ResponseField name="data.id" type="string (uuid)">
  The refund request ID — persist it and poll [get refund](/api-reference/get-refund) to track completion.
</ResponseField>

<ResponseField name="data.attributes.status" type="string">
  Starts at `requested`; progresses through `pending` to `complete` (or `failed`). See the [refund lifecycle](/guides/refunds#refund-lifecycle).
</ResponseField>

## Errors

| HTTP  | When                                          | Example `detail`                                                    |
| ----- | --------------------------------------------- | ------------------------------------------------------------------- |
| `400` | Signature mismatch                            | `Request signature does not match...`                               |
| `401` | Bad Bearer token                              |                                                                     |
| `404` | Unknown `checkout_id`                         |                                                                     |
| `422` | Outside the 100-day refund window             | `Orders can only be refunded within 100 days of the purchase date.` |
| `422` | Same-day refund on an auto-refund integration | `Order can't be refunded on the day of purchase.`                   |
| `422` | Amount exceeds the refundable remainder       |                                                                     |
| `429` | More than 1 request per second                |                                                                     |
