{"openapi":"3.1.0","info":{"title":"daybag.io API","version":"1","description":"daybag books classes, trips and rentals on your website. One API for your dashboard, your developer and your AI agent."},"servers":[{"url":"https://daybag.io/api/v1"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"API key from Dashboard → Developers (daybag_live_…)"}}},"paths":{"/offerings":{"get":{"operationId":"offerings.list","summary":"List offerings (classes, appointments and rentals), including archived ones","tags":["offerings"],"parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"kind":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"},"name":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"duration_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Length of a class session or appointment, or of one rental period (1440 = a day)"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: seats per session · appointment: parallel bookings per slot · rental: items in stock"},"max_per_booking":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Most seats, party size or items in one booking"},"price_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: per seat · appointment: per booking · rental: per item per period"},"slot_interval_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Minutes between start times; null means back to back"},"buffer_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min_notice_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_advance_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_periods":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Rentals: the most periods one booking can span"},"active":{"type":"boolean","description":"false means archived and hidden from booking"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","kind","name","description","location","duration_minutes","capacity","max_per_booking","price_cents","slot_interval_minutes","buffer_minutes","min_notice_minutes","max_advance_days","max_periods","active","metadata","created_at"],"additionalProperties":{}}}},"required":["data"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"post":{"operationId":"offerings.create","summary":"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.","tags":["offerings"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":2000},"location":{"type":"string","maxLength":200},"duration_minutes":{"type":"integer","minimum":5,"maximum":43200,"description":"Length of a class session or appointment, or of one rental period (1440 = a day)"},"capacity":{"type":"integer","minimum":1,"maximum":10000,"description":"class: seats per session · appointment: parallel bookings per slot · rental: items in stock"},"max_per_booking":{"type":"integer","minimum":1,"maximum":10000,"description":"Most seats, party size or items in one booking"},"price_cents":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"class: per seat · appointment: per booking · rental: per item per period"},"slot_interval_minutes":{"anyOf":[{"type":"integer","minimum":5,"maximum":1440},{"type":"null"}],"description":"Minutes between start times; null means back to back"},"buffer_minutes":{"type":"integer","minimum":0,"maximum":1440,"description":"Gap kept free around appointments and rentals"},"min_notice_minutes":{"type":"integer","minimum":0,"maximum":43200},"max_advance_days":{"type":"integer","minimum":1,"maximum":730},"max_periods":{"type":"integer","minimum":1,"maximum":60,"description":"Rentals: the most periods one booking can span"},"active":{"type":"boolean","description":"false archives the offering and hides it from booking"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Free-form JSON for your own integrations"},"kind":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"}},"required":["name","kind"]}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"kind":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"},"name":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"duration_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Length of a class session or appointment, or of one rental period (1440 = a day)"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: seats per session · appointment: parallel bookings per slot · rental: items in stock"},"max_per_booking":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Most seats, party size or items in one booking"},"price_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: per seat · appointment: per booking · rental: per item per period"},"slot_interval_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Minutes between start times; null means back to back"},"buffer_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min_notice_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_advance_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_periods":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Rentals: the most periods one booking can span"},"active":{"type":"boolean","description":"false means archived and hidden from booking"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","kind","name","description","location","duration_minutes","capacity","max_per_booking","price_cents","slot_interval_minutes","buffer_minutes","min_notice_minutes","max_advance_days","max_periods","active","metadata","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/offerings/{id}":{"get":{"operationId":"offerings.get","summary":"Get one offering","tags":["offerings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"kind":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"},"name":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"duration_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Length of a class session or appointment, or of one rental period (1440 = a day)"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: seats per session · appointment: parallel bookings per slot · rental: items in stock"},"max_per_booking":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Most seats, party size or items in one booking"},"price_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: per seat · appointment: per booking · rental: per item per period"},"slot_interval_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Minutes between start times; null means back to back"},"buffer_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min_notice_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_advance_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_periods":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Rentals: the most periods one booking can span"},"active":{"type":"boolean","description":"false means archived and hidden from booking"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","kind","name","description","location","duration_minutes","capacity","max_per_booking","price_cents","slot_interval_minutes","buffer_minutes","min_notice_minutes","max_advance_days","max_periods","active","metadata","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"patch":{"operationId":"offerings.update","summary":"Update an offering. Set active: false to archive it.","tags":["offerings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":2000},"location":{"type":"string","maxLength":200},"duration_minutes":{"type":"integer","minimum":5,"maximum":43200,"description":"Length of a class session or appointment, or of one rental period (1440 = a day)"},"capacity":{"type":"integer","minimum":1,"maximum":10000,"description":"class: seats per session · appointment: parallel bookings per slot · rental: items in stock"},"max_per_booking":{"type":"integer","minimum":1,"maximum":10000,"description":"Most seats, party size or items in one booking"},"price_cents":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"class: per seat · appointment: per booking · rental: per item per period"},"slot_interval_minutes":{"anyOf":[{"type":"integer","minimum":5,"maximum":1440},{"type":"null"}],"description":"Minutes between start times; null means back to back"},"buffer_minutes":{"type":"integer","minimum":0,"maximum":1440,"description":"Gap kept free around appointments and rentals"},"min_notice_minutes":{"type":"integer","minimum":0,"maximum":43200},"max_advance_days":{"type":"integer","minimum":1,"maximum":730},"max_periods":{"type":"integer","minimum":1,"maximum":60,"description":"Rentals: the most periods one booking can span"},"active":{"type":"boolean","description":"false archives the offering and hides it from booking"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Free-form JSON for your own integrations"}},"required":[]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"kind":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"},"name":{"type":"string"},"description":{"type":"string"},"location":{"type":"string"},"duration_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Length of a class session or appointment, or of one rental period (1440 = a day)"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: seats per session · appointment: parallel bookings per slot · rental: items in stock"},"max_per_booking":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Most seats, party size or items in one booking"},"price_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: per seat · appointment: per booking · rental: per item per period"},"slot_interval_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Minutes between start times; null means back to back"},"buffer_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"min_notice_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_advance_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_periods":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Rentals: the most periods one booking can span"},"active":{"type":"boolean","description":"false means archived and hidden from booking"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","kind","name","description","location","duration_minutes","capacity","max_per_booking","price_cents","slot_interval_minutes","buffer_minutes","min_notice_minutes","max_advance_days","max_periods","active","metadata","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"delete":{"operationId":"offerings.delete","summary":"Delete an offering that has never been booked (otherwise archive it)","tags":["offerings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/offerings/{id}/hours":{"get":{"operationId":"offerings.get_hours","summary":"Weekly opening hours of an appointment or rental, in the org's local time","tags":["offerings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"weekday":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"0 = Sunday … 6 = Saturday"},"start_time":{"type":"string","description":"Local wall-clock time, HH:MM:SS"},"end_time":{"type":"string","description":"Local wall-clock time, HH:MM:SS"}},"required":["weekday","start_time","end_time"],"additionalProperties":{}}}},"required":["data"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"put":{"operationId":"offerings.set_hours","summary":"Replace weekly opening hours, e.g. [{ weekday: 6, start_time: '08:00', end_time: '16:00' }]","tags":["offerings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hours":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"weekday":{"type":"integer","minimum":0,"maximum":6,"description":"0 = Sunday … 6 = Saturday"},"start_time":{"type":"string","pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)(:00)?$"},"end_time":{"type":"string","pattern":"^(([01]\\d|2[0-3]):[0-5]\\d|24:00)(:00)?$"}},"required":["weekday","start_time","end_time"]}}},"required":["hours"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"weekday":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"0 = Sunday … 6 = Saturday"},"start_time":{"type":"string","description":"Local wall-clock time, HH:MM:SS"},"end_time":{"type":"string","description":"Local wall-clock time, HH:MM:SS"}},"required":["weekday","start_time","end_time"],"additionalProperties":{}}}},"required":["data"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/offerings/{id}/availability":{"get":{"operationId":"availability.get","summary":"Bookable slots with remaining capacity between two local dates (default: the next 14 days)","tags":["availability"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Local calendar date (YYYY-MM-DD) in the org's time zone"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Local calendar date (YYYY-MM-DD) in the org's time zone"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"The org's time zone; from and to are local dates in it"},"data":{"type":"array","items":{"type":"object","properties":{"starts_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"ends_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"What's left to book: seats, parallel slots or items"},"session_id":{"description":"Classes only: pass it to bookings_create","type":"string"}},"required":["starts_at","ends_at","capacity","remaining"],"additionalProperties":{}}}},"required":["timezone","data"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/sessions":{"get":{"operationId":"sessions.list","summary":"List class sessions with the number of seats booked","tags":["sessions"],"parameters":[{"name":"offering_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","description":"ISO 8601 instant, e.g. 2026-10-03T15:00:00Z"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","description":"ISO 8601 instant, e.g. 2026-10-03T15:00:00Z"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["scheduled","cancelled"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"post":{"operationId":"sessions.create","summary":"Schedule a class session; repeat_weeks repeats it weekly at the same local time","tags":["sessions"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"offering_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","description":"ISO 8601 instant, e.g. 2026-10-03T15:00:00Z"},"repeat_weeks":{"type":"integer","minimum":1,"maximum":52},"capacity":{"description":"Override the class's seats","anyOf":[{"type":"integer","minimum":1,"maximum":10000},{"type":"null"}]}},"required":["offering_id","starts_at"]}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/sessions/{id}/cancel":{"post":{"operationId":"sessions.cancel","summary":"Cancel a class session and every booking in it","tags":["sessions"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/bookings":{"get":{"operationId":"bookings.list","summary":"List bookings filtered by time range, status, offering, customer or session (order=desc for newest first)","tags":["bookings"],"parameters":[{"name":"from","in":"query","required":false,"schema":{"type":"string","description":"ISO 8601 instant, e.g. 2026-10-03T15:00:00Z"}},{"name":"to","in":"query","required":false,"schema":{"type":"string","description":"ISO 8601 instant, e.g. 2026-10-03T15:00:00Z"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["held","confirmed","cancelled"]}},{"name":"offering_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"customer_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"session_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"post":{"operationId":"bookings.create","summary":"Book a slot from availability.get (classes need session_id; appointments and rentals need starts_at). Pass hold_minutes to hold it instead, and idempotency_key so retries never book twice.","tags":["bookings"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"offering_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"session_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","description":"ISO 8601 instant, e.g. 2026-10-03T15:00:00Z"},"quantity":{"description":"class: seats · appointment: party size · rental: items","type":"integer","minimum":1,"maximum":10000},"periods":{"description":"Rentals: how many periods (e.g. days)","type":"integer","minimum":1,"maximum":60},"customer_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customer":{"description":"Matched by email; created if new","type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"name":{"type":"string","maxLength":120},"phone":{"type":"string","maxLength":40}},"required":["email"]},"notes":{"type":"string","maxLength":2000},"hold_minutes":{"description":"Hold the place this many minutes (status held) instead of confirming; then call bookings.confirm","type":"integer","minimum":5,"maximum":1440},"idempotency_key":{"description":"A UUID you generate per booking: retrying with it returns the same booking instead of booking twice","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["offering_id"]}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/bookings/{id}":{"get":{"operationId":"bookings.get","summary":"Get one booking with its offering and customer","tags":["bookings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/bookings/{id}/cancel":{"post":{"operationId":"bookings.cancel","summary":"Cancel a booking or a hold and free its capacity (safe to repeat)","tags":["bookings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/bookings/{id}/confirm":{"post":{"operationId":"bookings.confirm","summary":"Confirm a held booking (safe to repeat). A hold past its expires_at confirms only if its place is still free.","tags":["bookings"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/customers":{"get":{"operationId":"customers.list","summary":"List customers, newest first; q searches name, email and phone","tags":["customers"],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","description":"Lowercase; unique within the org"},"name":{"type":"string"},"phone":{"type":"string"},"notes":{"type":"string"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","email","name","phone","notes","metadata","created_at"],"additionalProperties":{}}}},"required":["data"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"post":{"operationId":"customers.upsert","summary":"Create a customer, or update the given fields when the email already exists","tags":["customers"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"phone":{"type":"string","maxLength":40},"notes":{"type":"string","maxLength":5000},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["email"]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","description":"Lowercase; unique within the org"},"name":{"type":"string"},"phone":{"type":"string"},"notes":{"type":"string"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","email","name","phone","notes","metadata","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/customers/{id}":{"get":{"operationId":"customers.get","summary":"Get a customer with their bookings","tags":["customers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","description":"Lowercase; unique within the org"},"name":{"type":"string"},"phone":{"type":"string"},"notes":{"type":"string"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"bookings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"offering_id":{"type":"string"},"session_id":{"description":"Classes only","type":["string","null"]},"customer_id":{"type":"string"},"starts_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"ends_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"class: seats · appointment: party size · rental: items"},"total_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"In the org's currency"},"reference":{"type":"string","description":"Short code the guest sees, e.g. 0GWYRZ2V"},"status":{"type":"string","description":"confirmed or cancelled"},"source":{"type":"string","description":"Where it was made: dashboard, api, mcp or widget"},"notes":{"type":"string"},"metadata":{"description":"Free-form JSON object for your own integrations"},"cancelled_at":{"anyOf":[{"type":"string","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"offering":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"kind":{"type":"string","enum":["class","appointment","rental"],"description":"class: scheduled sessions with seats · appointment: slots from weekly hours · rental: inventory over periods"}},"required":["id","name","kind"],"additionalProperties":{}},"customer":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"}},"required":["id","name","email","phone"],"additionalProperties":{}}},"required":["id","org_id","offering_id","session_id","customer_id","starts_at","ends_at","quantity","total_cents","reference","status","source","notes","metadata","cancelled_at","created_at","offering","customer"],"additionalProperties":{}}}},"required":["id","org_id","email","name","phone","notes","metadata","created_at","bookings"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"patch":{"operationId":"customers.update","summary":"Update a customer's name, phone, notes or metadata","tags":["customers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":120},"phone":{"type":"string","maxLength":40},"notes":{"type":"string","maxLength":5000},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":[]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"org_id":{"type":"string"},"email":{"type":"string","description":"Lowercase; unique within the org"},"name":{"type":"string"},"phone":{"type":"string"},"notes":{"type":"string"},"metadata":{"description":"Free-form JSON object for your own integrations"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","org_id","email","name","phone","notes","metadata","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"delete":{"operationId":"customers.delete","summary":"Erase a customer's personal data (name, email, phone, notes) on request; their bookings stay, anonymized","tags":["customers"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/org":{"get":{"operationId":"org.get","summary":"Your organization: name, slug (booking page /book/{slug}), time zone and currency","tags":["org"],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string","description":"Booking page: /book/{slug}"},"timezone":{"type":"string","description":"IANA time zone, e.g. America/Denver. Weekly hours and dates are local to it."},"currency":{"type":"string","description":"ISO 4217 code in lowercase, e.g. usd"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","slug","timezone","currency","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"patch":{"operationId":"org.update","summary":"Rename the organization or change its time zone (IANA, e.g. America/Denver) or currency","tags":["org"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"timezone":{"type":"string","maxLength":64},"currency":{"type":"string","pattern":"^[a-z]{3}$"}},"required":[]}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string","description":"Booking page: /book/{slug}"},"timezone":{"type":"string","description":"IANA time zone, e.g. America/Denver. Weekly hours and dates are local to it."},"currency":{"type":"string","description":"ISO 4217 code in lowercase, e.g. usd"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","name","slug","timezone","currency","created_at"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/org/export":{"get":{"operationId":"org.export","summary":"Export all your data as JSON: org, offerings, hours, sessions, customers, bookings, webhooks and the last 1000 events","tags":["org"],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":{},"description":"The org, offerings, hours, sessions, customers, bookings, webhooks (no secrets) and the last 1000 events"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/events":{"get":{"operationId":"events.list","summary":"Everything that happened, oldest first. Poll with after=<next_after> to follow along.","tags":["events"],"parameters":[{"name":"after","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}},{"name":"type","in":"query","required":false,"schema":{"description":"e.g. booking.confirmed","type":"string","maxLength":60}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Increasing; poll with after=<id>"},"type":{"type":"string","description":"e.g. booking.confirmed, offering.updated"},"data":{"description":"The resource after the change: the booking, session, offering, customer or org"},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","type","data","created_at"],"additionalProperties":{}}},"next_after":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Pass as after= to get what happened next"}},"required":["data","next_after"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/webhooks":{"get":{"operationId":"webhooks.list","summary":"List webhook endpoints and their last delivery status","tags":["webhooks"],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"},"description":"Event types it receives; [\"*\"] means all"},"active":{"type":"boolean"},"last_status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"HTTP status of the last delivery; 0 = unreachable"},"last_attempt_at":{"anyOf":[{"type":"string","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"}},"required":["id","url","events","active","last_status","last_attempt_at","created_at"],"additionalProperties":{}}}},"required":["data"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"post":{"operationId":"webhooks.create","summary":"Send events to an HTTPS URL, signed with HMAC-SHA256. Returns the signing secret once.","tags":["webhooks"],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"description":"Event types, or [\"*\"] for all (default)","maxItems":30,"type":"array","items":{"type":"string","maxLength":60}}},"required":["url"]}}}},"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"},"description":"Event types it receives; [\"*\"] means all"},"active":{"type":"boolean"},"last_status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"HTTP status of the last delivery; 0 = unreachable"},"last_attempt_at":{"anyOf":[{"type":"string","description":"ISO 8601 timestamp (UTC)"},{"type":"null"}]},"created_at":{"type":"string","description":"ISO 8601 timestamp (UTC)"},"secret":{"type":"string","description":"Verifies the Daybag-Signature header. Shown once."}},"required":["id","url","events","active","last_status","last_attempt_at","created_at","secret"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/webhooks/{id}":{"delete":{"operationId":"webhooks.delete","summary":"Stop sending events to a webhook endpoint","tags":["webhooks"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}},"/billing":{"get":{"operationId":"billing.get","summary":"Your plan (free or pro) and this month's confirmed bookings against the free plan's soft cap of 25","tags":["billing"],"parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string","enum":["free","pro"],"description":"pro: payment at booking, no daybag mark, no booking cap"},"usage":{"type":"object","properties":{"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Confirmed bookings created this UTC month"},"cap":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The free plan's soft cap. Bookings keep confirming past it."},"pct":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"used as a percentage of cap; keeps climbing past 100"}},"required":["used","cap","pct"],"additionalProperties":{}}},"required":["plan","usage"],"additionalProperties":{}}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}}}}}