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

Book an accepted quote as an appointment

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

Requires the documents scope.

Only an accepted quote. Its customer, title and (for a shekel quote) total fill the appointment; send date and start, and anything else to override. The appointment reads billed once the quote becomes an issued document. Needs the calendar on.

Path parameters

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

Headers

NameTypeDescription
Idempotency-KeystringYour own stable id for this call. A retry returns the same row with deduped: true instead of creating a duplicate. Interchangeable with externalRef in the body.

Body

FieldTypeDescription
partyIdstringA saved party (find or create it first). Optional: a block of time needs no customer.
serviceIdstring
titlestring≤120 chars. Default: the service, else the customer, else "פגישה".
datestringYYYY-MM-DD, the Israel calendar day.
startstringHH:MM, local Israel time.
minutesinteger5..1440. Default: the service, else the calendar's defaultMinutes.
priceAgorotintegerInteger agorot (₪1 = 100).
priceModestringOne of: gross, net. Default gross.
locationstringDefault: the calendar's first location. One of: business, customer, remote.
addressstring≤300 chars.
meetingUrlstringAn http(s) address.
notesstring≤2000 chars.

Response

201: { "ok": true, … }

FieldTypeDescription
okbooleanrequired
appointmentAppointmentrequiredAn appointment on the business's calendar. Not a document: freely edited and deleted, in no export.

Errors: 400, 401, 403, 404, 409, 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}/appointment
curl -X POST "$BASE/businesses/$BID/quotes/$DOC_ID/appointment" \
  -H "X-Api-Key: $KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "priceMode": "gross"
  }'
const res = await fetch(`${BASE}/businesses/${BID}/quotes/${DOC_ID}/appointment`, {
  method: 'POST',
  headers: {
    'X-Api-Key': KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "priceMode": "gross"
  }),
})
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}/appointment",
    headers={"X-Api-Key": KEY},
    json={
      "priceMode": "gross"
    },
)
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.