{"components":{"schemas":{"AvailabilityRequest":{"properties":{"name":{"maxLength":40,"minLength":1,"type":"string"},"password":{"description":"Optional password. Sent only over HTTPS, never stored in plain text.","maxLength":72,"minLength":4,"type":"string"},"slots":{"description":"Full replace set of slot ids. Date events use YYYY-MM-DDTHH:mm; weekly events use DOW-HH:mm like MON-09:15. Empty array means unavailable everywhere.","items":{"$ref":"#/components/schemas/SlotId"},"maxItems":2852,"type":"array"}},"required":["name","slots"],"type":"object"},"AvailabilityResponse":{"properties":{"count":{"type":"integer"},"name":{"type":"string"},"protected":{"type":"boolean"},"updatedAt":{"type":"string"}},"required":["name","count","protected","updatedAt"],"type":"object"},"CreateEventRequest":{"properties":{"dates":{"description":"1..31 entries, YYYY-MM-DD, each today (UTC) through today+90 inclusive. Required when mode is dates (the default). Omit or send [] for weekly events.","items":{"pattern":"^\\d{4}-\\d{2}-\\d{2}$","type":"string"},"maxItems":31,"minItems":1,"type":"array"},"endTime":{"example":"17:00","pattern":"^([01]\\d|2[0-3]):00$","type":"string"},"mode":{"$ref":"#/components/schemas/EventMode"},"startTime":{"example":"09:00","pattern":"^([01]\\d|2[0-3]):00$","type":"string"},"timezone":{"example":"America/New_York","type":"string"},"title":{"maxLength":100,"minLength":1,"type":"string"},"weekdays":{"description":"Required when mode is weekly. 1..7 unique entries, 0=Sunday through 6=Saturday. Example [1,3,5] means Mon/Wed/Fri.","items":{"$ref":"#/components/schemas/Weekday"},"maxItems":7,"minItems":1,"type":"array"}},"required":["title","startTime","endTime","timezone"],"type":"object"},"EventMode":{"description":"dates picks specific dates; weekly repeats on weekdays.","enum":["dates","weekly"],"example":"dates","type":"string"},"Weekday":{"description":"Day of week, 0=Sunday through 6=Saturday.","example":1,"type":"integer"},"WeeklySlotId":{"description":"Weekly slot id: weekday code plus HH:mm. Monday is MON, Sunday is SUN.","example":"MON-09:15","pattern":"^(SUN|MON|TUE|WED|THU|FRI|SAT)-([01]\\d|2[0-3]):(00|15|30|45)$","type":"string"},"CreateEventResponse":{"properties":{"event":{"$ref":"#/components/schemas/Event"},"id":{"type":"string"},"url":{"type":"string"}},"required":["id","url","event"],"type":"object"},"Error":{"properties":{"error":{"properties":{"code":{"type":"string"},"fields":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"},"Event":{"properties":{"createdAt":{"type":"string"},"dates":{"description":"Specific dates for dates events; empty array for weekly events.","items":{"type":"string"},"type":"array"},"endTime":{"type":"string"},"expiresAt":{"type":"string"},"id":{"type":"string"},"mode":{"$ref":"#/components/schemas/EventMode"},"startTime":{"type":"string"},"timezone":{"type":"string"},"title":{"type":"string"},"weekdays":{"description":"Weekdays for weekly events, 0=Sunday through 6=Saturday; empty array for dates events.","items":{"$ref":"#/components/schemas/Weekday"},"type":"array"}},"required":["id","title","mode","dates","weekdays","startTime","endTime","timezone","createdAt","expiresAt"],"type":"object"},"SlotId":{"description":"Slot id in event-timezone wall time. Date events use YYYY-MM-DDTHH:mm; weekly events use DOW-HH:mm like MON-09:15.","example":"2026-10-05T09:15","pattern":"^(\\d{4}-\\d{2}-\\d{2}T([01]\\d|2[0-3]):(00|15|30|45)|(SUN|MON|TUE|WED|THU|FRI|SAT)-([01]\\d|2[0-3]):(00|15|30|45))$","type":"string"},"EventDetailResponse":{"properties":{"bestTimes":{"items":{"properties":{"count":{"type":"integer"},"slot":{"type":"string"}},"required":["slot","count"],"type":"object"},"type":"array"},"counts":{"items":{"properties":{"count":{"type":"integer"},"names":{"items":{"type":"string"},"type":"array"},"slot":{"type":"string"}},"required":["slot","count","names"],"type":"object"},"type":"array"},"event":{"$ref":"#/components/schemas/Event"},"participants":{"items":{"properties":{"count":{"type":"integer"},"name":{"type":"string"},"updatedAt":{"type":"string"}},"required":["name","count","updatedAt"],"type":"object"},"type":"array"},"slotUniverse":{"items":{"type":"string"},"type":"array"}},"required":["event","slotUniverse","counts","participants","bestTimes"],"type":"object"},"OwnAvailabilityResponse":{"properties":{"name":{"type":"string"},"slots":{"items":{"type":"string"},"type":"array"}},"required":["name","slots"],"type":"object"}}},"info":{"description":"Agent-friendly when2meet replacement. Create events with curl, then add availability by name.","title":"Dilly-Dally API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/api/events":{"post":{"operationId":"createEvent","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEventResponse"}}},"description":"Event created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Validation error"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payload too large"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Content-Type must be application/json"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limited"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Internal error"}},"summary":"Create an event"}},"/api/events/{id}":{"get":{"operationId":"getEvent","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventDetailResponse"}}},"description":"Event with counts and participants"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Expired"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limited"}},"summary":"Get event and group availability"}},"/api/events/{id}/availability":{"get":{"operationId":"getAvailability","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"query","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnAvailabilityResponse"}}},"description":"Own slots for editing"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid password"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Event not found, or no availability for this name (availability_not_found)"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Expired"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limited"}},"summary":"Get own availability"},"put":{"operationId":"putAvailability","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityResponse"}}},"description":"Saved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid password"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Expired"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payload too large"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Content-Type must be application/json"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid slot"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limited"}},"summary":"Create or update availability"},"post":{"operationId":"postAvailability","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityResponse"}}},"description":"Saved"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Validation error"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid password"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Not found"},"410":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Expired"},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Payload too large"},"415":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Content-Type must be application/json"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid slot"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Rate limited"}},"summary":"Create or update availability (alias of PUT)"}}},"servers":[{"url":"https://dally.bradshaw.page"}]}