# daybooked.io > Bookings for classes (sessions with seats), appointments (times on a calendar, or slots from weekly hours) and rentals (inventory over periods); the dashboard calls them Class, Private and Rental. Everything is available over REST and MCP. ## Auth Send `Authorization: Bearer daybooked_live_…` with every request. Create keys in Dashboard → Developers. Errors are JSON: `{ "error": { "code": "sold_out", "message": "…" } }`. ## Endpoints - REST: https://daybooked.io/api/v1 - OpenAPI: https://daybooked.io/api/v1/openapi.json - MCP (streamable HTTP): https://daybooked.io/api/mcp - Docs: https://daybooked.io/docs - Full reference, every field of every operation: https://daybooked.io/llms-full.txt - Each business: https://daybooked.io/book/ to book, https://daybooked.io/book//llms.txt for its offerings in plain text ## Connect an agent - Claude Code: `claude mcp add --transport http daybooked https://daybooked.io/api/mcp --header "Authorization: Bearer daybooked_live_…"` - Cursor and other MCP clients (mcp.json): ```json { "mcpServers": { "daybooked": { "type": "http", "url": "https://daybooked.io/api/mcp", "headers": { "Authorization": "Bearer daybooked_live_…" } } } } ``` - claude.ai and ChatGPT: add https://daybooked.io/api/mcp as a custom connector and sign in with OAuth. ## Docs - [Quickstart](https://daybooked.io/docs/quickstart/llms.txt): Book in three calls - [Connect](https://daybooked.io/docs/connect/llms.txt): Claude, Cursor, ChatGPT - [Widget](https://daybooked.io/docs/widget/llms.txt): One tag on any website - [Calendar feed](https://daybooked.io/docs/calendar/llms.txt): Bookings in your calendar app - [Zapier](https://daybooked.io/docs/zapier/llms.txt): Bookings in your other apps - [Webhooks](https://daybooked.io/docs/webhooks/llms.txt): Events, polling, signatures - [Holds](https://daybooked.io/docs/holds/llms.txt): Hold, confirm, retry safely - [OCTO](https://daybooked.io/docs/octo/llms.txt): Resellers and OTAs - [API reference](https://daybooked.io/docs/api/llms.txt): Every operation and field ## Website guides - [Squarespace](https://daybooked.io/guides/squarespace/llms.txt): Add bookings to Squarespace (Code block) - [Webflow](https://daybooked.io/guides/webflow/llms.txt): Add bookings to Webflow (Code Embed) - [WordPress](https://daybooked.io/guides/wordpress/llms.txt): Add bookings to WordPress (Custom HTML block) - [Wix](https://daybooked.io/guides/wix/llms.txt): Add bookings to Wix (Embed HTML) - [Shopify](https://daybooked.io/guides/shopify/llms.txt): Add bookings to Shopify (Custom Liquid section) - [Framer](https://daybooked.io/guides/framer/llms.txt): Add bookings to Framer (Embed) - [Google Sites](https://daybooked.io/guides/google-sites/llms.txt): Add bookings to Google Sites (Embed code) ## Listing guides - [Google Business Profile](https://daybooked.io/guides/google-business-profile/llms.txt): Add your booking link to Google Business Profile (Booking) - [Google Things to do](https://daybooked.io/guides/google-things-to-do/llms.txt): Add your booking link to Google Things to do (Tickets or Activities) - [Apple Maps](https://daybooked.io/guides/apple-maps/llms.txt): Add your booking link to Apple Maps (Actions) - [Facebook and Instagram](https://daybooked.io/guides/facebook-instagram/llms.txt): Add your booking link to Facebook and Instagram (Links) ## Learn - [What is a booking API? A guide for businesses](https://daybooked.io/learn/what-is-a-booking-api): A booking API lets software check live availability, hold a place and book it. What a booking platform should expose, from webhooks to MCP. - [How to add online bookings to your website](https://daybooked.io/learn/add-bookings-to-your-website): Paste one script tag and guests book on your site. How an embed works, inline versus button, what guests see and how availability stays in sync. - [How AI assistants book, and what MCP is](https://daybooked.io/learn/ai-agents-and-bookings): How AI assistants check availability and book, what MCP is, why holds and idempotency keys matter, and what daybooked exposes. - [Booking fees explained: who pays what](https://daybooked.io/learn/booking-fees-explained): Fees you pay, guest fees and channel fees: who pays each, what to ask before you sign up, and what California's SB 478 means for advertised prices. - [How booking software prevents double bookings](https://daybooked.io/learn/no-double-bookings): Double bookings happen when two requests take the last place at once. How locks, expiring holds and idempotency keys prevent them, and why mobile matters. - [Choosing booking software: a checklist](https://daybooked.io/learn/choosing-booking-software): A checklist: live availability, fast mobile checkout, honest pricing, a human who answers and quick setup, with the questions to ask every vendor. ## Typical flow 1. offerings_list: pick an offering 2. availability_get: slots with remaining capacity (from/to are local dates in the org time zone) 3. bookings_create: session_id for classes, starts_at for appointments and rentals 4. events_list: poll with after= to follow every change ## Events and webhooks Every change writes an event: - booking.held: A place is held while the guest decides or pays, until expires_at; with source assistant, an assistant held it for the guest over the business's own MCP (/api/mcp/book/{slug}), and the guest is emailed to confirm it - booking.nudged: The guest of a hold that lapsed unpaid at Checkout is emailed a link to finish booking (bookings_nudge), once; data.nudged_at says when - booking.confirmed: A booking is confirmed, from any surface and any path; one made with a promo code carries promo_code and discount_cents - booking.moved: A booking moves to another time, in place; data.previous has the times it left - booking.called_off: Its time is called off with sessions_cancel and guests: "choose": the booking stays confirmed while its guest picks another time or takes the refund, until data.choose_by; data.note has your words, and data.room is false when no other time had room for the party. A move ends it, or booking.cancelled once choose_by passes - booking.session_cancelled: One time of a course is called off (sessions_cancel): the course booking stays confirmed on its other times, with no refund for the time lost; data.session has the time called off and data.note your words. One whose first time it was now starts at the next - booking.paid: A booking is marked paid by hand, for money taken outside daybooked; data.paid_at says when - booking.unpaid: A booking marked paid by hand is marked unpaid again - booking.checked_in: A guest is checked in at the door (a rental's guest: picked up), on the roster or with bookings_set_attendance; data.checked_in_at says when - booking.no_show: A confirmed booking is marked a no-show once its time has started; data.no_show_at says when - booking.attendance_cleared: A check-in or a no-show is taken back: checked_in_at and no_show_at are both null again - booking.cancelled: A booking is cancelled - booking.refunded: A payment made online is refunded, in full or the part chosen on cancelling (refund_cents): Stripe confirmed it (refunded_at) - booking.refund_failed: A refund failed for good and nothing will try again (refund_error says why); the owner is emailed to refund it in Stripe - message.sent: The business writes to a guest from the dashboard, the API or MCP, or the org auto-acknowledges a guest (channel system) - message.received: A guest writes: on their booking page, by email or text, or with a question before booking on the hosted booking page - message.drafted: A reply was drafted by AI for a conversation; nothing was sent - session.created: A class session is scheduled on its own (a calendar entry's times come with offering.calendar_updated) - session.cancelled: A time on a calendar is cancelled, with its bookings - offering.created: An offering is added - offering.updated: An offering changes or is paused - offering.deleted: An offering is deleted, after its upcoming bookings are cancelled - offering.hours_updated: Weekly hours are replaced - offering.calendar_updated: A calendar entry is added, changed or removed; data.entries is the offering's calendar after it - waiver.signed: Someone signs the waiver for a booking, the booker as they book (one event for them and one for each child) or anyone from its signing link: data has booking_id, reference, signature_id, and signed and needed counts; who signed is in waiver_signatures.list - waiver.updated: The waiver's text is saved as a new version, or removed (body null) - waitlist.joined: A guest joins a full time's waitlist, or their places change: data has id, session_id, offering_id, customer_id, starts_at and places; who it is is in waitlist_list - waitlist.left: A guest comes off a waitlist: data.reason is left (by their own link), removed, booked (they booked that time), called_off (the time was cancelled) or closed (the waitlist was switched off) - waitlist.opened: A place opened at a time and everyone waiting whose party fits was emailed at once: data has session_id, offering_id, starts_at, remaining, told and entry_ids - customer.updated: A customer is added or edited - customer.deleted: A customer's personal data is erased on request - customers.imported: A spreadsheet of customers is imported on the Customers page, 500 rows at a time, one event each (a big file writes several): data has created, updated (already a customer: each keeps their name and phone and gets only what was missing) and skipped (rows without a valid email), never the rows - gift_card.purchased: A guest bought a gift card on your booking page and Stripe took the payment: data has gift_card_id, amount_cents, currency and for_email, never the code or the message - gift_card.issued: You issued a gift card (gift_cards_issue, or Settings → Gift cards): data has gift_card_id, amount_cents, currency and for_email, never the code or the message - gift_card.adjusted: A gift card's balance was fixed (gift_cards_adjust): data has gift_card_id, cents (signed), balance, note (your reason) and for_email - gift_card.refunded: A booking a gift card paid for was cancelled, and its part went back on the card: data has gift_card_id, booking_id, cents and for_email - promo_code.created: A promo code is added (promo_codes_create, or Settings → Codes): data is the code, with its discount, limit and dates - promo_code.updated: A promo code is switched on or off, or its limit, end or offering changes - promo_code.deleted: A promo code is deleted: data is the code as it was; bookings made with it keep promo_code and discount_cents - org.updated: The org's name, time zone, currency or messaging settings change - member.invited: An owner invites someone to the team by email in Settings → Team: data has id, email, role and invited_by (their user id); the invite waits until that address signs in - member.invite_revoked: An owner revokes an invite still waiting, or the person it's for declines it: data has id, email and role - member.joined: Someone invited joins the team as they sign in with that address, or with Join when they work in another business already: data has user_id, email, role and invite_id - member.updated: An owner makes a staff member an owner: data has user_id, email and role. A member's name changes (Settings → Team): data has user_id, email and name - member.removed: An owner removes someone from the team: data has user_id, email and the role they had A paid booking is held first (booking.held) and confirmed when the payment lands; a free one confirms at once. Each event's data is the resource after the change: the booking, session, offering, customer or org. Guests can answer by email too. Messages to a guest carry a Reply-To of `reply+@daybooked.io`, one address per conversation, so a reply joins the thread without the quoted email below it, as message.received with channel `email`, and the owner is emailed as for any guest message. Mail to that address from anyone but the guest is dropped. Messages to guests get `delivered_at` when their mail server takes the email, or `failed_at` when it bounces or is marked as spam. Poll: GET https://daybooked.io/api/v1/events?after= (events_list) returns { data, next_after }; pass next_after back to keep following. Webhooks: webhooks_create { url, events } POSTs each event as JSON { id, type, created_at, data } to your HTTPS URL, signed with the secret it returns once: Daybooked-Signature: t=,v1=.")> Verify a delivery: 1. Keep the raw request body; verify before you parse it. 2. Split the header at the commas: t is a unix time, v1 the signature. 3. HMAC-SHA256 the string "." with your webhook secret, hex encoded, and compare it to v1 in constant time. 4. Reject a t more than five minutes away, so a captured request can't be replayed. ## Pricing - Free: $0, no card. Hosted booking page, widget, dashboard, API, MCP, webhooks and confirmation emails, for 25 bookings a month. - Pro: $39 a month flat, for 1,000 bookings a month. Payment at booking into the business's own Stripe account, the booking page in the business's own look (ten templates, its colors and logo: look_get, look_update), and no daybooked mark. - Growth: $99 a month for 5,000 bookings, and Scale: $249 a month for 15,000, with all of Pro. More than that: talk to us. - A booking counts once it's confirmed, in the business's own calendar month, cancelled since or not. At the plan's limit new bookings pause: bookings_create answers 402 plan_limit with upgrade_url until the owner changes plan or the month turns. billing_get reads the plan and the month. - No guest fees and no per-booking cut. API and MCP on every plan. ## Operations (tool: METHOD path — summary) ### offerings - offerings_list: GET /offerings — List offerings (classes, appointments and rentals), paused ones included - offerings_create: POST /offerings — Create an offering. Only kind and name are required; everything else has defaults per kind. Appointments and rentals open daily 9:00–17:00 (org time) until you set hours; classes need sessions. - offerings_get: GET /offerings/{id} — Get one offering, with the questions guests answer as they book: bookings.create takes their answers, keyed by question id - offerings_update: PATCH /offerings/{id} — Update an offering. Set active: false to pause booking; it stays in your dashboard. Setting waitlist_enabled false takes everyone waiting for its times off the waitlist and emails each of them that it closed. - offerings_delete: DELETE /offerings/{id} — Delete an offering. With upcoming bookings, pass cancel_bookings: true: they're cancelled (guests emailed, online payments refunded in full) and past bookings stay on record. Returns { cancelled, refunded, refunding, refund_failed }. - offerings_get_hours: GET /offerings/{id}/hours — Weekly opening hours of an appointment or rental, in the org's local time - offerings_set_hours: PUT /offerings/{id}/hours — Replace weekly opening hours of a rental or an appointment on weekly hours, e.g. [{ weekday: 6, start_time: '08:00', end_time: '16:00' }] ### availability - availability_get: GET /offerings/{id}/availability — Bookable slots with remaining capacity between two local dates (default: the next 14 days) ### series - series_list: GET /series — List an offering's calendar entries; each makes the sessions (times) it repeats as, listed by sessions.list - series_create: POST /series — Add times to a class's calendar, or a calendar appointment's: a date, a start and end (or all day, or overnight), how it repeats and who teaches. Its sessions are made about a year ahead. - series_update: PATCH /series/{id} — Change all of an entry's times: future ones nobody booked are remade from it, booked ones keep their time. A new teacher teaches every time to come - series_delete: DELETE /series/{id} — Remove an entry and its future times; past ones stay on record. If any is booked, pass cancel_bookings: true: they're cancelled and their guests emailed. Returns { cancelled }. ### sessions - sessions_list: GET /sessions — List sessions, the times on a class's calendar (or a calendar appointment's), with what's booked in each and who teaches it - sessions_create: POST /sessions — Schedule a class session; repeat_weeks repeats it weekly at the same local time - sessions_update: PATCH /sessions/{id} — Move one time nobody has booked (starts_at and ends_at together), or change who teaches it (teacher); its calendar entry's other times stay. A booked one can't move, only be cancelled, but its teacher can change. - sessions_cancel: POST /sessions/{id}/cancel — Cancel one time and every booking in it; its guests are emailed. With guests: choose, each guest picks another time of the offering (or a refund) on their booking page within 7 days instead. On a time already called off, guests: refund cancels and refunds whoever is still picking; again, it changes nothing ### bookings - bookings_list: GET /bookings — List bookings filtered by time range, status, offering, customer, session or reference, soonest first (order=desc for newest first); q searches a guest's name or email, or a reference. Page with after=. - bookings_get: GET /bookings/{id} — Get one booking with its offering and customer, and how its waiver stands - bookings_create: POST /bookings — Book a slot from availability.get (classes need session_id, a course its series_id; appointments and rentals need starts_at). Pass hold_minutes to hold it instead, and idempotency_key so retries never book twice. - bookings_cancel: POST /bookings/{id}/cancel — Cancel a booking or a hold and free its capacity; the guest is emailed. A payment made online (a deposit, or the whole total: charged_cents) is refunded in full, or as refund says: none, or a part (more than was paid online: 400 refund_too_large). Safe to repeat: a booking already cancelled keeps its first choice - bookings_confirm: POST /bookings/{id}/confirm — Confirm a held booking (safe to repeat). A hold past its expires_at confirms only if its place is still free. - bookings_move: POST /bookings/{id}/move — Move a booking or a hold to another time of the same offering (classes: session_id; appointments and rentals: starts_at from availability.get). It keeps its reference, price and payment, the guest gets one email, and moving it to its current time changes nothing. - bookings_resend: POST /bookings/{id}/resend — Email the guest their booking confirmation again, at most once a day (while its time is called off and its guest is picking another, the email asking them to pick); not for held or cancelled bookings - bookings_set_paid: PUT /bookings/{id}/paid — Mark a confirmed booking paid when the money was taken by hand (cash, a card reader), or pass paid false to take that back. It sets paid_at and paid_cents and logs booking.paid or booking.unpaid. After a deposit paid online, it records the rest paid, and paid false takes back only that rest; a payment made online stays as it is. Safe to repeat. - bookings_nudge: POST /bookings/{id}/nudge — Email the guest of a lapsed, unpaid hold a link to finish booking. Once per booking: for a hold made on the booking page whose Stripe Checkout expired unpaid 10 minutes to a day ago, for a time still free, to a guest who hasn't booked since; anything else is refused with 409 not_nudgeable (already_nudged once sent), and 503 unavailable while Stripe can't be asked. It sets nudged_at and logs booking.nudged. - bookings_set_attendance: POST /bookings/{id}/attendance — Record who showed up: state checked_in when the guest arrives (a rental's guest: picks up), no_show once the booking's time has started and they haven't come, or none to clear either. It sets checked_in_at or no_show_at, never both, and logs booking.checked_in, booking.no_show or booking.attendance_cleared; setting what it already is changes nothing. Only a confirmed booking: a hold or a cancelled booking answers 409 not_confirmed, and a no-show before the start 409 not_started. ### promo_codes - promo_codes_list: GET /promo_codes — List the business's promo codes, newest first, each with how many bookings have used it - promo_codes_create: POST /promo_codes — Add a promo code guests can give as they book (bookings.create's promo_code): percent_off or amount_off a booking's total, for any offering or one, with an optional limit on uses and dates. Up to 100 per org; a code the org has already is refused with 409 code_taken - promo_codes_update: PATCH /promo_codes/{id} — Switch a promo code on or off, or change its limit, end or offering; null opens each again. Bookings made with it keep what it took off - promo_codes_delete: DELETE /promo_codes/{id} — Delete a promo code: it can't be used again, and bookings made with it keep its words (promo_code) and what it took off ### gift_cards - gift_cards_list: GET /gift_cards — List the business's gift cards, newest first, each with its code, who it's for and from, and what's left on it (balance). Page with before=. - gift_cards_get: GET /gift_cards/{id} — Get one gift card by its id or its code (in any case, spaced or not), with every change to what's on it: purchase or issue, redeems, refunds and adjusts - gift_cards_issue: POST /gift_cards — Issue a gift card by hand, for goodwill or a refund as credit, on any plan: it's from your business, and who it's for is emailed the code. Logs gift_card.issued - gift_cards_adjust: POST /gift_cards/{id}/adjust — Fix a gift card's balance by a signed amount, in the currency's minor units (cents; whole yen for zero-decimal currencies), with your reason: an entry of kind adjust, and gift_card.adjusted. It can't go below zero (409 gift_card_short) ### waiver - waiver_get: GET /waiver — Your waiver: the title and text each person on a booking signs before they come (the booker as they book online, the rest from the booking's signing link), and its version. body null: you have none, and nobody is asked to sign - waiver_update: PUT /waiver — Save your waiver's title and text as a new version (each signature keeps the version it signed), or pass body null to remove it, which stops every offering asking for it. Switch it on per offering with offerings.update waiver_required. daybooked stores the text and the signatures; it doesn't write or review your waiver ### waiver_signatures - waiver_signatures_list: GET /waiver_signatures — Who signed your waiver for a booking (booking_id), or for everyone in a class session (session_id), oldest first, each with the version signed. A booking's waiver { needed, signed } counts them ### waitlist - waitlist_list: GET /waitlist — Who is waiting for a full time, soonest time first, then in the order they joined: for one time (session_id), an offering's times to come (offering_id), or every time to come. Each entry has the guest, their places and when they were last told a place opened - waitlist_add: POST /waitlist — Put a guest on a full time's waitlist by hand, such as a caller: by session_id, or offering_id with starts_at. Its offering's waitlist must be on (offerings.update waitlist_enabled; 409 waitlist_off). Nothing is held or charged. The guest is emailed that they're on it, with a link to leave; when a place opens, everyone waiting whose party fits is emailed at once and the first to book gets it. A party that fits now is refused with 409 has_room (book it instead), and one the time could never take with 400 too_many_places. The same guest again changes their places. The answer says what changed and whether they were emailed - waitlist_offer: POST /waitlist/offer — Tell everyone waiting for a full time (session_id) about another time of the same offering (starts_at), as Fill the day does when it opens the next day's: each guest whose party fits it now is emailed once, with a link that books it for their party. They stay on the waitlist they joined. 404 not_found when the offering has no time starting then. Answers how many were emailed; offering the same time again emails nobody new - waitlist_remove: DELETE /waitlist/{id} — Take a guest off a waitlist; they aren't emailed. Logs waitlist.left with reason removed. Removing twice changes nothing ### conversations - conversations_list: GET /conversations — List conversations with guests, the ones waiting on a reply first, each with its guest, last message and booking chip (filter by status, unread, a search q, or customer_id for one guest's) - conversations_get: GET /conversations/{id} — Get a conversation with its thread oldest first: messages, notes, and the guest's booking events as system rows - conversations_update: PATCH /conversations/{id} — Mark a conversation done or open again; read: true once the guest's messages have been seen ### messages - messages_list: GET /messages — List messages with guests, both ways and oldest first: a conversation's, a booking's (booking_id) or a guest's (customer_id) - messages_send: POST /messages — Write to a guest by conversation_id, booking_id or customer_id (not about a held booking); they get it by email and their reply reaches the business. Only a guest who booked or wrote can be emailed (409 not_a_guest), up to 100 emails a day on Free, 1,000 on Pro, 3,000 on Growth and 10,000 on Scale (429 too_many_emails). kind note keeps an internal note instead. Reference: https://daybooked.io/docs/api#messages_send - messages_broadcast: POST /messages/broadcast — Write to many guests, once each: everyone confirmed in a class session (target.session_id), starting on a local date across offerings (target.date), or booked ahead on an offering, or picking another time of it (target.offering_id). Returns how many were sent, skipped (erased guests) and failed; one that would pass the daily email limit is refused whole. Reference: https://daybooked.io/docs/api#messages_broadcast - messages_draft: POST /messages/draft — Draft a reply in a conversation for the owner to edit and send; nothing is sent. Written from the last 10 messages and the guest's latest booking. 409 drafts_unavailable when drafting is off; 60 drafts per org in any 24 hours ### saved_replies - saved_replies_list: GET /saved_replies — List the business's saved replies by title. With booking_id, or conversation_id (its guest and their booking under way or next), each comes with text: its body filled in, ready to send with messages_send - saved_replies_create: POST /saved_replies — Save a reply the business can reuse. Its body can use {first_name}, {start_time}, {offering}, {meeting_point}, {org}, {booking_link}, which saved_replies_list fills in for a guest. Reference: https://daybooked.io/docs/api#saved_replies_create - saved_replies_update: PATCH /saved_replies/{id} — Change a saved reply's title or body. Reference: https://daybooked.io/docs/api#saved_replies_update - saved_replies_delete: DELETE /saved_replies/{id} — Delete a saved reply ### automations - automations_list: GET /automations — The ops agent's automations (fill, brief, reminders; the weather call isn't available yet), each with its dial (off, ask, do_tell, do_quiet) and settings. Its guardrails (quiet hours, daily cap, refund ceiling) are on org_get - automations_update: PATCH /automations/{automation} — Turn an automation's dial, or change its settings: the fields given replace those set ### proposals - proposals_list: GET /proposals — What the ops agent proposed or did, newest first. A pending one waits for proposals_approve (which runs its actions) or proposals_dismiss. Page with before=. - proposals_approve: POST /proposals/{id}/approve — Approve a pending proposal: its actions run now, in order, as the agent, stopping at the first that fails. draft rewords its message first - proposals_dismiss: POST /proposals/{id}/dismiss — Dismiss a pending proposal; nothing runs - proposals_undo: POST /proposals/{id}/undo — Undo a done proposal that opened a session: the session is cancelled, while nobody has booked it ### customers - customers_list: GET /customers — List customers, newest first; q searches name, email and phone. Page with before=. - customers_get: GET /customers/{id} — Get a customer with their bookings - customers_upsert: POST /customers — Create a customer, or update the given fields when the email already exists - customers_update: PATCH /customers/{id} — Update a customer's name, phone, notes or metadata - customers_delete: DELETE /customers/{id} — Erase a customer's personal data (name, email, phone, notes) on request; their bookings stay, anonymized ### org - org_get: GET /org — Your organization: name, slug (booking page /book/{slug}), time zone, currency and how guest messages are answered - org_update: PATCH /org — Rename the organization, change its time zone (IANA, e.g. America/Denver) or currency, or set the reply window, auto-acknowledge and away notice guests see when they write - org_export: GET /org/export — Export all your data as JSON: org, offerings, hours, sessions, customers, bookings, waivers and their signatures, waitlist entries, conversations, messages, saved replies, promo codes, gift cards and their entries, automations, proposals, webhooks and the last 1000 events ### events - events_list: GET /events — Everything that happened, oldest first (order=desc for the newest first). Poll with after= to follow along. ### webhooks - webhooks_list: GET /webhooks — List webhook endpoints and their last delivery status - webhooks_create: POST /webhooks — Send events to an HTTPS URL, signed with HMAC-SHA256; up to 50 per org. Returns the signing secret once. Reference: https://daybooked.io/docs/api#webhooks_create - webhooks_delete: DELETE /webhooks/{id} — Stop sending events to a webhook endpoint ### look - look_get: GET /look — The look of your booking page, widget and guests' booking pages: the template chosen, its colors, corners, type, tagline and logo, and the ten templates to choose from. live says whether guests see it (on any paid plan) - look_update: PATCH /look — Choose a template (ids from look_get) and change its colors, corners, type and tagline; guests see it at once. Pass only what changes; null puts a setting back to the template's own, and a new template resets colors, corners and font unless they're passed too. Text and accent colors are nudged if they wouldn't be readable. Paid plans only: a Free org gets 403 plan_required ### billing - billing_get: GET /billing — Your plan and this month's confirmed bookings against its limit (Free 25, Pro 1,000, Growth 5,000, Scale 15,000 a month). At the limit new bookings answer 402 plan_limit until the owner changes plan in the dashboard or the month turns ### reports - reports_month: GET /reports/{month} — A month's figures for bookings that start in the month on the org's clock: confirmed bookings going ahead, their guests and revenue_cents (what they're booked for; a cancelled booking counts nothing), no-shows and check-ins among them, live holds and cancellations; then by_offering (most revenue first, with a class's seats offered and how full they were) and by_source (where bookings came from). Counted by the database, so they hold at any volume