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

# Quotes

> GET /quotes/{id} - retrieve an issued quote

<Warning>
  **Beta** - Quote data is currently in beta. The payload structure may still evolve before general availability. Share your feedback at [support@bookingshake.com](mailto:support@bookingshake.com).
</Warning>

## Overview

`GET /quotes/{id}` returns an **issued quote**: the frozen, numbered document sent to the client. It follows the same conventions as [invoices](/api-reference/invoices) - amounts in cents, business dates in `YYYY-MM-DD`, timestamps in Unix milliseconds, explicit `null` - plus quote-specific fields: lifecycle status, validity date, versioning and electronic signature.

Quote IDs are found in the `quote_ids` array of [booking payloads](/api-reference/bookings), and in the `quote_id` field of payment and invoice webhooks. To be notified of quote lifecycle changes in real time (issued, sent, validated/signed, canceled), subscribe to the [quote webhooks](/api-reference/webhooks/quotes).

<Note>
  **Historical IDs are resolved transparently.** On venues created before the current quote generation flow, the `quote_id` of payment/invoice webhooks references the internal quote draft rather than the issued document. `GET /quotes/{id}` accepts both: given a historical draft ID, it returns the latest issued version of that quote. You never need to know which kind of ID you hold.
</Note>

## List quotes

```bash theme={null}
curl 'https://api.bookingshake.io/api/quotes?status=validated&created_from=1756000000000' \
  -H 'Authorization: Bearer YOUR_API_KEY'
```

Paginated (`limit` 1-100 default 25, opaque `cursor`, response `{ "items": [...], "next_cursor": "..." }`), newest first. Filters: `created_from`/`created_to` (Unix ms, issue date) and `status` (`draft`, `ongoing`, `sent`, `validated`, `canceled` - `canceled` includes expired quotes). Items use the full quote payload below.

<Note>
  Iterate on `next_cursor` until it is `null`: a page may contain fewer than `limit` items even when more data remains. There is no service-date filter: to find quotes by event date, use [`GET /bookings?date_from=...`](/api-reference/bookings) and follow `quote_ids`.
</Note>

## Get a quote

```bash theme={null}
curl 'https://api.bookingshake.io/api/quotes/fil_8Kj2Qp5RtXw' \
  -H 'Authorization: Bearer YOUR_API_KEY'
```

```json theme={null}
{
  "message": "success",
  "data": {
    "id": "fil_8Kj2Qp5RtXw",
    "number": "BS-2026-d42-v2",
    "status": "validated",
    "title": "Séminaire annuel",
    "language": "fr",
    "currency": "EUR",
    "created_at": 1756000000000,
    "sent_at": 1756050000000,
    "validated_at": 1756100000000,
    "canceled_at": null,
    "expired_at": null,
    "valid_until": "2026-09-30",
    "service_start_date": "2026-11-09",
    "service_end_date": "2026-11-11",
    "amount_excl_tax": 250000,
    "amount_incl_tax": 300000,
    "taxable_breakdown": { "20": 250000 },
    "tax_breakdown": { "20": 50000 },
    "global_discount_excl_tax": 0,
    "lines": [
      {
        "description": "Full day conference package",
        "quantity": "1.00",
        "unit": null,
        "unit_price_excl_tax": 250000,
        "discount": 0,
        "tax_rate": "20",
        "total_excl_tax": 250000
      }
    ],
    "booking_id": "3f6c1b2a-9d4e-4f7a-b0c8-2e5a7d9f1c3b",
    "account_id": "acc_5Fg8Nw1Zx6Vb",
    "contact_id": "cli_7hJk2Pq9Rt4M",
    "seller": { "id": "vnu_...", "legal_name": "Grand Pavillon SAS" },
    "account": { "id": "acc_...", "name": "Acme Corp" },
    "contact": { "id": "cli_...", "first_name": "Marie", "last_name": "Dupont" },
    "pdf_url": "https://storage.googleapis.com/...",
    "signature": {
      "signed_at": 1756100000000,
      "signed_pdf_url": "https://storage.googleapis.com/..."
    }
  }
}
```

## Lifecycle

| `status`    | Meaning                                                                                                  |
| ----------- | -------------------------------------------------------------------------------------------------------- |
| `draft`     | Generated but not yet finalized                                                                          |
| `ongoing`   | Issued, not yet sent                                                                                     |
| `sent`      | Sent to the client (`sent_at`)                                                                           |
| `validated` | Accepted - manually or through electronic signature (`validated_at`, and `signature` when e-signed)      |
| `canceled`  | Refused, replaced by another version, or expired (`canceled_at`; expired quotes also carry `expired_at`) |

Several quote versions can coexist on a booking (shared `number` root, `-vN` suffix): the accepted one is the version with `status: "validated"`.

## Errors

A uniform **404** is returned when the quote does not exist, belongs to another venue, is an invoice (use [`GET /invoices/{id}`](/api-reference/invoices)), or was deleted.

## Rate limits

60 requests/minute per API key. See [Rate Limiting](/api-reference/rate-limiting).
