---
title: "Create a quote"
method: POST
path: "/v1/quotes"
tags: ["Quotes"]
---

# Create a quote

`POST /v1/quotes`

## Request

- Base URL: `https://api.frihet.io`
- URL: `https://api.frihet.io/v1/quotes`
- Auth: API key in header `X-API-Key`

Create a new quote. The quote is created in `draft` status by default.

## Request body

- QuoteCreate
  - `clientName` string, required: Client name
  - `items` LineItem[], required
    - `description` string, required: Item description
    - `quantity` number, required: Quantity
    - `unitPrice` number, required: Price per unit
  - `validUntil` string, date: Quote expiration date
  - `status` 'draft' | 'sent' | 'accepted' | 'rejected' | 'expired'
  - `notes` string: Additional notes

## Response `201`

Quote created

- Quote
  - `id` string: Unique identifier
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `clientName` string, required: Client name
  - `items` LineItem[], required
    - `description` string, required: Item description
    - `quantity` number, required: Quantity
    - `unitPrice` number, required: Price per unit
  - `validUntil` string, date: Quote expiration date
  - `status` 'draft' | 'sent' | 'accepted' | 'rejected' | 'expired'
  - `notes` string: Additional notes
  - `documentNumber` string: Auto-generated quote number
  - `subtotal` number: Subtotal before tax
  - `tax` number: Tax amount
  - `total` number: Total amount including tax

## Other responses

- `400`: Bad request - invalid parameters or request body
- `401`: Authentication required or invalid API key
- `429`: Rate limit exceeded (100 requests per minute)
- `500`: Internal server error

---

[API](https://skmtc.dev/frihet/apis/frihet-api.md) · [All operations](https://skmtc.dev/frihet/apis/frihet-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frihet/apis/frihet-api/revisions/3dd37f6a72d1?raw)
