{"openapi":"3.1.0","info":{"title":"Splendid Booking API","version":"1.1.0","description":"Public REST API for Splendid Booking tenants. Bearer token from Settings > API & AI connectors. Lists accept ?format=csv. Dates are YYYY-MM-DD in the business timezone, inclusive. Money is a decimal string in dollars. Refusals are {error, code}."},"servers":[{"url":"https://api.splendidbooking.com/v1"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"sb_live_... token"}}},"x-scopes":[{"key":"read","label":"Read everything the login can see"},{"key":"bookings:write","label":"Manage bookings (book, move, cancel, restore, check in, complete)"},{"key":"customers:write","label":"Edit customers (notes, do-not-service, marketing opt-in)"},{"key":"invoices:write","label":"Invoices and pay links (send, create, record payments)"},{"key":"catalog:write","label":"Catalog (services, options, add-ons, prices)"},{"key":"schedule:write","label":"Schedule (slots, closures, staff hours)"},{"key":"settings:write","label":"Business settings and wording"},{"key":"money","label":"Money actions (deposits, refunds, void, remove a payment)"}],"paths":{"/v1/me":{"get":{"operationId":"get_me","summary":"Who am I: the token, its scopes and the businesses it can act for","description":"\n\nAny token (read).","tags":["Token"],"parameters":[],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/business":{"get":{"operationId":"get_business","summary":"Business profile: name, contact, timezone, currency, languages, hours, features","description":"With a multi-business token and no business named, returns the list of businesses instead.\n\nAny token (read).","tags":["Business"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses (reads without it fan out)."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_business"}},"/v1/availability":{"get":{"operationId":"get_availability","summary":"Open time slots for one date (optionally for given services / a provider)","description":"\n\nAny token (read).","tags":["Availability"],"parameters":[{"name":"date","in":"query","required":true,"description":"YYYY-MM-DD","schema":{"type":"string"}},{"name":"service_ids","in":"query","required":false,"description":"Comma-separated service ids (affects duration/eligibility)","schema":{"type":"string"}},{"name":"staff_id","in":"query","required":false,"description":"Provider id, or \"any\"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_availability"}},"/v1/availability/range":{"get":{"operationId":"get_availability_range","summary":"Open-slot counts per day over a date range (max 62 days)","description":"\n\nAny token (read).","tags":["Availability"],"parameters":[{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD in the business timezone (inclusive)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD inclusive; defaults to from","schema":{"type":"string"}},{"name":"service_ids","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"staff_id","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_availability_range"}},"/v1/bookings":{"get":{"operationId":"list_bookings","summary":"List bookings (default: active, today onward). Staff tokens see their own jobs only.","description":"\n\nAny token (read).","tags":["Bookings"],"parameters":[{"name":"status","in":"query","required":false,"description":"active (default) | completed | cancelled | all","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD in the business timezone (inclusive)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD inclusive; defaults to from","schema":{"type":"string"}},{"name":"staff_id","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Name, phone, email, confirmation code","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"csv for a spreadsheet","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"list_bookings"},"post":{"operationId":"create_booking","summary":"Create a booking on behalf of a customer (confirmed, no deposit checkout)","description":"Same engine as the booking page and the phone receptionist: capacity, provider eligibility, prices, per-slot surcharge. Past slots are refused. The customer is matched by phone/email or created. address is required when the business travels to the customer (location_mode mobile). notify (default true) sends the confirmation + the owner alert.\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"201":{"description":"The new booking (id, code, times, total)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["first_name","phone","date","slot_id"],"properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"address":{"type":"string"},"zipcode":{"type":"string"},"service_id":{"type":"integer","description":"Single service (or use items[])"},"service_option_id":{"type":"integer"},"items":{"type":"array","items":{"type":"object","properties":{"service_id":{"type":"integer"},"service_option_id":{"type":"integer"},"quantity":{"type":"integer"},"addon_ids":{"type":"array","items":{"type":"integer"}}}}},"addon_ids":{"type":"array","items":{"type":"integer"}},"date":{"type":"string","description":"YYYY-MM-DD"},"slot_id":{"type":"integer"},"staff_id":{"type":"string","description":"Provider id, \"any\", or omitted"},"notes":{"type":"string"},"intake_values":{"type":"object"},"language":{"type":"string","enum":["en","fr","es"]},"accept_minimum":{"type":"boolean"},"notify":{"type":"boolean","description":"Email the customer (default true, same as the portal)"}}}}}},"x-mcp-tool":"create_booking"}},"/v1/bookings/{id}":{"get":{"operationId":"get_booking","summary":"One booking with its lines, add-ons, intake answers and money","description":"\n\nAny token (read).","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_booking"},"patch":{"operationId":"update_booking","summary":"Edit a booking: customer contact, address, vehicle/intake, internal notes, add-ons","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","description":"first_name, last_name, email, phone, address, zipcode, vehicle_make, vehicle_model"},"internal_notes":{"type":"string"},"addon_ids":{"type":"array","items":{"type":"integer"}},"sms_reminder_opt_out":{"type":"boolean"},"tier_id":{"type":"integer"},"vehicle_category_id":{"type":"integer"}}}}}},"x-mcp-tool":"update_booking"}},"/v1/bookings/{id}/pricing":{"patch":{"operationId":"patch_bookings_id_pricing","summary":"Quote, discount or misc line on a booking (partner dial: booking money)","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quoted_amount":{"type":"number"},"discount_type":{"type":"string","enum":["percent","amount",""]},"discount_value":{"type":"number"},"closed_amount":{"type":"number"},"misc_amount":{"type":"number"},"misc_label":{"type":"string"}}}}}}}},"/v1/bookings/{id}/reschedule":{"post":{"operationId":"reschedule_booking","summary":"Move a booking to another date/slot (capacity checked, surcharge recomputed, customer emailed)","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["date","slot_id"],"properties":{"date":{"type":"string"},"slot_id":{"type":"integer"}}}}}},"x-mcp-tool":"reschedule_booking"}},"/v1/bookings/{id}/cancel":{"post":{"operationId":"cancel_booking","summary":"Cancel a booking (customer emailed by default). Idempotent.","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","enum":["customer","no_show","shop","other"]},"notify":{"type":"boolean","description":"Email the customer (default true, same as the portal)"}}}}}},"x-mcp-tool":"cancel_booking"}},"/v1/bookings/{id}/restore":{"post":{"operationId":"restore_booking","summary":"Put a cancelled booking back: same time (no body) or a new date/slot","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"ok, moved, times"},"409":{"description":"NOT_CANCELLED | IN_PAST | SLOT_GONE | NO_ROOM"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string"},"slot_id":{"type":"integer"},"notify":{"type":"boolean","description":"Email the customer (default true, same as the portal)"}}}}}},"x-mcp-tool":"restore_booking"}},"/v1/bookings/{id}/assign":{"post":{"operationId":"assign_staff","summary":"Assign a provider to a booking (null to unassign)","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"staff_id":{"type":["integer","null"]}}}}}},"x-mcp-tool":"assign_staff"}},"/v1/bookings/{id}/checkin":{"post":{"operationId":"check_in","summary":"Mark the customer arrived (undo: true to clear)","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"undo":{"type":"boolean"}}}}}},"x-mcp-tool":"check_in"}},"/v1/bookings/{id}/start":{"post":{"operationId":"start_service","summary":"Mark the service started / now serving (undo: true to clear)","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"undo":{"type":"boolean"}}}}}},"x-mcp-tool":"start_service"}},"/v1/bookings/{id}/complete":{"post":{"operationId":"complete_booking","summary":"Close out a booking: what was collected, how, loyalty, review email","description":"Answers 409 PAY_LINK_OUTSTANDING when a card pay link went out and nothing arrived; pass waiting_card:true to complete with nothing collected.\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"closed_amount":{"type":"number","description":"Amount collected now (defaults to what is owed)"},"payment_method":{"type":"string","enum":["cash","zelle","venmo","cashapp","card","other"]},"redeem_loyalty":{"type":"boolean"},"waiting_card":{"type":"boolean"}}}}}},"x-mcp-tool":"complete_booking"}},"/v1/bookings/{id}/resend":{"post":{"operationId":"resend_confirmation","summary":"Resend the confirmation by email (default) or text","description":"\n\nRequires scope `bookings:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","enum":["email","sms"]}}}}}},"x-mcp-tool":"resend_confirmation"}},"/v1/bookings/{id}/pay-link":{"post":{"operationId":"send_pay_link","summary":"Make a card pay link for the balance (returns the URL; nothing is sent)","description":"\n\nRequires scope `invoices:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"send_pay_link"}},"/v1/bookings/{id}/send-invoice":{"post":{"operationId":"send_booking_invoice","summary":"Email the invoice for a booking, optionally with a card pay link","description":"\n\nRequires scope `invoices:write`.","tags":["Bookings"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"request_payment":{"type":"boolean"}}}}}},"x-mcp-tool":"send_booking_invoice"}},"/v1/customers":{"get":{"operationId":"search_customers","summary":"Search customers by name, phone, email or address (no q = everyone, 500 max)","description":"\n\nAny token (read).","tags":["Customers"],"parameters":[{"name":"q","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"search_customers"}},"/v1/customers/{id}":{"get":{"operationId":"get_customer","summary":"One customer with their booking history","description":"\n\nAny token (read).","tags":["Customers"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_customer"},"patch":{"operationId":"update_customer","summary":"Customer flags: general note, do-not-serve, banned, marketing opt-out","description":"\n\nRequires scope `customers:write`.","tags":["Customers"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"general_note":{"type":"string"},"do_not_serve":{"type":"boolean"},"banned":{"type":"boolean"},"marketing_opt_out":{"type":"boolean"},"note":{"type":"string","description":"Why (stored as the flag note)"}}}}}},"x-mcp-tool":"update_customer"}},"/v1/invoices":{"get":{"operationId":"list_invoices","summary":"Invoices: view=open (default, all invoices), jobs (active invoice jobs), completed (finished jobs in a range)","description":"\n\nAny token (read).","tags":["Invoices"],"parameters":[{"name":"view","in":"query","required":false,"description":"open | jobs | completed","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD in the business timezone (inclusive)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD inclusive; defaults to from","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"list_invoices"},"post":{"operationId":"create_invoice","summary":"Create an ad-hoc invoice (not tied to a booking)","description":"\n\nRequires scope `invoices:write`.","tags":["Invoices"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"201":{"description":"The invoice"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_name","items"],"properties":{"customer_name":{"type":"string"},"company":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"address":{"type":"string"},"service_date":{"type":"string","description":"YYYY-MM-DD; makes it a job on the Active tab"},"memo":{"type":"string"},"items":{"type":"array","items":{"type":"object","properties":{"description":{"type":"string"},"quantity":{"type":"number"},"unit_price":{"type":"number"}}}}}}}}},"x-mcp-tool":"create_invoice"}},"/v1/invoices/{id}":{"get":{"operationId":"get_invoice","summary":"One invoice: lines, payments, amounts, activity","description":"\n\nAny token (read).","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_invoice"}},"/v1/invoices/{id}/send":{"post":{"operationId":"send_invoice","summary":"Email an invoice to its customer (with a card pay link when Stripe is connected)","description":"\n\nRequires scope `invoices:write`.","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"send_invoice"}},"/v1/invoices/{id}/payments":{"post":{"operationId":"record_invoice_payment","summary":"Record a manual payment or deposit on an invoice (optionally emailing a receipt)","description":"\n\nRequires scope `invoices:write`.","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount","method"],"properties":{"amount":{"type":"number"},"method":{"type":"string","enum":["cash","zelle","venmo","cashapp","card","other"]},"kind":{"type":"string","enum":["payment","deposit"]},"received_on":{"type":"string","description":"YYYY-MM-DD, never future"},"note":{"type":"string"},"send_receipt":{"type":"boolean"}}}}}},"x-mcp-tool":"record_invoice_payment"}},"/v1/invoices/{id}/job-done":{"post":{"operationId":"invoice_job_done","summary":"Mark an invoice job done (done:false to put it back)","description":"\n\nRequires scope `bookings:write`.","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"done":{"type":"boolean"}}}}}},"x-mcp-tool":"invoice_job_done"}},"/v1/invoices/{id}/pay-link":{"post":{"operationId":"post_invoices_id_pay_link","summary":"Card pay link for an invoice balance (returns the URL)","description":"\n\nRequires scope `invoices:write`.","tags":["Invoices"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/calls":{"get":{"operationId":"list_calls","summary":"Receptionist calls: filter=needs_action (default: messages nobody called back) | booked | all","description":"\n\nAny token (read).","tags":["Calls"],"parameters":[{"name":"filter","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Phone digits","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"list_calls"}},"/v1/calls/{id}":{"get":{"operationId":"get_call","summary":"One call with its transcript and summary","description":"\n\nAny token (read).","tags":["Calls"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_call"}},"/v1/calls/{id}/handled":{"post":{"operationId":"mark_call_handled","summary":"Tick a call as called back (handled:false to untick)","description":"\n\nRequires scope `bookings:write`.","tags":["Calls"],"parameters":[{"name":"id","in":"path","required":true,"description":"","schema":{"type":"integer"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"handled":{"type":"boolean"}}}}}},"x-mcp-tool":"mark_call_handled"}},"/v1/reports/summary":{"get":{"operationId":"get_report","summary":"Headline numbers for a date range: tickets, revenue, cancelled value, invoices","description":"\n\nAny token (read).","tags":["Reports"],"parameters":[{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD in the business timezone (inclusive)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD inclusive; defaults to from","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_report"}},"/v1/reports/{kind}":{"get":{"operationId":"get_reports_kind","summary":"Detail report: overview | tickets | money | cancellations | outstanding | utilization | services | channel | payouts | invoices (CSV on the list inside)","description":"\n\nAny token (read).","tags":["Reports"],"parameters":[{"name":"kind","in":"path","required":true,"description":"","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD in the business timezone (inclusive)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD inclusive; defaults to from","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/services":{"get":{"operationId":"list_services","summary":"The catalog as the booking page sees it: services with options, add-ons, intake fields, providers","description":"\n\nAny token (read).","tags":["Catalog"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"list_services"}},"/v1/schedule":{"get":{"operationId":"get_schedule","summary":"Time slots, the weekly pattern, and per-day closures/overrides in a range (max 62 days)","description":"\n\nAny token (read).","tags":["Schedule"],"parameters":[{"name":"from","in":"query","required":false,"description":"YYYY-MM-DD in the business timezone (inclusive)","schema":{"type":"string"}},{"name":"to","in":"query","required":false,"description":"YYYY-MM-DD inclusive; defaults to from","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"get_schedule"}},"/v1/schedule/close":{"post":{"operationId":"close_schedule","summary":"Close a whole day, or one slot on a day (existing bookings are untouched)","description":"\n\nRequires scope `schedule:write`.","tags":["Schedule"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["date"],"properties":{"date":{"type":"string"},"slot_id":{"type":"integer","description":"Omit to close the whole day"}}}}}},"x-mcp-tool":"close_schedule"}},"/v1/schedule/reopen":{"post":{"operationId":"reopen_schedule","summary":"Reopen a closed day, or one slot on a day","description":"\n\nRequires scope `schedule:write`.","tags":["Schedule"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["date"],"properties":{"date":{"type":"string"},"slot_id":{"type":"integer"},"capacity":{"type":"integer"}}}}}},"x-mcp-tool":"reopen_schedule"}},"/v1/staff":{"get":{"operationId":"list_staff","summary":"The team: providers with their services and hours","description":"\n\nAny token (read).","tags":["Staff"],"parameters":[{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"list_staff"}},"/v1/reminders":{"get":{"operationId":"list_reminders","summary":"Maintenance reminders due in the next N days (default 30)","description":"\n\nAny token (read).","tags":["Reminders"],"parameters":[{"name":"days","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"format","in":"query","required":false,"description":"","schema":{"type":"string"}},{"name":"X-Business","in":"header","required":false,"schema":{"type":"string"},"description":"Business slug. Required on a token that covers several businesses."}],"security":[{"bearer":[]}],"responses":{"200":{"description":"OK"}},"x-mcp-tool":"list_reminders"}}}}