BillOS v1
Console llms.txt OpenAPI
POST/businesses/{bid}/quotes/{id}/convert

Open a document from a quote

POST /businesses/{bid}/quotes/{id}/convert

Requires the documents scope.

Creates a DRAFT document with the quote's lines, in the quote's own price mode and currency, filed under externalRef: quote:<id>, so two calls return the one draft rather than a twin. It stops at the draft deliberately: issuing takes a permanent number and may call the tax authority, and an acceptance landing on a public link at 2am must not do that by itself. The quote is untouched: it stays exactly as the customer accepted it, linked by convertedDocumentId.

Path parameters

NameTypeDescription
bidstringrequiredBusiness id, from POST /businesses.
idstringrequiredQuote id.

Body (optional)

FieldTypeDescription
docTypeinteger305 (default) or 300. A receipt-bearing type is refused: an offer states no payment. One of: 300, 305.
documentDatestringDefaults to today.
dueDatestring

Response

201: { "ok": true, … }

FieldTypeDescription
okbooleanrequired
documentDocumentrequiredA draft is freely mutable. An issued document is immutable forever, blocked at the database engine, not merely in application code.
quoteQuoteהצעת מחיר: an OFFER, and deliberately not a document: it carries no statutory number, it is freely editable and deletable, and it appears in no export, no VAT return and no income report. What it becomes when the customer accepts is an ordinary draft document (POST .../convert).

Errors: 400, 401, 403, 404, 429. Every failure answers { "error", "reason", "hint", "param", "doc_url", "retryable", "request_id" }: branch on reason, and read hint for what to change (https://docs.billos.co.il/errors.md).

POST /businesses/{bid}/quotes/{id}/convert
curl -X POST "$BASE/businesses/$BID/quotes/$DOC_ID/convert" \
  -H "X-Api-Key: $KEY"
const res = await fetch(`${BASE}/businesses/${BID}/quotes/${DOC_ID}/convert`, {
  method: 'POST',
  headers: {
    'X-Api-Key': KEY,
  },
})
const data = await res.json()
if (!data.ok) throw new Error(data.reason)
import requests
res = requests.post(
    f"{BASE}/businesses/{BID}/quotes/{DOC_ID}/convert",
    headers={"X-Api-Key": KEY},
)
data = res.json()
Set BASE to https://api.billos.co.il/v1 and KEY to your bk_live_… key, or a bk_test_… key to run it against the sandbox.
Manage your businesses, keys and webhooks in the BillOS Console.