π Quotes
Sales quotes and estimates
List all quotes for an organization
Filter by client unique_id
Filter expired quotes (true/false)
Filter quotes from this quote_date (YYYY-MM-DD)
Search quote_number or title
Filter by quote status
Filter quotes up to this quote_date (YYYY-MM-DD)
Lightweight version for list views.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Subtotal + Total Tax Amount
^-?\d{0,13}(?:\.\d{0,2})?$Unauthorized
Forbidden
GET /api/v1.0/organisation/{org_id}/quotes/ HTTP/1.1
Host: skhokho.ai
Authorization: Basic username:password
Accept: */*
[
{
"unique_id": "text",
"title": "text",
"quote_number": "text",
"status": "draft",
"status_display": "text",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"total_amount": "text",
"is_expired": true,
"currency": "text",
"client": {
"unique_id": "text",
"name": "text",
"entity_type": "individual"
},
"date_created": "2026-01-01T00:00:00.000Z"
}
]Create a new quote
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Calculated from line items
^-?\d{0,13}(?:\.\d{0,2})?$Total VAT/tax from all line items
^-?\d{0,13}(?:\.\d{0,2})?$Subtotal + Total Tax Amount
^-?\d{0,13}(?:\.\d{0,2})?$Bad Request
Unauthorized
Forbidden
POST /api/v1.0/organisation/{org_id}/quotes/create/ HTTP/1.1
Host: skhokho.ai
Authorization: Basic username:password
Content-Type: application/json
Accept: */*
Content-Length: 367
{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"client_id": "text",
"items": [
{
"product_id": "text",
"service_id": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text"
}
]
}{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"status_display": "text",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"sent_date": "2026-01-01T00:00:00.000Z",
"subtotal": "text",
"total_tax_amount": "text",
"total_amount": "text",
"is_expired": true,
"currency": "text",
"client": {
"unique_id": "text",
"name": "text",
"entity_type": "individual"
},
"items": [
{
"item_name": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text",
"line_subtotal": "text",
"line_vat_amount": "text",
"line_total": "text"
}
],
"created_by": {
"unique_id": "text",
"full_name": "text"
},
"date_created": "2026-01-01T00:00:00.000Z",
"last_updated": "2026-01-01T00:00:00.000Z"
}Retrieve a specific quote with full details
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Calculated from line items
^-?\d{0,13}(?:\.\d{0,2})?$Total VAT/tax from all line items
^-?\d{0,13}(?:\.\d{0,2})?$Subtotal + Total Tax Amount
^-?\d{0,13}(?:\.\d{0,2})?$Unauthorized
Forbidden
Not Found
GET /api/v1.0/organisation/{org_id}/quotes/{quote_id}/ HTTP/1.1
Host: skhokho.ai
Authorization: Basic username:password
Accept: */*
{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"status_display": "text",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"sent_date": "2026-01-01T00:00:00.000Z",
"subtotal": "text",
"total_tax_amount": "text",
"total_amount": "text",
"is_expired": true,
"currency": "text",
"client": {
"unique_id": "text",
"name": "text",
"entity_type": "individual"
},
"items": [
{
"item_name": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text",
"line_subtotal": "text",
"line_vat_amount": "text",
"line_total": "text"
}
],
"created_by": {
"unique_id": "text",
"full_name": "text"
},
"date_created": "2026-01-01T00:00:00.000Z",
"last_updated": "2026-01-01T00:00:00.000Z"
}Update an existing quote
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Calculated from line items
^-?\d{0,13}(?:\.\d{0,2})?$Total VAT/tax from all line items
^-?\d{0,13}(?:\.\d{0,2})?$Subtotal + Total Tax Amount
^-?\d{0,13}(?:\.\d{0,2})?$Bad Request
Unauthorized
Forbidden
Not Found
PUT /api/v1.0/organisation/{org_id}/quotes/{quote_id}/update/ HTTP/1.1
Host: skhokho.ai
Authorization: Basic username:password
Content-Type: application/json
Accept: */*
Content-Length: 367
{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"client_id": "text",
"items": [
{
"product_id": "text",
"service_id": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text"
}
]
}{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"status_display": "text",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"sent_date": "2026-01-01T00:00:00.000Z",
"subtotal": "text",
"total_tax_amount": "text",
"total_amount": "text",
"is_expired": true,
"currency": "text",
"client": {
"unique_id": "text",
"name": "text",
"entity_type": "individual"
},
"items": [
{
"item_name": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text",
"line_subtotal": "text",
"line_vat_amount": "text",
"line_total": "text"
}
],
"created_by": {
"unique_id": "text",
"full_name": "text"
},
"date_created": "2026-01-01T00:00:00.000Z",
"last_updated": "2026-01-01T00:00:00.000Z"
}Update an existing quote
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Calculated from line items
^-?\d{0,13}(?:\.\d{0,2})?$Total VAT/tax from all line items
^-?\d{0,13}(?:\.\d{0,2})?$Subtotal + Total Tax Amount
^-?\d{0,13}(?:\.\d{0,2})?$Bad Request
Unauthorized
Forbidden
Not Found
PATCH /api/v1.0/organisation/{org_id}/quotes/{quote_id}/update/ HTTP/1.1
Host: skhokho.ai
Authorization: Basic username:password
Content-Type: application/json
Accept: */*
Content-Length: 367
{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"client_id": "text",
"items": [
{
"product_id": "text",
"service_id": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text"
}
]
}{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"status_display": "text",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"sent_date": "2026-01-01T00:00:00.000Z",
"subtotal": "text",
"total_tax_amount": "text",
"total_amount": "text",
"is_expired": true,
"currency": "text",
"client": {
"unique_id": "text",
"name": "text",
"entity_type": "individual"
},
"items": [
{
"item_name": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text",
"line_subtotal": "text",
"line_vat_amount": "text",
"line_total": "text"
}
],
"created_by": {
"unique_id": "text",
"full_name": "text"
},
"date_created": "2026-01-01T00:00:00.000Z",
"last_updated": "2026-01-01T00:00:00.000Z"
}Perform an action on a quote using query parameter.
**Available Actions:**
- `mark_as_draft` - Mark a quote as draft
- `mark_as_sent` - Mark a draft quote as sent to the client
- `mark_as_viewed` - Mark a quote as viewed by the client
- `mark_as_accepted` - Mark a quote as accepted by the client
- `mark_as_rejected` - Mark a quote as rejected
- `mark_as_expired` - Mark a quote as expired
- `duplicate` - Create a duplicate of the quote
- `convert_to_invoice` - Convert an accepted quote to an invoice (requires `invoice_number` and `due_date` parameters)
**Examples:**
- `/quotes/{id}/action?action=mark_as_draft`
- `/quotes/{id}/action?action=mark_as_sent`
- `/quotes/{id}/action?action=mark_as_viewed`
- `/quotes/{id}/action?action=mark_as_accepted`
- `/quotes/{id}/action?action=mark_as_rejected`
- `/quotes/{id}/action?action=mark_as_expired`
- `/quotes/{id}/action?action=duplicate`
- `/quotes/{id}/action?action=convert_to_invoice&invoice_number=INV-001&due_date=2025-12-31`The action to perform on the quote
Payment due date in YYYY-MM-DD format (required when action=convert_to_invoice)
Invoice date in YYYY-MM-DD format (optional, defaults to today)
Invoice number (required when action=convert_to_invoice)
Comprehensive serializer for Quote model.
draft- Draftsent- Sentviewed- Viewed by Clientaccepted- Acceptedrejected- Rejectedexpired- Expiredconverted- Converted to Invoice
Calculated from line items
^-?\d{0,13}(?:\.\d{0,2})?$Total VAT/tax from all line items
^-?\d{0,13}(?:\.\d{0,2})?$Subtotal + Total Tax Amount
^-?\d{0,13}(?:\.\d{0,2})?$Bad Request - Invalid action or missing required parameters
Unauthorized
Forbidden
Not Found
GET /api/v1.0/organisation/{org_id}/quotes/{quote_id}/action/?action=convert_to_invoice HTTP/1.1
Host: skhokho.ai
Authorization: Basic username:password
Accept: */*
{
"unique_id": "text",
"title": "text",
"description": "text",
"terms_and_conditions": "text",
"notes": "text",
"quote_number": "text",
"status": "draft",
"status_display": "text",
"quote_date": "2026-01-01",
"valid_until": "2026-01-01",
"sent_date": "2026-01-01T00:00:00.000Z",
"subtotal": "text",
"total_tax_amount": "text",
"total_amount": "text",
"is_expired": true,
"currency": "text",
"client": {
"unique_id": "text",
"name": "text",
"entity_type": "individual"
},
"items": [
{
"item_name": "text",
"quantity": "text",
"unit_price": "text",
"discount_percentage": "text",
"vat_rate": "text",
"currency": "text",
"line_subtotal": "text",
"line_vat_amount": "text",
"line_total": "text"
}
],
"created_by": {
"unique_id": "text",
"full_name": "text"
},
"date_created": "2026-01-01T00:00:00.000Z",
"last_updated": "2026-01-01T00:00:00.000Z"
}Last updated
