For the complete documentation index, see llms.txt. This page is also available as Markdown.

πŸ“ Quotes

Sales quotes and estimates

List quotes

get
/api/v1.0/organisation/{org_id}/quotes/

List all quotes for an organization

Authorizations
AuthorizationstringRequired
Path parameters
org_idstringRequired
Query parameters
client_idstringOptional

Filter by client unique_id

expiredstringOptional

Filter expired quotes (true/false)

from_datestringOptional

Filter quotes from this quote_date (YYYY-MM-DD)

searchstringOptional

Search quote_number or title

statusstring Β· enumOptional

Filter by quote status

Possible values:
to_datestringOptional

Filter quotes up to this quote_date (YYYY-MM-DD)

Responses
200Success
application/json

Lightweight version for list views.

unique_idstring Β· max: 100 Β· nullableOptional
titlestringRequired
quote_numberstring Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
status_displaystringRead-onlyRequired
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
total_amountstring Β· decimalRead-onlyRequired

Subtotal + Total Tax Amount

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
is_expiredbooleanRead-onlyRequired
currencystringRead-onlyRequired
date_createdstring Β· date-time Β· nullableRead-onlyRequired
get/api/v1.0/organisation/{org_id}/quotes/
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 quote

post
/api/v1.0/organisation/{org_id}/quotes/create/

Create a new quote

Authorizations
AuthorizationstringRequired
Path parameters
org_idstringRequired
Body

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestring Β· min: 1Required
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· min: 1 Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
client_idstring Β· min: 1 Β· nullableWrite-onlyOptional
Responses
201Success
application/json

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestringRequired
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
status_displaystringRead-onlyRequired
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
sent_datestring Β· date-time Β· nullableRead-onlyRequired
subtotalstring Β· decimalRead-onlyRequired

Calculated from line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_tax_amountstring Β· decimalRead-onlyRequired

Total VAT/tax from all line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_amountstring Β· decimalRead-onlyRequired

Subtotal + Total Tax Amount

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
is_expiredbooleanRead-onlyRequired
currencystringRead-onlyRequired
date_createdstring Β· date-time Β· nullableRead-onlyRequired
last_updatedstring Β· date-time Β· nullableRead-onlyRequired
post/api/v1.0/organisation/{org_id}/quotes/create/
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 quote

get
/api/v1.0/organisation/{org_id}/quotes/{quote_id}/

Retrieve a specific quote with full details

Authorizations
AuthorizationstringRequired
Path parameters
org_idstringRequired
quote_idstringRequired
Responses
200Success
application/json

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestringRequired
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
status_displaystringRead-onlyRequired
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
sent_datestring Β· date-time Β· nullableRead-onlyRequired
subtotalstring Β· decimalRead-onlyRequired

Calculated from line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_tax_amountstring Β· decimalRead-onlyRequired

Total VAT/tax from all line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_amountstring Β· decimalRead-onlyRequired

Subtotal + Total Tax Amount

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
is_expiredbooleanRead-onlyRequired
currencystringRead-onlyRequired
date_createdstring Β· date-time Β· nullableRead-onlyRequired
last_updatedstring Β· date-time Β· nullableRead-onlyRequired
get/api/v1.0/organisation/{org_id}/quotes/{quote_id}/
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 quote

put
/api/v1.0/organisation/{org_id}/quotes/{quote_id}/update/

Update an existing quote

Authorizations
AuthorizationstringRequired
Path parameters
org_idstringRequired
quote_idstringRequired
Body

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestring Β· min: 1Required
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· min: 1 Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
client_idstring Β· min: 1 Β· nullableWrite-onlyOptional
Responses
200Success
application/json

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestringRequired
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
status_displaystringRead-onlyRequired
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
sent_datestring Β· date-time Β· nullableRead-onlyRequired
subtotalstring Β· decimalRead-onlyRequired

Calculated from line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_tax_amountstring Β· decimalRead-onlyRequired

Total VAT/tax from all line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_amountstring Β· decimalRead-onlyRequired

Subtotal + Total Tax Amount

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
is_expiredbooleanRead-onlyRequired
currencystringRead-onlyRequired
date_createdstring Β· date-time Β· nullableRead-onlyRequired
last_updatedstring Β· date-time Β· nullableRead-onlyRequired
put/api/v1.0/organisation/{org_id}/quotes/{quote_id}/update/
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 quote

patch
/api/v1.0/organisation/{org_id}/quotes/{quote_id}/update/

Update an existing quote

Authorizations
AuthorizationstringRequired
Path parameters
org_idstringRequired
quote_idstringRequired
Body

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestring Β· min: 1Optional
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· min: 1 Β· max: 100Optional
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
client_idstring Β· min: 1 Β· nullableWrite-onlyOptional
Responses
200Success
application/json

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestringRequired
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
status_displaystringRead-onlyRequired
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
sent_datestring Β· date-time Β· nullableRead-onlyRequired
subtotalstring Β· decimalRead-onlyRequired

Calculated from line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_tax_amountstring Β· decimalRead-onlyRequired

Total VAT/tax from all line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_amountstring Β· decimalRead-onlyRequired

Subtotal + Total Tax Amount

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
is_expiredbooleanRead-onlyRequired
currencystringRead-onlyRequired
date_createdstring Β· date-time Β· nullableRead-onlyRequired
last_updatedstring Β· date-time Β· nullableRead-onlyRequired
patch/api/v1.0/organisation/{org_id}/quotes/{quote_id}/update/
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 quote action

get
/api/v1.0/organisation/{org_id}/quotes/{quote_id}/action/

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`
Authorizations
AuthorizationstringRequired
Path parameters
org_idstringRequired
quote_idstringRequired
Query parameters
actionstring Β· enumRequired

The action to perform on the quote

Possible values:
due_datestringOptional

Payment due date in YYYY-MM-DD format (required when action=convert_to_invoice)

invoice_datestringOptional

Invoice date in YYYY-MM-DD format (optional, defaults to today)

invoice_numberstringOptional

Invoice number (required when action=convert_to_invoice)

Responses
200Success
application/json

Comprehensive serializer for Quote model.

unique_idstring Β· max: 100 Β· nullableOptional
titlestringRequired
descriptionstring Β· nullableOptional
terms_and_conditionsstring Β· nullableOptional
notesstring Β· nullableOptional
quote_numberstring Β· max: 100Required
statusstring Β· enumOptional
  • draft - Draft
  • sent - Sent
  • viewed - Viewed by Client
  • accepted - Accepted
  • rejected - Rejected
  • expired - Expired
  • converted - Converted to Invoice
Possible values:
status_displaystringRead-onlyRequired
quote_datestring Β· dateOptional
valid_untilstring Β· date Β· nullableOptional
sent_datestring Β· date-time Β· nullableRead-onlyRequired
subtotalstring Β· decimalRead-onlyRequired

Calculated from line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_tax_amountstring Β· decimalRead-onlyRequired

Total VAT/tax from all line items

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
total_amountstring Β· decimalRead-onlyRequired

Subtotal + Total Tax Amount

Pattern: ^-?\d{0,13}(?:\.\d{0,2})?$
is_expiredbooleanRead-onlyRequired
currencystringRead-onlyRequired
date_createdstring Β· date-time Β· nullableRead-onlyRequired
last_updatedstring Β· date-time Β· nullableRead-onlyRequired
get/api/v1.0/organisation/{org_id}/quotes/{quote_id}/action/
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