{"openapi":"3.1.0","info":{"title":"HabitWell","description":"Habit-building toolkit: turns a habit plan into a calendar file (.ics with repeating events, weekdays, reminders, time zones) plus a week-view image, prints a habit tracker (PNG + PDF), and answers date/time questions. Images are attached as a zip (openaiFileResponse) so ChatGPT can display them with Code Interpreter.","version":"2.0.0"},"servers":[{"url":"https://cybrix.ai/habitwell","description":"HabitWell API"}],"paths":{"/health":{"get":{"tags":["meta"],"summary":"Service health check","operationId":"health","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/plan":{"post":{"tags":["habits"],"summary":"Create a calendar (.ics) of habit events with a week-view image","description":"Returns ics_url, image_url (week view), events summary, schedule_markdown, warnings; attaches the files.","operationId":"create_calendar_plan","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/tracker":{"post":{"tags":["habits"],"summary":"Create a printable habit tracker (PNG + PDF)","operationId":"create_habit_tracker","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrackerRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}},"/time":{"post":{"tags":["time"],"summary":"Current date/time in a time zone, plus simple date arithmetic","operationId":"get_time","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TimeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"x-openai-isConsequential":false}}},"components":{"schemas":{"HabitEvent":{"properties":{"title":{"type":"string","title":"Title","description":"Event title, e.g. Morning run."},"start":{"type":"string","title":"Start","description":"First occurrence, local time: YYYY-MM-DDTHH:MM."},"duration_minutes":{"type":"integer","maximum":1440.0,"minimum":5.0,"title":"Duration Minutes","default":30},"repeat":{"type":"string","enum":["none","daily","weekdays","weekly","monthly"],"title":"Repeat","description":"weekly uses `days`.","default":"none"},"days":{"items":{"type":"string","enum":["MO","TU","WE","TH","FR","SA","SU"]},"type":"array","title":"Days","description":"For weekly: MO TU WE TH FR SA SU."},"count":{"anyOf":[{"type":"integer","maximum":400.0,"minimum":1.0},{"type":"null"}],"title":"Count","description":"Occurrences; default 12 weeks."},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Until","description":"Last date YYYY-MM-DD (instead of count)."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Steps, cues or notes shown in the event."},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"reminder_minutes":{"anyOf":[{"type":"integer","maximum":1440.0,"minimum":0.0},{"type":"null"}],"title":"Reminder Minutes","description":"Alert before start; null for none.","default":15},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color","description":"Category colour for the week view (hex or name)."}},"type":"object","required":["title","start"],"title":"HabitEvent"},"PlanRequest":{"properties":{"plan_name":{"type":"string","title":"Plan Name","description":"Calendar / file name, e.g. Morning routine."},"timezone":{"type":"string","title":"Timezone","description":"IANA zone, e.g. America/New_York.","default":"UTC"},"events":{"items":{"$ref":"#/components/schemas/HabitEvent"},"type":"array","maxItems":30,"minItems":1,"title":"Events"},"week_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Week Of","description":"Monday YYYY-MM-DD for the week-view image; default first event week."}},"type":"object","required":["plan_name","events"],"title":"PlanRequest"},"TimeRequest":{"properties":{"timezone":{"type":"string","title":"Timezone","description":"IANA zone, e.g. Europe/London.","default":"UTC"},"add_days":{"type":"integer","title":"Add Days","default":0},"add_weeks":{"type":"integer","title":"Add Weeks","default":0},"add_months":{"type":"integer","title":"Add Months","default":0},"next_weekday":{"anyOf":[{"type":"string","enum":["MO","TU","WE","TH","FR","SA","SU"]},{"type":"null"}],"title":"Next Weekday","description":"Also return the next such weekday."}},"type":"object","title":"TimeRequest"},"TrackerRequest":{"properties":{"title":{"type":"string","title":"Title","description":"Printed heading.","default":"Habit tracker"},"habits":{"items":{"type":"string"},"type":"array","maxItems":12,"minItems":1,"title":"Habits"},"start":{"type":"string","title":"Start","description":"First day YYYY-MM-DD."},"days":{"type":"integer","maximum":92.0,"minimum":7.0,"title":"Days","description":"Number of days (7–92).","default":30},"timezone":{"type":"string","title":"Timezone","default":"UTC"}},"type":"object","required":["habits","start"],"title":"TrackerRequest"}}}}