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

# Quotes

> Create, send, and accept customer quotes for a planning event.

Quotes are nested under an event. Creating a quote snapshots pricing for that event (rates, plan, overrides) into a versioned document you can send to the customer.

Base path: `/api/v1/accounts/{account_id}/planning/events/{event_id}/quotes`

## List / show

```bash theme={null}
curl https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

curl https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID \
  -H "api_access_token: YOUR_ACCESS_TOKEN"
```

## Create a quote

Body fields are unwrapped (not nested under `quote`):

```bash theme={null}
curl -X POST https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Proposal v1",
    "contact_id": 42,
    "company_id": 7,
    "valid_until": "2026-11-30",
    "notes": "Includes AV package",
    "discount_code_ids": [1],
    "overrides": {
      "lines": [
        { "key": "room_hire", "included": true, "quantity": 1 }
      ],
      "additional_lines": [
        {
          "name": "Extra staging",
          "unit_price": 250,
          "quantity": 1,
          "tax_rate": 21,
          "unit": "fixed",
          "category": "extras"
        }
      ]
    }
  }'
```

| Field | Notes |
| - | - |
| `contact_id` / `company_id` | Customer on the quote |
| `valid_until` | Expiry date |
| `name`, `po_number`, `notes` | Display fields |
| `discount_code_id` / `discount_code_ids` | Applied discounts |
| `customer_*` / `company_*` | Override snapshot name/email/VAT |
| `overrides.lines` | Adjust generated lines (`included`, `quantity`, `unit_price`, …) |
| `overrides.additional_lines` / `optional_lines` | Extra priced rows |

Response includes `breakdown`, totals (`total_incl_tax`, …), `public_url`, and `status`.

## Update a draft quote

```bash theme={null}
curl -X PATCH https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "valid_until": "2026-12-15", "notes": "Updated terms" }'
```

## Send, withdraw, revise, accept

| Method | Path | Purpose |
| - | - | - |
| `POST` | `…/quotes/{id}/send_quote` | Email / mark sent; exposes `public_url` |
| `GET` | `…/quotes/{id}/preview` | HTML preview |
| `GET` | `…/quotes/{id}/download` | PDF |
| `POST` | `…/quotes/{id}/withdraw` | Withdraw a sent quote |
| `POST` | `…/quotes/{id}/revise` | New version from current |
| `POST` | `…/quotes/{id}/accept` | Manager accept (`acceptance_reason` optional) |
| `POST` | `…/quotes/{id}/reject` | Reject |
| `POST` | `…/quotes/{id}/archive` | Archive |

```bash theme={null}
curl -X POST https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID/send_quote \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "delivery_mode": "email",
    "subject": "Your proposal",
    "body": "Please find your quote attached.",
    "inbox_id": 5
  }'

curl -X POST https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID/withdraw \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

curl -X POST https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID/revise \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

curl -X POST https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID/accept \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "acceptance_reason": "Signed offline" }'

curl -X POST https://app.rookoo.ai/api/v1/accounts/1/planning/events/EVENT_UUID/quotes/QUOTE_ID/reject \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "rejection_reason": "Budget" }'
```

Optional `send_quote` fields: `delivery_mode` (`email` forces email), `subject`, `body`, `html_body`, `inbox_id`.

Customers can also accept through the public quote page using `public_url` / `public_token` (Client/public routes, not this Application API).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.