# Refunds

Refunds of booking payments

Endpoint: `https://api.bookingmood.com/v1/refunds`, supporting `GET`, `POST`, `DELETE`, `PATCH`. Authenticate with the header `Authorization: Bearer YOUR_API_KEY` (see [authentication](https://www.bookingmood.com/de-DE/api-reference/authentication.md)).

## The refund object

| Attribute | Type | Description |
| --- | --- | --- |
| `id` | `uuid` |  |
| `booking_id` | `uuid` | Identifier of the related booking. References [`bookings.id`](https://www.bookingmood.com/de-DE/api-reference/bookings.md). |
| `invoice_id` | `uuid` | Identifier of the related invoice. References [`invoices.id`](https://www.bookingmood.com/de-DE/api-reference/invoices.md). |
| `created_at` | `timestamp with time zone` | Creation timestamp. Read-only: set by the database. |
| `updated_at` | `timestamp with time zone` | Last modification timestamp. Read-only: set by the database. |
| `amount` | `integer` | Amount of the refund, in cents. |
| `comment` | `text` | Comment about the refund. |
| `currency` | `Currency` | Currency of the refund. |
| `due_at` | `timestamp with time zone` | Timestamp at which the refund is due. |
| `fts` | `tsvector` | Read-only: set by the database. |
| `paid` | `integer` | Amount of the refund that was paid, in cents. |
| `policy` | `MultiLanguageString` | Localized refund policy that applies. |
| `reference` | `text` | Reference of the refund. |
| `status` | `RefundStatus` | Status of the refund, either `pending` or `completed`. |

```json
{
  "id": "00000000-0000-0000-0000-000000000000",
  "booking_id": "00000000-0000-0000-0000-000000000000",
  "invoice_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2026-10-30T23:18:45.588Z",
  "updated_at": "2026-10-30T23:18:45.588Z",
  "amount": 0,
  "comment": "",
  "currency": "ARS",
  "due_at": "2026-10-30T23:18:45.588Z",
  "paid": 0,
  "policy": {},
  "reference": "ABC123",
  "status": "completed"
}
```

### Types

```typescript
type Currency = 
  | "ARS"
  | "AUD"
  | "BRL"
  | "BYN"
  | "CAD"
  | "CHF"
  | "CLP"
  | "CNY"
  | "COP"
  | "CZK"
  | "DKK"
  | "EGP"
  | "EUR"
  | "GBP"
  | "HKD"
  | "HUF"
  | "ILS"
  | "INR"
  | "JPY"
  | "KRW"
  | "KYD"
  | "MAD"
  | "MXN"
  | "MYR"
  | "NGN"
  | "NOK"
  | "NZD"
  | "PEN"
  | "PHP"
  | "PLN"
  | "RON"
  | "RUB"
  | "SEK"
  | "SGD"
  | "THB"
  | "TRY"
  | "TWD"
  | "UAH"
  | "USD"
  | "XOF"
  | "VND"
  | "ZAR";

type Language = 
  | "be-BY"
  | "bg-BG"
  | "cs-CZ"
  | "da-DK"
  | "de-DE"
  | "en-GB"
  | "en-NZ"
  | "en-US"
  | "es-ES"
  | "eu-ES"
  | "fr-FR"
  | "gr-EL"
  | "he-IL"
  | "hr-HR"
  | "hu-HU"
  | "it-IT"
  | "ja-JP"
  | "lt-LT"
  | "lv-LV"
  | "nl-NL"
  | "nn-NO"
  | "pl-PL"
  | "pt-BR"
  | "ro-RO"
  | "ru-RU"
  | "sk-SK"
  | "sl-SI"
  | "sr-Cyrl"
  | "sr-Latn"
  | "sv-SE"
  | "tr-TR"
  | "uk-UA";

type MultiLanguageString = {
  default: string;
} & Partial<Record<Language, string>>;

type RefundStatus = "completed" | "pending";
```

### Related resources

Embed related resources with the [`select` parameter](https://www.bookingmood.com/de-DE/api-reference/selecting.md), e.g. `select=*,bookings(*)`. Resources related through more than one column need the column as a hint, like `table!column(*)`.

| Embed | Type | Description |
| --- | --- | --- |
| `bookings(*)` | `object \| null` | The [booking](https://www.bookingmood.com/de-DE/api-reference/bookings.md) referenced by `booking_id`. |
| `invoices(*)` | `object \| null` | The [invoice](https://www.bookingmood.com/de-DE/api-reference/invoices.md) referenced by `invoice_id`. |

## List refunds

`GET /v1/refunds`

Filter on any attribute with `column=operator.value` (see [filtering](https://www.bookingmood.com/de-DE/api-reference/filtering.md)). Choose columns and embed related resources with `select` (see [selecting](https://www.bookingmood.com/de-DE/api-reference/selecting.md)), and sort and paginate with `order`, `limit` and `offset` (see [sorting and pagination](https://www.bookingmood.com/de-DE/api-reference/sorting-pagination.md)).

```bash
curl -X GET "https://api.bookingmood.com/v1/refunds?select=*&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Responses:

- `200`: A list of refunds with the selected columns. `206` when the list is a partial range.
- `400`: The request is malformed, for example an unknown column or an invalid filter.
- `401`: The API key is missing or invalid.

## Create refunds

`POST /v1/refunds`

Insert one refund or an array of refunds. The body is a `Partial` refund object, so columns with a default can be left out. Read-only attributes can't be written.

```bash
curl -X POST "https://api.bookingmood.com/v1/refunds" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "booking_id": "00000000-0000-0000-0000-000000000000",
    "invoice_id": "00000000-0000-0000-0000-000000000000",
    "amount": 0,
    "comment": "",
    "currency": "ARS",
    "due_at": "2026-10-30T23:18:45.588Z",
    "paid": 0,
    "policy": {},
    "reference": "ABC123",
    "status": "completed"
  }'
```

Responses:

- `201`: The newly created refunds with the selected columns.
- `400`: The request is malformed, for example an unknown column, an invalid filter or an invalid body.
- `401`: The API key is missing or invalid.
- `403`: The API key has no permission for this change, for example when writing rows of another organization.
- `409`: The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.

## Delete refunds

`DELETE /v1/refunds`

Filter on any attribute with `column=operator.value` (see [filtering](https://www.bookingmood.com/de-DE/api-reference/filtering.md)). Without filters, this request deletes all refunds you have access to. Always filter on at least one column, e.g. `id=eq.{id}`.

```bash
curl -X DELETE "https://api.bookingmood.com/v1/refunds?id=eq.00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

Responses:

- `200`: The deleted refunds with the selected columns. `204` without a body when sending the header `Prefer: return=minimal`.
- `400`: The request is malformed, for example an unknown column or an invalid filter.
- `401`: The API key is missing or invalid.
- `403`: The API key has no permission for this change, for example when writing rows of another organization.

## Update refunds

`PATCH /v1/refunds`

Filter on any attribute with `column=operator.value` (see [filtering](https://www.bookingmood.com/de-DE/api-reference/filtering.md)). Without filters, this request updates all refunds you have access to. Always filter on at least one column, e.g. `id=eq.{id}`. The body holds the attributes to change.

```bash
curl -X PATCH "https://api.bookingmood.com/v1/refunds?id=eq.00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 0
  }'
```

Responses:

- `200`: The updated refunds with the selected columns. `204` without a body when sending the header `Prefer: return=minimal`.
- `400`: The request is malformed, for example an unknown column, an invalid filter or an invalid body.
- `401`: The API key is missing or invalid.
- `403`: The API key has no permission for this change, for example when writing rows of another organization.
- `409`: The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.

Errors have a JSON body with a `code`, `message`, `details` and `hint`. See the [introduction](https://www.bookingmood.com/de-DE/api-reference.md) for more on errors. The full API is described by the OpenAPI spec at https://api.bookingmood.com/v1/openapi.json.
