Quotes API
Access your sales quotes.
Scopes required: quotes:read, quotes:write (create)
List Quotes
GET /quotesReturns all quotes for your business.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: draft, sent, accepted, declined, expired |
client_id | string | Filter by client ID |
from_date | date | Filter quotes from this date (YYYY-MM-DD) |
to_date | date | Filter quotes to this date (YYYY-MM-DD) |
page | integer | Page number (default: 1) |
page_size | integer | Items per page (default: 50, max: 100) |
Example Request
curl -H "Authorization: Bearer rb_live_YOUR_API_KEY" \
"https://api.rebased.app/api/v1/external/quotes?status=sent"Example Response
{
"quotes": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"quote_number": "QTE-0001",
"client_id": "660e8400-e29b-41d4-a716-446655440000",
"client_name": "Acme Corporation",
"status": "sent",
"issue_date": "2026-02-01",
"valid_until": "2026-03-01",
"subtotal": 5000.00,
"tax_total": 500.00,
"total": 5500.00,
"currency": "AUD",
"notes": "Valid for 30 days",
"line_items": [
{
"id": "770e8400-e29b-41d4-a716-446655440000",
"description": "Project Implementation",
"quantity": 1,
"unit_price": 5000.00,
"amount": 5000.00,
"tax_amount": 500.00
}
],
"created_at": "2026-02-01T10:00:00Z",
"updated_at": "2026-02-01T10:00:00Z"
}
],
"total": 1,
"page": 1,
"page_size": 50,
"has_more": false
}Get Quote
GET /quotes/{id}Returns a single quote by ID, including line items.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id | string (UUID) | The quote ID |
Download Quote PDF
GET /quotes/{id}/pdfReturns the quote as a PDF file (application/pdf). Use this after POST /quotes or from GET /quotes/{id}. If the quote already has an active customer share link, it may appear in the PDF; this endpoint does not create share links.
Scope required: quotes:read
Example Request
curl -H "Authorization: Bearer rb_live_YOUR_API_KEY" \
-o "Quote-1001.pdf" \
"https://api.rebased.app/api/v1/external/quotes/550e8400-e29b-41d4-a716-446655440000/pdf"The response body is raw PDF bytes. The Content-Disposition header includes a filename such as Quote-1001.pdf.
Create Quote
POST /quotesCreates a new quote with line items. A quote number is automatically generated. Quotes are always created in draft status — sending and acceptance remain in the Rebased UI or via your webhook integrations.
Use default_account_id and default_tax_code_id so line items can omit account and tax fields. Discover IDs via GET /accounts?type=revenue and GET /tax-codes.
Scope required: quotes:write
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
client_id | string | Yes | Client ID (must belong to your business) |
title | string | No | Quote title (default: first line item description, or "Quote") |
issue_date | date | No | Issue date in YYYY-MM-DD format (default: today) |
valid_until | date | No | Expiry date in YYYY-MM-DD format |
valid_days | integer | No | Days until expiry from issue_date (ignored if valid_until is set) |
currency | string | No | Currency code (default: AUD) |
notes | string | No | Private notes on the quote |
default_account_id | string | No* | Revenue account ID applied to line items missing account_id |
default_tax_code_id | string | No* | Tax code ID applied to line items missing tax_code_id |
line_items | array | Yes | At least one line item (see below) |
*Required on each line item unless set here as a default.
Line Item Fields
| Field | Type | Required | Description |
|---|---|---|---|
description | string | No | Line item description |
quantity | decimal | No | Quantity (default: 1) |
unit_price | decimal | Yes | Price per unit |
account_id | string | No* | Revenue account ID (overrides default_account_id for this line) |
tax_code_id | string | No* | Tax code ID (overrides default_tax_code_id for this line) |
item_id | string | No | Catalog item ID (validated if provided) |
Example Request
curl -X POST \
-H "Authorization: Bearer rb_live_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"client_id": "660e8400-e29b-41d4-a716-446655440000",
"title": "Kitchen renovation quote",
"valid_days": 30,
"default_account_id": "880e8400-e29b-41d4-a716-446655440000",
"default_tax_code_id": "990e8400-e29b-41d4-a716-446655440000",
"line_items": [
{
"description": "Cabinet supply and install",
"quantity": 1,
"unit_price": 8500.00
},
{
"description": "Labour",
"quantity": 40,
"unit_price": 95.00
}
]
}' \
"https://api.rebased.app/api/v1/external/quotes"Returns HTTP 201 with the created quote (same shape as Get Quote). A quote.created webhook fires if you have subscribed to that event.
Quote Object
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier (UUID) |
quote_number | string | Quote number |
title | string | Quote title |
client_id | string | Client ID |
client_name | string | Client name |
status | string | Quote status |
issue_date | date | Issue date |
valid_until | date | Expiry date |
subtotal | decimal | Subtotal before tax |
tax_total | decimal | Total tax amount |
total | decimal | Total including tax |
currency | string | Currency code |
notes | string | Quote notes |
line_items | array | Line items |
created_at | datetime | When created |
updated_at | datetime | When last updated |