{"components":{"responses":{"BadRequest":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Invalid arguments, or the call broke a rule (details say which)."},"NotFound":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"No method with that name."},"Unauthorized":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"description":"Missing or invalid bearer token."}},"schemas":{"Error":{"properties":{"details":{"description":"Validation details, when there are any."},"error":{"type":"string"}},"required":["error"],"type":"object"},"ChatsByIdOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ChatsByIdOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ChatsByIdOutput__schema0"}}]},"DumpItemsMineOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/DumpItemsMineOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsMineOutput__schema0"}}]},"DumpItemsByIdOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/DumpItemsByIdOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsByIdOutput__schema0"}}]},"TrackerMineOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerMineOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerMineOutput__schema0"}}]},"TrackerByIdOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerByIdOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerByIdOutput__schema0"}}]},"ViewsMineOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ViewsMineOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ViewsMineOutput__schema0"}}]},"ViewsByIdOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ViewsByIdOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ViewsByIdOutput__schema0"}}]},"ChatsCreateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ChatsCreateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ChatsCreateOutput__schema0"}}]},"ChatsRenameOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ChatsRenameOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ChatsRenameOutput__schema0"}}]},"ChatsSetPinnedOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ChatsSetPinnedOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ChatsSetPinnedOutput__schema0"}}]},"ChatsMoveToFolderOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ChatsMoveToFolderOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ChatsMoveToFolderOutput__schema0"}}]},"ChatsUpdateSettingsOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ChatsUpdateSettingsOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ChatsUpdateSettingsOutput__schema0"}}]},"DumpItemsCreateInput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/DumpItemsCreateInput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsCreateInput__schema0"}}]},"DumpItemsCreateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/DumpItemsCreateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsCreateOutput__schema0"}}]},"DumpItemsUpdateInput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/DumpItemsUpdateInput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsUpdateInput__schema0"}}]},"DumpItemsUpdateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/DumpItemsUpdateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsUpdateOutput__schema0"}}]},"TrackerCreateInput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerCreateInput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerCreateInput__schema0"}}]},"TrackerCreateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerCreateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerCreateOutput__schema0"}}]},"TrackerUpdateInput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerUpdateInput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerUpdateInput__schema0"}}]},"TrackerUpdateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerUpdateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerUpdateOutput__schema0"}}]},"TrackerMoveOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/TrackerMoveOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerMoveOutput__schema0"}}]},"ViewsCreateInput__schema0":{"anyOf":[{"type":"object","properties":{"and":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ViewsCreateInput__schema0"}}},"required":["and"],"description":"Every sub-filter matches."},{"type":"object","properties":{"or":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ViewsCreateInput__schema0"}}},"required":["or"],"description":"Any sub-filter matches."},{"type":"object","properties":{"not":{"$ref":"#/components/schemas/ViewsCreateInput__schema0"}},"required":["not"],"description":"The sub-filter doesn't match."},{"anyOf":[{"type":"object","properties":{"date":{"type":"object","properties":{"field":{"type":"string","enum":["due","planned","start","created","completed"],"description":"due = due date, planned = planned day, start = start date, created/completed = when it was created/completed."},"is":{"description":"Just whether the date exists.","type":"string","enum":["set","unset"]},"on":{"description":"Exactly this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"before":{"description":"Strictly before this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"after":{"description":"Strictly after this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"onOrBefore":{"type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$","description":"A calendar day: \"YYYY-MM-DD\", \"today\", \"tomorrow\", \"yesterday\", or \"+N\"/\"-N\" days from today."},"onOrAfter":{"type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$","description":"A calendar day: \"YYYY-MM-DD\", \"today\", \"tomorrow\", \"yesterday\", or \"+N\"/\"-N\" days from today."}},"required":["field"],"description":"Matches a date field. Combine bounds to make a range; a todo without the date never matches a bound."}},"required":["date"]},{"type":"object","properties":{"flag":{"type":"string","enum":["done","pinned","mandatory","private","waiting","inbox"],"description":"A yes/no field that must be true."}},"required":["flag"]},{"type":"object","properties":{"priority":{"minItems":1,"type":"array","items":{"type":"string","enum":["none","low","medium","high"]}}},"required":["priority"]},{"type":"object","properties":{"priorityAtLeast":{"type":"string","enum":["none","low","medium","high"],"description":"low < medium < high; none never matches."}},"required":["priorityAtLeast"]},{"type":"object","properties":{"type":{"minItems":1,"type":"array","items":{"type":"string","enum":["any","work","personal"]},"description":"work/personal/any. Todos of type \"any\" match work and personal too."}},"required":["type"]},{"type":"object","properties":{"timeOfDay":{"minItems":1,"type":"array","items":{"type":"string","enum":["any","morning","afternoon","evening","night"]}}},"required":["timeOfDay"]},{"type":"object","properties":{"nag":{"minItems":1,"type":"array","items":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]}}},"required":["nag"]},{"type":"object","properties":{"tags":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Tag ids or tag names (case-insensitive); the todo has ANY of them."}},"required":["tags"]},{"type":"object","properties":{"allTags":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Tag ids or names; the todo has ALL of them."}},"required":["allTags"]},{"type":"object","properties":{"projects":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Project ids or names; \"none\" matches todos without a project."}},"required":["projects"]},{"type":"object","properties":{"lists":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"List ids or names; \"none\" matches todos without a list. Includes child lists."}},"required":["lists"]},{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Case-insensitive substring of the title, description or location."}},"required":["text"]},{"type":"object","properties":{"pointsAtLeast":{"type":"number","description":"The todo's score: tag points + priority + due-date closeness + mandatory + planned."}},"required":["pointsAtLeast"]},{"type":"object","properties":{"durationMinutes":{"type":"object","properties":{"atLeast":{"type":"integer","minimum":0,"maximum":9007199254740991},"atMost":{"type":"integer","minimum":0,"maximum":9007199254740991}}}},"required":["durationMinutes"]}]}]},"ViewsCreateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ViewsCreateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ViewsCreateOutput__schema0"}}]},"ViewsUpdateInput__schema0":{"anyOf":[{"type":"object","properties":{"and":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ViewsUpdateInput__schema0"}}},"required":["and"],"description":"Every sub-filter matches."},{"type":"object","properties":{"or":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ViewsUpdateInput__schema0"}}},"required":["or"],"description":"Any sub-filter matches."},{"type":"object","properties":{"not":{"$ref":"#/components/schemas/ViewsUpdateInput__schema0"}},"required":["not"],"description":"The sub-filter doesn't match."},{"anyOf":[{"type":"object","properties":{"date":{"type":"object","properties":{"field":{"type":"string","enum":["due","planned","start","created","completed"],"description":"due = due date, planned = planned day, start = start date, created/completed = when it was created/completed."},"is":{"description":"Just whether the date exists.","type":"string","enum":["set","unset"]},"on":{"description":"Exactly this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"before":{"description":"Strictly before this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"after":{"description":"Strictly after this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"onOrBefore":{"type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$","description":"A calendar day: \"YYYY-MM-DD\", \"today\", \"tomorrow\", \"yesterday\", or \"+N\"/\"-N\" days from today."},"onOrAfter":{"type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$","description":"A calendar day: \"YYYY-MM-DD\", \"today\", \"tomorrow\", \"yesterday\", or \"+N\"/\"-N\" days from today."}},"required":["field"],"description":"Matches a date field. Combine bounds to make a range; a todo without the date never matches a bound."}},"required":["date"]},{"type":"object","properties":{"flag":{"type":"string","enum":["done","pinned","mandatory","private","waiting","inbox"],"description":"A yes/no field that must be true."}},"required":["flag"]},{"type":"object","properties":{"priority":{"minItems":1,"type":"array","items":{"type":"string","enum":["none","low","medium","high"]}}},"required":["priority"]},{"type":"object","properties":{"priorityAtLeast":{"type":"string","enum":["none","low","medium","high"],"description":"low < medium < high; none never matches."}},"required":["priorityAtLeast"]},{"type":"object","properties":{"type":{"minItems":1,"type":"array","items":{"type":"string","enum":["any","work","personal"]},"description":"work/personal/any. Todos of type \"any\" match work and personal too."}},"required":["type"]},{"type":"object","properties":{"timeOfDay":{"minItems":1,"type":"array","items":{"type":"string","enum":["any","morning","afternoon","evening","night"]}}},"required":["timeOfDay"]},{"type":"object","properties":{"nag":{"minItems":1,"type":"array","items":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]}}},"required":["nag"]},{"type":"object","properties":{"tags":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Tag ids or tag names (case-insensitive); the todo has ANY of them."}},"required":["tags"]},{"type":"object","properties":{"allTags":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Tag ids or names; the todo has ALL of them."}},"required":["allTags"]},{"type":"object","properties":{"projects":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Project ids or names; \"none\" matches todos without a project."}},"required":["projects"]},{"type":"object","properties":{"lists":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"List ids or names; \"none\" matches todos without a list. Includes child lists."}},"required":["lists"]},{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Case-insensitive substring of the title, description or location."}},"required":["text"]},{"type":"object","properties":{"pointsAtLeast":{"type":"number","description":"The todo's score: tag points + priority + due-date closeness + mandatory + planned."}},"required":["pointsAtLeast"]},{"type":"object","properties":{"durationMinutes":{"type":"object","properties":{"atLeast":{"type":"integer","minimum":0,"maximum":9007199254740991},"atMost":{"type":"integer","minimum":0,"maximum":9007199254740991}}}},"required":["durationMinutes"]}]}]},"ViewsUpdateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ViewsUpdateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ViewsUpdateOutput__schema0"}}]},"ApiKeysListOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ApiKeysListOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysListOutput__schema0"}}]},"ApiKeysGetOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ApiKeysGetOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysGetOutput__schema0"}}]},"ApiKeysCreateInput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ApiKeysCreateInput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysCreateInput__schema0"}}]},"ApiKeysCreateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ApiKeysCreateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysCreateOutput__schema0"}}]},"ApiKeysUpdateInput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ApiKeysUpdateInput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysUpdateInput__schema0"}}]},"ApiKeysUpdateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ApiKeysUpdateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysUpdateOutput__schema0"}}]},"BillingStateOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/BillingStateOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/BillingStateOutput__schema0"}}]},"ViewsLanguageOutput__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/components/schemas/ViewsLanguageOutput__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ViewsLanguageOutput__schema0"}}]},"ViewsPreviewInput__schema0":{"anyOf":[{"type":"object","properties":{"and":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ViewsPreviewInput__schema0"}}},"required":["and"],"description":"Every sub-filter matches."},{"type":"object","properties":{"or":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/ViewsPreviewInput__schema0"}}},"required":["or"],"description":"Any sub-filter matches."},{"type":"object","properties":{"not":{"$ref":"#/components/schemas/ViewsPreviewInput__schema0"}},"required":["not"],"description":"The sub-filter doesn't match."},{"anyOf":[{"type":"object","properties":{"date":{"type":"object","properties":{"field":{"type":"string","enum":["due","planned","start","created","completed"],"description":"due = due date, planned = planned day, start = start date, created/completed = when it was created/completed."},"is":{"description":"Just whether the date exists.","type":"string","enum":["set","unset"]},"on":{"description":"Exactly this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"before":{"description":"Strictly before this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"after":{"description":"Strictly after this day.","type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$"},"onOrBefore":{"type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$","description":"A calendar day: \"YYYY-MM-DD\", \"today\", \"tomorrow\", \"yesterday\", or \"+N\"/\"-N\" days from today."},"onOrAfter":{"type":"string","pattern":"^(?:today|tomorrow|yesterday|[+-]\\d{1,4}|\\d{4}-\\d{2}-\\d{2})$","description":"A calendar day: \"YYYY-MM-DD\", \"today\", \"tomorrow\", \"yesterday\", or \"+N\"/\"-N\" days from today."}},"required":["field"],"description":"Matches a date field. Combine bounds to make a range; a todo without the date never matches a bound."}},"required":["date"]},{"type":"object","properties":{"flag":{"type":"string","enum":["done","pinned","mandatory","private","waiting","inbox"],"description":"A yes/no field that must be true."}},"required":["flag"]},{"type":"object","properties":{"priority":{"minItems":1,"type":"array","items":{"type":"string","enum":["none","low","medium","high"]}}},"required":["priority"]},{"type":"object","properties":{"priorityAtLeast":{"type":"string","enum":["none","low","medium","high"],"description":"low < medium < high; none never matches."}},"required":["priorityAtLeast"]},{"type":"object","properties":{"type":{"minItems":1,"type":"array","items":{"type":"string","enum":["any","work","personal"]},"description":"work/personal/any. Todos of type \"any\" match work and personal too."}},"required":["type"]},{"type":"object","properties":{"timeOfDay":{"minItems":1,"type":"array","items":{"type":"string","enum":["any","morning","afternoon","evening","night"]}}},"required":["timeOfDay"]},{"type":"object","properties":{"nag":{"minItems":1,"type":"array","items":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]}}},"required":["nag"]},{"type":"object","properties":{"tags":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Tag ids or tag names (case-insensitive); the todo has ANY of them."}},"required":["tags"]},{"type":"object","properties":{"allTags":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Tag ids or names; the todo has ALL of them."}},"required":["allTags"]},{"type":"object","properties":{"projects":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"Project ids or names; \"none\" matches todos without a project."}},"required":["projects"]},{"type":"object","properties":{"lists":{"minItems":1,"type":"array","items":{"type":"string","minLength":1},"description":"List ids or names; \"none\" matches todos without a list. Includes child lists."}},"required":["lists"]},{"type":"object","properties":{"text":{"type":"string","minLength":1,"description":"Case-insensitive substring of the title, description or location."}},"required":["text"]},{"type":"object","properties":{"pointsAtLeast":{"type":"number","description":"The todo's score: tag points + priority + due-date closeness + mandatory + planned."}},"required":["pointsAtLeast"]},{"type":"object","properties":{"durationMinutes":{"type":"object","properties":{"atLeast":{"type":"integer","minimum":0,"maximum":9007199254740991},"atMost":{"type":"integer","minimum":0,"maximum":9007199254740991}}}},"required":["durationMinutes"]}]}]}},"securitySchemes":{"bearerAuth":{"description":"An API key (`zts_…`, created in the app) or a session token.","scheme":"bearer","type":"http"}}},"info":{"title":"Kanso API","version":"1.0.0","description":"Todos, routines, calendar and habits in one place"},"openapi":"3.1.0","paths":{"/api/v1/activities.mine":{"post":{"description":"List the caller's activities (name, emoji, personal/work type, how often it is due), pinned first, then by name.","operationId":"activitiesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["personal","work","both"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"activities.mine","tags":["activities"],"x-zts-kind":"query"}},"/api/v1/activities.byId":{"post":{"description":"Get one of the caller's activities by id, or null.","operationId":"activitiesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["personal","work","both"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"activities.byId","tags":["activities"],"x-zts-kind":"query"}},"/api/v1/affirmations.mine":{"post":{"description":"List the caller's affirmations, newest first; pass category for one category.","operationId":"affirmationsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"text":{"type":"string"},"category":{"type":["string","null"]},"favorite":{"type":"boolean"},"showOnToday":{"type":"boolean"},"encrypted":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","text","category","favorite","showOnToday","encrypted","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"affirmations.mine","tags":["affirmations"],"x-zts-kind":"query"}},"/api/v1/affirmations.byId":{"post":{"description":"Get one of the caller's affirmations by id, or null.","operationId":"affirmationsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"text":{"type":"string"},"category":{"type":["string","null"]},"favorite":{"type":"boolean"},"showOnToday":{"type":"boolean"},"encrypted":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","text","category","favorite","showOnToday","encrypted","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"affirmations.byId","tags":["affirmations"],"x-zts-kind":"query"}},"/api/v1/chats.mine":{"post":{"description":"List the caller's chats without messages: pinned first, then most recently updated.","operationId":"chatsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.mine","tags":["chats"],"x-zts-kind":"query"}},"/api/v1/chats.folders":{"post":{"description":"List the caller's chat folders in their sort order.","operationId":"chatsFolders","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.folders","tags":["chats"],"x-zts-kind":"query"}},"/api/v1/chats.byId":{"post":{"description":"Get one of the caller's chats with its messages, oldest first, or null.","operationId":"chatsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"ownerId":{"type":"string"},"role":{"type":"string","enum":["user","assistant","system"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatsByIdOutput__schema0"}},"createdAt":{"type":"number"}},"required":["id","chatId","ownerId","role","parts","createdAt"],"additionalProperties":false}}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt","messages"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.byId","tags":["chats"],"x-zts-kind":"query"}},"/api/v1/chats.folderById":{"post":{"description":"Get one of the caller's chat folders by id, or null.","operationId":"chatsFolderById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.folderById","tags":["chats"],"x-zts-kind":"query"}},"/api/v1/contacts.mine":{"post":{"description":"List the caller's contacts (name, email, phone, birthday, relationship, how often to see them), pinned first, then by name.","operationId":"contactsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"avatarUrl":{"type":["string","null"]},"birthday":{"type":["string","null"]},"address":{"type":["string","null"]},"relationshipType":{"type":"string","enum":["Friend","Girlfriend","Boyfriend","Wife","Husband","Mother","Father","Sister","Brother","Son","Daughter","Grandmother","Grandfather","Grandchild","Aunt","Uncle","Cousin","Nephew","Niece","MotherInLaw","FatherInLaw","SisterInLaw","BrotherInLaw","Acquaintance","Other"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","email","phone","avatarUrl","birthday","address","relationshipType","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"contacts.mine","tags":["contacts"],"x-zts-kind":"query"}},"/api/v1/contacts.byId":{"post":{"description":"Get one of the caller's contacts by id, or null.","operationId":"contactsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"avatarUrl":{"type":["string","null"]},"birthday":{"type":["string","null"]},"address":{"type":["string","null"]},"relationshipType":{"type":"string","enum":["Friend","Girlfriend","Boyfriend","Wife","Husband","Mother","Father","Sister","Brother","Son","Daughter","Grandmother","Grandfather","Grandchild","Aunt","Uncle","Cousin","Nephew","Niece","MotherInLaw","FatherInLaw","SisterInLaw","BrotherInLaw","Acquaintance","Other"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","email","phone","avatarUrl","birthday","address","relationshipType","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"contacts.byId","tags":["contacts"],"x-zts-kind":"query"}},"/api/v1/checklistItems.mine":{"post":{"description":"List the caller's checklist items (text, note, section), in order; pass checklistId for one checklist's.","operationId":"checklistItemsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"checklistId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"sectionId":{"type":["string","null"]},"text":{"type":"string"},"note":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","sectionId","text","note","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistItems.mine","tags":["checklistItems"],"x-zts-kind":"query"}},"/api/v1/checklistItems.byId":{"post":{"description":"Get one of the caller's checklist items by id, or null.","operationId":"checklistItemsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"sectionId":{"type":["string","null"]},"text":{"type":"string"},"note":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","sectionId","text","note","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistItems.byId","tags":["checklistItems"],"x-zts-kind":"query"}},"/api/v1/checklistLists.mine":{"post":{"description":"List the caller's checklist lists, and the ones shared with them, by position. Every one of the caller's checklists sits in one of them.","operationId":"checklistListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistLists.mine","tags":["checklistLists"],"x-zts-kind":"query"}},"/api/v1/checklistLists.byId":{"post":{"description":"Get one of the caller's checklist lists by id, or null.","operationId":"checklistListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistLists.byId","tags":["checklistLists"],"x-zts-kind":"query"}},"/api/v1/checklistRuns.mine":{"post":{"description":"List the caller's checklist runs (in progress while finishedAt is null, with the checklists run together and the checked item ids), newest first.","operationId":"checklistRunsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.mine","tags":["checklistRuns"],"x-zts-kind":"query"}},"/api/v1/checklistRuns.byId":{"post":{"description":"Get one of the caller's checklist runs by id, or null.","operationId":"checklistRunsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.byId","tags":["checklistRuns"],"x-zts-kind":"query"}},"/api/v1/checklistSections.mine":{"post":{"description":"List the caller's checklist sections (named groups of items), in order; pass checklistId for one checklist's.","operationId":"checklistSectionsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"checklistId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistSections.mine","tags":["checklistSections"],"x-zts-kind":"query"}},"/api/v1/checklistSections.byId":{"post":{"description":"Get one of the caller's checklist sections by id, or null.","operationId":"checklistSectionsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistSections.byId","tags":["checklistSections"],"x-zts-kind":"query"}},"/api/v1/checklists.mine":{"post":{"description":"List the caller's checklists (name, emoji, markdown description), in sidebar order.","operationId":"checklistsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistListId","name","emoji","description","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklists.mine","tags":["checklists"],"x-zts-kind":"query"}},"/api/v1/checklists.byId":{"post":{"description":"Get one of the caller's checklists by id, or null.","operationId":"checklistsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistListId","name","emoji","description","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklists.byId","tags":["checklists"],"x-zts-kind":"query"}},"/api/v1/checkinAnswers.mine":{"post":{"description":"List the caller's check-in answers, latest day first; filter by days from/to (YYYY-MM-DD, inclusive) and templateId.","operationId":"checkinAnswersMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"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])))$"},"templateId":{"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)$"},"to":{"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])))$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"questionId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"valueNumber":{"type":["number","null"]},"valueText":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","questionId","templateId","date","valueNumber","valueText","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinAnswers.mine","tags":["checkinAnswers"],"x-zts-kind":"query"}},"/api/v1/checkinAnswers.byId":{"post":{"description":"Get one of the caller's check-in answers by id, or null.","operationId":"checkinAnswersById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"questionId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"valueNumber":{"type":["number","null"]},"valueText":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","questionId","templateId","date","valueNumber","valueText","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinAnswers.byId","tags":["checkinAnswers"],"x-zts-kind":"query"}},"/api/v1/checkinCompletions.byDay":{"post":{"description":"Get the caller's finished check-in for one template on one day (YYYY-MM-DD), or null.","operationId":"checkinCompletionsByDay","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"templateId":{"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":["date","templateId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"completedAt":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","date","note","completedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinCompletions.byDay","tags":["checkinCompletions"],"x-zts-kind":"query"}},"/api/v1/checkinCompletions.mine":{"post":{"description":"List the caller's finished check-ins (template, day, reflection note), latest day first; filter by days from/to (YYYY-MM-DD, inclusive) and templateId.","operationId":"checkinCompletionsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"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])))$"},"templateId":{"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)$"},"to":{"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])))$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"completedAt":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","date","note","completedAt","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinCompletions.mine","tags":["checkinCompletions"],"x-zts-kind":"query"}},"/api/v1/checkinCompletions.byId":{"post":{"description":"Get one of the caller's finished check-ins by id, or null.","operationId":"checkinCompletionsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"completedAt":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","date","note","completedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinCompletions.byId","tags":["checkinCompletions"],"x-zts-kind":"query"}},"/api/v1/checkinQuestions.mine":{"post":{"description":"List the caller's check-in questions (prompt, answerType scale/mood/yesNo/number/text, unit) in step order; pass templateId for one template's.","operationId":"checkinQuestionsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"templateId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"prompt":{"type":"string"},"answerType":{"type":"string","enum":["scale","mood","yesNo","number","text"]},"unit":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","prompt","answerType","unit","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinQuestions.mine","tags":["checkinQuestions"],"x-zts-kind":"query"}},"/api/v1/checkinQuestions.byId":{"post":{"description":"Get one of the caller's check-in questions by id, or null.","operationId":"checkinQuestionsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"prompt":{"type":"string"},"answerType":{"type":"string","enum":["scale","mood","yesNo","number","text"]},"unit":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","prompt","answerType","unit","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinQuestions.byId","tags":["checkinQuestions"],"x-zts-kind":"query"}},"/api/v1/checkinTemplates.mine":{"post":{"description":"List the caller's check-in templates (e.g. Morning, Evening: name, emoji, slot, active, remind), in order.","operationId":"checkinTemplatesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"slot":{"type":"string","enum":["morning","evening","anytime"]},"active":{"type":"boolean"},"remind":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","slot","active","remind","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinTemplates.mine","tags":["checkinTemplates"],"x-zts-kind":"query"}},"/api/v1/checkinTemplates.byId":{"post":{"description":"Get one of the caller's check-in templates by id, or null.","operationId":"checkinTemplatesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"slot":{"type":"string","enum":["morning","evening","anytime"]},"active":{"type":"boolean"},"remind":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","slot","active","remind","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinTemplates.byId","tags":["checkinTemplates"],"x-zts-kind":"query"}},"/api/v1/countdowns.mine":{"post":{"description":"List the caller's countdowns (upcoming, yearly and past), by date.","operationId":"countdownsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"emoji":{"type":["string","null"]},"date":{"type":"string"},"yearly":{"type":"boolean"},"showOnToday":{"type":"boolean"},"done":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","title","emoji","date","yearly","showOnToday","done","notes","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"countdowns.mine","tags":["countdowns"],"x-zts-kind":"query"}},"/api/v1/countdowns.byId":{"post":{"description":"Get one of the caller's countdowns by id, or null.","operationId":"countdownsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"emoji":{"type":["string","null"]},"date":{"type":"string"},"yearly":{"type":"boolean"},"showOnToday":{"type":"boolean"},"done":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","title","emoji","date","yearly","showOnToday","done","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"countdowns.byId","tags":["countdowns"],"x-zts-kind":"query"}},"/api/v1/dumpItems.mine":{"post":{"description":"List everything the caller dumped (links, notes, images, quotes), archived ones included, newest first.","operationId":"dumpItemsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["link","note","image","quote"]},"url":{"type":["string","null"]},"content":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"siteName":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"faviconUrl":{"type":["string","null"]},"uploadedImageId":{"type":["string","null"]},"notes":{"type":["string","null"]},"colors":{"type":"array","items":{"type":"string"}},"tagIds":{"type":"array","items":{"type":"string"}},"autoTags":{"type":"array","items":{"type":"string"}},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsMineOutput__schema0"}},{"type":"null"}]},"pinned":{"type":"boolean"},"archived":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","url","content","title","description","siteName","imageUrl","faviconUrl","uploadedImageId","notes","colors","tagIds","autoTags","metadata","pinned","archived","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"dumpItems.mine","tags":["dumpItems"],"x-zts-kind":"query"}},"/api/v1/dumpItems.byId":{"post":{"description":"Get one of the caller's dump items by id, or null.","operationId":"dumpItemsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["link","note","image","quote"]},"url":{"type":["string","null"]},"content":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"siteName":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"faviconUrl":{"type":["string","null"]},"uploadedImageId":{"type":["string","null"]},"notes":{"type":["string","null"]},"colors":{"type":"array","items":{"type":"string"}},"tagIds":{"type":"array","items":{"type":"string"}},"autoTags":{"type":"array","items":{"type":"string"}},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsByIdOutput__schema0"}},{"type":"null"}]},"pinned":{"type":"boolean"},"archived":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","url","content","title","description","siteName","imageUrl","faviconUrl","uploadedImageId","notes","colors","tagIds","autoTags","metadata","pinned","archived","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"dumpItems.byId","tags":["dumpItems"],"x-zts-kind":"query"}},"/api/v1/goalMilestones.mine":{"post":{"description":"List the caller's goal milestones, optionally of one goal, in goal order.","operationId":"goalMilestonesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"goalId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","name","emoji","dueDate","done","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalMilestones.mine","tags":["goalMilestones"],"x-zts-kind":"query"}},"/api/v1/goalMilestones.byId":{"post":{"description":"Get one of the caller's goal milestones by id, or null.","operationId":"goalMilestonesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","name","emoji","dueDate","done","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalMilestones.byId","tags":["goalMilestones"],"x-zts-kind":"query"}},"/api/v1/goalTrackerEntries.forTracker":{"post":{"description":"List one goal tracker's logged values, newest day first.","operationId":"goalTrackerEntriesForTracker","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"trackerId":{"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":["trackerId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"trackerId":{"type":"string"},"value":{"type":"number"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","trackerId","value","date","note","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackerEntries.forTracker","tags":["goalTrackerEntries"],"x-zts-kind":"query"}},"/api/v1/goalTrackerEntries.byId":{"post":{"description":"Get one of the caller's goal tracker entries by id, or null.","operationId":"goalTrackerEntriesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"trackerId":{"type":"string"},"value":{"type":"number"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","trackerId","value","date","note","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackerEntries.byId","tags":["goalTrackerEntries"],"x-zts-kind":"query"}},"/api/v1/goalTrackers.mine":{"post":{"description":"List the caller's goal trackers (numbers or ratings logged over time), optionally of one goal, oldest first.","operationId":"goalTrackersMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"goalId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":["string","null"]},"milestoneId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["number","rating"]},"dueDate":{"type":["string","null"]},"isCumulative":{"type":"boolean"},"minRating":{"type":["number","null"]},"maxRating":{"type":["number","null"]},"minRatingLabel":{"type":["string","null"]},"maxRatingLabel":{"type":["string","null"]},"display":{"type":"string","enum":["progressBar","graph"]},"ratingDisplay":{"type":"string","enum":["number","emoji"]},"startValue":{"type":["number","null"]},"targetValue":{"type":["number","null"]},"unit":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","milestoneId","name","emoji","type","dueDate","isCumulative","minRating","maxRating","minRatingLabel","maxRatingLabel","display","ratingDisplay","startValue","targetValue","unit","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackers.mine","tags":["goalTrackers"],"x-zts-kind":"query"}},"/api/v1/goalTrackers.byId":{"post":{"description":"Get one of the caller's goal trackers by id, or null.","operationId":"goalTrackersById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":["string","null"]},"milestoneId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["number","rating"]},"dueDate":{"type":["string","null"]},"isCumulative":{"type":"boolean"},"minRating":{"type":["number","null"]},"maxRating":{"type":["number","null"]},"minRatingLabel":{"type":["string","null"]},"maxRatingLabel":{"type":["string","null"]},"display":{"type":"string","enum":["progressBar","graph"]},"ratingDisplay":{"type":"string","enum":["number","emoji"]},"startValue":{"type":["number","null"]},"targetValue":{"type":["number","null"]},"unit":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","milestoneId","name","emoji","type","dueDate","isCumulative","minRating","maxRating","minRatingLabel","maxRatingLabel","display","ratingDisplay","startValue","targetValue","unit","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackers.byId","tags":["goalTrackers"],"x-zts-kind":"query"}},"/api/v1/goals.mine":{"post":{"description":"List the caller's goals (done ones included), soonest due date first, then newest.","operationId":"goalsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","dueDate","done","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goals.mine","tags":["goals"],"x-zts-kind":"query"}},"/api/v1/goals.byId":{"post":{"description":"Get one of the caller's goals by id, or null.","operationId":"goalsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","dueDate","done","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goals.byId","tags":["goals"],"x-zts-kind":"query"}},"/api/v1/habitCompletions.range":{"post":{"description":"List the caller's habit logs (done, skipped, notCompleted) between two days (YYYY-MM-DD, inclusive), by day, oldest first. A habit can have several logs a day.","operationId":"habitCompletionsRange","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"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])))$"},"to":{"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])))$"}},"required":["from","to"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"habitId":{"type":"string"},"date":{"type":"string"},"type":{"type":"string","enum":["done","skipped","notCompleted"]},"note":{"type":["string","null"]},"points":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","habitId","date","type","note","points","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitCompletions.range","tags":["habitCompletions"],"x-zts-kind":"query"}},"/api/v1/habitCompletions.forDay":{"post":{"description":"List the logs (done, skipped, notCompleted) the caller has for one habit on one day (YYYY-MM-DD), oldest first; empty when nothing is logged. The day is complete once its done logs reach the habit's dailyTarget.","operationId":"habitCompletionsForDay","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"habitId":{"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":["date","habitId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"habitId":{"type":"string"},"date":{"type":"string"},"type":{"type":"string","enum":["done","skipped","notCompleted"]},"note":{"type":["string","null"]},"points":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","habitId","date","type","note","points","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitCompletions.forDay","tags":["habitCompletions"],"x-zts-kind":"query"}},"/api/v1/habitLists.mine":{"post":{"description":"List the caller's habit lists by position, then name. A list can sit inside another (parentListId).","operationId":"habitListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitLists.mine","tags":["habitLists"],"x-zts-kind":"query"}},"/api/v1/habitLists.byId":{"post":{"description":"Get one of the caller's habit lists by id, or null.","operationId":"habitListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitLists.byId","tags":["habitLists"],"x-zts-kind":"query"}},"/api/v1/habitTags.mine":{"post":{"description":"List the caller's habit tags (separate from todo tags) by position, then name.","operationId":"habitTagsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitTags.mine","tags":["habitTags"],"x-zts-kind":"query"}},"/api/v1/habitTags.byId":{"post":{"description":"Get one of the caller's habit tags by id, or null.","operationId":"habitTagsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitTags.byId","tags":["habitTags"],"x-zts-kind":"query"}},"/api/v1/habits.mine":{"post":{"description":"List the caller's habits (paused ones included) by position, then name.","operationId":"habitsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"taskType":{"type":"string","enum":["any","work","personal"]},"points":{"type":["number","null"]},"punishingPoints":{"type":["number","null"]},"paused":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"dailyTarget":{"type":"number"},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"habitListId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"sortOrder":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","color","timeOfDay","taskType","points","punishingPoints","paused","durationMinutes","dailyTarget","daysOfWeek","habitListId","tagIds","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habits.mine","tags":["habits"],"x-zts-kind":"query"}},"/api/v1/habits.byId":{"post":{"description":"Get one of the caller's habits by id, or null.","operationId":"habitsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"taskType":{"type":"string","enum":["any","work","personal"]},"points":{"type":["number","null"]},"punishingPoints":{"type":["number","null"]},"paused":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"dailyTarget":{"type":"number"},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"habitListId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"sortOrder":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","color","timeOfDay","taskType","points","punishingPoints","paused","durationMinutes","dailyTarget","daysOfWeek","habitListId","tagIds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habits.byId","tags":["habits"],"x-zts-kind":"query"}},"/api/v1/hints.list":{"post":{"description":"List the feature-discovery hints the caller dismissed, oldest first. A hint not listed is still showing.","operationId":"hintsList","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"key":{"type":"string"},"dismissedAt":{"type":"number"}},"required":["id","ownerId","key","dismissedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"hints.list","tags":["hints"],"x-zts-kind":"query"}},"/api/v1/lifeLogs.mine":{"post":{"description":"List the caller's life-log entries, newest first. Optional filters: from/to (epoch ms, inclusive) on startAt, and activityId, contactId or locationId to get one entity's history; limit defaults to 200.","operationId":"lifeLogsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityId":{"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)$"},"contactId":{"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)$"},"from":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"type":"integer","minimum":1,"maximum":1000},"locationId":{"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)$"},"to":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"startAt":{"type":"number"},"durationSeconds":{"type":["number","null"]},"note":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"contactIds":{"type":"array","items":{"type":"string"}},"locationIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","startAt","durationSeconds","note","activityIds","contactIds","locationIds","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"lifeLogs.mine","tags":["lifeLogs"],"x-zts-kind":"query"}},"/api/v1/lifeLogs.byId":{"post":{"description":"Get one of the caller's life-log entries by id, or null.","operationId":"lifeLogsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"startAt":{"type":"number"},"durationSeconds":{"type":["number","null"]},"note":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"contactIds":{"type":"array","items":{"type":"string"}},"locationIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","startAt","durationSeconds","note","activityIds","contactIds","locationIds","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"lifeLogs.byId","tags":["lifeLogs"],"x-zts-kind":"query"}},"/api/v1/locations.mine":{"post":{"description":"List the caller's locations (name, address, coordinates, parent location), by name.","operationId":"locationsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"address":{"type":["string","null"]},"note":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"parentLocationId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","address","note","latitude","longitude","parentLocationId","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"locations.mine","tags":["locations"],"x-zts-kind":"query"}},"/api/v1/locations.byId":{"post":{"description":"Get one of the caller's locations by id, or null.","operationId":"locationsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"address":{"type":["string","null"]},"note":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"parentLocationId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","address","note","latitude","longitude","parentLocationId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"locations.byId","tags":["locations"],"x-zts-kind":"query"}},"/api/v1/noteFolders.mine":{"post":{"description":"List the caller's note folders and the ones shared with them (nested through parentFolderId), in sidebar order.","operationId":"noteFoldersMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentFolderId":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentFolderId","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"noteFolders.mine","tags":["noteFolders"],"x-zts-kind":"query"}},"/api/v1/noteFolders.byId":{"post":{"description":"Get one of the caller's note folders by id, or null.","operationId":"noteFoldersById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentFolderId":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentFolderId","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"noteFolders.byId","tags":["noteFolders"],"x-zts-kind":"query"}},"/api/v1/notes.mine":{"post":{"description":"List the caller's notes and those in folders shared with them (title, markdown content, folder, pinned), in sidebar order.","operationId":"notesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"emoji":{"type":["string","null"]},"content":{"type":"string"},"pinned":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","folderId","title","emoji","content","pinned","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"notes.mine","tags":["notes"],"x-zts-kind":"query"}},"/api/v1/notes.byId":{"post":{"description":"Get one of the caller's notes by id, with its markdown content, or null.","operationId":"notesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"emoji":{"type":["string","null"]},"content":{"type":"string"},"pinned":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","folderId","title","emoji","content","pinned","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"notes.byId","tags":["notes"],"x-zts-kind":"query"}},"/api/v1/medicationLogs.range":{"post":{"description":"List the caller's medication logs (taken, skipped or missed doses), newest first, between two local days (YYYY-MM-DD, inclusive, both optional); pass medicationId for one medication's.","operationId":"medicationLogsRange","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"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])))$"},"medicationId":{"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)$"},"to":{"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])))$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"requirementId":{"type":["string","null"]},"status":{"type":"string","enum":["taken","skipped","missed"]},"dosage":{"type":["string","null"]},"notes":{"type":["string","null"]},"takenAt":{"type":"number"},"date":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","requirementId","status","dosage","notes","takenAt","date","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationLogs.range","tags":["medicationLogs"],"x-zts-kind":"query"}},"/api/v1/medicationLogs.byId":{"post":{"description":"Get one of the caller's medication logs by id, or null.","operationId":"medicationLogsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"requirementId":{"type":["string","null"]},"status":{"type":"string","enum":["taken","skipped","missed"]},"dosage":{"type":["string","null"]},"notes":{"type":["string","null"]},"takenAt":{"type":"number"},"date":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","requirementId","status","dosage","notes","takenAt","date","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationLogs.byId","tags":["medicationLogs"],"x-zts-kind":"query"}},"/api/v1/medicationPrescriptions.mine":{"post":{"description":"List the caller's medication prescriptions, newest start date first; pass medicationId for one medication's.","operationId":"medicationPrescriptionsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"medicationId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"dosage":{"type":["string","null"]},"prescriptionDate":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","dosage","prescriptionDate","startDate","endDate","notes","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationPrescriptions.mine","tags":["medicationPrescriptions"],"x-zts-kind":"query"}},"/api/v1/medicationPrescriptions.byId":{"post":{"description":"Get one of the caller's medication prescriptions by id, or null.","operationId":"medicationPrescriptionsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"dosage":{"type":["string","null"]},"prescriptionDate":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","dosage","prescriptionDate","startDate","endDate","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationPrescriptions.byId","tags":["medicationPrescriptions"],"x-zts-kind":"query"}},"/api/v1/medicationRequirements.mine":{"post":{"description":"List the caller's dose requirements (the doses each prescription asks for every day), by prescription and position; pass prescriptionId for one prescription's.","operationId":"medicationRequirementsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"prescriptionId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"prescriptionId":{"type":"string"},"dosage":{"type":"string"},"timeOfDay":{"type":"string","enum":["morning","afternoon","evening","night","any"]},"exactTime":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","prescriptionId","dosage","timeOfDay","exactTime","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationRequirements.mine","tags":["medicationRequirements"],"x-zts-kind":"query"}},"/api/v1/medicationRequirements.byId":{"post":{"description":"Get one of the caller's dose requirements by id, or null.","operationId":"medicationRequirementsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"prescriptionId":{"type":"string"},"dosage":{"type":"string"},"timeOfDay":{"type":"string","enum":["morning","afternoon","evening","night","any"]},"exactTime":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","prescriptionId","dosage","timeOfDay","exactTime","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationRequirements.byId","tags":["medicationRequirements"],"x-zts-kind":"query"}},"/api/v1/medications.mine":{"post":{"description":"List the caller's medications by name.","operationId":"medicationsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["pill","capsule","liquid","injection","inhaler","spray","drops","cream","patch","powder","other"]},"takeType":{"type":"string","enum":["withFood","onEmptyStomach","afterFood","beforeFood","any"]},"shortNote":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","takeType","shortNote","notes","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medications.mine","tags":["medications"],"x-zts-kind":"query"}},"/api/v1/medications.byId":{"post":{"description":"Get one of the caller's medications by id, or null.","operationId":"medicationsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["pill","capsule","liquid","injection","inhaler","spray","drops","cream","patch","powder","other"]},"takeType":{"type":"string","enum":["withFood","onEmptyStomach","afterFood","beforeFood","any"]},"shortNote":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","takeType","shortNote","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medications.byId","tags":["medications"],"x-zts-kind":"query"}},"/api/v1/packingActivities.mine":{"post":{"description":"List the caller's packing activities (Beach, Hiking…) by name.","operationId":"packingActivitiesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingActivities.mine","tags":["packingActivities"],"x-zts-kind":"query"}},"/api/v1/packingActivities.byId":{"post":{"description":"Get one of the caller's packing activities by id, or null.","operationId":"packingActivitiesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingActivities.byId","tags":["packingActivities"],"x-zts-kind":"query"}},"/api/v1/packingItems.mine":{"post":{"description":"List the caller's packing library items by name, with their activities, quantity rules and flags.","operationId":"packingItemsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"defaultQuantity":{"type":["number","null"]},"quantityPerDay":{"type":"boolean"},"essential":{"type":"boolean"},"expendable":{"type":"boolean"},"needsCharging":{"type":"boolean"},"needsToBeChecked":{"type":"boolean"},"chargingStatus":{"type":"string","enum":["notCharged","charging","charged"]},"packWhen":{"type":"string","enum":["before","morning"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","category","activityIds","defaultQuantity","quantityPerDay","essential","expendable","needsCharging","needsToBeChecked","chargingStatus","packWhen","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingItems.mine","tags":["packingItems"],"x-zts-kind":"query"}},"/api/v1/packingItems.byId":{"post":{"description":"Get one of the caller's packing items by id, or null.","operationId":"packingItemsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"defaultQuantity":{"type":["number","null"]},"quantityPerDay":{"type":"boolean"},"essential":{"type":"boolean"},"expendable":{"type":"boolean"},"needsCharging":{"type":"boolean"},"needsToBeChecked":{"type":"boolean"},"chargingStatus":{"type":"string","enum":["notCharged","charging","charged"]},"packWhen":{"type":"string","enum":["before","morning"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","category","activityIds","defaultQuantity","quantityPerDay","essential","expendable","needsCharging","needsToBeChecked","chargingStatus","packWhen","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingItems.byId","tags":["packingItems"],"x-zts-kind":"query"}},"/api/v1/ingredientLists.mine":{"post":{"description":"List the caller's ingredient lists (stores or groups of ingredients) by name.","operationId":"ingredientListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"hiddenInShopping":{"type":"boolean"},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","hiddenInShopping","name"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredientLists.mine","tags":["ingredientLists"],"x-zts-kind":"query"}},"/api/v1/ingredientLists.byId":{"post":{"description":"Get one of the caller's ingredient lists by id, or null.","operationId":"ingredientListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"hiddenInShopping":{"type":"boolean"},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","hiddenInShopping","name"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredientLists.byId","tags":["ingredientLists"],"x-zts-kind":"query"}},"/api/v1/ingredients.mine":{"post":{"description":"List the caller's ingredients by name, with shopping status (to_buy is the shopping list), aisle category and the amount to buy.","operationId":"ingredientsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"defaultUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"description":{"type":["string","null"]},"emoji":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"staple":{"type":"boolean"},"status":{"type":"string","enum":["to_buy","in_stock","running_low","out_of_stock","cannot_find","not_needed"]},"toBuyNote":{"type":["string","null"]},"toBuyQuantity":{"type":["number","null"]},"toBuyUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]}},"required":["createdAt","id","ownerId","updatedAt","category","defaultUnit","description","emoji","listId","name","staple","status","toBuyNote","toBuyQuantity","toBuyUnit"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredients.mine","tags":["ingredients"],"x-zts-kind":"query"}},"/api/v1/ingredients.byId":{"post":{"description":"Get one of the caller's ingredients by id, or null.","operationId":"ingredientsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"defaultUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"description":{"type":["string","null"]},"emoji":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"staple":{"type":"boolean"},"status":{"type":"string","enum":["to_buy","in_stock","running_low","out_of_stock","cannot_find","not_needed"]},"toBuyNote":{"type":["string","null"]},"toBuyQuantity":{"type":["number","null"]},"toBuyUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]}},"required":["createdAt","id","ownerId","updatedAt","category","defaultUnit","description","emoji","listId","name","staple","status","toBuyNote","toBuyQuantity","toBuyUnit"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredients.byId","tags":["ingredients"],"x-zts-kind":"query"}},"/api/v1/mealPlans.mine":{"post":{"description":"List the caller's meal plans (named groups of planned meals) by name.","operationId":"mealPlansMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","name"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"mealPlans.mine","tags":["mealPlans"],"x-zts-kind":"query"}},"/api/v1/mealPlans.byId":{"post":{"description":"Get one of the caller's meal plans by id, or null.","operationId":"mealPlansById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","name"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"mealPlans.byId","tags":["mealPlans"],"x-zts-kind":"query"}},"/api/v1/plannedMeals.mine":{"post":{"description":"List the caller's planned meals (day, slot, recipe, servings), optionally between two YYYY-MM-DD days inclusive, by day and slot order.","operationId":"plannedMealsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"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])))$"},"to":{"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])))$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"day":{"type":"string"},"emoji":{"type":["string","null"]},"mealPlanId":{"type":["string","null"]},"name":{"type":"string"},"position":{"type":"number"},"recipeId":{"type":["string","null"]},"servings":{"type":"number"},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","day","emoji","mealPlanId","name","position","recipeId","servings","slot"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannedMeals.mine","tags":["plannedMeals"],"x-zts-kind":"query"}},"/api/v1/plannedMeals.byId":{"post":{"description":"Get one of the caller's planned meals by id, or null.","operationId":"plannedMealsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"day":{"type":"string"},"emoji":{"type":["string","null"]},"mealPlanId":{"type":["string","null"]},"name":{"type":"string"},"position":{"type":"number"},"recipeId":{"type":["string","null"]},"servings":{"type":"number"},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","day","emoji","mealPlanId","name","position","recipeId","servings","slot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannedMeals.byId","tags":["plannedMeals"],"x-zts-kind":"query"}},"/api/v1/plannerBlockTodos.forEvent":{"post":{"description":"List the todos one of the caller's time blocks holds (planner event id), in order, skipping trashed ones. Rows name the todo by todoId.","operationId":"plannerBlockTodosForEvent","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"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":["eventId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"eventId":{"type":"string"},"todoId":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","eventId","todoId","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerBlockTodos.forEvent","tags":["plannerBlockTodos"],"x-zts-kind":"query"}},"/api/v1/plannerEvents.range":{"post":{"description":"List the caller's planner events (and those in planner lists shared with them) that touch [from, to) (epoch ms), plus every recurring series (expand its rrule to get the occurrences), ordered by start.","operationId":"plannerEventsRange","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"to":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["from","to"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"type":{"type":"string","enum":["regular","todo","timeBlock","habit","routine"]},"title":{"type":["string","null"]},"emoji":{"type":["string","null"]},"startAt":{"type":"number"},"endAt":{"type":"number"},"allDay":{"type":"boolean"},"location":{"type":["string","null"]},"note":{"type":["string","null"]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"type":["string","null"]},"rruleExclusions":{"type":"array","items":{"type":"number"}},"listId":{"type":["string","null"]},"todoId":{"type":["string","null"]},"habitId":{"type":["string","null"]},"routineId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","type","title","emoji","startAt","endAt","allDay","location","note","unconfirmed","category","rrule","rruleExclusions","listId","todoId","habitId","routineId","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.range","tags":["plannerEvents"],"x-zts-kind":"query"}},"/api/v1/plannerEvents.byId":{"post":{"description":"Get one of the caller's planner events by id, or null.","operationId":"plannerEventsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"type":{"type":"string","enum":["regular","todo","timeBlock","habit","routine"]},"title":{"type":["string","null"]},"emoji":{"type":["string","null"]},"startAt":{"type":"number"},"endAt":{"type":"number"},"allDay":{"type":"boolean"},"location":{"type":["string","null"]},"note":{"type":["string","null"]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"type":["string","null"]},"rruleExclusions":{"type":"array","items":{"type":"number"}},"listId":{"type":["string","null"]},"todoId":{"type":["string","null"]},"habitId":{"type":["string","null"]},"routineId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","type","title","emoji","startAt","endAt","allDay","location","note","unconfirmed","category","rrule","rruleExclusions","listId","todoId","habitId","routineId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.byId","tags":["plannerEvents"],"x-zts-kind":"query"}},"/api/v1/plannerLists.mine":{"post":{"description":"List the caller's planner lists (calendars), and the ones shared with them, in order.","operationId":"plannerListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":"string"},"showInDay":{"type":"boolean"},"showInWeek":{"type":"boolean"},"showInMonth":{"type":"boolean"},"showInAgenda":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","showInDay","showInWeek","showInMonth","showInAgenda","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerLists.mine","tags":["plannerLists"],"x-zts-kind":"query"}},"/api/v1/plannerLists.byId":{"post":{"description":"Get one of the caller's planner lists by id, or null.","operationId":"plannerListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":"string"},"showInDay":{"type":"boolean"},"showInWeek":{"type":"boolean"},"showInMonth":{"type":"boolean"},"showInAgenda":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","showInDay","showInWeek","showInMonth","showInAgenda","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerLists.byId","tags":["plannerLists"],"x-zts-kind":"query"}},"/api/v1/financeCards.mine":{"post":{"description":"List the caller's payment cards (name, brand, debit/credit, last four digits, currency), by name.","operationId":"financeCardsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"brand":{"type":"string","enum":["visa","mastercard","amex","discover","other"]},"kind":{"type":"string","enum":["debit","credit"]},"lastFour":{"type":["string","null"]},"currency":{"type":["string","null"]},"color":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","brand","kind","lastFour","currency","color","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeCards.mine","tags":["financeCards"],"x-zts-kind":"query"}},"/api/v1/financeCards.byId":{"post":{"description":"Get one of the caller's payment cards by id, or null.","operationId":"financeCardsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"brand":{"type":"string","enum":["visa","mastercard","amex","discover","other"]},"kind":{"type":"string","enum":["debit","credit"]},"lastFour":{"type":["string","null"]},"currency":{"type":["string","null"]},"color":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","brand","kind","lastFour","currency","color","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeCards.byId","tags":["financeCards"],"x-zts-kind":"query"}},"/api/v1/financeSubscriptions.mine":{"post":{"description":"List the caller's recurring subscriptions (amount, currency, billing cycle monthly/annual/custom, status, start and end days, card, reminder), by name.","operationId":"financeSubscriptionsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"amount":{"type":"number"},"currency":{"type":"string"},"billingCycle":{"type":"string","enum":["monthly","annual","custom"]},"intervalDays":{"type":["number","null"]},"status":{"type":"string","enum":["active","paused","cancelled"]},"category":{"type":"string","enum":["personal","work"]},"cardId":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"remindDaysBefore":{"type":["number","null"]},"url":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","amount","currency","billingCycle","intervalDays","status","category","cardId","startDate","endDate","remindDaysBefore","url","notes","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeSubscriptions.mine","tags":["financeSubscriptions"],"x-zts-kind":"query"}},"/api/v1/financeSubscriptions.byId":{"post":{"description":"Get one of the caller's subscriptions by id, or null.","operationId":"financeSubscriptionsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"amount":{"type":"number"},"currency":{"type":"string"},"billingCycle":{"type":"string","enum":["monthly","annual","custom"]},"intervalDays":{"type":["number","null"]},"status":{"type":"string","enum":["active","paused","cancelled"]},"category":{"type":"string","enum":["personal","work"]},"cardId":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"remindDaysBefore":{"type":["number","null"]},"url":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","amount","currency","billingCycle","intervalDays","status","category","cardId","startDate","endDate","remindDaysBefore","url","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeSubscriptions.byId","tags":["financeSubscriptions"],"x-zts-kind":"query"}},"/api/v1/pomodoros.mine":{"post":{"description":"List the caller's pomodoros (focus sessions and breaks), newest first; from/to (epoch ms, to exclusive) limit them by start time.","operationId":"pomodorosMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","minimum":1,"maximum":1000},"to":{"type":"integer","minimum":0,"maximum":9007199254740991}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.mine","tags":["pomodoros"],"x-zts-kind":"query"}},"/api/v1/pomodoros.running":{"post":{"description":"Get the caller's running pomodoro (started, not ended; possibly paused), or null.","operationId":"pomodorosRunning","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.running","tags":["pomodoros"],"x-zts-kind":"query"}},"/api/v1/pomodoros.byId":{"post":{"description":"Get one of the caller's pomodoros by id, or null.","operationId":"pomodorosById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.byId","tags":["pomodoros"],"x-zts-kind":"query"}},"/api/v1/pomodoros.stats":{"post":{"description":"Focus minutes and completed focus sessions of the caller's pomodoros started between from and to (epoch ms, to exclusive). Cancelled sessions and breaks don't count.","operationId":"pomodorosStats","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"integer","minimum":0,"maximum":9007199254740991},"to":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["from","to"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"completedSessions":{"type":"number"},"focusMinutes":{"type":"number"}},"required":["completedSessions","focusMinutes"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.stats","tags":["pomodoros"],"x-zts-kind":"query"}},"/api/v1/problemLogs.mine":{"post":{"description":"List the caller's logged problem occurrences, latest day first; pass problemId for one problem's history.","operationId":"problemLogsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"problemId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"problemId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","problemId","date","note","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problemLogs.mine","tags":["problemLogs"],"x-zts-kind":"query"}},"/api/v1/problemLogs.byId":{"post":{"description":"Get one of the caller's logged problem occurrences by id, or null.","operationId":"problemLogsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"problemId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","problemId","date","note","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problemLogs.byId","tags":["problemLogs"],"x-zts-kind":"query"}},"/api/v1/problems.mine":{"post":{"description":"List the caller's problems (recurring annoyances, active and resolved), newest first.","operationId":"problemsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"annoyingLevel":{"type":"string","enum":["fewTimesPerDay","everyDay","everyWeek","everyMonth","notAnnoying"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","annoyingLevel","done","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problems.mine","tags":["problems"],"x-zts-kind":"query"}},"/api/v1/problems.byId":{"post":{"description":"Get one of the caller's problems by id, or null.","operationId":"problemsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"annoyingLevel":{"type":"string","enum":["fewTimesPerDay","everyDay","everyWeek","everyMonth","notAnnoying"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","annoyingLevel","done","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problems.byId","tags":["problems"],"x-zts-kind":"query"}},"/api/v1/projects.mine":{"post":{"description":"List the caller's projects and the ones shared with them by name.","operationId":"projectsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"status":{"type":"string","enum":["todo","inProgress","done"]},"taskType":{"type":"string","enum":["any","work","personal"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"startDate":{"type":["string","null"]},"plannedDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","status","taskType","priority","startDate","plannedDate","dueDate","showInOverview","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"projects.mine","tags":["projects"],"x-zts-kind":"query"}},"/api/v1/projects.byId":{"post":{"description":"Get one of the caller's projects by id, or null.","operationId":"projectsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"status":{"type":"string","enum":["todo","inProgress","done"]},"taskType":{"type":"string","enum":["any","work","personal"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"startDate":{"type":["string","null"]},"plannedDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","status","taskType","priority","startDate","plannedDate","dueDate","showInOverview","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"projects.byId","tags":["projects"],"x-zts-kind":"query"}},"/api/v1/recipeIngredients.mine":{"post":{"description":"List the caller's recipe ingredient lines (quantity, unit, ingredient), optionally of one recipe, in recipe order.","operationId":"recipeIngredientsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"recipeId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"customUnit":{"type":["string","null"]},"ingredientId":{"type":"string"},"note":{"type":["string","null"]},"position":{"type":"number"},"quantity":{"type":["number","null"]},"quantityText":{"type":["string","null"]},"recipeId":{"type":"string"},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]}},"required":["createdAt","id","ownerId","updatedAt","customUnit","ingredientId","note","position","quantity","quantityText","recipeId","unit"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeIngredients.mine","tags":["recipeIngredients"],"x-zts-kind":"query"}},"/api/v1/recipeIngredients.byId":{"post":{"description":"Get one of the caller's recipe ingredient lines by id, or null.","operationId":"recipeIngredientsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"customUnit":{"type":["string","null"]},"ingredientId":{"type":"string"},"note":{"type":["string","null"]},"position":{"type":"number"},"quantity":{"type":["number","null"]},"quantityText":{"type":["string","null"]},"recipeId":{"type":"string"},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]}},"required":["createdAt","id","ownerId","updatedAt","customUnit","ingredientId","note","position","quantity","quantityText","recipeId","unit"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeIngredients.byId","tags":["recipeIngredients"],"x-zts-kind":"query"}},"/api/v1/recipes.mine":{"post":{"description":"List the caller's recipes (and those in recipe books shared with them) by name (without their ingredient lines; see recipeIngredients.mine).","operationId":"recipesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"bookmarked":{"type":"boolean"},"cookMinutes":{"type":["number","null"]},"description":{"type":["string","null"]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"instructions":{"type":["string","null"]},"name":{"type":"string"},"notes":{"type":["string","null"]},"prepMinutes":{"type":["number","null"]},"recipeBookId":{"type":"string"},"servings":{"type":"number"},"sourceUrl":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","bookmarked","cookMinutes","description","difficulty","emoji","imageUrl","instructions","name","notes","prepMinutes","recipeBookId","servings","sourceUrl","tags","type","usualSlot"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipes.mine","tags":["recipes"],"x-zts-kind":"query"}},"/api/v1/recipes.byId":{"post":{"description":"Get one of the caller's recipes by id, or null.","operationId":"recipesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"bookmarked":{"type":"boolean"},"cookMinutes":{"type":["number","null"]},"description":{"type":["string","null"]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"instructions":{"type":["string","null"]},"name":{"type":"string"},"notes":{"type":["string","null"]},"prepMinutes":{"type":["number","null"]},"recipeBookId":{"type":"string"},"servings":{"type":"number"},"sourceUrl":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","bookmarked","cookMinutes","description","difficulty","emoji","imageUrl","instructions","name","notes","prepMinutes","recipeBookId","servings","sourceUrl","tags","type","usualSlot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipes.byId","tags":["recipes"],"x-zts-kind":"query"}},"/api/v1/recipeBooks.mine":{"post":{"description":"List the caller's recipe books, and the ones shared with them, by position. Every one of the caller's recipes sits in one of them.","operationId":"recipeBooksMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeBooks.mine","tags":["recipeBooks"],"x-zts-kind":"query"}},"/api/v1/recipeBooks.byId":{"post":{"description":"Get one of the caller's recipe books by id, or null.","operationId":"recipeBooksById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeBooks.byId","tags":["recipeBooks"],"x-zts-kind":"query"}},"/api/v1/routineItems.mine":{"post":{"description":"List the caller's routine steps in play order, optionally only one routine's.","operationId":"routineItemsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"routineId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"habitId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","habitId","name","emoji","durationSeconds","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineItems.mine","tags":["routineItems"],"x-zts-kind":"query"}},"/api/v1/routineItems.byId":{"post":{"description":"Get one of the caller's routine steps by id, or null.","operationId":"routineItemsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"habitId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","habitId","name","emoji","durationSeconds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineItems.byId","tags":["routineItems"],"x-zts-kind":"query"}},"/api/v1/routineLists.mine":{"post":{"description":"List the caller's routine lists by position, then name. A list can sit inside another (parentListId).","operationId":"routineListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineLists.mine","tags":["routineLists"],"x-zts-kind":"query"}},"/api/v1/routineLists.byId":{"post":{"description":"Get one of the caller's routine lists by id, or null.","operationId":"routineListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineLists.byId","tags":["routineLists"],"x-zts-kind":"query"}},"/api/v1/routineRuns.mine":{"post":{"description":"List the caller's routine runs, newest first, optionally only one routine's or one day's (YYYY-MM-DD).","operationId":"routineRunsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"day":{"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])))$"},"routineId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"day":{"type":"string"},"startedAt":{"type":"number"},"completedAt":{"type":["number","null"]},"completedItemIds":{"type":"array","items":{"type":"string"}},"status":{"anyOf":[{"type":"string","enum":["done","skipped","failed"]},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","day","startedAt","completedAt","completedItemIds","status","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.mine","tags":["routineRuns"],"x-zts-kind":"query"}},"/api/v1/routineRuns.byId":{"post":{"description":"Get one of the caller's routine runs by id, or null.","operationId":"routineRunsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"day":{"type":"string"},"startedAt":{"type":"number"},"completedAt":{"type":["number","null"]},"completedItemIds":{"type":"array","items":{"type":"string"}},"status":{"anyOf":[{"type":"string","enum":["done","skipped","failed"]},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","day","startedAt","completedAt","completedItemIds","status","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.byId","tags":["routineRuns"],"x-zts-kind":"query"}},"/api/v1/routines.mine":{"post":{"description":"List the caller's routines, oldest first.","operationId":"routinesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"paused":{"type":"boolean"},"routineListId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","timeOfDay","daysOfWeek","paused","routineListId","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routines.mine","tags":["routines"],"x-zts-kind":"query"}},"/api/v1/routines.byId":{"post":{"description":"Get one of the caller's routines by id, or null.","operationId":"routinesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"paused":{"type":"boolean"},"routineListId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","timeOfDay","daysOfWeek","paused","routineListId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routines.byId","tags":["routines"],"x-zts-kind":"query"}},"/api/v1/sections.mine":{"post":{"description":"List the caller's sections (of projects and lists) in order.","operationId":"sectionsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","projectId","listId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"sections.mine","tags":["sections"],"x-zts-kind":"query"}},"/api/v1/sections.byId":{"post":{"description":"Get one of the caller's sections by id, or null.","operationId":"sectionsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","projectId","listId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"sections.byId","tags":["sections"],"x-zts-kind":"query"}},"/api/v1/shareInvites.mine":{"post":{"description":"List the caller's share invites: the ones they sent (fromUserId is the caller) and the ones waiting for their answer (toUserId is the caller; declined ones have rejected true), newest first.","operationId":"shareInvitesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"fromUserId":{"type":"string"},"fromUserName":{"type":"string"},"fromUserImage":{"type":["string","null"]},"toUserId":{"type":"string"},"toUserName":{"type":"string"},"toUserImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"rejected":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","fromUserId","fromUserName","fromUserImage","toUserId","toUserName","toUserImage","role","rejected","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shareInvites.mine","tags":["shareInvites"],"x-zts-kind":"query"}},"/api/v1/shareInvites.byId":{"post":{"description":"Get one share invite the caller sent or received, or null.","operationId":"shareInvitesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"fromUserId":{"type":"string"},"fromUserName":{"type":"string"},"fromUserImage":{"type":["string","null"]},"toUserId":{"type":"string"},"toUserName":{"type":"string"},"toUserImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"rejected":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","fromUserId","fromUserName","fromUserImage","toUserId","toUserName","toUserImage","role","rejected","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shareInvites.byId","tags":["shareInvites"],"x-zts-kind":"query"}},"/api/v1/shares.mine":{"post":{"description":"List every accepted share the caller is part of: entities they shared with others (ownerId is the caller) and entities shared with them (userId is the caller), with each side's name, avatar and role.","operationId":"sharesMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"ownerId":{"type":"string"},"ownerName":{"type":"string"},"ownerImage":{"type":["string","null"]},"userId":{"type":"string"},"userName":{"type":"string"},"userImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","ownerId","ownerName","ownerImage","userId","userName","userImage","role","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shares.mine","tags":["shares"],"x-zts-kind":"query"}},"/api/v1/shares.byId":{"post":{"description":"Get one share the caller owns or received, or null.","operationId":"sharesById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"ownerId":{"type":"string"},"ownerName":{"type":"string"},"ownerImage":{"type":["string","null"]},"userId":{"type":"string"},"userName":{"type":"string"},"userImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","ownerId","ownerName","ownerImage","userId","userName","userImage","role","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shares.byId","tags":["shares"],"x-zts-kind":"query"}},"/api/v1/shares.forEntity":{"post":{"description":"List who one of the caller's own entities (kind + entityId) is shared with.","operationId":"sharesForEntity","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"entityId":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]}},"required":["entityId","kind"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"ownerId":{"type":"string"},"ownerName":{"type":"string"},"ownerImage":{"type":["string","null"]},"userId":{"type":"string"},"userName":{"type":"string"},"userImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","ownerId","ownerName","ownerImage","userId","userName","userImage","role","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shares.forEntity","tags":["shares"],"x-zts-kind":"query"}},"/api/v1/stays.mine":{"post":{"description":"List the caller's stays by check-in day, optionally for one trip (tripId).","operationId":"staysMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tripId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["hotel","hostel","airbnb","couchsurfing","ownHome","other"]},"address":{"type":["string","null"]},"checkIn":{"type":["string","null"]},"checkOut":{"type":["string","null"]},"booked":{"type":"boolean"},"link":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","name","type","address","checkIn","checkOut","booked","link","notes","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"stays.mine","tags":["stays"],"x-zts-kind":"query"}},"/api/v1/stays.byId":{"post":{"description":"Get one of the caller's stays by id, or null.","operationId":"staysById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["hotel","hostel","airbnb","couchsurfing","ownHome","other"]},"address":{"type":["string","null"]},"checkIn":{"type":["string","null"]},"checkOut":{"type":["string","null"]},"booked":{"type":"boolean"},"link":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","name","type","address","checkIn","checkOut","booked","link","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"stays.byId","tags":["stays"],"x-zts-kind":"query"}},"/api/v1/shopping.preview":{"post":{"description":"Preview the shopping list the meals planned between two YYYY-MM-DD days (inclusive) need: one line per ingredient and unit, recipe quantities scaled by planned servings, sorted by aisle. Changes nothing; shopping.addMany puts lines on the list.","operationId":"shoppingPreview","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"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])))$"},"to":{"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])))$"}},"required":["from","to"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"customUnit":{"type":["string","null"]},"emoji":{"type":["string","null"]},"ingredientId":{"type":"string"},"key":{"type":"string"},"mealNames":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"quantity":{"type":["number","null"]},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]}},"required":["category","customUnit","emoji","ingredientId","key","mealNames","name","quantity","unit"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shopping.preview","tags":["shopping"],"x-zts-kind":"query"}},"/api/v1/tags.mine":{"post":{"description":"List the caller's tags by name.","operationId":"tagsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"points":{"type":"number"},"groupId":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"paused":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","points","groupId","showInOverview","paused","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.mine","tags":["tags"],"x-zts-kind":"query"}},"/api/v1/tags.groups":{"post":{"description":"List the caller's tag groups by name.","operationId":"tagsGroups","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.groups","tags":["tags"],"x-zts-kind":"query"}},"/api/v1/tags.byId":{"post":{"description":"Get one of the caller's tags by id, or null.","operationId":"tagsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"points":{"type":"number"},"groupId":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"paused":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","points","groupId","showInOverview","paused","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.byId","tags":["tags"],"x-zts-kind":"query"}},"/api/v1/tags.groupById":{"post":{"description":"Get one of the caller's tag groups by id, or null.","operationId":"tagsGroupById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.groupById","tags":["tags"],"x-zts-kind":"query"}},"/api/v1/todoLists.mine":{"post":{"description":"List the caller's todo lists and the ones shared with them by name.","operationId":"todoListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"paused":{"type":"boolean"},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","parentListId","taskType","paused","showInOverview","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todoLists.mine","tags":["todoLists"],"x-zts-kind":"query"}},"/api/v1/todoLists.byId":{"post":{"description":"Get one of the caller's todo lists by id, or null.","operationId":"todoListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"paused":{"type":"boolean"},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","parentListId","taskType","paused","showInOverview","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todoLists.byId","tags":["todoLists"],"x-zts-kind":"query"}},"/api/v1/todos.mine":{"post":{"description":"List the caller's active and paused todos that aren't in the trash, newest first.","operationId":"todosMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.mine","tags":["todos"],"x-zts-kind":"query"}},"/api/v1/todos.archived":{"post":{"description":"List the caller's archived todos that aren't in the trash, newest first.","operationId":"todosArchived","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.archived","tags":["todos"],"x-zts-kind":"query"}},"/api/v1/todos.trash":{"post":{"description":"List the caller's trashed todos, most recently deleted first.","operationId":"todosTrash","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.trash","tags":["todos"],"x-zts-kind":"query"}},"/api/v1/todos.byId":{"post":{"description":"Get one of the caller's todos by id, or null.","operationId":"todosById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.byId","tags":["todos"],"x-zts-kind":"query"}},"/api/v1/tracker.mine":{"post":{"description":"List the caller's tracker items (movies, shows, books, video games, board games), optionally of one kind, in shelf order.","operationId":"trackerMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"rating":{"type":["number","null"]},"notes":{"type":["string","null"]},"position":{"type":"number"},"startedOn":{"type":["string","null"]},"finishedOn":{"type":["string","null"]},"url":{"type":["string","null"]},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"year":{"type":["number","null"]},"creators":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"type":["number","null"]},"siteName":{"type":["string","null"]},"externalIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerMineOutput__schema0"}},"unfurledAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","status","rating","notes","position","startedOn","finishedOn","url","title","subtitle","description","imageUrl","year","creators","genres","externalRating","externalRatingScale","siteName","externalIds","metadata","unfurledAt","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tracker.mine","tags":["tracker"],"x-zts-kind":"query"}},"/api/v1/tracker.byId":{"post":{"description":"Get one of the caller's tracker items by id, or null.","operationId":"trackerById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"rating":{"type":["number","null"]},"notes":{"type":["string","null"]},"position":{"type":"number"},"startedOn":{"type":["string","null"]},"finishedOn":{"type":["string","null"]},"url":{"type":["string","null"]},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"year":{"type":["number","null"]},"creators":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"type":["number","null"]},"siteName":{"type":["string","null"]},"externalIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerByIdOutput__schema0"}},"unfurledAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","status","rating","notes","position","startedOn","finishedOn","url","title","subtitle","description","imageUrl","year","creators","genres","externalRating","externalRatingScale","siteName","externalIds","metadata","unfurledAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tracker.byId","tags":["tracker"],"x-zts-kind":"query"}},"/api/v1/transports.mine":{"post":{"description":"List the caller's transports by departure, optionally for one trip (tripId).","operationId":"transportsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tripId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"type":{"type":"string","enum":["plane","train","bus","car","boat","bike","walk","other"]},"fromLocation":{"type":["string","null"]},"toLocation":{"type":["string","null"]},"departureAt":{"type":["number","null"]},"arrivalAt":{"type":["number","null"]},"seat":{"type":["string","null"]},"bookingRef":{"type":["string","null"]},"link":{"type":["string","null"]},"booked":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","type","fromLocation","toLocation","departureAt","arrivalAt","seat","bookingRef","link","booked","notes","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"transports.mine","tags":["transports"],"x-zts-kind":"query"}},"/api/v1/transports.byId":{"post":{"description":"Get one of the caller's transports by id, or null.","operationId":"transportsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"type":{"type":"string","enum":["plane","train","bus","car","boat","bike","walk","other"]},"fromLocation":{"type":["string","null"]},"toLocation":{"type":["string","null"]},"departureAt":{"type":["number","null"]},"arrivalAt":{"type":["number","null"]},"seat":{"type":["string","null"]},"bookingRef":{"type":["string","null"]},"link":{"type":["string","null"]},"booked":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","type","fromLocation","toLocation","departureAt","arrivalAt","seat","bookingRef","link","booked","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"transports.byId","tags":["transports"],"x-zts-kind":"query"}},"/api/v1/tripPacking.mine":{"post":{"description":"List the rows of the caller's trip packing checklists (status and double-check per packing item), optionally for one trip (tripId).","operationId":"tripPackingMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tripId":{"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":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"packingItemId":{"type":"string"},"status":{"type":"string","enum":["notPacked","packing","packed","skipped"]},"doubleChecked":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","packingItemId","status","doubleChecked","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.mine","tags":["tripPacking"],"x-zts-kind":"query"}},"/api/v1/tripPacking.byId":{"post":{"description":"Get one row of a trip's packing checklist by id, or null.","operationId":"tripPackingById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"packingItemId":{"type":"string"},"status":{"type":"string","enum":["notPacked","packing","packed","skipped"]},"doubleChecked":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","packingItemId","status","doubleChecked","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.byId","tags":["tripPacking"],"x-zts-kind":"query"}},"/api/v1/trips.mine":{"post":{"description":"List the caller's trips by start day (undated last), then name.","operationId":"tripsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"destination":{"type":["string","null"]},"startDay":{"type":["string","null"]},"endDay":{"type":["string","null"]},"shortDescription":{"type":["string","null"]},"notes":{"type":["string","null"]},"stayingAtOwnPlace":{"type":"boolean"},"ownTransport":{"type":"boolean"},"packingActivityIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","destination","startDay","endDay","shortDescription","notes","stayingAtOwnPlace","ownTransport","packingActivityIds","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"trips.mine","tags":["trips"],"x-zts-kind":"query"}},"/api/v1/trips.byId":{"post":{"description":"Get one of the caller's trips by id, or null.","operationId":"tripsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"destination":{"type":["string","null"]},"startDay":{"type":["string","null"]},"endDay":{"type":["string","null"]},"shortDescription":{"type":["string","null"]},"notes":{"type":["string","null"]},"stayingAtOwnPlace":{"type":"boolean"},"ownTransport":{"type":"boolean"},"packingActivityIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","destination","startDay","endDay","shortDescription","notes","stayingAtOwnPlace","ownTransport","packingActivityIds","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"trips.byId","tags":["trips"],"x-zts-kind":"query"}},"/api/v1/users.me":{"post":{"description":"Get the caller's own profile: name, email, username, bio, timezone, role, onboarding state, raw preferences, and the avatar and cover images (each with its key: the public URL, or an UploadThing file key on older images). Null when the user no longer exists.","operationId":"usersMe","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"bio":{"type":["string","null"]},"avatarImageUrl":{"type":["string","null"]},"coverImageUrl":{"type":["string","null"]},"avatarImageId":{"type":["string","null"]},"coverImageId":{"type":["string","null"]},"timezone":{"type":["string","null"]},"preferences":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"role":{"anyOf":[{"type":"string","enum":["user","admin"]},{"type":"null"}]},"username":{"type":["string","null"]},"displayUsername":{"type":["string","null"]},"onboarded":{"type":["boolean","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":["number","null"]},"avatarImage":{},"coverImage":{}},"required":["id","name","email","emailVerified","image","bio","avatarImageUrl","coverImageUrl","avatarImageId","coverImageId","timezone","preferences","role","username","displayUsername","onboarded","createdAt","updatedAt","avatarImage","coverImage"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.me","tags":["users"],"x-zts-kind":"query"}},"/api/v1/views.mine":{"post":{"description":"List the caller's saved todo views (each a filter-language query), in sidebar order.","operationId":"viewsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"query":{"$ref":"#/components/schemas/ViewsMineOutput__schema0"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","query","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.mine","tags":["views"],"x-zts-kind":"query"}},"/api/v1/views.byId":{"post":{"description":"Get one of the caller's saved todo views by id, or null.","operationId":"viewsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"query":{"$ref":"#/components/schemas/ViewsByIdOutput__schema0"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","query","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.byId","tags":["views"],"x-zts-kind":"query"}},"/api/v1/wishlist.mine":{"post":{"description":"List the caller's wishlist items (and those in wishlist lists shared with them), by status column (thinking, want, searching, ordered, arrived) and position.","operationId":"wishlistMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"wishlistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"url":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","wishlistListId","name","emoji","imageUrl","url","price","currency","notes","status","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.mine","tags":["wishlist"],"x-zts-kind":"query"}},"/api/v1/wishlist.byId":{"post":{"description":"Get one of the caller's wishlist items by id, or null.","operationId":"wishlistById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"wishlistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"url":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","wishlistListId","name","emoji","imageUrl","url","price","currency","notes","status","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.byId","tags":["wishlist"],"x-zts-kind":"query"}},"/api/v1/wishlistLists.mine":{"post":{"description":"List the caller's wishlist lists, and the ones shared with them, by position. Every one of the caller's wishlist items sits in one of them.","operationId":"wishlistListsMine","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlistLists.mine","tags":["wishlistLists"],"x-zts-kind":"query"}},"/api/v1/wishlistLists.byId":{"post":{"description":"Get one of the caller's wishlist lists by id, or null.","operationId":"wishlistListsById","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlistLists.byId","tags":["wishlistLists"],"x-zts-kind":"query"}},"/api/v1/activities.create":{"post":{"description":"Add an activity (type personal, work or both; defaults to personal) and return it. dayInterval makes it due again that many days after its last log.","operationId":"activitiesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dayInterval":{"anyOf":[{"type":"integer","minimum":0,"maximum":36500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"pinned":{"type":"boolean"},"type":{"type":"string","enum":["personal","work","both"]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["personal","work","both"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"activities.create","tags":["activities"],"x-zts-kind":"mutator"}},"/api/v1/activities.update":{"post":{"description":"Change an activity's name, emoji, type, day interval or pinned state, and return it.","operationId":"activitiesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dayInterval":{"anyOf":[{"type":"integer","minimum":0,"maximum":36500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"pinned":{"type":"boolean"},"type":{"type":"string","enum":["personal","work","both"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["personal","work","both"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"activities.update","tags":["activities"],"x-zts-kind":"mutator"}},"/api/v1/activities.remove":{"post":{"description":"Delete an activity; life-log entries keep everything else they hold.","operationId":"activitiesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"activities.remove","tags":["activities"],"x-zts-kind":"mutator"}},"/api/v1/affirmations.create":{"post":{"description":"Add an affirmation (optional category; in Today's daily rotation by default, not a favorite) and return it.","operationId":"affirmationsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"favorite":{"type":"boolean"},"showOnToday":{"type":"boolean"},"text":{"type":"string","minLength":1,"maxLength":5000},"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)$"}},"required":["text"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"text":{"type":"string"},"category":{"type":["string","null"]},"favorite":{"type":"boolean"},"showOnToday":{"type":"boolean"},"encrypted":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","text","category","favorite","showOnToday","encrypted","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"affirmations.create","tags":["affirmations"],"x-zts-kind":"mutator"}},"/api/v1/affirmations.update":{"post":{"description":"Change an affirmation's text, category, favorite or showOnToday, and return it.","operationId":"affirmationsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"favorite":{"type":"boolean"},"showOnToday":{"type":"boolean"},"text":{"type":"string","minLength":1,"maxLength":5000},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"text":{"type":"string"},"category":{"type":["string","null"]},"favorite":{"type":"boolean"},"showOnToday":{"type":"boolean"},"encrypted":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","text","category","favorite","showOnToday","encrypted","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"affirmations.update","tags":["affirmations"],"x-zts-kind":"mutator"}},"/api/v1/affirmations.remove":{"post":{"description":"Delete an affirmation.","operationId":"affirmationsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"affirmations.remove","tags":["affirmations"],"x-zts-kind":"mutator"}},"/api/v1/aiProviders.setEnabled":{"post":{"description":"Turn an AI provider on or off for the caller's chats.","operationId":"aiProvidersSetEnabled","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]}},"required":["enabled","providerId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiProviders.setEnabled","tags":["aiProviders"],"x-zts-kind":"mutator"}},"/api/v1/chats.create":{"post":{"description":"Start a chat and return it. Defaults: title 'New chat', intelligence 'standard'.","operationId":"chatsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"folderId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"modelId":{"type":["string","null"]},"providerId":{"type":["string","null"]},"title":{"type":"string","minLength":1,"maxLength":120}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"ownerId":{"type":"string"},"role":{"type":"string","enum":["user","assistant","system"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatsCreateOutput__schema0"}},"createdAt":{"type":"number"}},"required":["id","chatId","ownerId","role","parts","createdAt"],"additionalProperties":false}}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt","messages"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.create","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.rename":{"post":{"description":"Rename a chat and return it.","operationId":"chatsRename","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"title":{"type":"string","minLength":1,"maxLength":120}},"required":["id","title"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"ownerId":{"type":"string"},"role":{"type":"string","enum":["user","assistant","system"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatsRenameOutput__schema0"}},"createdAt":{"type":"number"}},"required":["id","chatId","ownerId","role","parts","createdAt"],"additionalProperties":false}}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt","messages"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.rename","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.setPinned":{"post":{"description":"Pin a chat to the top of the list, or unpin it, and return it.","operationId":"chatsSetPinned","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"pinned":{"type":"boolean"}},"required":["id","pinned"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"ownerId":{"type":"string"},"role":{"type":"string","enum":["user","assistant","system"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatsSetPinnedOutput__schema0"}},"createdAt":{"type":"number"}},"required":["id","chatId","ownerId","role","parts","createdAt"],"additionalProperties":false}}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt","messages"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.setPinned","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.moveToFolder":{"post":{"description":"Move a chat into one of the caller's folders, or out of any folder with null, and return it.","operationId":"chatsMoveToFolder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"folderId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]}},"required":["id","folderId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"ownerId":{"type":"string"},"role":{"type":"string","enum":["user","assistant","system"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatsMoveToFolderOutput__schema0"}},"createdAt":{"type":"number"}},"required":["id","chatId","ownerId","role","parts","createdAt"],"additionalProperties":false}}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt","messages"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.moveToFolder","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.updateSettings":{"post":{"description":"Change a chat's AI provider, model or intelligence level (only the fields given), and return it.","operationId":"chatsUpdateSettings","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"modelId":{"type":["string","null"]},"providerId":{"type":["string","null"]}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"pinned":{"type":"boolean"},"providerId":{"type":["string","null"]},"modelId":{"type":["string","null"]},"intelligence":{"type":"string","enum":["standard","low","medium","high"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"chatId":{"type":"string"},"ownerId":{"type":"string"},"role":{"type":"string","enum":["user","assistant","system"]},"parts":{"type":"array","items":{"$ref":"#/components/schemas/ChatsUpdateSettingsOutput__schema0"}},"createdAt":{"type":"number"}},"required":["id","chatId","ownerId","role","parts","createdAt"],"additionalProperties":false}}},"required":["id","ownerId","folderId","title","pinned","providerId","modelId","intelligence","createdAt","updatedAt","messages"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.updateSettings","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.remove":{"post":{"description":"Delete a chat and all of its messages permanently.","operationId":"chatsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.remove","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.createFolder":{"post":{"description":"Create a chat folder at the end of the caller's folder list and return it.","operationId":"chatsCreateFolder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":80}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.createFolder","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.renameFolder":{"post":{"description":"Rename a chat folder and return it.","operationId":"chatsRenameFolder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1,"maxLength":80}},"required":["id","name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.renameFolder","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/chats.deleteFolder":{"post":{"description":"Delete a chat folder. Its chats are kept and move out of the folder.","operationId":"chatsDeleteFolder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"chats.deleteFolder","tags":["chats"],"x-zts-kind":"mutator"}},"/api/v1/contacts.create":{"post":{"description":"Add a contact (relationship defaults to Friend) and return it. dayInterval is how often, in days, the caller wants to see them; birthday is YYYY-MM-DD.","operationId":"contactsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"avatarUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"birthday":{"anyOf":[{"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])))$"},{"type":"null"}]},"dayInterval":{"anyOf":[{"type":"integer","minimum":0,"maximum":36500},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"phone":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"pinned":{"type":"boolean"},"relationshipType":{"type":"string","enum":["Friend","Girlfriend","Boyfriend","Wife","Husband","Mother","Father","Sister","Brother","Son","Daughter","Grandmother","Grandfather","Grandchild","Aunt","Uncle","Cousin","Nephew","Niece","MotherInLaw","FatherInLaw","SisterInLaw","BrotherInLaw","Acquaintance","Other"]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"avatarUrl":{"type":["string","null"]},"birthday":{"type":["string","null"]},"address":{"type":["string","null"]},"relationshipType":{"type":"string","enum":["Friend","Girlfriend","Boyfriend","Wife","Husband","Mother","Father","Sister","Brother","Son","Daughter","Grandmother","Grandfather","Grandchild","Aunt","Uncle","Cousin","Nephew","Niece","MotherInLaw","FatherInLaw","SisterInLaw","BrotherInLaw","Acquaintance","Other"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","email","phone","avatarUrl","birthday","address","relationshipType","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"contacts.create","tags":["contacts"],"x-zts-kind":"mutator"}},"/api/v1/contacts.update":{"post":{"description":"Change a contact's name, email, phone, avatar, birthday, address, relationship, day interval or pinned state, and return it.","operationId":"contactsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"avatarUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"birthday":{"anyOf":[{"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])))$"},{"type":"null"}]},"dayInterval":{"anyOf":[{"type":"integer","minimum":0,"maximum":36500},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"phone":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"pinned":{"type":"boolean"},"relationshipType":{"type":"string","enum":["Friend","Girlfriend","Boyfriend","Wife","Husband","Mother","Father","Sister","Brother","Son","Daughter","Grandmother","Grandfather","Grandchild","Aunt","Uncle","Cousin","Nephew","Niece","MotherInLaw","FatherInLaw","SisterInLaw","BrotherInLaw","Acquaintance","Other"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"avatarUrl":{"type":["string","null"]},"birthday":{"type":["string","null"]},"address":{"type":["string","null"]},"relationshipType":{"type":"string","enum":["Friend","Girlfriend","Boyfriend","Wife","Husband","Mother","Father","Sister","Brother","Son","Daughter","Grandmother","Grandfather","Grandchild","Aunt","Uncle","Cousin","Nephew","Niece","MotherInLaw","FatherInLaw","SisterInLaw","BrotherInLaw","Acquaintance","Other"]},"dayInterval":{"type":["number","null"]},"pinned":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","email","phone","avatarUrl","birthday","address","relationshipType","dayInterval","pinned","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"contacts.update","tags":["contacts"],"x-zts-kind":"mutator"}},"/api/v1/contacts.remove":{"post":{"description":"Delete a contact; life-log entries keep everything else they hold.","operationId":"contactsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"contacts.remove","tags":["contacts"],"x-zts-kind":"mutator"}},"/api/v1/checklistItems.create":{"post":{"description":"Add an item to a checklist, optionally inside one of its sections (sectionId) and with a note, and return it. Without sortOrder it goes last.","operationId":"checklistItemsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"checklistId":{"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)$"},"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)$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"sectionId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"type":"number"},"text":{"type":"string","minLength":1,"maxLength":1000}},"required":["checklistId","text"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"sectionId":{"type":["string","null"]},"text":{"type":"string"},"note":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","sectionId","text","note","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistItems.create","tags":["checklistItems"],"x-zts-kind":"mutator"}},"/api/v1/checklistItems.update":{"post":{"description":"Change a checklist item's text or note, and return it.","operationId":"checklistItemsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"text":{"type":"string","minLength":1,"maxLength":1000}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"sectionId":{"type":["string","null"]},"text":{"type":"string"},"note":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","sectionId","text","note","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistItems.update","tags":["checklistItems"],"x-zts-kind":"mutator"}},"/api/v1/checklistItems.move":{"post":{"description":"Move a checklist item into one of its checklist's sections (or out of any with sectionId null) at a position among its new siblings, and return it.","operationId":"checklistItemsMove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"sectionId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"type":"number"}},"required":["id","sectionId","sortOrder"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"sectionId":{"type":["string","null"]},"text":{"type":"string"},"note":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","sectionId","text","note","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistItems.move","tags":["checklistItems"],"x-zts-kind":"mutator"}},"/api/v1/checklistItems.remove":{"post":{"description":"Delete a checklist item.","operationId":"checklistItemsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistItems.remove","tags":["checklistItems"],"x-zts-kind":"mutator"}},"/api/v1/checklistLists.create":{"post":{"description":"Create a checklist list (name, optional emoji; last unless sortOrder is given) and return it.","operationId":"checklistListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"sortOrder":{"type":"number"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistLists.create","tags":["checklistLists"],"x-zts-kind":"mutator"}},"/api/v1/checklistLists.update":{"post":{"description":"Rename a checklist list, change its emoji or position, and return it.","operationId":"checklistListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"sortOrder":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistLists.update","tags":["checklistLists"],"x-zts-kind":"mutator"}},"/api/v1/checklistLists.remove":{"post":{"description":"Delete a checklist list. Its checklists move into moveToId (one of the caller's other checklist lists), or the first other one; the caller's last checklist list can't be deleted.","operationId":"checklistListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"moveToId":{"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":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistLists.remove","tags":["checklistLists"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.start":{"post":{"description":"Start a run through one or more of the caller's checklists (or ones shared with them) together (checklistIds, in display order) with nothing checked, and return it.","operationId":"checklistRunsStart","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"checklistIds":{"minItems":1,"maxItems":50,"type":"array","items":{"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)$"}},"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)$"},"name":{"type":"string","minLength":1,"maxLength":300}},"required":["checklistIds","name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.start","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.rename":{"post":{"description":"Rename a checklist run, and return it.","operationId":"checklistRunsRename","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"name":{"type":"string","minLength":1,"maxLength":300}},"required":["id","name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.rename","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.setItem":{"post":{"description":"Check an item off in a checklist run (checked true) or uncheck it (false); the item must belong to one of the run's checklists. Returns the run.","operationId":"checklistRunsSetItem","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"checked":{"type":"boolean"},"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)$"},"itemId":{"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":["checked","id","itemId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.setItem","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.reset":{"post":{"description":"Start a checklist run over: uncheck every item, reopen it and restart its clock. Returns the run.","operationId":"checklistRunsReset","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.reset","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.finish":{"post":{"description":"Finish a checklist run, whatever is checked; it moves to the history. Returns the run.","operationId":"checklistRunsFinish","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.finish","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.reopen":{"post":{"description":"Put a finished checklist run back in progress, keeping its checks. Returns the run.","operationId":"checklistRunsReopen","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"checklistIds":{"type":"array","items":{"type":"string"}},"checkedItemIds":{"type":"array","items":{"type":"string"}},"startedAt":{"type":"number"},"finishedAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","checklistIds","checkedItemIds","startedAt","finishedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.reopen","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistRuns.remove":{"post":{"description":"Delete a checklist run (discard it, or drop it from the history). The checklists stay.","operationId":"checklistRunsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistRuns.remove","tags":["checklistRuns"],"x-zts-kind":"mutator"}},"/api/v1/checklistSections.create":{"post":{"description":"Add a named section (a group of items) to a checklist and return it. Without sortOrder it goes last.","operationId":"checklistSectionsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"number"},"checklistId":{"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)$"},"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)$"}},"required":["name","checklistId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistSections.create","tags":["checklistSections"],"x-zts-kind":"mutator"}},"/api/v1/checklistSections.update":{"post":{"description":"Rename a checklist section or change its position, and return it.","operationId":"checklistSectionsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistId":{"type":"string"},"name":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistId","name","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistSections.update","tags":["checklistSections"],"x-zts-kind":"mutator"}},"/api/v1/checklistSections.remove":{"post":{"description":"Delete a checklist section. Its items stay in the checklist, without a section.","operationId":"checklistSectionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklistSections.remove","tags":["checklistSections"],"x-zts-kind":"mutator"}},"/api/v1/checklists.create":{"post":{"description":"Create a checklist in a checklist list (checklistListId; the caller's first list when omitted): name, optional emoji and markdown description) and return it. Without sortOrder it goes last.","operationId":"checklistsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"number"},"checklistListId":{"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)$"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistListId","name","emoji","description","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklists.create","tags":["checklists"],"x-zts-kind":"mutator"}},"/api/v1/checklists.update":{"post":{"description":"Rename a checklist, change its emoji, markdown description or position, or move it to another checklist list, and return it.","operationId":"checklistsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"number"},"checklistListId":{"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)$"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"checklistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","checklistListId","name","emoji","description","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklists.update","tags":["checklists"],"x-zts-kind":"mutator"}},"/api/v1/checklists.remove":{"post":{"description":"Delete a checklist with its sections and items. Runs that included it stay, without its items.","operationId":"checklistsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checklists.remove","tags":["checklists"],"x-zts-kind":"mutator"}},"/api/v1/checkinAnswers.set":{"post":{"description":"Answer a check-in question for a day (YYYY-MM-DD): valueNumber for scale (1–10), mood (1–5), yesNo (0/1) and number questions, valueText for text ones. Replaces that day's earlier answer.","operationId":"checkinAnswersSet","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"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)$"},"questionId":{"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)$"},"valueNumber":{"type":["number","null"]},"valueText":{"anyOf":[{"type":"string","minLength":1,"maxLength":10000},{"type":"null"}]}},"required":["date","questionId","valueNumber","valueText"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinAnswers.set","tags":["checkinAnswers"],"x-zts-kind":"mutator"}},"/api/v1/checkinAnswers.remove":{"post":{"description":"Clear a check-in answer.","operationId":"checkinAnswersRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinAnswers.remove","tags":["checkinAnswers"],"x-zts-kind":"mutator"}},"/api/v1/checkinCompletions.complete":{"post":{"description":"Mark a check-in template done for a day (YYYY-MM-DD) with an optional markdown reflection note, and return it. Completing an already finished day updates its note.","operationId":"checkinCompletionsComplete","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"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)$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"templateId":{"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":["date","templateId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"completedAt":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","date","note","completedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinCompletions.complete","tags":["checkinCompletions"],"x-zts-kind":"mutator"}},"/api/v1/checkinCompletions.update":{"post":{"description":"Change a finished check-in's markdown reflection note, and return it.","operationId":"checkinCompletionsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]}},"required":["id","note"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"completedAt":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","date","note","completedAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinCompletions.update","tags":["checkinCompletions"],"x-zts-kind":"mutator"}},"/api/v1/checkinCompletions.remove":{"post":{"description":"Reopen a finished check-in: the day no longer counts as done. Its answers stay.","operationId":"checkinCompletionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinCompletions.remove","tags":["checkinCompletions"],"x-zts-kind":"mutator"}},"/api/v1/checkinQuestions.create":{"post":{"description":"Add a question to a check-in template (answerType scale 1–10, mood 1–5, yesNo, number with optional unit, or text) and return it. Without sortOrder it goes last.","operationId":"checkinQuestionsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"answerType":{"type":"string","enum":["scale","mood","yesNo","number","text"]},"prompt":{"type":"string","minLength":1,"maxLength":500},"sortOrder":{"type":"number"},"unit":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"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)$"},"templateId":{"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":["answerType","prompt","templateId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"prompt":{"type":"string"},"answerType":{"type":"string","enum":["scale","mood","yesNo","number","text"]},"unit":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","prompt","answerType","unit","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinQuestions.create","tags":["checkinQuestions"],"x-zts-kind":"mutator"}},"/api/v1/checkinQuestions.update":{"post":{"description":"Change a check-in question's prompt, unit or position, and return it. Its answer type can only change while it has no answers.","operationId":"checkinQuestionsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"answerType":{"type":"string","enum":["scale","mood","yesNo","number","text"]},"prompt":{"type":"string","minLength":1,"maxLength":500},"sortOrder":{"type":"number"},"unit":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"templateId":{"type":"string"},"prompt":{"type":"string"},"answerType":{"type":"string","enum":["scale","mood","yesNo","number","text"]},"unit":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","templateId","prompt","answerType","unit","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinQuestions.update","tags":["checkinQuestions"],"x-zts-kind":"mutator"}},"/api/v1/checkinQuestions.remove":{"post":{"description":"Delete a check-in question and every answer given to it.","operationId":"checkinQuestionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinQuestions.remove","tags":["checkinQuestions"],"x-zts-kind":"mutator"}},"/api/v1/checkinTemplates.create":{"post":{"description":"Create a check-in template (a set of daily questions; slot morning/evening/anytime, active and remind default on) and return it. Without sortOrder it goes last.","operationId":"checkinTemplatesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"remind":{"type":"boolean"},"slot":{"type":"string","enum":["morning","evening","anytime"]},"sortOrder":{"type":"number"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"slot":{"type":"string","enum":["morning","evening","anytime"]},"active":{"type":"boolean"},"remind":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","slot","active","remind","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinTemplates.create","tags":["checkinTemplates"],"x-zts-kind":"mutator"}},"/api/v1/checkinTemplates.update":{"post":{"description":"Change a check-in template's name, emoji, slot, active (paused when false), remind or position, and return it.","operationId":"checkinTemplatesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"remind":{"type":"boolean"},"slot":{"type":"string","enum":["morning","evening","anytime"]},"sortOrder":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"slot":{"type":"string","enum":["morning","evening","anytime"]},"active":{"type":"boolean"},"remind":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","slot","active","remind","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinTemplates.update","tags":["checkinTemplates"],"x-zts-kind":"mutator"}},"/api/v1/checkinTemplates.remove":{"post":{"description":"Delete a check-in template with its questions, answers and finished days.","operationId":"checkinTemplatesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"checkinTemplates.remove","tags":["checkinTemplates"],"x-zts-kind":"mutator"}},"/api/v1/countdowns.create":{"post":{"description":"Add a countdown to a day (YYYY-MM-DD; yearly repeats it every year, like a birthday; shown on Today by default) and return it.","operationId":"countdownsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"done":{"type":"boolean"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"showOnToday":{"type":"boolean"},"title":{"type":"string","minLength":1,"maxLength":500},"yearly":{"type":"boolean"},"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)$"}},"required":["date","title"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"emoji":{"type":["string","null"]},"date":{"type":"string"},"yearly":{"type":"boolean"},"showOnToday":{"type":"boolean"},"done":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","title","emoji","date","yearly","showOnToday","done","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"countdowns.create","tags":["countdowns"],"x-zts-kind":"mutator"}},"/api/v1/countdowns.update":{"post":{"description":"Change a countdown's title, emoji, date, yearly, showOnToday, done or notes, and return it.","operationId":"countdownsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"done":{"type":"boolean"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"showOnToday":{"type":"boolean"},"title":{"type":"string","minLength":1,"maxLength":500},"yearly":{"type":"boolean"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"emoji":{"type":["string","null"]},"date":{"type":"string"},"yearly":{"type":"boolean"},"showOnToday":{"type":"boolean"},"done":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","title","emoji","date","yearly","showOnToday","done","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"countdowns.update","tags":["countdowns"],"x-zts-kind":"mutator"}},"/api/v1/countdowns.remove":{"post":{"description":"Delete a countdown.","operationId":"countdownsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"countdowns.remove","tags":["countdowns"],"x-zts-kind":"mutator"}},"/api/v1/dumpItems.create":{"post":{"description":"Dump something (a link, note, image or quote) and return it. Labels (autoTags) are derived from its url and metadata.","operationId":"dumpItemsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"archived":{"type":"boolean"},"colors":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^#[\\da-f]{6}$"}},"content":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"faviconUrl":{"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"kind":{"type":"string","enum":["link","note","image","quote"]},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsCreateInput__schema0"}},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"pinned":{"type":"boolean"},"siteName":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"tagIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"uploadedImageId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"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)$"}},"required":["kind"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["link","note","image","quote"]},"url":{"type":["string","null"]},"content":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"siteName":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"faviconUrl":{"type":["string","null"]},"uploadedImageId":{"type":["string","null"]},"notes":{"type":["string","null"]},"colors":{"type":"array","items":{"type":"string"}},"tagIds":{"type":"array","items":{"type":"string"}},"autoTags":{"type":"array","items":{"type":"string"}},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsCreateOutput__schema0"}},{"type":"null"}]},"pinned":{"type":"boolean"},"archived":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","url","content","title","description","siteName","imageUrl","faviconUrl","uploadedImageId","notes","colors","tagIds","autoTags","metadata","pinned","archived","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"dumpItems.create","tags":["dumpItems"],"x-zts-kind":"mutator"}},"/api/v1/dumpItems.update":{"post":{"description":"Change a dump item's text, link details, image colors, notes, tags, pinned or archived state, and return it.","operationId":"dumpItemsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"archived":{"type":"boolean"},"colors":{"maxItems":8,"type":"array","items":{"type":"string","pattern":"^#[\\da-f]{6}$"}},"content":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}]},"faviconUrl":{"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"kind":{"type":"string","enum":["link","note","image","quote"]},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsUpdateInput__schema0"}},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"pinned":{"type":"boolean"},"siteName":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"tagIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"uploadedImageId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["link","note","image","quote"]},"url":{"type":["string","null"]},"content":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"siteName":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"faviconUrl":{"type":["string","null"]},"uploadedImageId":{"type":["string","null"]},"notes":{"type":["string","null"]},"colors":{"type":"array","items":{"type":"string"}},"tagIds":{"type":"array","items":{"type":"string"}},"autoTags":{"type":"array","items":{"type":"string"}},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/DumpItemsUpdateOutput__schema0"}},{"type":"null"}]},"pinned":{"type":"boolean"},"archived":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","url","content","title","description","siteName","imageUrl","faviconUrl","uploadedImageId","notes","colors","tagIds","autoTags","metadata","pinned","archived","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"dumpItems.update","tags":["dumpItems"],"x-zts-kind":"mutator"}},"/api/v1/dumpItems.remove":{"post":{"description":"Delete a dump item for good. Its uploaded image, if any, stays in the caller's uploads.","operationId":"dumpItemsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"dumpItems.remove","tags":["dumpItems"],"x-zts-kind":"mutator"}},"/api/v1/goalMilestones.create":{"post":{"description":"Add a milestone to one of the caller's goals and return it. It goes after the goal's last milestone unless sortOrder is given.","operationId":"goalMilestonesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"done":{"type":"boolean"},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"sortOrder":{"type":"number"},"goalId":{"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)$"},"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)$"}},"required":["name","goalId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","name","emoji","dueDate","done","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalMilestones.create","tags":["goalMilestones"],"x-zts-kind":"mutator"}},"/api/v1/goalMilestones.update":{"post":{"description":"Rename a milestone, change its emoji, due date or position, or check it off (done); returns it.","operationId":"goalMilestonesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"done":{"type":"boolean"},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"sortOrder":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","name","emoji","dueDate","done","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalMilestones.update","tags":["goalMilestones"],"x-zts-kind":"mutator"}},"/api/v1/goalMilestones.reorder":{"post":{"description":"Put a goal's milestones in the given order; milestoneIds must list every milestone of the goal exactly once.","operationId":"goalMilestonesReorder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"goalId":{"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)$"},"milestoneIds":{"maxItems":500,"type":"array","items":{"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":["goalId","milestoneIds"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalMilestones.reorder","tags":["goalMilestones"],"x-zts-kind":"mutator"}},"/api/v1/goalMilestones.remove":{"post":{"description":"Delete a milestone for good. Its trackers move up to the milestone's goal.","operationId":"goalMilestonesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalMilestones.remove","tags":["goalMilestones"],"x-zts-kind":"mutator"}},"/api/v1/goalTrackerEntries.create":{"post":{"description":"Log a value for one of the caller's goal trackers on a day (YYYY-MM-DD), with an optional note, and return the entry. Idempotent by id.","operationId":"goalTrackerEntriesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"value":{"type":"number"},"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)$"},"trackerId":{"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":["date","value","trackerId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"trackerId":{"type":"string"},"value":{"type":"number"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","trackerId","value","date","note","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackerEntries.create","tags":["goalTrackerEntries"],"x-zts-kind":"mutator"}},"/api/v1/goalTrackerEntries.update":{"post":{"description":"Change a logged tracker value, its day or its note; returns the entry.","operationId":"goalTrackerEntriesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"value":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"trackerId":{"type":"string"},"value":{"type":"number"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","trackerId","value","date","note","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackerEntries.update","tags":["goalTrackerEntries"],"x-zts-kind":"mutator"}},"/api/v1/goalTrackerEntries.remove":{"post":{"description":"Delete one logged tracker value for good.","operationId":"goalTrackerEntriesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackerEntries.remove","tags":["goalTrackerEntries"],"x-zts-kind":"mutator"}},"/api/v1/goalTrackers.create":{"post":{"description":"Create a goal tracker and return it: a number counted towards targetValue (latest entry, or the sum of entries when isCumulative) or a rating between minRating and maxRating. It can stand alone or sit on a goal or one of its milestones.","operationId":"goalTrackersCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"display":{"type":"string","enum":["progressBar","graph"]},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"goalId":{"anyOf":[{"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)$"},{"type":"null"}]},"isCumulative":{"type":"boolean"},"maxRating":{"type":["number","null"]},"maxRatingLabel":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"milestoneId":{"anyOf":[{"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)$"},{"type":"null"}]},"minRating":{"type":["number","null"]},"minRatingLabel":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"ratingDisplay":{"type":"string","enum":["number","emoji"]},"startValue":{"type":["number","null"]},"targetValue":{"type":["number","null"]},"type":{"type":"string","enum":["number","rating"]},"unit":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":["string","null"]},"milestoneId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["number","rating"]},"dueDate":{"type":["string","null"]},"isCumulative":{"type":"boolean"},"minRating":{"type":["number","null"]},"maxRating":{"type":["number","null"]},"minRatingLabel":{"type":["string","null"]},"maxRatingLabel":{"type":["string","null"]},"display":{"type":"string","enum":["progressBar","graph"]},"ratingDisplay":{"type":"string","enum":["number","emoji"]},"startValue":{"type":["number","null"]},"targetValue":{"type":["number","null"]},"unit":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","milestoneId","name","emoji","type","dueDate","isCumulative","minRating","maxRating","minRatingLabel","maxRatingLabel","display","ratingDisplay","startValue","targetValue","unit","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackers.create","tags":["goalTrackers"],"x-zts-kind":"mutator"}},"/api/v1/goalTrackers.update":{"post":{"description":"Change a goal tracker's name, type, target, unit, rating scale, display, or the goal or milestone it sits on; returns it.","operationId":"goalTrackersUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"display":{"type":"string","enum":["progressBar","graph"]},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"goalId":{"anyOf":[{"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)$"},{"type":"null"}]},"isCumulative":{"type":"boolean"},"maxRating":{"type":["number","null"]},"maxRatingLabel":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"milestoneId":{"anyOf":[{"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)$"},{"type":"null"}]},"minRating":{"type":["number","null"]},"minRatingLabel":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"ratingDisplay":{"type":"string","enum":["number","emoji"]},"startValue":{"type":["number","null"]},"targetValue":{"type":["number","null"]},"type":{"type":"string","enum":["number","rating"]},"unit":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"goalId":{"type":["string","null"]},"milestoneId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["number","rating"]},"dueDate":{"type":["string","null"]},"isCumulative":{"type":"boolean"},"minRating":{"type":["number","null"]},"maxRating":{"type":["number","null"]},"minRatingLabel":{"type":["string","null"]},"maxRatingLabel":{"type":["string","null"]},"display":{"type":"string","enum":["progressBar","graph"]},"ratingDisplay":{"type":"string","enum":["number","emoji"]},"startValue":{"type":["number","null"]},"targetValue":{"type":["number","null"]},"unit":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","goalId","milestoneId","name","emoji","type","dueDate","isCumulative","minRating","maxRating","minRatingLabel","maxRatingLabel","display","ratingDisplay","startValue","targetValue","unit","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackers.update","tags":["goalTrackers"],"x-zts-kind":"mutator"}},"/api/v1/goalTrackers.remove":{"post":{"description":"Delete a goal tracker and every value logged for it, for good.","operationId":"goalTrackersRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goalTrackers.remove","tags":["goalTrackers"],"x-zts-kind":"mutator"}},"/api/v1/goals.create":{"post":{"description":"Create a goal (name, emoji, description, due date YYYY-MM-DD, done) and return it.","operationId":"goalsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"done":{"type":"boolean"},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","dueDate","done","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goals.create","tags":["goals"],"x-zts-kind":"mutator"}},"/api/v1/goals.update":{"post":{"description":"Rename a goal, change its emoji, description or due date, or mark it done or active; returns it.","operationId":"goalsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"done":{"type":"boolean"},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","dueDate","done","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goals.update","tags":["goals"],"x-zts-kind":"mutator"}},"/api/v1/goals.remove":{"post":{"description":"Delete a goal and its milestones for good. Its trackers stay, no longer on a goal.","operationId":"goalsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"goals.remove","tags":["goals"],"x-zts-kind":"mutator"}},"/api/v1/habitCompletions.set":{"post":{"description":"Set a habit's whole day (YYYY-MM-DD) to one outcome: done, skipped or notCompleted, or null to clear the day. Replaces every earlier log for that day; done writes as many done logs as the habit's dailyTarget so the day is complete. Prices points from the habit and returns the day's logs.","operationId":"habitCompletionsSet","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"habitId":{"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)$"},"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)$"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"outcome":{"anyOf":[{"type":"string","enum":["done","skipped","notCompleted"]},{"type":"null"}]}},"required":["date","habitId","outcome"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"habitId":{"type":"string"},"date":{"type":"string"},"type":{"type":"string","enum":["done","skipped","notCompleted"]},"note":{"type":["string","null"]},"points":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","habitId","date","type","note","points","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitCompletions.set","tags":["habitCompletions"],"x-zts-kind":"mutator"}},"/api/v1/habitCompletions.setMany":{"post":{"description":"Set many habit days (YYYY-MM-DD) to one outcome at once, all or nothing: done, skipped or notCompleted, or null to clear those days. Each day is replaced as habitCompletions.set does (done fills the day to the habit's dailyTarget); an entry's optional id names that day's first log.","operationId":"habitCompletionsSetMany","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"entries":{"minItems":1,"maxItems":1000,"type":"array","items":{"type":"object","properties":{"date":{"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])))$"},"habitId":{"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)$"},"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)$"}},"required":["date","habitId"]}},"outcome":{"anyOf":[{"type":"string","enum":["done","skipped","notCompleted"]},{"type":"null"}]}},"required":["entries","outcome"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitCompletions.setMany","tags":["habitCompletions"],"x-zts-kind":"mutator"}},"/api/v1/habitCompletions.log":{"post":{"description":"Append one log (done, skipped or notCompleted) to a habit's day (YYYY-MM-DD), keeping earlier logs. A day is complete once its done logs reach the habit's dailyTarget. Each done log earns the habit's points, a failed one loses its penalty. Idempotent by id; returns the day's logs.","operationId":"habitCompletionsLog","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"habitId":{"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)$"},"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)$"},"note":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"type":{"type":"string","enum":["done","skipped","notCompleted"]}},"required":["date","habitId","type"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"habitId":{"type":"string"},"date":{"type":"string"},"type":{"type":"string","enum":["done","skipped","notCompleted"]},"note":{"type":["string","null"]},"points":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","habitId","date","type","note","points","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitCompletions.log","tags":["habitCompletions"],"x-zts-kind":"mutator"}},"/api/v1/habitCompletions.remove":{"post":{"description":"Delete one habit log by id, leaving the day's other logs.","operationId":"habitCompletionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitCompletions.remove","tags":["habitCompletions"],"x-zts-kind":"mutator"}},"/api/v1/habitLists.create":{"post":{"description":"Create a habit list and return it. A list can sit inside another list.","operationId":"habitListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hidden":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":160},"parentListId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitLists.create","tags":["habitLists"],"x-zts-kind":"mutator"}},"/api/v1/habitLists.update":{"post":{"description":"Rename, move or reorder a habit list, or hide or show its habits on the all-habits page; returns it.","operationId":"habitListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hidden":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":160},"parentListId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitLists.update","tags":["habitLists"],"x-zts-kind":"mutator"}},"/api/v1/habitLists.remove":{"post":{"description":"Delete a habit list. Its habits stay, without a list; its child lists move to the top level.","operationId":"habitListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitLists.remove","tags":["habitLists"],"x-zts-kind":"mutator"}},"/api/v1/habitTags.create":{"post":{"description":"Create a habit tag (separate from todo tags) and return it. Habits list their habit tags in tagIds.","operationId":"habitTagsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hidden":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":100},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitTags.create","tags":["habitTags"],"x-zts-kind":"mutator"}},"/api/v1/habitTags.update":{"post":{"description":"Rename a habit tag, change its emoji, color or position, or hide or show its habits on the all-habits page; returns it.","operationId":"habitTagsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hidden":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":100},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitTags.update","tags":["habitTags"],"x-zts-kind":"mutator"}},"/api/v1/habitTags.remove":{"post":{"description":"Delete a habit tag and take it off every habit that had it.","operationId":"habitTagsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habitTags.remove","tags":["habitTags"],"x-zts-kind":"mutator"}},"/api/v1/habits.create":{"post":{"description":"Create a habit and return it. It is due every day unless daysOfWeek names weekdays; a day is complete once dailyTarget (default 1) done logs are in. Each done log earns its points (default 3), a failed one loses punishingPoints. tagIds are habit tags (habitTags), not todo tags.","operationId":"habitsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"dailyTarget":{"type":"integer","minimum":1,"maximum":100},"daysOfWeek":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"durationMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":1440},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"habitListId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"paused":{"type":"boolean"},"points":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000},{"type":"null"}]},"punishingPoints":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000},{"type":"null"}]},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tagIds":{"maxItems":50,"type":"array","items":{"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)$"}},"taskType":{"type":"string","enum":["any","work","personal"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"taskType":{"type":"string","enum":["any","work","personal"]},"points":{"type":["number","null"]},"punishingPoints":{"type":["number","null"]},"paused":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"dailyTarget":{"type":"number"},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"habitListId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"sortOrder":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","color","timeOfDay","taskType","points","punishingPoints","paused","durationMinutes","dailyTarget","daysOfWeek","habitListId","tagIds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habits.create","tags":["habits"],"x-zts-kind":"mutator"}},"/api/v1/habits.update":{"post":{"description":"Change a habit's name, schedule, points, list, habit tags, paused state or other fields, and return it.","operationId":"habitsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"dailyTarget":{"type":"integer","minimum":1,"maximum":100},"daysOfWeek":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"durationMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":1440},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"habitListId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"paused":{"type":"boolean"},"points":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000},{"type":"null"}]},"punishingPoints":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000},{"type":"null"}]},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tagIds":{"maxItems":50,"type":"array","items":{"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)$"}},"taskType":{"type":"string","enum":["any","work","personal"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"taskType":{"type":"string","enum":["any","work","personal"]},"points":{"type":["number","null"]},"punishingPoints":{"type":["number","null"]},"paused":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"dailyTarget":{"type":"number"},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"habitListId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"sortOrder":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","color","timeOfDay","taskType","points","punishingPoints","paused","durationMinutes","dailyTarget","daysOfWeek","habitListId","tagIds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habits.update","tags":["habits"],"x-zts-kind":"mutator"}},"/api/v1/habits.duplicate":{"post":{"description":"Copy one of the caller's habits (not its logged days) as a new, unpaused habit with the given id, and return the copy.","operationId":"habitsDuplicate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"sourceHabitId":{"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":["id","sourceHabitId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"color":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"taskType":{"type":"string","enum":["any","work","personal"]},"points":{"type":["number","null"]},"punishingPoints":{"type":["number","null"]},"paused":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"dailyTarget":{"type":"number"},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"habitListId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"sortOrder":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","color","timeOfDay","taskType","points","punishingPoints","paused","durationMinutes","dailyTarget","daysOfWeek","habitListId","tagIds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habits.duplicate","tags":["habits"],"x-zts-kind":"mutator"}},"/api/v1/habits.remove":{"post":{"description":"Delete a habit and every day logged for it.","operationId":"habitsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"habits.remove","tags":["habits"],"x-zts-kind":"mutator"}},"/api/v1/hints.dismiss":{"post":{"description":"Dismiss a feature-discovery hint for the caller, on every device, and return the caller's dismissed hints. Dismissing twice changes nothing.","operationId":"hintsDismiss","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","enum":["explore-features"]}},"required":["key"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"key":{"type":"string"},"dismissedAt":{"type":"number"}},"required":["id","ownerId","key","dismissedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"hints.dismiss","tags":["hints"],"x-zts-kind":"mutator"}},"/api/v1/lifeLogs.create":{"post":{"description":"Log something in the life log and return it: a mix of activityIds, contactIds and locationIds (at least one, or a note), at startAt (epoch ms, defaults to now), with an optional durationSeconds and markdown note.","operationId":"lifeLogsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityIds":{"maxItems":100,"type":"array","items":{"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)$"}},"contactIds":{"maxItems":100,"type":"array","items":{"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)$"}},"durationSeconds":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":31536000},{"type":"null"}]},"locationIds":{"maxItems":100,"type":"array","items":{"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)$"}},"note":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"startAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"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)$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"startAt":{"type":"number"},"durationSeconds":{"type":["number","null"]},"note":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"contactIds":{"type":"array","items":{"type":"string"}},"locationIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","startAt","durationSeconds","note","activityIds","contactIds","locationIds","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"lifeLogs.create","tags":["lifeLogs"],"x-zts-kind":"mutator"}},"/api/v1/lifeLogs.update":{"post":{"description":"Change a life-log entry's activities, contacts, locations, time, duration or note (id arrays replace the old ones), and return it.","operationId":"lifeLogsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityIds":{"maxItems":100,"type":"array","items":{"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)$"}},"contactIds":{"maxItems":100,"type":"array","items":{"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)$"}},"durationSeconds":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":31536000},{"type":"null"}]},"locationIds":{"maxItems":100,"type":"array","items":{"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)$"}},"note":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"startAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"startAt":{"type":"number"},"durationSeconds":{"type":["number","null"]},"note":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"contactIds":{"type":"array","items":{"type":"string"}},"locationIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","startAt","durationSeconds","note","activityIds","contactIds","locationIds","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"lifeLogs.update","tags":["lifeLogs"],"x-zts-kind":"mutator"}},"/api/v1/lifeLogs.remove":{"post":{"description":"Delete a life-log entry.","operationId":"lifeLogsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"lifeLogs.remove","tags":["lifeLogs"],"x-zts-kind":"mutator"}},"/api/v1/locations.create":{"post":{"description":"Add a location (address, optional latitude/longitude, optionally inside a parent location) and return it.","operationId":"locationsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number","minimum":-90,"maximum":90},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number","minimum":-180,"maximum":180},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"parentLocationId":{"anyOf":[{"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)$"},{"type":"null"}]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"address":{"type":["string","null"]},"note":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"parentLocationId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","address","note","latitude","longitude","parentLocationId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"locations.create","tags":["locations"],"x-zts-kind":"mutator"}},"/api/v1/locations.update":{"post":{"description":"Change a location's name, emoji, address, note, coordinates or parent location, and return it.","operationId":"locationsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"latitude":{"anyOf":[{"type":"number","minimum":-90,"maximum":90},{"type":"null"}]},"longitude":{"anyOf":[{"type":"number","minimum":-180,"maximum":180},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"parentLocationId":{"anyOf":[{"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)$"},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"address":{"type":["string","null"]},"note":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"parentLocationId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","address","note","latitude","longitude","parentLocationId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"locations.update","tags":["locations"],"x-zts-kind":"mutator"}},"/api/v1/locations.remove":{"post":{"description":"Delete a location; locations inside it move to the top level and life-log entries keep everything else they hold.","operationId":"locationsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"locations.remove","tags":["locations"],"x-zts-kind":"mutator"}},"/api/v1/noteFolders.create":{"post":{"description":"Create a note folder, at the top level or inside another folder, and return it. Without sortOrder it goes after its siblings.","operationId":"noteFoldersCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"parentFolderId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"type":"number"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentFolderId":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentFolderId","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"noteFolders.create","tags":["noteFolders"],"x-zts-kind":"mutator"}},"/api/v1/noteFolders.update":{"post":{"description":"Rename a note folder or change its emoji, and return it.","operationId":"noteFoldersUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentFolderId":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentFolderId","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"noteFolders.update","tags":["noteFolders"],"x-zts-kind":"mutator"}},"/api/v1/noteFolders.move":{"post":{"description":"Move a note folder into another folder (or to the top level with parentFolderId null) at a sort position among its new siblings, and return it. A folder can't move inside itself.","operationId":"noteFoldersMove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"parentFolderId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"type":"number"}},"required":["id","parentFolderId","sortOrder"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"parentFolderId":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","parentFolderId","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"noteFolders.move","tags":["noteFolders"],"x-zts-kind":"mutator"}},"/api/v1/noteFolders.remove":{"post":{"description":"Delete a note folder. contents \"delete\" also deletes every note and folder inside it, at any depth; \"moveUp\" moves its notes and subfolders into its parent folder.","operationId":"noteFoldersRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"contents":{"type":"string","enum":["delete","moveUp"]},"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)$"}},"required":["contents","id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"noteFolders.remove","tags":["noteFolders"],"x-zts-kind":"mutator"}},"/api/v1/notes.create":{"post":{"description":"Create a markdown note, at the top level or inside a folder, and return it. Without sortOrder it goes after its siblings.","operationId":"notesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","maxLength":500000},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"folderId":{"anyOf":[{"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)$"},{"type":"null"}]},"pinned":{"type":"boolean"},"sortOrder":{"type":"number"},"title":{"type":"string","maxLength":500},"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)$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"emoji":{"type":["string","null"]},"content":{"type":"string"},"pinned":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","folderId","title","emoji","content","pinned","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"notes.create","tags":["notes"],"x-zts-kind":"mutator"}},"/api/v1/notes.update":{"post":{"description":"Change a note's title, emoji, markdown content or pinned state, and return it.","operationId":"notesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","maxLength":500000},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"pinned":{"type":"boolean"},"title":{"type":"string","maxLength":500},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"emoji":{"type":["string","null"]},"content":{"type":"string"},"pinned":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","folderId","title","emoji","content","pinned","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"notes.update","tags":["notes"],"x-zts-kind":"mutator"}},"/api/v1/notes.move":{"post":{"description":"Move a note into a folder (or to the top level with folderId null) at a sort position among its new siblings, and return it.","operationId":"notesMove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"folderId":{"anyOf":[{"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)$"},{"type":"null"}]},"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)$"},"sortOrder":{"type":"number"}},"required":["folderId","id","sortOrder"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"folderId":{"type":["string","null"]},"title":{"type":"string"},"emoji":{"type":["string","null"]},"content":{"type":"string"},"pinned":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","folderId","title","emoji","content","pinned","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"notes.move","tags":["notes"],"x-zts-kind":"mutator"}},"/api/v1/notes.remove":{"post":{"description":"Delete a note for good.","operationId":"notesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"notes.remove","tags":["notes"],"x-zts-kind":"mutator"}},"/api/v1/medicationLogs.create":{"post":{"description":"Log a dose of one of the caller's medications as taken (default), skipped or missed at takenAt (epoch ms) on the caller's local day `date` (YYYY-MM-DD; the UTC day of takenAt when omitted). With requirementId it answers that dose requirement for the day and replaces any earlier log of it that day. Returns the log.","operationId":"medicationLogsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"dosage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"medicationId":{"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)$"},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"requirementId":{"anyOf":[{"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)$"},{"type":"null"}]},"status":{"type":"string","enum":["taken","skipped","missed"]},"takenAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"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)$"}},"required":["medicationId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"requirementId":{"type":["string","null"]},"status":{"type":"string","enum":["taken","skipped","missed"]},"dosage":{"type":["string","null"]},"notes":{"type":["string","null"]},"takenAt":{"type":"number"},"date":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","requirementId","status","dosage","notes","takenAt","date","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationLogs.create","tags":["medicationLogs"],"x-zts-kind":"mutator"}},"/api/v1/medicationLogs.update":{"post":{"description":"Change a medication log's status, dosage, notes, time (takenAt, epoch ms, with its local day `date`) or medication, and return it.","operationId":"medicationLogsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"dosage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"medicationId":{"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)$"},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"status":{"type":"string","enum":["taken","skipped","missed"]},"takenAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"requirementId":{"type":["string","null"]},"status":{"type":"string","enum":["taken","skipped","missed"]},"dosage":{"type":["string","null"]},"notes":{"type":["string","null"]},"takenAt":{"type":"number"},"date":{"type":"string"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","requirementId","status","dosage","notes","takenAt","date","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationLogs.update","tags":["medicationLogs"],"x-zts-kind":"mutator"}},"/api/v1/medicationLogs.remove":{"post":{"description":"Delete a medication log (a dose requirement it answered is open again for that day).","operationId":"medicationLogsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationLogs.remove","tags":["medicationLogs"],"x-zts-kind":"mutator"}},"/api/v1/medicationPrescriptions.create":{"post":{"description":"Add a prescription (a course of one of the caller's medications, from startDate until endDate or ongoing; days are YYYY-MM-DD) and return it.","operationId":"medicationPrescriptionsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dosage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"endDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"medicationId":{"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)$"},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"prescriptionDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"startDate":{"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])))$"},"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)$"}},"required":["medicationId","startDate"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"dosage":{"type":["string","null"]},"prescriptionDate":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","dosage","prescriptionDate","startDate","endDate","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationPrescriptions.create","tags":["medicationPrescriptions"],"x-zts-kind":"mutator"}},"/api/v1/medicationPrescriptions.update":{"post":{"description":"Change a prescription's medication, dosage, prescription/start/end days (YYYY-MM-DD; endDate null means ongoing) or notes, and return it.","operationId":"medicationPrescriptionsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dosage":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"endDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"medicationId":{"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)$"},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"prescriptionDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"startDate":{"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])))$"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"medicationId":{"type":"string"},"dosage":{"type":["string","null"]},"prescriptionDate":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","medicationId","dosage","prescriptionDate","startDate","endDate","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationPrescriptions.update","tags":["medicationPrescriptions"],"x-zts-kind":"mutator"}},"/api/v1/medicationPrescriptions.remove":{"post":{"description":"Delete a prescription and its dose requirements; logs already recorded stay.","operationId":"medicationPrescriptionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationPrescriptions.remove","tags":["medicationPrescriptions"],"x-zts-kind":"mutator"}},"/api/v1/medicationRequirements.create":{"post":{"description":"Add a dose requirement to one of the caller's prescriptions: a dose (dosage text) due every day the prescription is active, in a part of the day (default any) and optionally at an exact HH:MM. Returns it.","operationId":"medicationRequirementsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dosage":{"type":"string","minLength":1,"maxLength":500},"exactTime":{"anyOf":[{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},{"type":"null"}]},"sortOrder":{"type":"number"},"timeOfDay":{"type":"string","enum":["morning","afternoon","evening","night","any"]},"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)$"},"prescriptionId":{"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":["dosage","prescriptionId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"prescriptionId":{"type":"string"},"dosage":{"type":"string"},"timeOfDay":{"type":"string","enum":["morning","afternoon","evening","night","any"]},"exactTime":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","prescriptionId","dosage","timeOfDay","exactTime","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationRequirements.create","tags":["medicationRequirements"],"x-zts-kind":"mutator"}},"/api/v1/medicationRequirements.update":{"post":{"description":"Change a dose requirement's dosage, part of the day, exact time (HH:MM or null) or position, and return it.","operationId":"medicationRequirementsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"dosage":{"type":"string","minLength":1,"maxLength":500},"exactTime":{"anyOf":[{"type":"string","pattern":"^(?:[01]\\d|2[0-3]):[0-5]\\d$"},{"type":"null"}]},"sortOrder":{"type":"number"},"timeOfDay":{"type":"string","enum":["morning","afternoon","evening","night","any"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"prescriptionId":{"type":"string"},"dosage":{"type":"string"},"timeOfDay":{"type":"string","enum":["morning","afternoon","evening","night","any"]},"exactTime":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","prescriptionId","dosage","timeOfDay","exactTime","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationRequirements.update","tags":["medicationRequirements"],"x-zts-kind":"mutator"}},"/api/v1/medicationRequirements.remove":{"post":{"description":"Delete a dose requirement; logs already recorded against it stay.","operationId":"medicationRequirementsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medicationRequirements.remove","tags":["medicationRequirements"],"x-zts-kind":"mutator"}},"/api/v1/medications.create":{"post":{"description":"Add a medication (form defaults to pill, how to take it to any time) and return it.","operationId":"medicationsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"shortNote":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"takeType":{"type":"string","enum":["withFood","onEmptyStomach","afterFood","beforeFood","any"]},"type":{"type":"string","enum":["pill","capsule","liquid","injection","inhaler","spray","drops","cream","patch","powder","other"]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["pill","capsule","liquid","injection","inhaler","spray","drops","cream","patch","powder","other"]},"takeType":{"type":"string","enum":["withFood","onEmptyStomach","afterFood","beforeFood","any"]},"shortNote":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","takeType","shortNote","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medications.create","tags":["medications"],"x-zts-kind":"mutator"}},"/api/v1/medications.update":{"post":{"description":"Change a medication's name, emoji, form, how to take it (with food, on an empty stomach…), short note or notes, and return it.","operationId":"medicationsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"shortNote":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"takeType":{"type":"string","enum":["withFood","onEmptyStomach","afterFood","beforeFood","any"]},"type":{"type":"string","enum":["pill","capsule","liquid","injection","inhaler","spray","drops","cream","patch","powder","other"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"type":{"type":"string","enum":["pill","capsule","liquid","injection","inhaler","spray","drops","cream","patch","powder","other"]},"takeType":{"type":"string","enum":["withFood","onEmptyStomach","afterFood","beforeFood","any"]},"shortNote":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","type","takeType","shortNote","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medications.update","tags":["medications"],"x-zts-kind":"mutator"}},"/api/v1/medications.remove":{"post":{"description":"Delete a medication with its prescriptions, their dose requirements and its logs.","operationId":"medicationsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"medications.remove","tags":["medications"],"x-zts-kind":"mutator"}},"/api/v1/packingActivities.create":{"post":{"description":"Create a packing activity (a reusable reason to pack, e.g. Beach or Hiking) and return it.","operationId":"packingActivitiesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingActivities.create","tags":["packingActivities"],"x-zts-kind":"mutator"}},"/api/v1/packingActivities.update":{"post":{"description":"Rename a packing activity or change its emoji or description, and return it.","operationId":"packingActivitiesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingActivities.update","tags":["packingActivities"],"x-zts-kind":"mutator"}},"/api/v1/packingActivities.remove":{"post":{"description":"Delete a packing activity. Its items stay in the library without it, and trips stop listing it; checklists keep their rows.","operationId":"packingActivitiesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingActivities.remove","tags":["packingActivities"],"x-zts-kind":"mutator"}},"/api/v1/packingItems.create":{"post":{"description":"Add an item to the packing library and return it. Essential items go on every trip's list; the rest on trips with one of their activities. With tripId it also goes on that trip's checklist (an ad-hoc item).","operationId":"packingItemsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityIds":{"maxItems":200,"type":"array","items":{"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)$"}},"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"chargingStatus":{"type":"string","enum":["notCharged","charging","charged"]},"defaultQuantity":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"essential":{"type":"boolean"},"expendable":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":200},"needsCharging":{"type":"boolean"},"needsToBeChecked":{"type":"boolean"},"packWhen":{"type":"string","enum":["before","morning"]},"quantityPerDay":{"type":"boolean"},"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)$"},"tripId":{"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":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"defaultQuantity":{"type":["number","null"]},"quantityPerDay":{"type":"boolean"},"essential":{"type":"boolean"},"expendable":{"type":"boolean"},"needsCharging":{"type":"boolean"},"needsToBeChecked":{"type":"boolean"},"chargingStatus":{"type":"string","enum":["notCharged","charging","charged"]},"packWhen":{"type":"string","enum":["before","morning"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","category","activityIds","defaultQuantity","quantityPerDay","essential","expendable","needsCharging","needsToBeChecked","chargingStatus","packWhen","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingItems.create","tags":["packingItems"],"x-zts-kind":"mutator"}},"/api/v1/packingItems.update":{"post":{"description":"Change a packing item's name, emoji, description, category, activities, quantity rules (defaultQuantity, quantityPerDay), flags (essential, expendable, needsCharging, needsToBeChecked), charging status or when it is packed, and return it.","operationId":"packingItemsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityIds":{"maxItems":200,"type":"array","items":{"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)$"}},"category":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"chargingStatus":{"type":"string","enum":["notCharged","charging","charged"]},"defaultQuantity":{"anyOf":[{"type":"integer","minimum":1,"maximum":1000},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"essential":{"type":"boolean"},"expendable":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":200},"needsCharging":{"type":"boolean"},"needsToBeChecked":{"type":"boolean"},"packWhen":{"type":"string","enum":["before","morning"]},"quantityPerDay":{"type":"boolean"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"category":{"type":["string","null"]},"activityIds":{"type":"array","items":{"type":"string"}},"defaultQuantity":{"type":["number","null"]},"quantityPerDay":{"type":"boolean"},"essential":{"type":"boolean"},"expendable":{"type":"boolean"},"needsCharging":{"type":"boolean"},"needsToBeChecked":{"type":"boolean"},"chargingStatus":{"type":"string","enum":["notCharged","charging","charged"]},"packWhen":{"type":"string","enum":["before","morning"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","category","activityIds","defaultQuantity","quantityPerDay","essential","expendable","needsCharging","needsToBeChecked","chargingStatus","packWhen","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingItems.update","tags":["packingItems"],"x-zts-kind":"mutator"}},"/api/v1/packingItems.remove":{"post":{"description":"Delete a packing item from the library and from every trip's checklist.","operationId":"packingItemsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"packingItems.remove","tags":["packingItems"],"x-zts-kind":"mutator"}},"/api/v1/ingredientLists.create":{"post":{"description":"Create an ingredient list (a store or a group such as Pantry) and return it.","operationId":"ingredientListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hiddenInShopping":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"hiddenInShopping":{"type":"boolean"},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","hiddenInShopping","name"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredientLists.create","tags":["ingredientLists"],"x-zts-kind":"mutator"}},"/api/v1/ingredientLists.update":{"post":{"description":"Rename an ingredient list, change its emoji, or hide or show its items on the shopping list; returns it.","operationId":"ingredientListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hiddenInShopping":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"hiddenInShopping":{"type":"boolean"},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","hiddenInShopping","name"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredientLists.update","tags":["ingredientLists"],"x-zts-kind":"mutator"}},"/api/v1/ingredientLists.remove":{"post":{"description":"Delete an ingredient list; its ingredients stay, in no list.","operationId":"ingredientListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredientLists.remove","tags":["ingredientLists"],"x-zts-kind":"mutator"}},"/api/v1/ingredients.create":{"post":{"description":"Create an ingredient and return it. Status defaults to to_buy, which puts it on the shopping list.","operationId":"ingredientsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"defaultUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"staple":{"type":"boolean"},"status":{"type":"string","enum":["to_buy","in_stock","running_low","out_of_stock","cannot_find","not_needed"]},"toBuyNote":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"toBuyQuantity":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"toBuyUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"defaultUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"description":{"type":["string","null"]},"emoji":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"staple":{"type":"boolean"},"status":{"type":"string","enum":["to_buy","in_stock","running_low","out_of_stock","cannot_find","not_needed"]},"toBuyNote":{"type":["string","null"]},"toBuyQuantity":{"type":["number","null"]},"toBuyUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]}},"required":["createdAt","id","ownerId","updatedAt","category","defaultUnit","description","emoji","listId","name","staple","status","toBuyNote","toBuyQuantity","toBuyUnit"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredients.create","tags":["ingredients"],"x-zts-kind":"mutator"}},"/api/v1/ingredients.update":{"post":{"description":"Change an ingredient's name, emoji, aisle, list, staple flag, default unit or status (in_stock marks it bought) and return it. Leaving to_buy clears the amount to buy.","operationId":"ingredientsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"defaultUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"staple":{"type":"boolean"},"status":{"type":"string","enum":["to_buy","in_stock","running_low","out_of_stock","cannot_find","not_needed"]},"toBuyNote":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"toBuyQuantity":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"toBuyUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"category":{"anyOf":[{"type":"string","enum":["fruits","vegetables","meat","fish","dairy","bakery","grains","pantry","spices","condiments","snacks","beverages","frozen","household","personal","other"]},{"type":"null"}]},"defaultUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]},"description":{"type":["string","null"]},"emoji":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"staple":{"type":"boolean"},"status":{"type":"string","enum":["to_buy","in_stock","running_low","out_of_stock","cannot_find","not_needed"]},"toBuyNote":{"type":["string","null"]},"toBuyQuantity":{"type":["number","null"]},"toBuyUnit":{"anyOf":[{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},{"type":"null"}]}},"required":["createdAt","id","ownerId","updatedAt","category","defaultUnit","description","emoji","listId","name","staple","status","toBuyNote","toBuyQuantity","toBuyUnit"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredients.update","tags":["ingredients"],"x-zts-kind":"mutator"}},"/api/v1/ingredients.remove":{"post":{"description":"Delete an ingredient and every recipe line that uses it.","operationId":"ingredientsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ingredients.remove","tags":["ingredients"],"x-zts-kind":"mutator"}},"/api/v1/mealPlans.create":{"post":{"description":"Create a meal plan (a named group of planned meals) and return it.","operationId":"mealPlansCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","name"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"mealPlans.create","tags":["mealPlans"],"x-zts-kind":"mutator"}},"/api/v1/mealPlans.update":{"post":{"description":"Rename a meal plan or change its emoji; returns it.","operationId":"mealPlansUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"emoji":{"type":["string","null"]},"name":{"type":"string"}},"required":["createdAt","id","ownerId","updatedAt","emoji","name"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"mealPlans.update","tags":["mealPlans"],"x-zts-kind":"mutator"}},"/api/v1/mealPlans.remove":{"post":{"description":"Delete a meal plan; its planned meals stay, in no plan.","operationId":"mealPlansRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"mealPlans.remove","tags":["mealPlans"],"x-zts-kind":"mutator"}},"/api/v1/plannedMeals.create":{"post":{"description":"Plan a meal on a YYYY-MM-DD day and slot (breakfast, lunch, dinner, snack, dessert, other), usually from a recipe, and return it. Name, emoji, servings and slot default to the recipe's.","operationId":"plannedMealsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"day":{"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])))$"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"mealPlanId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"position":{"type":"number"},"recipeId":{"anyOf":[{"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)$"},{"type":"null"}]},"servings":{"type":"integer","minimum":1,"maximum":1000},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]},"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)$"}},"required":["day"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"day":{"type":"string"},"emoji":{"type":["string","null"]},"mealPlanId":{"type":["string","null"]},"name":{"type":"string"},"position":{"type":"number"},"recipeId":{"type":["string","null"]},"servings":{"type":"number"},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","day","emoji","mealPlanId","name","position","recipeId","servings","slot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannedMeals.create","tags":["plannedMeals"],"x-zts-kind":"mutator"}},"/api/v1/plannedMeals.update":{"post":{"description":"Change a planned meal's day, slot, servings, name, recipe or meal plan and return it.","operationId":"plannedMealsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"day":{"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])))$"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"mealPlanId":{"anyOf":[{"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)$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"position":{"type":"number"},"recipeId":{"anyOf":[{"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)$"},{"type":"null"}]},"servings":{"type":"integer","minimum":1,"maximum":1000},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"day":{"type":"string"},"emoji":{"type":["string","null"]},"mealPlanId":{"type":["string","null"]},"name":{"type":"string"},"position":{"type":"number"},"recipeId":{"type":["string","null"]},"servings":{"type":"number"},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","day","emoji","mealPlanId","name","position","recipeId","servings","slot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannedMeals.update","tags":["plannedMeals"],"x-zts-kind":"mutator"}},"/api/v1/plannedMeals.move":{"post":{"description":"Move a planned meal to another day and slot, at a position among that slot's meals, and return it.","operationId":"plannedMealsMove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"day":{"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])))$"},"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)$"},"position":{"type":"number"},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["day","id","position","slot"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"day":{"type":"string"},"emoji":{"type":["string","null"]},"mealPlanId":{"type":["string","null"]},"name":{"type":"string"},"position":{"type":"number"},"recipeId":{"type":["string","null"]},"servings":{"type":"number"},"slot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","day","emoji","mealPlanId","name","position","recipeId","servings","slot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannedMeals.move","tags":["plannedMeals"],"x-zts-kind":"mutator"}},"/api/v1/plannedMeals.remove":{"post":{"description":"Delete a planned meal.","operationId":"plannedMealsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannedMeals.remove","tags":["plannedMeals"],"x-zts-kind":"mutator"}},"/api/v1/plannerBlockTodos.add":{"post":{"description":"Put one of the caller's todos into a time block (a planner event of type timeBlock), at sortOrder (the end when omitted). Adding a todo the block already holds does nothing. Returns the block's todos.","operationId":"plannerBlockTodosAdd","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"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)$"},"todoId":{"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)$"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["eventId","todoId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"eventId":{"type":"string"},"todoId":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","eventId","todoId","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerBlockTodos.add","tags":["plannerBlockTodos"],"x-zts-kind":"mutator"}},"/api/v1/plannerBlockTodos.remove":{"post":{"description":"Take a todo out of one of the caller's time blocks; the todo itself stays. Returns null.","operationId":"plannerBlockTodosRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"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)$"},"todoId":{"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":["eventId","todoId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerBlockTodos.remove","tags":["plannerBlockTodos"],"x-zts-kind":"mutator"}},"/api/v1/plannerBlockTodos.reorder":{"post":{"description":"Put a time block's todos in the given order; todoIds must list every live (not trashed) todo the block holds exactly once. Trashed todos keep their rows, placed after the live ones. Returns the block's todos.","operationId":"plannerBlockTodosReorder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"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)$"},"todoIds":{"maxItems":500,"type":"array","items":{"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":["eventId","todoIds"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"eventId":{"type":"string"},"todoId":{"type":"string"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","eventId","todoId","sortOrder","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerBlockTodos.reorder","tags":["plannerBlockTodos"],"x-zts-kind":"mutator"}},"/api/v1/plannerEvents.create":{"post":{"description":"Create a planner event and return it. type 'regular' is a plain event; 'todo' schedules one of the caller's todos (todoId; the todo's planned day and duration follow the slot); 'timeBlock' is a focus block that can hold many todos (plannerBlockTodos.*); 'habit' (habitId) and 'routine' (routineId) slot one of the caller's habits or routines. rrule makes it recurring (not for todo slots).","operationId":"plannerEventsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"startAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"endAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"allDay":{"type":"boolean"},"location":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"plannedDate":{"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])))$"},"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)$"},"habitId":{"anyOf":[{"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)$"},{"type":"null"}]},"routineId":{"anyOf":[{"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)$"},{"type":"null"}]},"todoId":{"anyOf":[{"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)$"},{"type":"null"}]},"type":{"type":"string","enum":["regular","todo","timeBlock","habit","routine"]}},"required":["startAt","endAt"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"type":{"type":"string","enum":["regular","todo","timeBlock","habit","routine"]},"title":{"type":["string","null"]},"emoji":{"type":["string","null"]},"startAt":{"type":"number"},"endAt":{"type":"number"},"allDay":{"type":"boolean"},"location":{"type":["string","null"]},"note":{"type":["string","null"]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"type":["string","null"]},"rruleExclusions":{"type":"array","items":{"type":"number"}},"listId":{"type":["string","null"]},"todoId":{"type":["string","null"]},"habitId":{"type":["string","null"]},"routineId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","type","title","emoji","startAt","endAt","allDay","location","note","unconfirmed","category","rrule","rruleExclusions","listId","todoId","habitId","routineId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.create","tags":["plannerEvents"],"x-zts-kind":"mutator"}},"/api/v1/plannerEvents.update":{"post":{"description":"Change a planner event (every occurrence, for a recurring one) and return it. Only regular events and time blocks change title or details; a todo slot moving reschedules its todo.","operationId":"plannerEventsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"startAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"endAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"allDay":{"type":"boolean"},"location":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"plannedDate":{"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])))$"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"type":{"type":"string","enum":["regular","todo","timeBlock","habit","routine"]},"title":{"type":["string","null"]},"emoji":{"type":["string","null"]},"startAt":{"type":"number"},"endAt":{"type":"number"},"allDay":{"type":"boolean"},"location":{"type":["string","null"]},"note":{"type":["string","null"]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"type":["string","null"]},"rruleExclusions":{"type":"array","items":{"type":"number"}},"listId":{"type":["string","null"]},"todoId":{"type":["string","null"]},"habitId":{"type":["string","null"]},"routineId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","type","title","emoji","startAt","endAt","allDay","location","note","unconfirmed","category","rrule","rruleExclusions","listId","todoId","habitId","routineId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.update","tags":["plannerEvents"],"x-zts-kind":"mutator"}},"/api/v1/plannerEvents.remove":{"post":{"description":"Delete a planner event (a whole series, for a recurring one). Linked todos, habits and routines stay; a time block's todo list goes with it.","operationId":"plannerEventsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.remove","tags":["plannerEvents"],"x-zts-kind":"mutator"}},"/api/v1/plannerEvents.removeOccurrence":{"post":{"description":"Delete occurrences of a recurring planner event: the one starting at occurrenceStart (onlyEvent), it and every later one (allFuture: the series ends on untilDayKey), or the whole series (all).","operationId":"plannerEventsRemoveOccurrence","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"occurrenceStart":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scope":{"type":"string","enum":["onlyEvent","allFuture","all"]},"untilDayKey":{"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])))$"},"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)$"}},"required":["occurrenceStart","scope","id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.removeOccurrence","tags":["plannerEvents"],"x-zts-kind":"mutator"}},"/api/v1/plannerEvents.moveOccurrence":{"post":{"description":"Move or edit occurrences of a recurring planner event. onlyEvent: that occurrence becomes a standalone event (newId). allFuture: the series ends on untilDayKey and a new series (newId) continues from the new time. all: the whole series shifts by the same offset. A time block's copy keeps its todos.","operationId":"plannerEventsMoveOccurrence","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"allDay":{"type":"boolean"},"location":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"unconfirmed":{"type":"boolean"},"category":{"anyOf":[{"type":"string","enum":["work","personal"]},{"type":"null"}]},"rrule":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"plannedDate":{"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])))$"},"occurrenceStart":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scope":{"type":"string","enum":["onlyEvent","allFuture","all"]},"untilDayKey":{"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])))$"},"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)$"},"newEndAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"newId":{"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)$"},"newStartAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["occurrenceStart","scope","id","newEndAt","newStartAt"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.moveOccurrence","tags":["plannerEvents"],"x-zts-kind":"mutator"}},"/api/v1/plannerEvents.duplicate":{"post":{"description":"Copy a planner event as a one-off with the same time and details (a time block with its todos); the copy's id is newId (generated when omitted). Returns null.","operationId":"plannerEventsDuplicate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"newId":{"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":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerEvents.duplicate","tags":["plannerEvents"],"x-zts-kind":"mutator"}},"/api/v1/plannerLists.create":{"post":{"description":"Create a planner list (a calendar with a color that events are filed into) and return it. Visible in every view unless a showIn* flag says otherwise.","operationId":"plannerListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"color":{"type":"string","minLength":1,"maxLength":32},"showInDay":{"type":"boolean"},"showInWeek":{"type":"boolean"},"showInMonth":{"type":"boolean"},"showInAgenda":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":"string"},"showInDay":{"type":"boolean"},"showInWeek":{"type":"boolean"},"showInMonth":{"type":"boolean"},"showInAgenda":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","showInDay","showInWeek","showInMonth","showInAgenda","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerLists.create","tags":["plannerLists"],"x-zts-kind":"mutator"}},"/api/v1/plannerLists.update":{"post":{"description":"Rename a planner list or change its emoji, color, order or the views it shows in, and return it.","operationId":"plannerListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"color":{"type":"string","minLength":1,"maxLength":32},"showInDay":{"type":"boolean"},"showInWeek":{"type":"boolean"},"showInMonth":{"type":"boolean"},"showInAgenda":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":"string"},"showInDay":{"type":"boolean"},"showInWeek":{"type":"boolean"},"showInMonth":{"type":"boolean"},"showInAgenda":{"type":"boolean"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","showInDay","showInWeek","showInMonth","showInAgenda","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerLists.update","tags":["plannerLists"],"x-zts-kind":"mutator"}},"/api/v1/plannerLists.remove":{"post":{"description":"Delete a planner list. Its events stay on the calendar, without a list.","operationId":"plannerListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"plannerLists.remove","tags":["plannerLists"],"x-zts-kind":"mutator"}},"/api/v1/financeCards.create":{"post":{"description":"Add a payment card (brand defaults to other, kind to debit) and return it.","operationId":"financeCardsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","enum":["visa","mastercard","amex","discover","other"]},"color":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"kind":{"type":"string","enum":["debit","credit"]},"lastFour":{"anyOf":[{"type":"string","pattern":"^\\d{4}$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"brand":{"type":"string","enum":["visa","mastercard","amex","discover","other"]},"kind":{"type":"string","enum":["debit","credit"]},"lastFour":{"type":["string","null"]},"currency":{"type":["string","null"]},"color":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","brand","kind","lastFour","currency","color","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeCards.create","tags":["financeCards"],"x-zts-kind":"mutator"}},"/api/v1/financeCards.update":{"post":{"description":"Change a payment card's name, emoji, brand, kind, last four digits, currency or color, and return it.","operationId":"financeCardsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","enum":["visa","mastercard","amex","discover","other"]},"color":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"kind":{"type":"string","enum":["debit","credit"]},"lastFour":{"anyOf":[{"type":"string","pattern":"^\\d{4}$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"brand":{"type":"string","enum":["visa","mastercard","amex","discover","other"]},"kind":{"type":"string","enum":["debit","credit"]},"lastFour":{"type":["string","null"]},"currency":{"type":["string","null"]},"color":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","brand","kind","lastFour","currency","color","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeCards.update","tags":["financeCards"],"x-zts-kind":"mutator"}},"/api/v1/financeCards.remove":{"post":{"description":"Delete a payment card; subscriptions charged to it stay, without a card.","operationId":"financeCardsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeCards.remove","tags":["financeCards"],"x-zts-kind":"mutator"}},"/api/v1/financeSubscriptions.create":{"post":{"description":"Add a recurring subscription (amount in currency, billed monthly, annual, or every intervalDays when custom, from startDate YYYY-MM-DD; billingCycle defaults to monthly, status to active, category to personal) and return it.","operationId":"financeSubscriptionsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","minimum":0},"billingCycle":{"type":"string","enum":["monthly","annual","custom"]},"cardId":{"anyOf":[{"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)$"},{"type":"null"}]},"category":{"type":"string","enum":["personal","work"]},"color":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"endDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"intervalDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":3650},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"remindDaysBefore":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"startDate":{"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])))$"},"status":{"type":"string","enum":["active","paused","cancelled"]},"url":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"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)$"}},"required":["amount","currency","name","startDate"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"amount":{"type":"number"},"currency":{"type":"string"},"billingCycle":{"type":"string","enum":["monthly","annual","custom"]},"intervalDays":{"type":["number","null"]},"status":{"type":"string","enum":["active","paused","cancelled"]},"category":{"type":"string","enum":["personal","work"]},"cardId":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"remindDaysBefore":{"type":["number","null"]},"url":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","amount","currency","billingCycle","intervalDays","status","category","cardId","startDate","endDate","remindDaysBefore","url","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeSubscriptions.create","tags":["financeSubscriptions"],"x-zts-kind":"mutator"}},"/api/v1/financeSubscriptions.update":{"post":{"description":"Change a subscription's name, emoji, color, amount, currency, billing cycle, interval, status (active, paused, cancelled), category, card, start/end days, reminder days, link or notes, and return it.","operationId":"financeSubscriptionsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"amount":{"type":"number","minimum":0},"billingCycle":{"type":"string","enum":["monthly","annual","custom"]},"cardId":{"anyOf":[{"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)$"},{"type":"null"}]},"category":{"type":"string","enum":["personal","work"]},"color":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"endDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"intervalDays":{"anyOf":[{"type":"integer","minimum":1,"maximum":3650},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"remindDaysBefore":{"anyOf":[{"type":"integer","minimum":0,"maximum":365},{"type":"null"}]},"startDate":{"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])))$"},"status":{"type":"string","enum":["active","paused","cancelled"]},"url":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"amount":{"type":"number"},"currency":{"type":"string"},"billingCycle":{"type":"string","enum":["monthly","annual","custom"]},"intervalDays":{"type":["number","null"]},"status":{"type":"string","enum":["active","paused","cancelled"]},"category":{"type":"string","enum":["personal","work"]},"cardId":{"type":["string","null"]},"startDate":{"type":"string"},"endDate":{"type":["string","null"]},"remindDaysBefore":{"type":["number","null"]},"url":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","amount","currency","billingCycle","intervalDays","status","category","cardId","startDate","endDate","remindDaysBefore","url","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeSubscriptions.update","tags":["financeSubscriptions"],"x-zts-kind":"mutator"}},"/api/v1/financeSubscriptions.remove":{"post":{"description":"Delete a subscription.","operationId":"financeSubscriptionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"financeSubscriptions.remove","tags":["financeSubscriptions"],"x-zts-kind":"mutator"}},"/api/v1/pomodoros.start":{"post":{"description":"Start a pomodoro: a focus session (kind work) or a break (shortBreak, longBreak) lasting durationMinutes, optionally for one of the caller's todos; cycle is which focus session of the cycle it belongs to (default 1). A session still running ends first (at its end time and completed if its time ran out, else skipped). followsId marks an automatic start after one of the caller's sessions: only one session can follow it, a repeat is a no-op, and so is a start after a session that a newer one already replaced. Returns the new session.","operationId":"pomodorosStart","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"cycle":{"type":"integer","minimum":1,"maximum":1000},"followsId":{"anyOf":[{"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)$"},{"type":"null"}]},"durationMinutes":{"type":"integer","minimum":1,"maximum":1440},"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)$"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"startedAt":{"type":"integer","minimum":0,"maximum":9007199254740991},"todoId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["durationMinutes","kind"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.start","tags":["pomodoros"],"x-zts-kind":"mutator"}},"/api/v1/pomodoros.pause":{"post":{"description":"Pause the caller's running pomodoro at `at` (epoch ms, default now); a paused or ended one stays as it is. Returns it.","operationId":"pomodorosPause","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","minimum":0,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.pause","tags":["pomodoros"],"x-zts-kind":"mutator"}},"/api/v1/pomodoros.resume":{"post":{"description":"Resume the caller's paused pomodoro at `at` (epoch ms, default now); the pause doesn't count towards its time. Returns it.","operationId":"pomodorosResume","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","minimum":0,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.resume","tags":["pomodoros"],"x-zts-kind":"mutator"}},"/api/v1/pomodoros.finish":{"post":{"description":"End the caller's running pomodoro at `at` (epoch ms, default now) as completed, skipped or cancelled; completed before its time ran out is recorded as skipped, and cancelled focus sessions don't count towards focus time. An ended one stays as it is. Returns it.","operationId":"pomodorosFinish","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","minimum":0,"maximum":9007199254740991},"endReason":{"type":"string","enum":["completed","skipped","cancelled"]},"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)$"}},"required":["endReason","id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.finish","tags":["pomodoros"],"x-zts-kind":"mutator"}},"/api/v1/pomodoros.update":{"post":{"description":"Change a pomodoro's linked todo (null unlinks) or notes, and return it.","operationId":"pomodorosUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"todoId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["work","shortBreak","longBreak"]},"todoId":{"type":["string","null"]},"durationMinutes":{"type":"number"},"cycle":{"type":"number"},"startedAt":{"type":"number"},"pausedAt":{"type":["number","null"]},"pausedMs":{"type":"number"},"endedAt":{"type":["number","null"]},"endReason":{"anyOf":[{"type":"string","enum":["completed","skipped","cancelled"]},{"type":"null"}]},"notes":{"type":["string","null"]},"followsId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","todoId","durationMinutes","cycle","startedAt","pausedAt","pausedMs","endedAt","endReason","notes","followsId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.update","tags":["pomodoros"],"x-zts-kind":"mutator"}},"/api/v1/pomodoros.remove":{"post":{"description":"Delete one of the caller's pomodoros from the history.","operationId":"pomodorosRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"pomodoros.remove","tags":["pomodoros"],"x-zts-kind":"mutator"}},"/api/v1/problemLogs.create":{"post":{"description":"Log that a problem happened on a day (YYYY-MM-DD), with an optional note, and return the log.","operationId":"problemLogsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"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)$"},"problemId":{"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":["date","problemId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"problemId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","problemId","date","note","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problemLogs.create","tags":["problemLogs"],"x-zts-kind":"mutator"}},"/api/v1/problemLogs.update":{"post":{"description":"Change a logged problem occurrence's day or note, and return it.","operationId":"problemLogsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"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])))$"},"note":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"problemId":{"type":"string"},"date":{"type":"string"},"note":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","problemId","date","note","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problemLogs.update","tags":["problemLogs"],"x-zts-kind":"mutator"}},"/api/v1/problemLogs.remove":{"post":{"description":"Delete a logged problem occurrence.","operationId":"problemLogsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problemLogs.remove","tags":["problemLogs"],"x-zts-kind":"mutator"}},"/api/v1/problems.create":{"post":{"description":"Add a problem (a recurring annoyance; annoyingLevel defaults to notAnnoying, not resolved) and return it.","operationId":"problemsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"annoyingLevel":{"type":"string","enum":["fewTimesPerDay","everyDay","everyWeek","everyMonth","notAnnoying"]},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"done":{"type":"boolean"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"annoyingLevel":{"type":"string","enum":["fewTimesPerDay","everyDay","everyWeek","everyMonth","notAnnoying"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","annoyingLevel","done","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problems.create","tags":["problems"],"x-zts-kind":"mutator"}},"/api/v1/problems.update":{"post":{"description":"Change a problem's name, emoji, description, annoyingLevel or done (resolved), and return it.","operationId":"problemsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"annoyingLevel":{"type":"string","enum":["fewTimesPerDay","everyDay","everyWeek","everyMonth","notAnnoying"]},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"done":{"type":"boolean"},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"annoyingLevel":{"type":"string","enum":["fewTimesPerDay","everyDay","everyWeek","everyMonth","notAnnoying"]},"done":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","annoyingLevel","done","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problems.update","tags":["problems"],"x-zts-kind":"mutator"}},"/api/v1/problems.remove":{"post":{"description":"Delete a problem and every occurrence logged for it.","operationId":"problemsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"problems.remove","tags":["problems"],"x-zts-kind":"mutator"}},"/api/v1/projects.create":{"post":{"description":"Create a project with one section named \"Default section\" (id defaultSectionId, generated when omitted) and return it.","operationId":"projectsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"plannedDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"priority":{"type":"string","enum":["none","low","medium","high"]},"showInOverview":{"type":"boolean"},"startDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"status":{"type":"string","enum":["todo","inProgress","done"]},"taskType":{"type":"string","enum":["any","work","personal"]},"defaultSectionId":{"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)$"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"status":{"type":"string","enum":["todo","inProgress","done"]},"taskType":{"type":"string","enum":["any","work","personal"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"startDate":{"type":["string","null"]},"plannedDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","status","taskType","priority","startDate","plannedDate","dueDate","showInOverview","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"projects.create","tags":["projects"],"x-zts-kind":"mutator"}},"/api/v1/projects.update":{"post":{"description":"Change a project's name, status (todo, inProgress, done), dates or other fields, and return it.","operationId":"projectsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"plannedDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"priority":{"type":"string","enum":["none","low","medium","high"]},"showInOverview":{"type":"boolean"},"startDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"status":{"type":"string","enum":["todo","inProgress","done"]},"taskType":{"type":"string","enum":["any","work","personal"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"status":{"type":"string","enum":["todo","inProgress","done"]},"taskType":{"type":"string","enum":["any","work","personal"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"startDate":{"type":["string","null"]},"plannedDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","status","taskType","priority","startDate","plannedDate","dueDate","showInOverview","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"projects.update","tags":["projects"],"x-zts-kind":"mutator"}},"/api/v1/projects.remove":{"post":{"description":"Delete a project and its sections. Its todos stay, without a project (in their list's first section when they have a list).","operationId":"projectsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"projects.remove","tags":["projects"],"x-zts-kind":"mutator"}},"/api/v1/recipeIngredients.create":{"post":{"description":"Add an ingredient line (quantity, unit, ingredient) to a recipe, last unless positioned, and return it. A new ingredientId with ingredientName creates that ingredient.","operationId":"recipeIngredientsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"customUnit":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"ingredientId":{"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)$"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"position":{"type":"number"},"quantity":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000},{"type":"null"}]},"quantityText":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},"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)$"},"ingredientName":{"type":"string","minLength":1,"maxLength":500},"recipeId":{"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":["ingredientId","recipeId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"customUnit":{"type":["string","null"]},"ingredientId":{"type":"string"},"note":{"type":["string","null"]},"position":{"type":"number"},"quantity":{"type":["number","null"]},"quantityText":{"type":["string","null"]},"recipeId":{"type":"string"},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]}},"required":["createdAt","id","ownerId","updatedAt","customUnit","ingredientId","note","position","quantity","quantityText","recipeId","unit"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeIngredients.create","tags":["recipeIngredients"],"x-zts-kind":"mutator"}},"/api/v1/recipeIngredients.update":{"post":{"description":"Change a recipe line's ingredient, quantity, unit, note or position and return it.","operationId":"recipeIngredientsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"customUnit":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"ingredientId":{"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)$"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"position":{"type":"number"},"quantity":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000},{"type":"null"}]},"quantityText":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"customUnit":{"type":["string","null"]},"ingredientId":{"type":"string"},"note":{"type":["string","null"]},"position":{"type":"number"},"quantity":{"type":["number","null"]},"quantityText":{"type":["string","null"]},"recipeId":{"type":"string"},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]}},"required":["createdAt","id","ownerId","updatedAt","customUnit","ingredientId","note","position","quantity","quantityText","recipeId","unit"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeIngredients.update","tags":["recipeIngredients"],"x-zts-kind":"mutator"}},"/api/v1/recipeIngredients.remove":{"post":{"description":"Remove an ingredient line from its recipe (the ingredient itself stays).","operationId":"recipeIngredientsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeIngredients.remove","tags":["recipeIngredients"],"x-zts-kind":"mutator"}},"/api/v1/recipes.create":{"post":{"description":"Create a recipe in a recipe book (recipeBookId; the caller's first book when omitted) and return it. `ingredients` adds its ingredient lines in order; a line whose ingredientId is new needs ingredientName and creates that ingredient.","operationId":"recipesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"bookmarked":{"type":"boolean"},"cookMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"instructions":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"prepMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"servings":{"type":"integer","minimum":1,"maximum":1000},"sourceUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"tags":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]},"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)$"},"ingredients":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"customUnit":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"ingredientId":{"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)$"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"position":{"type":"number"},"quantity":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000},{"type":"null"}]},"quantityText":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}]},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]},"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)$"},"ingredientName":{"type":"string","minLength":1,"maxLength":500}},"required":["ingredientId","id"]}},"recipeBookId":{"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":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"bookmarked":{"type":"boolean"},"cookMinutes":{"type":["number","null"]},"description":{"type":["string","null"]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"instructions":{"type":["string","null"]},"name":{"type":"string"},"notes":{"type":["string","null"]},"prepMinutes":{"type":["number","null"]},"recipeBookId":{"type":"string"},"servings":{"type":"number"},"sourceUrl":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","bookmarked","cookMinutes","description","difficulty","emoji","imageUrl","instructions","name","notes","prepMinutes","recipeBookId","servings","sourceUrl","tags","type","usualSlot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipes.create","tags":["recipes"],"x-zts-kind":"mutator"}},"/api/v1/recipes.update":{"post":{"description":"Change a recipe's fields (name, description, instructions markdown, servings, times, tags, source, image, bookmark, recipe book…) and return it.","operationId":"recipesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"bookmarked":{"type":"boolean"},"cookMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"instructions":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":500},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"prepMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"servings":{"type":"integer","minimum":1,"maximum":1000},"sourceUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"tags":{"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":60}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]},"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)$"},"recipeBookId":{"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":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"bookmarked":{"type":"boolean"},"cookMinutes":{"type":["number","null"]},"description":{"type":["string","null"]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"instructions":{"type":["string","null"]},"name":{"type":"string"},"notes":{"type":["string","null"]},"prepMinutes":{"type":["number","null"]},"recipeBookId":{"type":"string"},"servings":{"type":"number"},"sourceUrl":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","bookmarked","cookMinutes","description","difficulty","emoji","imageUrl","instructions","name","notes","prepMinutes","recipeBookId","servings","sourceUrl","tags","type","usualSlot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipes.update","tags":["recipes"],"x-zts-kind":"mutator"}},"/api/v1/recipes.duplicate":{"post":{"description":"Copy one of the caller's recipes with its ingredient lines as a new private recipe named \"<name> copy\", and return it. lineIds names the copied lines in order.","operationId":"recipesDuplicate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"lineIds":{"maxItems":200,"type":"array","items":{"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)$"}},"sourceId":{"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":["sourceId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"createdAt":{"type":"number"},"id":{"type":"string"},"ownerId":{"type":"string"},"updatedAt":{"type":"number"},"bookmarked":{"type":"boolean"},"cookMinutes":{"type":["number","null"]},"description":{"type":["string","null"]},"difficulty":{"type":"string","enum":["easy","medium","hard"]},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"instructions":{"type":["string","null"]},"name":{"type":"string"},"notes":{"type":["string","null"]},"prepMinutes":{"type":["number","null"]},"recipeBookId":{"type":"string"},"servings":{"type":"number"},"sourceUrl":{"type":["string","null"]},"tags":{"type":"array","items":{"type":"string"}},"type":{"type":"string","enum":["main","side","combination","sauce","beverage","snack","dessert","other"]},"usualSlot":{"type":"string","enum":["breakfast","lunch","dinner","snack","dessert","other"]}},"required":["createdAt","id","ownerId","updatedAt","bookmarked","cookMinutes","description","difficulty","emoji","imageUrl","instructions","name","notes","prepMinutes","recipeBookId","servings","sourceUrl","tags","type","usualSlot"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipes.duplicate","tags":["recipes"],"x-zts-kind":"mutator"}},"/api/v1/recipes.remove":{"post":{"description":"Delete a recipe and its ingredient lines; meals planned from it stay, without the recipe.","operationId":"recipesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipes.remove","tags":["recipes"],"x-zts-kind":"mutator"}},"/api/v1/recipeBooks.create":{"post":{"description":"Create a recipe book (name, optional emoji; last unless sortOrder is given) and return it.","operationId":"recipeBooksCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"sortOrder":{"type":"number"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeBooks.create","tags":["recipeBooks"],"x-zts-kind":"mutator"}},"/api/v1/recipeBooks.update":{"post":{"description":"Rename a recipe book, change its emoji or position, and return it.","operationId":"recipeBooksUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"sortOrder":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeBooks.update","tags":["recipeBooks"],"x-zts-kind":"mutator"}},"/api/v1/recipeBooks.remove":{"post":{"description":"Delete a recipe book. Its recipes move into moveToId (one of the caller's other recipe books), or the first other one; the caller's last recipe book can't be deleted.","operationId":"recipeBooksRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"moveToId":{"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":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"recipeBooks.remove","tags":["recipeBooks"],"x-zts-kind":"mutator"}},"/api/v1/routineItems.create":{"post":{"description":"Add a step to a routine (at the end unless sortOrder is given), optionally with a duration in seconds or a linked habit, and return it.","operationId":"routineItemsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"durationSeconds":{"anyOf":[{"type":"integer","minimum":0,"maximum":86400},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"habitId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"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)$"},"routineId":{"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":["name","routineId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"habitId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","habitId","name","emoji","durationSeconds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineItems.create","tags":["routineItems"],"x-zts-kind":"mutator"}},"/api/v1/routineItems.update":{"post":{"description":"Change a routine step's name, emoji, duration, linked habit or position, and return it.","operationId":"routineItemsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"durationSeconds":{"anyOf":[{"type":"integer","minimum":0,"maximum":86400},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"habitId":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"habitId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"durationSeconds":{"type":["number","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","habitId","name","emoji","durationSeconds","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineItems.update","tags":["routineItems"],"x-zts-kind":"mutator"}},"/api/v1/routineItems.remove":{"post":{"description":"Delete a step from its routine.","operationId":"routineItemsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineItems.remove","tags":["routineItems"],"x-zts-kind":"mutator"}},"/api/v1/routineItems.reorder":{"post":{"description":"Put a routine's steps in the given order; itemIds must list every step of the routine exactly once.","operationId":"routineItemsReorder","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"itemIds":{"maxItems":500,"type":"array","items":{"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)$"}},"routineId":{"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":["itemIds","routineId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineItems.reorder","tags":["routineItems"],"x-zts-kind":"mutator"}},"/api/v1/routineLists.create":{"post":{"description":"Create a routine list and return it. A list can sit inside another list.","operationId":"routineListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hidden":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":160},"parentListId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineLists.create","tags":["routineLists"],"x-zts-kind":"mutator"}},"/api/v1/routineLists.update":{"post":{"description":"Rename, recolor, hide or show, move or reorder a routine list, and return it.","operationId":"routineListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"hidden":{"type":"boolean"},"name":{"type":"string","minLength":1,"maxLength":160},"parentListId":{"anyOf":[{"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)$"},{"type":"null"}]},"sortOrder":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"color":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"sortOrder":{"type":["number","null"]},"hidden":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","color","parentListId","sortOrder","hidden","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineLists.update","tags":["routineLists"],"x-zts-kind":"mutator"}},"/api/v1/routineLists.remove":{"post":{"description":"Delete a routine list. Its routines stay, without a list; its child lists move to the top level.","operationId":"routineListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineLists.remove","tags":["routineLists"],"x-zts-kind":"mutator"}},"/api/v1/routineRuns.start":{"post":{"description":"Start a run of a routine on the caller's calendar day (YYYY-MM-DD) with no steps checked, and return it.","operationId":"routineRunsStart","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"day":{"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])))$"},"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)$"},"routineId":{"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":["day","routineId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"day":{"type":"string"},"startedAt":{"type":"number"},"completedAt":{"type":["number","null"]},"completedItemIds":{"type":"array","items":{"type":"string"}},"status":{"anyOf":[{"type":"string","enum":["done","skipped","failed"]},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","day","startedAt","completedAt","completedItemIds","status","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.start","tags":["routineRuns"],"x-zts-kind":"mutator"}},"/api/v1/routineRuns.toggleItem":{"post":{"description":"Check a step of a run off, or uncheck it. Checking the last open step finishes the run as done; unchecking reopens it. Returns the run.","operationId":"routineRunsToggleItem","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"itemId":{"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":["id","itemId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"day":{"type":"string"},"startedAt":{"type":"number"},"completedAt":{"type":["number","null"]},"completedItemIds":{"type":"array","items":{"type":"string"}},"status":{"anyOf":[{"type":"string","enum":["done","skipped","failed"]},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","day","startedAt","completedAt","completedItemIds","status","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.toggleItem","tags":["routineRuns"],"x-zts-kind":"mutator"}},"/api/v1/routineRuns.finish":{"post":{"description":"End a run as done, skipped or failed, whatever steps are checked, and return it.","operationId":"routineRunsFinish","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"status":{"type":"string","enum":["done","skipped","failed"]}},"required":["id","status"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"day":{"type":"string"},"startedAt":{"type":"number"},"completedAt":{"type":["number","null"]},"completedItemIds":{"type":"array","items":{"type":"string"}},"status":{"anyOf":[{"type":"string","enum":["done","skipped","failed"]},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","day","startedAt","completedAt","completedItemIds","status","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.finish","tags":["routineRuns"],"x-zts-kind":"mutator"}},"/api/v1/routineRuns.reset":{"post":{"description":"Reopen a run and uncheck all of its steps, and return it.","operationId":"routineRunsReset","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"routineId":{"type":"string"},"day":{"type":"string"},"startedAt":{"type":"number"},"completedAt":{"type":["number","null"]},"completedItemIds":{"type":"array","items":{"type":"string"}},"status":{"anyOf":[{"type":"string","enum":["done","skipped","failed"]},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","routineId","day","startedAt","completedAt","completedItemIds","status","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.reset","tags":["routineRuns"],"x-zts-kind":"mutator"}},"/api/v1/routineRuns.remove":{"post":{"description":"Delete a run from a routine's history. The routine stays.","operationId":"routineRunsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routineRuns.remove","tags":["routineRuns"],"x-zts-kind":"mutator"}},"/api/v1/routines.create":{"post":{"description":"Create a routine (a named, ordered list of steps with a time of day and weekdays; no weekdays means every day), optionally in a routine list, and return it.","operationId":"routinesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"daysOfWeek":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"paused":{"type":"boolean"},"routineListId":{"anyOf":[{"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)$"},{"type":"null"}]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"paused":{"type":"boolean"},"routineListId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","timeOfDay","daysOfWeek","paused","routineListId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routines.create","tags":["routines"],"x-zts-kind":"mutator"}},"/api/v1/routines.update":{"post":{"description":"Rename a routine or change its emoji, time of day, weekdays, paused state or routine list (routineListId, null for none), and return it.","operationId":"routinesUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"daysOfWeek":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"paused":{"type":"boolean"},"routineListId":{"anyOf":[{"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)$"},{"type":"null"}]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"daysOfWeek":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"paused":{"type":"boolean"},"routineListId":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","timeOfDay","daysOfWeek","paused","routineListId","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routines.update","tags":["routines"],"x-zts-kind":"mutator"}},"/api/v1/routines.remove":{"post":{"description":"Delete a routine with its steps and its run history.","operationId":"routinesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"routines.remove","tags":["routines"],"x-zts-kind":"mutator"}},"/api/v1/sections.create":{"post":{"description":"Create a section inside a project or a list (give exactly one of projectId, listId) and return it.","operationId":"sectionsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"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)$"},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}]}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","projectId","listId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"sections.create","tags":["sections"],"x-zts-kind":"mutator"}},"/api/v1/sections.update":{"post":{"description":"Rename a section, change its emoji or position (sortOrder), and return it.","operationId":"sectionsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","projectId","listId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"sections.update","tags":["sections"],"x-zts-kind":"mutator"}},"/api/v1/sections.remove":{"post":{"description":"Delete a section. Its todos move to the first remaining section of the same project or list; the last section can't be deleted.","operationId":"sectionsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"sections.remove","tags":["sections"],"x-zts-kind":"mutator"}},"/api/v1/shareInvites.create":{"post":{"description":"Invite a user, by email or username, to one of the caller's shareable entities (kind + entityId) as a viewer or editor, and return the pending invite. Sharing a container shares everything inside it. Inviting someone again updates the role of the pending invite.","operationId":"shareInvitesCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"entityId":{"type":"string","minLength":1},"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)$"},"invitee":{"type":"string","minLength":1,"maxLength":320},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"role":{"type":"string","enum":["viewer","editor"]}},"required":["entityId","invitee","kind","role"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"fromUserId":{"type":"string"},"fromUserName":{"type":"string"},"fromUserImage":{"type":["string","null"]},"toUserId":{"type":"string"},"toUserName":{"type":"string"},"toUserImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"rejected":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","fromUserId","fromUserName","fromUserImage","toUserId","toUserName","toUserImage","role","rejected","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shareInvites.create","tags":["shareInvites"],"x-zts-kind":"mutator"}},"/api/v1/shareInvites.setRole":{"post":{"description":"Change the role (viewer or editor) of a pending invite the caller sent, and return it.","operationId":"shareInvitesSetRole","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"role":{"type":"string","enum":["viewer","editor"]}},"required":["id","role"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"fromUserId":{"type":"string"},"fromUserName":{"type":"string"},"fromUserImage":{"type":["string","null"]},"toUserId":{"type":"string"},"toUserName":{"type":"string"},"toUserImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"rejected":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","fromUserId","fromUserName","fromUserImage","toUserId","toUserName","toUserImage","role","rejected","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shareInvites.setRole","tags":["shareInvites"],"x-zts-kind":"mutator"}},"/api/v1/shareInvites.respond":{"post":{"description":"Accept or decline a share invite sent to the caller. Accepting creates the share (id shareId, generated when omitted) and syncs the entity and everything inside it to the caller; declining keeps the invite as rejected.","operationId":"shareInvitesRespond","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"accept":{"type":"boolean"},"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)$"},"shareId":{"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":["accept","id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shareInvites.respond","tags":["shareInvites"],"x-zts-kind":"mutator"}},"/api/v1/shareInvites.cancel":{"post":{"description":"Withdraw a share invite the caller sent, or dismiss one sent to them.","operationId":"shareInvitesCancel","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shareInvites.cancel","tags":["shareInvites"],"x-zts-kind":"mutator"}},"/api/v1/shares.setRole":{"post":{"description":"Change the role (viewer or editor) of someone the caller shared an entity with, and return the share.","operationId":"sharesSetRole","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"role":{"type":"string","enum":["viewer","editor"]}},"required":["id","role"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["todoList","project","plannerList","habitList","ingredientList","noteFolder","checklist","routine","trip","recipeBook","wishlistList","checklistList"]},"entityId":{"type":"string"},"entityName":{"type":"string"},"ownerId":{"type":"string"},"ownerName":{"type":"string"},"ownerImage":{"type":["string","null"]},"userId":{"type":"string"},"userName":{"type":"string"},"userImage":{"type":["string","null"]},"role":{"type":"string","enum":["viewer","editor"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","kind","entityId","entityName","ownerId","ownerName","ownerImage","userId","userName","userImage","role","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shares.setRole","tags":["shares"],"x-zts-kind":"mutator"}},"/api/v1/shares.remove":{"post":{"description":"Stop sharing: the owner revokes someone's access, or the person it was shared with leaves. The entity stops syncing to them.","operationId":"sharesRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shares.remove","tags":["shares"],"x-zts-kind":"mutator"}},"/api/v1/stays.create":{"post":{"description":"Add a stay (hotel, Airbnb…) to one of the caller's trips and return it.","operationId":"staysCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"booked":{"type":"boolean"},"checkIn":{"anyOf":[{"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])))$"},{"type":"null"}]},"checkOut":{"anyOf":[{"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])))$"},{"type":"null"}]},"link":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"tripId":{"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)$"},"type":{"type":"string","enum":["hotel","hostel","airbnb","couchsurfing","ownHome","other"]},"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)$"}},"required":["name","tripId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["hotel","hostel","airbnb","couchsurfing","ownHome","other"]},"address":{"type":["string","null"]},"checkIn":{"type":["string","null"]},"checkOut":{"type":["string","null"]},"booked":{"type":"boolean"},"link":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","name","type","address","checkIn","checkOut","booked","link","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"stays.create","tags":["stays"],"x-zts-kind":"mutator"}},"/api/v1/stays.update":{"post":{"description":"Change a stay's name, type, address, check-in/out, booked flag, link or notes, or move it to another trip (tripId), and return it.","operationId":"staysUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"booked":{"type":"boolean"},"checkIn":{"anyOf":[{"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])))$"},{"type":"null"}]},"checkOut":{"anyOf":[{"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])))$"},{"type":"null"}]},"link":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"tripId":{"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)$"},"type":{"type":"string","enum":["hotel","hostel","airbnb","couchsurfing","ownHome","other"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["hotel","hostel","airbnb","couchsurfing","ownHome","other"]},"address":{"type":["string","null"]},"checkIn":{"type":["string","null"]},"checkOut":{"type":["string","null"]},"booked":{"type":"boolean"},"link":{"type":["string","null"]},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","name","type","address","checkIn","checkOut","booked","link","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"stays.update","tags":["stays"],"x-zts-kind":"mutator"}},"/api/v1/stays.remove":{"post":{"description":"Delete a stay.","operationId":"staysRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"stays.remove","tags":["stays"],"x-zts-kind":"mutator"}},"/api/v1/shopping.addMany":{"post":{"description":"Put ingredients on the shopping list (status to_buy) with an amount each. An ingredient already on the list adds the amount when the unit matches and notes it otherwise; one off the list starts from this amount.","operationId":"shoppingAddMany","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"lines":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"ingredientId":{"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)$"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"quantity":{"anyOf":[{"type":"number","minimum":0,"maximum":1000000},{"type":"null"}]},"unit":{"type":"string","enum":["item","g","kg","ml","cl","dl","l","tsp","tbsp","cup","fl_oz","oz","lb","pinch","bunch","can","bottle","packet","clove","slice","other"]}},"required":["ingredientId","note","quantity","unit"]}}},"required":["lines"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shopping.addMany","tags":["shopping"],"x-zts-kind":"mutator"}},"/api/v1/shopping.restockStaples":{"post":{"description":"Put every staple (need always at home) that is running low or out of stock back on the shopping list.","operationId":"shoppingRestockStaples","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"shopping.restockStaples","tags":["shopping"],"x-zts-kind":"mutator"}},"/api/v1/tags.create":{"post":{"description":"Create a tag and return it. Its points add to the score of every todo that has it.","operationId":"tagsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"groupId":{"anyOf":[{"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)$"},{"type":"null"}]},"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)$"},"name":{"type":"string","minLength":1,"maxLength":100},"paused":{"type":"boolean"},"points":{"type":"integer","minimum":-1000,"maximum":1000},"showInOverview":{"type":"boolean"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"points":{"type":"number"},"groupId":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"paused":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","points","groupId","showInOverview","paused","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.create","tags":["tags"],"x-zts-kind":"mutator"}},"/api/v1/tags.update":{"post":{"description":"Rename a tag, change its emoji, points or group, pause it or hide it from the overview, and return it. A paused or hidden tag keeps its todos out of the All overview.","operationId":"tagsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"groupId":{"anyOf":[{"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)$"},{"type":"null"}]},"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)$"},"name":{"type":"string","minLength":1,"maxLength":100},"paused":{"type":"boolean"},"points":{"type":"integer","minimum":-1000,"maximum":1000},"showInOverview":{"type":"boolean"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"points":{"type":"number"},"groupId":{"type":["string","null"]},"showInOverview":{"type":"boolean"},"paused":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","points","groupId","showInOverview","paused","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.update","tags":["tags"],"x-zts-kind":"mutator"}},"/api/v1/tags.remove":{"post":{"description":"Delete a tag. Todos that had it stop counting its points.","operationId":"tagsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.remove","tags":["tags"],"x-zts-kind":"mutator"}},"/api/v1/tags.createGroup":{"post":{"description":"Create a tag group and return it.","operationId":"tagsCreateGroup","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"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)$"},"name":{"type":"string","minLength":1,"maxLength":100}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.createGroup","tags":["tags"],"x-zts-kind":"mutator"}},"/api/v1/tags.updateGroup":{"post":{"description":"Rename a tag group or change its emoji, and return it.","operationId":"tagsUpdateGroup","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"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)$"},"name":{"type":"string","minLength":1,"maxLength":100}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.updateGroup","tags":["tags"],"x-zts-kind":"mutator"}},"/api/v1/tags.removeGroup":{"post":{"description":"Delete a tag group. Its tags stay, without a group.","operationId":"tagsRemoveGroup","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tags.removeGroup","tags":["tags"],"x-zts-kind":"mutator"}},"/api/v1/todoLists.create":{"post":{"description":"Create a todo list with one section named \"Default section\" (id defaultSectionId, generated when omitted) and return it. A list can sit inside another list.","operationId":"todoListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"parentListId":{"anyOf":[{"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)$"},{"type":"null"}]},"paused":{"type":"boolean"},"showInOverview":{"type":"boolean"},"taskType":{"type":"string","enum":["any","work","personal"]},"defaultSectionId":{"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)$"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"paused":{"type":"boolean"},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","parentListId","taskType","paused","showInOverview","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todoLists.create","tags":["todoLists"],"x-zts-kind":"mutator"}},"/api/v1/todoLists.update":{"post":{"description":"Rename, pause, move or otherwise change a todo list, and return it.","operationId":"todoListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"parentListId":{"anyOf":[{"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)$"},{"type":"null"}]},"paused":{"type":"boolean"},"showInOverview":{"type":"boolean"},"taskType":{"type":"string","enum":["any","work","personal"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"parentListId":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"paused":{"type":"boolean"},"showInOverview":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","parentListId","taskType","paused","showInOverview","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todoLists.update","tags":["todoLists"],"x-zts-kind":"mutator"}},"/api/v1/todoLists.remove":{"post":{"description":"Delete a todo list and its sections. Its todos stay, without a list (those without a project also leave their section); its child lists move up.","operationId":"todoListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todoLists.remove","tags":["todoLists"],"x-zts-kind":"mutator"}},"/api/v1/todos.create":{"post":{"description":"Create a todo and return it. The id is generated when omitted. A todo in a project or list goes in the given section of it, else its first section.","operationId":"todosCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"durationMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"inInbox":{"type":"boolean"},"isPrivate":{"type":"boolean"},"link":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"location":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"mandatory":{"type":"boolean"},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"pinned":{"type":"boolean"},"plannedFor":{"anyOf":[{"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])))$"},{"type":"null"}]},"priority":{"type":"string","enum":["none","low","medium","high"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"sectionId":{"anyOf":[{"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)$"},{"type":"null"}]},"startDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"tagIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"taskType":{"type":"string","enum":["any","work","personal"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"waiting":{"type":"boolean"},"waitingReason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"workingDays":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"workingHourEnd":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}]},"workingHourStart":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}]},"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)$"},"title":{"type":"string","minLength":1,"maxLength":500}},"required":["title"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.create","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/todos.update":{"post":{"description":"Change any of a todo's fields and return it. Omitted fields keep their value; title and description changes are kept in their history. A todo moved to another project or list goes in the given section of it, else its first section.","operationId":"todosUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"dueDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"durationMinutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"inInbox":{"type":"boolean"},"isPrivate":{"type":"boolean"},"link":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"location":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"mandatory":{"type":"boolean"},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"pinned":{"type":"boolean"},"plannedFor":{"anyOf":[{"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])))$"},{"type":"null"}]},"priority":{"type":"string","enum":["none","low","medium","high"]},"projectId":{"anyOf":[{"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)$"},{"type":"null"}]},"listId":{"anyOf":[{"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)$"},{"type":"null"}]},"sectionId":{"anyOf":[{"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)$"},{"type":"null"}]},"startDate":{"anyOf":[{"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])))$"},{"type":"null"}]},"tagIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1}},"taskType":{"type":"string","enum":["any","work","personal"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"waiting":{"type":"boolean"},"waitingReason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"workingDays":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"workingHourEnd":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}]},"workingHourStart":{"anyOf":[{"type":"string","pattern":"^\\d{2}:\\d{2}$"},{"type":"null"}]},"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)$"},"title":{"type":"string","minLength":1,"maxLength":500}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.update","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/todos.setDone":{"post":{"description":"Mark a todo done or not done, and return it.","operationId":"todosSetDone","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"done":{"type":"boolean"}},"required":["id","done"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.setDone","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/todos.setStatus":{"post":{"description":"Pause, archive or reactivate a todo, and return it. Archived todos drop out of todos.mine.","operationId":"todosSetStatus","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"status":{"type":"string","enum":["active","paused","archived"]}},"required":["id","status"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.setStatus","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/todos.plan":{"post":{"description":"Set the day a todo is planned for (YYYY-MM-DD), or null to unplan it, and return it.","operationId":"todosPlan","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"plannedFor":{"anyOf":[{"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])))$"},{"type":"null"}]}},"required":["id","plannedFor"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.plan","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/todos.remove":{"post":{"description":"Move a todo to the trash. It leaves todos.mine and shows in todos.trash until restored.","operationId":"todosRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.remove","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/todos.restore":{"post":{"description":"Take a todo out of the trash, and return it.","operationId":"todosRestore","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.restore","tags":["todos"],"x-zts-kind":"mutator"}},"/api/v1/tracker.create":{"post":{"description":"Add a movie, show, book, video game or board game to the tracker and return it. Status defaults to the kind's first status (want to watch, want to read, backlog, want); metadata fields are a snapshot of its link.","operationId":"trackerCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"creators":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"externalIds":{"type":"object","propertyNames":{"type":"string","maxLength":100},"additionalProperties":{"type":"string","maxLength":500}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"finishedOn":{"anyOf":[{"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])))$"},{"type":"null"}]},"genres":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"imageUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"metadata":{"type":"object","propertyNames":{"type":"string","maxLength":100},"additionalProperties":{"$ref":"#/components/schemas/TrackerCreateInput__schema0"}},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"position":{"type":"number"},"rating":{"anyOf":[{"type":"integer","minimum":0,"maximum":10},{"type":"null"}]},"siteName":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"startedOn":{"anyOf":[{"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])))$"},{"type":"null"}]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"subtitle":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"title":{"type":"string","minLength":1,"maxLength":500},"unfurledAt":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"year":{"anyOf":[{"type":"integer","minimum":0,"maximum":3000},{"type":"null"}]},"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)$"}},"required":["kind","title"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"rating":{"type":["number","null"]},"notes":{"type":["string","null"]},"position":{"type":"number"},"startedOn":{"type":["string","null"]},"finishedOn":{"type":["string","null"]},"url":{"type":["string","null"]},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"year":{"type":["number","null"]},"creators":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"type":["number","null"]},"siteName":{"type":["string","null"]},"externalIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerCreateOutput__schema0"}},"unfurledAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","status","rating","notes","position","startedOn","finishedOn","url","title","subtitle","description","imageUrl","year","creators","genres","externalRating","externalRatingScale","siteName","externalIds","metadata","unfurledAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tracker.create","tags":["tracker"],"x-zts-kind":"mutator"}},"/api/v1/tracker.update":{"post":{"description":"Change a tracker item's status, rating (0-10), notes, dates, kind or metadata snapshot, and return it. The status must belong to the (new) kind.","operationId":"trackerUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"creators":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"externalIds":{"type":"object","propertyNames":{"type":"string","maxLength":100},"additionalProperties":{"type":"string","maxLength":500}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"finishedOn":{"anyOf":[{"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])))$"},{"type":"null"}]},"genres":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"imageUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"metadata":{"type":"object","propertyNames":{"type":"string","maxLength":100},"additionalProperties":{"$ref":"#/components/schemas/TrackerUpdateInput__schema0"}},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"position":{"type":"number"},"rating":{"anyOf":[{"type":"integer","minimum":0,"maximum":10},{"type":"null"}]},"siteName":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"startedOn":{"anyOf":[{"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])))$"},{"type":"null"}]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"subtitle":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"title":{"type":"string","minLength":1,"maxLength":500},"unfurledAt":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"year":{"anyOf":[{"type":"integer","minimum":0,"maximum":3000},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"rating":{"type":["number","null"]},"notes":{"type":["string","null"]},"position":{"type":"number"},"startedOn":{"type":["string","null"]},"finishedOn":{"type":["string","null"]},"url":{"type":["string","null"]},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"year":{"type":["number","null"]},"creators":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"type":["number","null"]},"siteName":{"type":["string","null"]},"externalIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerUpdateOutput__schema0"}},"unfurledAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","status","rating","notes","position","startedOn","finishedOn","url","title","subtitle","description","imageUrl","year","creators","genres","externalRating","externalRatingScale","siteName","externalIds","metadata","unfurledAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tracker.update","tags":["tracker"],"x-zts-kind":"mutator"}},"/api/v1/tracker.move":{"post":{"description":"Move a tracker item to a position on its shelf, optionally into another status column, and return it.","operationId":"trackerMove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"position":{"type":"number"},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]}},"required":["id","position"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"status":{"type":"string","enum":["want_to_watch","watching","watched","want_to_read","reading","read","backlog","playing","finished","want","own","played","sold","dropped"]},"rating":{"type":["number","null"]},"notes":{"type":["string","null"]},"position":{"type":"number"},"startedOn":{"type":["string","null"]},"finishedOn":{"type":["string","null"]},"url":{"type":["string","null"]},"title":{"type":"string"},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"year":{"type":["number","null"]},"creators":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"externalRating":{"type":["number","null"]},"externalRatingScale":{"type":["number","null"]},"siteName":{"type":["string","null"]},"externalIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/TrackerMoveOutput__schema0"}},"unfurledAt":{"type":["number","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","kind","status","rating","notes","position","startedOn","finishedOn","url","title","subtitle","description","imageUrl","year","creators","genres","externalRating","externalRatingScale","siteName","externalIds","metadata","unfurledAt","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tracker.move","tags":["tracker"],"x-zts-kind":"mutator"}},"/api/v1/tracker.remove":{"post":{"description":"Delete a tracker item for good.","operationId":"trackerRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tracker.remove","tags":["tracker"],"x-zts-kind":"mutator"}},"/api/v1/transports.create":{"post":{"description":"Add a transport (flight, train, car…) to one of the caller's trips and return it. Departure and arrival are epoch ms.","operationId":"transportsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"arrivalAt":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"booked":{"type":"boolean"},"bookingRef":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"departureAt":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"fromLocation":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"link":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"toLocation":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"seat":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"tripId":{"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)$"},"type":{"type":"string","enum":["plane","train","bus","car","boat","bike","walk","other"]},"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)$"}},"required":["tripId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"type":{"type":"string","enum":["plane","train","bus","car","boat","bike","walk","other"]},"fromLocation":{"type":["string","null"]},"toLocation":{"type":["string","null"]},"departureAt":{"type":["number","null"]},"arrivalAt":{"type":["number","null"]},"seat":{"type":["string","null"]},"bookingRef":{"type":["string","null"]},"link":{"type":["string","null"]},"booked":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","type","fromLocation","toLocation","departureAt","arrivalAt","seat","bookingRef","link","booked","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"transports.create","tags":["transports"],"x-zts-kind":"mutator"}},"/api/v1/transports.update":{"post":{"description":"Change a transport's type, from/to, departure/arrival (epoch ms), seat, booking reference, link, booked flag or notes, or move it to another trip (tripId), and return it.","operationId":"transportsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"arrivalAt":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"booked":{"type":"boolean"},"bookingRef":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"departureAt":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"fromLocation":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"link":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"toLocation":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"seat":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}]},"tripId":{"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)$"},"type":{"type":"string","enum":["plane","train","bus","car","boat","bike","walk","other"]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"type":{"type":"string","enum":["plane","train","bus","car","boat","bike","walk","other"]},"fromLocation":{"type":["string","null"]},"toLocation":{"type":["string","null"]},"departureAt":{"type":["number","null"]},"arrivalAt":{"type":["number","null"]},"seat":{"type":["string","null"]},"bookingRef":{"type":["string","null"]},"link":{"type":["string","null"]},"booked":{"type":"boolean"},"notes":{"type":["string","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","type","fromLocation","toLocation","departureAt","arrivalAt","seat","bookingRef","link","booked","notes","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"transports.update","tags":["transports"],"x-zts-kind":"mutator"}},"/api/v1/transports.remove":{"post":{"description":"Delete a transport.","operationId":"transportsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"transports.remove","tags":["transports"],"x-zts-kind":"mutator"}},"/api/v1/tripPacking.sync":{"post":{"description":"Sync a trip's packing checklist with the library: add every essential item and every item with one of the trip's packing activities, and drop rows whose item no longer qualifies. Rows already there keep their status.","operationId":"tripPackingSync","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tripId":{"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":["tripId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.sync","tags":["tripPacking"],"x-zts-kind":"mutator"}},"/api/v1/tripPacking.reset":{"post":{"description":"Start a trip's packing from scratch: clear its whole checklist.","operationId":"tripPackingReset","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"tripId":{"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":["tripId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.reset","tags":["tripPacking"],"x-zts-kind":"mutator"}},"/api/v1/tripPacking.addActivity":{"post":{"description":"Attach a packing activity to a trip and put that activity's items on its checklist.","operationId":"tripPackingAddActivity","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityId":{"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)$"},"tripId":{"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":["activityId","tripId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.addActivity","tags":["tripPacking"],"x-zts-kind":"mutator"}},"/api/v1/tripPacking.removeActivity":{"post":{"description":"Detach a packing activity from a trip and drop its items from the checklist, except essential items and items with another of the trip's activities.","operationId":"tripPackingRemoveActivity","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"activityId":{"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)$"},"tripId":{"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":["activityId","tripId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.removeActivity","tags":["tripPacking"],"x-zts-kind":"mutator"}},"/api/v1/tripPacking.update":{"post":{"description":"Set a checklist row's status (notPacked, packing, packed, skipped) or double-checked flag, and return it.","operationId":"tripPackingUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"doubleChecked":{"type":"boolean"},"id":{"type":"string","minLength":1,"maxLength":100},"status":{"type":"string","enum":["notPacked","packing","packed","skipped"]}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"tripId":{"type":"string"},"packingItemId":{"type":"string"},"status":{"type":"string","enum":["notPacked","packing","packed","skipped"]},"doubleChecked":{"type":"boolean"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","tripId","packingItemId","status","doubleChecked","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.update","tags":["tripPacking"],"x-zts-kind":"mutator"}},"/api/v1/tripPacking.remove":{"post":{"description":"Take one item off a trip's checklist. The item stays in the library.","operationId":"tripPackingRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"tripPacking.remove","tags":["tripPacking"],"x-zts-kind":"mutator"}},"/api/v1/trips.create":{"post":{"description":"Create a trip (name, emoji, destination, start/end day, markdown notes, packing activities) and return it.","operationId":"tripsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"destination":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"endDay":{"anyOf":[{"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])))$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"ownTransport":{"type":"boolean"},"packingActivityIds":{"maxItems":200,"type":"array","items":{"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)$"}},"shortDescription":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"startDay":{"anyOf":[{"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])))$"},{"type":"null"}]},"stayingAtOwnPlace":{"type":"boolean"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"destination":{"type":["string","null"]},"startDay":{"type":["string","null"]},"endDay":{"type":["string","null"]},"shortDescription":{"type":["string","null"]},"notes":{"type":["string","null"]},"stayingAtOwnPlace":{"type":"boolean"},"ownTransport":{"type":"boolean"},"packingActivityIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","destination","startDay","endDay","shortDescription","notes","stayingAtOwnPlace","ownTransport","packingActivityIds","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"trips.create","tags":["trips"],"x-zts-kind":"mutator"}},"/api/v1/trips.update":{"post":{"description":"Change a trip's name, emoji, destination, days, notes, own-place/own-transport flags or packing activities, and return it. Changing activities does not change the packing checklist; tripPacking.sync does.","operationId":"tripsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"destination":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"endDay":{"anyOf":[{"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])))$"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"ownTransport":{"type":"boolean"},"packingActivityIds":{"maxItems":200,"type":"array","items":{"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)$"}},"shortDescription":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"startDay":{"anyOf":[{"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])))$"},{"type":"null"}]},"stayingAtOwnPlace":{"type":"boolean"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"destination":{"type":["string","null"]},"startDay":{"type":["string","null"]},"endDay":{"type":["string","null"]},"shortDescription":{"type":["string","null"]},"notes":{"type":["string","null"]},"stayingAtOwnPlace":{"type":"boolean"},"ownTransport":{"type":"boolean"},"packingActivityIds":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","destination","startDay","endDay","shortDescription","notes","stayingAtOwnPlace","ownTransport","packingActivityIds","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"trips.update","tags":["trips"],"x-zts-kind":"mutator"}},"/api/v1/trips.remove":{"post":{"description":"Delete a trip with its stays, transports and packing checklist. Packing items and activities stay in the library.","operationId":"tripsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"trips.remove","tags":["trips"],"x-zts-kind":"mutator"}},"/api/v1/users.updateProfile":{"post":{"description":"Update the caller's name, username, bio, timezone and avatar/cover image (an uploaded image id, or null to remove it), and return the profile. Omitted fields keep their value; an empty username clears it.","operationId":"usersUpdateProfile","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":2},"username":{"type":"string"},"bio":{"type":"string"},"timezone":{"type":"string"},"avatarImageId":{"type":["string","null"]},"coverImageId":{"type":["string","null"]}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"bio":{"type":["string","null"]},"avatarImageUrl":{"type":["string","null"]},"coverImageUrl":{"type":["string","null"]},"avatarImageId":{"type":["string","null"]},"coverImageId":{"type":["string","null"]},"timezone":{"type":["string","null"]},"preferences":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"role":{"anyOf":[{"type":"string","enum":["user","admin"]},{"type":"null"}]},"username":{"type":["string","null"]},"displayUsername":{"type":["string","null"]},"onboarded":{"type":["boolean","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":["number","null"]},"avatarImage":{},"coverImage":{}},"required":["id","name","email","emailVerified","image","bio","avatarImageUrl","coverImageUrl","avatarImageId","coverImageId","timezone","preferences","role","username","displayUsername","onboarded","createdAt","updatedAt","avatarImage","coverImage"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.updateProfile","tags":["users"],"x-zts-kind":"mutator"}},"/api/v1/users.setPreference":{"post":{"description":"Set one preference and return the profile with its preferences. Booleans: notifications, sound, analytics, emailMarketing, emailUpdates, aiProviderEnabled<provider>, featureEnabled<feature>, pomodoroAutoStart, pomodoroSound, pomodoroNotify. Integers: plannerDayStartHour (0-23), plannerDayEndHour (1-24), plannerEventMinutes (15-480), plannerWeekStartsOn (0 = Sunday, 1 = Monday), pomodoroWorkMinutes (1-240), pomodoroShortBreakMinutes (1-60), pomodoroLongBreakMinutes (1-120), pomodoroLongBreakEvery (1-12). Strings: aiFeatureModel<feature> (emoji, captureType, captureFields, linkUnfurl, chat, dumpClassify) = \"auto\", \"jev\" (emoji, captureType, captureFields, dumpClassify only) or \"<providerId>:<modelId>\"; financeBaseCurrency = a 3-letter ISO currency code (default EUR). String arrays: featureOrder = feature ids in nav order (todos, habits, routines, goals, calendar, chat, wishlist, tracker, dump, notes, problems, meds, trips, life, food, checklists, countdowns, affirmations, finance, checkins, pomodoros), each at most once; missing ones follow in the default order.","operationId":"usersSetPreference","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string","maxLength":300},{"maxItems":100,"type":"array","items":{"type":"string","maxLength":40}}]}},"required":["key","value"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"bio":{"type":["string","null"]},"avatarImageUrl":{"type":["string","null"]},"coverImageUrl":{"type":["string","null"]},"avatarImageId":{"type":["string","null"]},"coverImageId":{"type":["string","null"]},"timezone":{"type":["string","null"]},"preferences":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"role":{"anyOf":[{"type":"string","enum":["user","admin"]},{"type":"null"}]},"username":{"type":["string","null"]},"displayUsername":{"type":["string","null"]},"onboarded":{"type":["boolean","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":["number","null"]},"avatarImage":{},"coverImage":{}},"required":["id","name","email","emailVerified","image","bio","avatarImageUrl","coverImageUrl","avatarImageId","coverImageId","timezone","preferences","role","username","displayUsername","onboarded","createdAt","updatedAt","avatarImage","coverImage"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.setPreference","tags":["users"],"x-zts-kind":"mutator"}},"/api/v1/users.markOnboarded":{"post":{"description":"Mark the caller as onboarded and return the profile.","operationId":"usersMarkOnboarded","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"bio":{"type":["string","null"]},"avatarImageUrl":{"type":["string","null"]},"coverImageUrl":{"type":["string","null"]},"avatarImageId":{"type":["string","null"]},"coverImageId":{"type":["string","null"]},"timezone":{"type":["string","null"]},"preferences":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"role":{"anyOf":[{"type":"string","enum":["user","admin"]},{"type":"null"}]},"username":{"type":["string","null"]},"displayUsername":{"type":["string","null"]},"onboarded":{"type":["boolean","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":["number","null"]},"avatarImage":{},"coverImage":{}},"required":["id","name","email","emailVerified","image","bio","avatarImageUrl","coverImageUrl","avatarImageId","coverImageId","timezone","preferences","role","username","displayUsername","onboarded","createdAt","updatedAt","avatarImage","coverImage"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.markOnboarded","tags":["users"],"x-zts-kind":"mutator"}},"/api/v1/users.resetOnboarding":{"post":{"description":"Reset the caller's onboarding so the onboarding flow shows again, and return the profile.","operationId":"usersResetOnboarding","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"image":{"type":["string","null"]},"bio":{"type":["string","null"]},"avatarImageUrl":{"type":["string","null"]},"coverImageUrl":{"type":["string","null"]},"avatarImageId":{"type":["string","null"]},"coverImageId":{"type":["string","null"]},"timezone":{"type":["string","null"]},"preferences":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"role":{"anyOf":[{"type":"string","enum":["user","admin"]},{"type":"null"}]},"username":{"type":["string","null"]},"displayUsername":{"type":["string","null"]},"onboarded":{"type":["boolean","null"]},"createdAt":{"type":"number"},"updatedAt":{"type":["number","null"]},"avatarImage":{},"coverImage":{}},"required":["id","name","email","emailVerified","image","bio","avatarImageUrl","coverImageUrl","avatarImageId","coverImageId","timezone","preferences","role","username","displayUsername","onboarded","createdAt","updatedAt","avatarImage","coverImage"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.resetOnboarding","tags":["users"],"x-zts-kind":"mutator"}},"/api/v1/views.create":{"post":{"description":"Save a todo view (it shows in the sidebar under Views) and return it. A todo filter-language query: { filter, sort?, groupBy?, includeDone? }. The filter is and/or/not over conditions like {date:{field:'due',onOrBefore:'today'}}, {flag:'pinned'}, {priorityAtLeast:'medium'}, {tags:['work']}, {projects:['Launch']}, {type:['work']}, {text:'invoice'}, {pointsAtLeast:40}. Call views.preview to test one first.","operationId":"viewsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"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)$"},"name":{"type":"string","minLength":1,"maxLength":100},"query":{"type":"object","properties":{"filter":{"$ref":"#/components/schemas/ViewsCreateInput__schema0"},"sort":{"default":"points","description":"Most important first for points/priority, earliest first for dates.","type":"string","enum":["points","due","planned","priority","created","title"]},"groupBy":{"default":"none","description":"\"status\" is the All view grouping (overdue, overplanned, inbox, today, tomorrow, rest, starts later).","type":"string","enum":["none","status","project","list","priority","due","planned","tag"]},"includeDone":{"default":false,"description":"Completed todos are left out unless this is true or the filter asks for done.","type":"boolean"}},"required":["filter"]},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name","query"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"query":{"$ref":"#/components/schemas/ViewsCreateOutput__schema0"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","query","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.create","tags":["views"],"x-zts-kind":"mutator"}},"/api/v1/views.update":{"post":{"description":"Rename a saved view or replace its query, and return it. A todo filter-language query: { filter, sort?, groupBy?, includeDone? }. The filter is and/or/not over conditions like {date:{field:'due',onOrBefore:'today'}}, {flag:'pinned'}, {priorityAtLeast:'medium'}, {tags:['work']}, {projects:['Launch']}, {type:['work']}, {text:'invoice'}, {pointsAtLeast:40}. Call views.preview to test one first.","operationId":"viewsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"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)$"},"name":{"type":"string","minLength":1,"maxLength":100},"query":{"type":"object","properties":{"filter":{"$ref":"#/components/schemas/ViewsUpdateInput__schema0"},"sort":{"default":"points","description":"Most important first for points/priority, earliest first for dates.","type":"string","enum":["points","due","planned","priority","created","title"]},"groupBy":{"default":"none","description":"\"status\" is the All view grouping (overdue, overplanned, inbox, today, tomorrow, rest, starts later).","type":"string","enum":["none","status","project","list","priority","due","planned","tag"]},"includeDone":{"default":false,"description":"Completed todos are left out unless this is true or the filter asks for done.","type":"boolean"}},"required":["filter"]},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"description":{"type":["string","null"]},"query":{"$ref":"#/components/schemas/ViewsUpdateOutput__schema0"},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","description","query","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.update","tags":["views"],"x-zts-kind":"mutator"}},"/api/v1/views.remove":{"post":{"description":"Delete a saved view. Its todos are untouched.","operationId":"viewsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.remove","tags":["views"],"x-zts-kind":"mutator"}},"/api/v1/wishlist.create":{"post":{"description":"Add an item to a wishlist list (wishlistListId; the caller's first list when omitted; status defaults to thinking, placed last in its column) and return it.","operationId":"wishlistCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"price":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"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)$"},"sortOrder":{"type":"number"},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"wishlistListId":{"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":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"wishlistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"url":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","wishlistListId","name","emoji","imageUrl","url","price","currency","notes","status","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.create","tags":["wishlist"],"x-zts-kind":"mutator"}},"/api/v1/wishlist.update":{"post":{"description":"Change a wishlist item's name, emoji, image, link, price, currency or notes, and return it.","operationId":"wishlistUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"currency":{"anyOf":[{"type":"string","pattern":"^[A-Z]{3}$"},{"type":"null"}]},"emoji":{"anyOf":[{"type":"string","maxLength":16},{"type":"null"}]},"imageUrl":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":200},"notes":{"anyOf":[{"type":"string","maxLength":10000},{"type":"null"}]},"price":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":2000,"format":"uri"},{"type":"null"}]},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"wishlistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"url":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","wishlistListId","name","emoji","imageUrl","url","price","currency","notes","status","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.update","tags":["wishlist"],"x-zts-kind":"mutator"}},"/api/v1/wishlist.move":{"post":{"description":"Move a wishlist item to a status column (thinking, want, searching, ordered, arrived) at a position (sortOrder; lower is higher up, fractions allowed), and return it.","operationId":"wishlistMove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"sortOrder":{"type":"number"},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]}},"required":["id","sortOrder","status"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"wishlistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"url":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","wishlistListId","name","emoji","imageUrl","url","price","currency","notes","status","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.move","tags":["wishlist"],"x-zts-kind":"mutator"}},"/api/v1/wishlist.moveToList":{"post":{"description":"Move a wishlist item into another wishlist list of the same owner that the caller may edit, and return it.","operationId":"wishlistMoveToList","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"wishlistListId":{"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":["id","wishlistListId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"wishlistListId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"url":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"notes":{"type":["string","null"]},"status":{"type":"string","enum":["thinking","want","searching","ordered","arrived"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","wishlistListId","name","emoji","imageUrl","url","price","currency","notes","status","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.moveToList","tags":["wishlist"],"x-zts-kind":"mutator"}},"/api/v1/wishlist.remove":{"post":{"description":"Delete a wishlist item.","operationId":"wishlistRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlist.remove","tags":["wishlist"],"x-zts-kind":"mutator"}},"/api/v1/wishlistLists.create":{"post":{"description":"Create a wishlist list (name, optional emoji; last unless sortOrder is given) and return it.","operationId":"wishlistListsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"sortOrder":{"type":"number"},"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)$"}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlistLists.create","tags":["wishlistLists"],"x-zts-kind":"mutator"}},"/api/v1/wishlistLists.update":{"post":{"description":"Rename a wishlist list, change its emoji or position, and return it.","operationId":"wishlistListsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emoji":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":160},"sortOrder":{"type":"number"},"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)$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"sortOrder":{"type":"number"},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","ownerId","name","emoji","sortOrder","createdAt","updatedAt"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlistLists.update","tags":["wishlistLists"],"x-zts-kind":"mutator"}},"/api/v1/wishlistLists.remove":{"post":{"description":"Delete a wishlist list. Its wishlist items move into moveToId (one of the caller's other wishlist lists), or the first other one; the caller's last wishlist list can't be deleted.","operationId":"wishlistListsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"moveToId":{"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":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"null"}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"wishlistLists.remove","tags":["wishlistLists"],"x-zts-kind":"mutator"}},"/api/v1/aiProviders.list":{"post":{"description":"List every AI provider with whether the caller enabled it and stored a key (only the key's last 4 characters).","operationId":"aiProvidersList","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"configured":{"type":"boolean"},"enabled":{"type":"boolean"},"keyLast4":{"type":["string","null"]},"name":{"type":"string"},"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]}},"required":["configured","enabled","keyLast4","name","providerId"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiProviders.list","tags":["aiProviders"],"x-zts-kind":"action"}},"/api/v1/aiProviders.setKey":{"post":{"description":"Store the caller's API key for an AI provider, encrypted, replacing any previous key. Returns its last 4 characters.","operationId":"aiProvidersSetKey","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string","minLength":8,"maxLength":512},"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]}},"required":["apiKey","providerId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"configured":{"type":"boolean","const":true},"keyLast4":{"type":"string"},"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]}},"required":["configured","keyLast4","providerId"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiProviders.setKey","tags":["aiProviders"],"x-zts-kind":"action"}},"/api/v1/aiProviders.models":{"post":{"description":"List the chat models an AI provider currently offers the caller, fetched from the provider with their stored key (cached for a few minutes). Empty without a key.","operationId":"aiProvidersModels","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]},"refresh":{"type":"boolean"}},"required":["providerId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string"},"id":{"type":"string"},"intelligenceLevels":{"type":"array","items":{"type":"string","enum":["standard","low","medium","high"]}},"label":{"type":"string"}},"required":["group","id","intelligenceLevels","label"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiProviders.models","tags":["aiProviders"],"x-zts-kind":"action"}},"/api/v1/aiProviders.clearKey":{"post":{"description":"Delete the caller's stored API key for an AI provider.","operationId":"aiProvidersClearKey","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]}},"required":["providerId"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"configured":{"type":"boolean","const":false},"providerId":{"type":"string","enum":["openai","anthropic","xai","gemini","mistral","llama","cohere","perplexity","groq","azure","amazon-bedrock","openrouter","vercel"]}},"required":["configured","providerId"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiProviders.clearKey","tags":["aiProviders"],"x-zts-kind":"action"}},"/api/v1/aiEndpoints.list":{"post":{"description":"List the caller's custom OpenAI-compatible AI endpoints: name, base URL, auth type and header names, never secret values.","operationId":"aiEndpointsList","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"authHeaderName":{"type":["string","null"]},"authType":{"type":"string","enum":["none","bearer","header","basic"]},"baseURL":{"type":"string"},"hasAuth":{"type":"boolean"},"headerNames":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"models":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"providerId":{"type":"string"},"queryParamNames":{"type":"array","items":{"type":"string"}}},"required":["authHeaderName","authType","baseURL","hasAuth","headerNames","id","models","name","providerId","queryParamNames"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiEndpoints.list","tags":["aiEndpoints"],"x-zts-kind":"action"}},"/api/v1/aiEndpoints.create":{"post":{"description":"Add a custom OpenAI-compatible AI endpoint (OpenRouter, Groq, Ollama, LM Studio, vLLM, LiteLLM, a gateway…) with its auth, stored encrypted. Returns it without secrets.","operationId":"aiEndpointsCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"auth":{"description":"none, bearer token, a custom API-key header, or Basic auth","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"none"}},"required":["type"]},{"type":"object","properties":{"token":{"description":"Omit to keep the stored value","type":"string","maxLength":4096},"type":{"type":"string","const":"bearer"}},"required":["type"]},{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"type":{"type":"string","const":"header"},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["headerName","type"]},{"type":"object","properties":{"password":{"description":"Omit to keep the stored value","type":"string","maxLength":4096},"type":{"type":"string","const":"basic"},"username":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["type"]}]},"baseURL":{"type":"string","minLength":1,"maxLength":2048,"description":"The OpenAI-compatible base URL, e.g. https://openrouter.ai/api/v1"},"headers":{"description":"Extra headers sent with every request","maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["name"]}},"models":{"description":"Model ids to offer besides the ones GET /models lists","maxItems":200,"type":"array","items":{"type":"string","minLength":1,"maxLength":256}},"name":{"type":"string","minLength":1,"maxLength":80},"queryParams":{"description":"Query params added to every request, e.g. api-version","maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["name"]}}},"required":["baseURL","name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"authHeaderName":{"type":["string","null"]},"authType":{"type":"string","enum":["none","bearer","header","basic"]},"baseURL":{"type":"string"},"hasAuth":{"type":"boolean"},"headerNames":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"models":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"providerId":{"type":"string"},"queryParamNames":{"type":"array","items":{"type":"string"}}},"required":["authHeaderName","authType","baseURL","hasAuth","headerNames","id","models","name","providerId","queryParamNames"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiEndpoints.create","tags":["aiEndpoints"],"x-zts-kind":"action"}},"/api/v1/aiEndpoints.update":{"post":{"description":"Change a custom AI endpoint. Omitted fields, and omitted secret values (token, header value, password), keep what is stored. Returns it without secrets.","operationId":"aiEndpointsUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"auth":{"description":"none, bearer token, a custom API-key header, or Basic auth","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"none"}},"required":["type"]},{"type":"object","properties":{"token":{"description":"Omit to keep the stored value","type":"string","maxLength":4096},"type":{"type":"string","const":"bearer"}},"required":["type"]},{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"type":{"type":"string","const":"header"},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["headerName","type"]},{"type":"object","properties":{"password":{"description":"Omit to keep the stored value","type":"string","maxLength":4096},"type":{"type":"string","const":"basic"},"username":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["type"]}]},"baseURL":{"type":"string","minLength":1,"maxLength":2048,"description":"The OpenAI-compatible base URL, e.g. https://openrouter.ai/api/v1"},"headers":{"description":"Extra headers sent with every request","maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["name"]}},"models":{"description":"Model ids to offer besides the ones GET /models lists","maxItems":200,"type":"array","items":{"type":"string","minLength":1,"maxLength":256}},"name":{"type":"string","minLength":1,"maxLength":80},"queryParams":{"description":"Query params added to every request, e.g. api-version","maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["name"]}},"id":{"type":"string","pattern":"^[\\w-]{1,64}$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"authHeaderName":{"type":["string","null"]},"authType":{"type":"string","enum":["none","bearer","header","basic"]},"baseURL":{"type":"string"},"hasAuth":{"type":"boolean"},"headerNames":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"models":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"providerId":{"type":"string"},"queryParamNames":{"type":"array","items":{"type":"string"}}},"required":["authHeaderName","authType","baseURL","hasAuth","headerNames","id","models","name","providerId","queryParamNames"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiEndpoints.update","tags":["aiEndpoints"],"x-zts-kind":"action"}},"/api/v1/aiEndpoints.test":{"post":{"description":"Call GET {baseURL}/models on a custom AI endpoint (a stored one by id, with any given fields applied on top, or an unsaved one) and return the model ids or the error. Changes nothing.","operationId":"aiEndpointsTest","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"auth":{"description":"none, bearer token, a custom API-key header, or Basic auth","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"none"}},"required":["type"]},{"type":"object","properties":{"token":{"description":"Omit to keep the stored value","type":"string","maxLength":4096},"type":{"type":"string","const":"bearer"}},"required":["type"]},{"type":"object","properties":{"headerName":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"type":{"type":"string","const":"header"},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["headerName","type"]},{"type":"object","properties":{"password":{"description":"Omit to keep the stored value","type":"string","maxLength":4096},"type":{"type":"string","const":"basic"},"username":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["type"]}]},"baseURL":{"type":"string","minLength":1,"maxLength":2048,"description":"The OpenAI-compatible base URL, e.g. https://openrouter.ai/api/v1"},"headers":{"description":"Extra headers sent with every request","maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["name"]}},"models":{"description":"Model ids to offer besides the ones GET /models lists","maxItems":200,"type":"array","items":{"type":"string","minLength":1,"maxLength":256}},"name":{"type":"string","minLength":1,"maxLength":80},"queryParams":{"description":"Query params added to every request, e.g. api-version","maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":128},"value":{"description":"Omit to keep the stored value","type":"string","maxLength":4096}},"required":["name"]}},"id":{"type":"string","pattern":"^[\\w-]{1,64}$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"error":{"type":["string","null"]},"models":{"type":"array","items":{"type":"string"}},"ok":{"type":"boolean"}},"required":["error","models","ok"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiEndpoints.test","tags":["aiEndpoints"],"x-zts-kind":"action"}},"/api/v1/aiEndpoints.models":{"post":{"description":"List the chat models a custom AI endpoint offers: the ids its GET /models lists (cached for a few minutes) plus the ones added by hand.","operationId":"aiEndpointsModels","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","pattern":"^[\\w-]{1,64}$"},"refresh":{"type":"boolean"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string"},"id":{"type":"string"},"intelligenceLevels":{"type":"array","items":{"type":"string","enum":["standard","low","medium","high"]}},"label":{"type":"string"}},"required":["group","id","intelligenceLevels","label"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiEndpoints.models","tags":["aiEndpoints"],"x-zts-kind":"action"}},"/api/v1/aiEndpoints.remove":{"post":{"description":"Delete a custom AI endpoint and its stored auth.","operationId":"aiEndpointsRemove","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","pattern":"^[\\w-]{1,64}$"}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"id":{"type":"string"},"removed":{"type":"boolean","const":true}},"required":["id","removed"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"aiEndpoints.remove","tags":["aiEndpoints"],"x-zts-kind":"action"}},"/api/v1/ai.engines":{"post":{"description":"List every AI feature (emoji, captureType, captureFields, linkUnfurl, chat, dumpClassify) with the engine it runs on for the caller: Jev, a model as <providerId>:<modelId>, or null with the reason. Follows the aiFeatureModel<feature> preferences. Changes nothing.","operationId":"aiEngines","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"feature":{"type":"string","enum":["emoji","captureType","captureFields","linkUnfurl","chat","dumpClassify"]},"engine":{"anyOf":[{"type":"string","enum":["jev","model"]},{"type":"null"}]},"model":{"type":["string","null"]},"reason":{"type":["string","null"]}},"required":["feature","engine","model","reason"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ai.engines","tags":["ai"],"x-zts-kind":"action"}},"/api/v1/ai.guessEmoji":{"post":{"description":"Guess one emoji for a name or title with the engine the caller picked for emoji suggestions (Jev or a model; Auto prefers Jev). Returns the emoji and the engine, or null when none is set up. Changes nothing.","operationId":"aiGuessEmoji","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":200}},"required":["text"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"emoji":{"type":["string","null"]},"engine":{"anyOf":[{"type":"string","enum":["jev","model"]},{"type":"null"}]}},"required":["emoji","engine"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"ai.guessEmoji","tags":["ai"],"x-zts-kind":"action"}},"/api/v1/apiKeys.list":{"post":{"description":"List the caller's API keys, newest first, without the secrets.","operationId":"apiKeysList","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"start":{"type":["string","null"]},"prefix":{"type":["string","null"]},"enabled":{"type":"boolean"},"expiresAt":{"type":["number","null"]},"lastRequest":{"type":["number","null"]},"requestCount":{"type":"number"},"remaining":{"type":["number","null"]},"rateLimitEnabled":{"type":"boolean"},"rateLimitMax":{"type":["number","null"]},"rateLimitTimeWindow":{"type":["number","null"]},"refillAmount":{"type":["number","null"]},"refillInterval":{"type":["number","null"]},"lastRefillAt":{"type":["number","null"]},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysListOutput__schema0"}},{"type":"null"}]},"permissions":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","name","start","prefix","enabled","expiresAt","lastRequest","requestCount","remaining","rateLimitEnabled","rateLimitMax","rateLimitTimeWindow","refillAmount","refillInterval","lastRefillAt","metadata","permissions","createdAt","updatedAt"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"apiKeys.list","tags":["apiKeys"],"x-zts-kind":"action"}},"/api/v1/apiKeys.get":{"post":{"description":"Get one of the caller's API keys by id, without the secret.","operationId":"apiKeysGet","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"start":{"type":["string","null"]},"prefix":{"type":["string","null"]},"enabled":{"type":"boolean"},"expiresAt":{"type":["number","null"]},"lastRequest":{"type":["number","null"]},"requestCount":{"type":"number"},"remaining":{"type":["number","null"]},"rateLimitEnabled":{"type":"boolean"},"rateLimitMax":{"type":["number","null"]},"rateLimitTimeWindow":{"type":["number","null"]},"refillAmount":{"type":["number","null"]},"refillInterval":{"type":["number","null"]},"lastRefillAt":{"type":["number","null"]},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysGetOutput__schema0"}},{"type":"null"}]},"permissions":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","name","start","prefix","enabled","expiresAt","lastRequest","requestCount","remaining","rateLimitEnabled","rateLimitMax","rateLimitTimeWindow","refillAmount","refillInterval","lastRefillAt","metadata","permissions","createdAt","updatedAt"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"apiKeys.get","tags":["apiKeys"],"x-zts-kind":"action"}},"/api/v1/apiKeys.create":{"post":{"description":"Create an API key for the caller (expiresIn in seconds, null never expires). Returns the record with the full `key`, which is shown only this once.","operationId":"apiKeysCreate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1},"expiresIn":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysCreateInput__schema0"}},"permissions":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["name"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"start":{"type":["string","null"]},"prefix":{"type":["string","null"]},"enabled":{"type":"boolean"},"expiresAt":{"type":["number","null"]},"lastRequest":{"type":["number","null"]},"requestCount":{"type":"number"},"remaining":{"type":["number","null"]},"rateLimitEnabled":{"type":"boolean"},"rateLimitMax":{"type":["number","null"]},"rateLimitTimeWindow":{"type":["number","null"]},"refillAmount":{"type":["number","null"]},"refillInterval":{"type":["number","null"]},"lastRefillAt":{"type":["number","null"]},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysCreateOutput__schema0"}},{"type":"null"}]},"permissions":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"key":{"type":"string"}},"required":["id","name","start","prefix","enabled","expiresAt","lastRequest","requestCount","remaining","rateLimitEnabled","rateLimitMax","rateLimitTimeWindow","refillAmount","refillInterval","lastRefillAt","metadata","permissions","createdAt","updatedAt","key"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"apiKeys.create","tags":["apiKeys"],"x-zts-kind":"action"}},"/api/v1/apiKeys.update":{"post":{"description":"Rename, enable or disable, re-expire or re-tag one of the caller's API keys, and return it.","operationId":"apiKeysUpdate","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"enabled":{"type":"boolean"},"expiresIn":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysUpdateInput__schema0"}}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]},"start":{"type":["string","null"]},"prefix":{"type":["string","null"]},"enabled":{"type":"boolean"},"expiresAt":{"type":["number","null"]},"lastRequest":{"type":["number","null"]},"requestCount":{"type":"number"},"remaining":{"type":["number","null"]},"rateLimitEnabled":{"type":"boolean"},"rateLimitMax":{"type":["number","null"]},"rateLimitTimeWindow":{"type":["number","null"]},"refillAmount":{"type":["number","null"]},"refillInterval":{"type":["number","null"]},"lastRefillAt":{"type":["number","null"]},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ApiKeysUpdateOutput__schema0"}},{"type":"null"}]},"permissions":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}},{"type":"null"}]},"createdAt":{"type":"number"},"updatedAt":{"type":"number"}},"required":["id","name","start","prefix","enabled","expiresAt","lastRequest","requestCount","remaining","rateLimitEnabled","rateLimitMax","rateLimitTimeWindow","refillAmount","refillInterval","lastRefillAt","metadata","permissions","createdAt","updatedAt"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"apiKeys.update","tags":["apiKeys"],"x-zts-kind":"action"}},"/api/v1/apiKeys.delete":{"post":{"description":"Delete one of the caller's API keys; requests using it fail from then on.","operationId":"apiKeysDelete","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"apiKeys.delete","tags":["apiKeys"],"x-zts-kind":"action"}},"/api/v1/auth.changePassword":{"post":{"description":"Change the caller's password (8-128 characters, confirmed) after checking the current one, and sign out every other session.","operationId":"authChangePassword","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"confirmPassword":{"type":"string","minLength":8,"maxLength":128},"currentPassword":{"type":"string","minLength":8,"maxLength":128},"newPassword":{"type":"string","minLength":8,"maxLength":128}},"required":["confirmPassword","currentPassword","newPassword"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"auth.changePassword","tags":["auth"],"x-zts-kind":"action"}},"/api/v1/billing.state":{"post":{"description":"Get the caller's billing state from Polar: active subscriptions, granted benefits, and isPro (holds the Pro benefit). When billing is off it answers id \"noop\" with nothing active.","operationId":"billingState","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"id":{"type":"string"},"activeSubscriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"recurringInterval":{"type":"string"},"status":{"type":"string"},"cancelAtPeriodEnd":{"type":"boolean"},"currentPeriodEnd":{"type":"string"},"startedAt":{"type":["string","null"]},"endsAt":{"type":["string","null"]}},"required":["id","amount","currency","recurringInterval","status","cancelAtPeriodEnd","currentPeriodEnd","startedAt","endsAt"],"additionalProperties":false}},"grantedBenefits":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"benefitId":{"type":"string"},"benefitType":{"type":"string"},"grantedAt":{"type":"string"},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/BillingStateOutput__schema0"}}},"required":["id","benefitId","benefitType","grantedAt"],"additionalProperties":false}},"isPro":{"type":"boolean"}},"required":["id","activeSubscriptions","grantedBenefits","isPro"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"billing.state","tags":["billing"],"x-zts-kind":"action"}},"/api/v1/capture.classify":{"post":{"description":"Read one quick-capture line (\"dentist tomorrow 3pm at Main St 1h\", \"buy milk\", a link) and guess what it should become: up to four candidates (todo, event, habit, routine, wishlist, tracker, dump or note), best first, each with a 0..1 confidence, a title, parsed fields (days in the caller's time zone) and 1-10 suggestions of the caller's own projects, lists, tags and places (8+ are already in the fields). Uses the engines the caller picked for the captureType and captureFields AI features (auto: Jev for the type, their model for the fields), else a local parser; `issues` says which of them failed. Creates nothing.","operationId":"captureClassify","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":2000},"now":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timezone":{"type":"string","maxLength":100}},"required":["text","now","timezone"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"candidates":{"maxItems":4,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["todo","event","habit","routine","wishlist","tracker","dump","note"]},"confidence":{"type":"number","minimum":0,"maximum":1},"title":{"type":"string","maxLength":500},"fields":{"type":"object","properties":{"allDay":{"type":"boolean"},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"date":{"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])))$"},"daysOfWeek":{"maxItems":7,"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"dueDate":{"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])))$"},"durationMinutes":{"type":"integer","minimum":1,"maximum":1440},"end":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"endTime":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"guests":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game"]},"list":{"type":"string","minLength":1,"maxLength":200},"location":{"type":"string","minLength":1,"maxLength":500},"plannedFor":{"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])))$"},"price":{"type":"number","minimum":0},"priority":{"type":"string","enum":["none","low","medium","high"]},"project":{"type":"string","minLength":1,"maxLength":200},"recurrence":{"type":"string","minLength":1,"maxLength":500},"start":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"startTime":{"type":"string","pattern":"^\\d{2}:\\d{2}$"},"tags":{"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100}},"text":{"type":"string","minLength":1,"maxLength":10000},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"url":{"type":"string","minLength":1,"maxLength":4000}},"additionalProperties":false},"fieldConfidence":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number","minimum":0,"maximum":1}},"suggestions":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"field":{"type":"string","enum":["project","list","tags","location"]},"value":{"type":"string","minLength":1,"maxLength":200},"confidence":{"type":"integer","minimum":1,"maximum":10},"isNew":{"type":"boolean"}},"required":["field","value","confidence"],"additionalProperties":false}}},"required":["type","confidence","title","fields"],"additionalProperties":false}},"source":{"type":"string","enum":["jev","ai","heuristic"]},"issues":{"maxItems":2,"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["jev","ai"]},"message":{"type":"string","maxLength":300}},"required":["source","message"],"additionalProperties":false}}},"required":["candidates","source"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"capture.classify","tags":["capture"],"x-zts-kind":"action"}},"/api/v1/glink.changelogs":{"post":{"description":"List the app's published changelogs, newest first, each marked seen or unseen by the caller.","operationId":"glinkChangelogs","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"default":20,"type":"integer","minimum":1,"maximum":100}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"changelogs":{"type":"array","items":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"tag":{"type":"string"},"title":{"type":"string"}},"required":["id","tag","title"],"additionalProperties":false}},"entries":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"},"emoji":{"type":["string","null"]},"id":{"type":"string"},"media":{"type":"array","items":{"type":"object","properties":{"mimeType":{"type":"string"},"url":{"type":"string"}},"required":["mimeType","url"],"additionalProperties":false}}},"required":["content","emoji","id","media"],"additionalProperties":false}},"id":{"type":"string"},"publishedAt":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"version":{"type":["string","null"]},"seen":{"type":"boolean"}},"required":["changes","entries","id","publishedAt","slug","title","url","version","seen"],"additionalProperties":false}},"unseenCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["changelogs","unseenCount"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.changelogs","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.comment":{"post":{"description":"Reply on one of the caller's feedback reports, optionally with uploaded attachments.","operationId":"glinkComment","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"imageIds":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"text":{"type":"string","minLength":1,"maxLength":50000}},"required":["id","text"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"author":{"type":"object","properties":{"avatarUrl":{"type":"string"},"kind":{"type":"string","enum":["guest","owner","user"]},"name":{"type":"string"}},"required":["kind"],"additionalProperties":false},"createdAt":{"type":"string"},"id":{"type":"string"},"images":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"required":["id","mimeType","url"],"additionalProperties":false}},"text":{"type":"string"}},"required":["author","createdAt","id","images","text"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.comment","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.createUpload":{"post":{"description":"Start an attachment upload (image up to 10 MiB, video up to 100 MiB): returns an imageId and a URL to PUT the file to within 10 minutes.","operationId":"glinkCreateUpload","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string","minLength":1,"maxLength":255},"fileSize":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"fileType":{"type":"string","enum":["image/png","image/jpeg","image/gif","image/webp","image/avif","video/mp4","video/webm","video/quicktime"]}},"required":["fileName","fileSize","fileType"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"imageId":{"type":"string"},"publicUrl":{"type":"string"},"uploadUrl":{"type":"string"}},"required":["imageId","publicUrl","uploadUrl"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.createUpload","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.markChangelogsSeen":{"post":{"description":"Mark changelogs as seen by the caller: the given ids, or every published one when ids is omitted.","operationId":"glinkMarkChangelogsSeen","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1}}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.markChangelogsSeen","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.report":{"post":{"description":"Get one of the caller's feedback reports with its comments and attachments, and mark its replies as read.","operationId":"glinkReport","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"category":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"closed":{"type":"boolean"},"comments":{"type":"array","items":{"type":"object","properties":{"author":{"type":"object","properties":{"avatarUrl":{"type":"string"},"kind":{"type":"string","enum":["guest","owner","user"]},"name":{"type":"string"}},"required":["kind"],"additionalProperties":false},"createdAt":{"type":"string"},"id":{"type":"string"},"images":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"required":["id","mimeType","url"],"additionalProperties":false}},"text":{"type":"string"}},"required":["author","createdAt","id","images","text"],"additionalProperties":false}},"content":{"type":"string"},"createdAt":{"type":"string"},"id":{"type":"string"},"images":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"mimeType":{"type":"string"},"url":{"type":"string"}},"required":["id","mimeType","url"],"additionalProperties":false}},"public":{"type":"boolean"},"title":{"type":"string"}},"required":["category","closed","comments","content","createdAt","id","images","public","title"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.report","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.reports":{"post":{"description":"List the caller's feedback reports, newest activity first, each flagged unread when there's a reply they haven't seen.","operationId":"glinkReports","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"reports":{"type":"array","items":{"type":"object","properties":{"category":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"closed":{"type":"boolean"},"commentCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"contentPreview":{"type":"string"},"createdAt":{"type":"string"},"id":{"type":"string"},"lastCommentAt":{"type":["string","null"]},"lastCommentByOwner":{"type":"boolean"},"public":{"type":"boolean"},"title":{"type":"string"},"updatedAt":{"type":"string"},"unread":{"type":"boolean"}},"required":["category","closed","commentCount","contentPreview","createdAt","id","lastCommentAt","lastCommentByOwner","public","title","updatedAt","unread"],"additionalProperties":false}},"unreadCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["reports","unreadCount"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.reports","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.setClosed":{"post":{"description":"Close or reopen one of the caller's feedback reports.","operationId":"glinkSetClosed","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"closed":{"type":"boolean"}},"required":["id","closed"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"closed":{"type":"boolean"},"id":{"type":"string"}},"required":["closed","id"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.setClosed","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.status":{"post":{"description":"Whether in-app feedback is available to the caller: enabled for this app and their email verified.","operationId":"glinkStatus","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"enabled":{"type":"boolean"},"verified":{"type":"boolean"}},"required":["enabled","verified"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.status","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/glink.submit":{"post":{"description":"Send a bug report or feedback to the app's team, privately, with optional uploaded attachments and app context (version, platform, route).","operationId":"glinkSubmit","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","minLength":1,"maxLength":50000},"imageIds":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1}},"meta":{"default":{},"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":2000}},"title":{"type":"string","minLength":1,"maxLength":200}},"required":["content","title"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"closed":{"type":"boolean"},"createdAt":{"type":"string"},"id":{"type":"string"},"public":{"type":"boolean"},"title":{"type":"string"}},"required":["closed","createdAt","id","public","title"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"glink.submit","tags":["glink"],"x-zts-kind":"action"}},"/api/v1/connections.list":{"post":{"description":"List the third-party accounts the caller can connect (Google Calendar) with whether each is connected, to which account email, and since when (epoch ms).","operationId":"connectionsList","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"accountEmail":{"type":["string","null"]},"available":{"type":"boolean"},"connected":{"type":"boolean"},"connectedAt":{"type":["number","null"]},"name":{"type":"string"},"provider":{"type":"string","enum":["googleCalendar"]}},"required":["accountEmail","available","connected","connectedAt","name","provider"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"connections.list","tags":["connections"],"x-zts-kind":"action"}},"/api/v1/connections.startGoogleCalendar":{"post":{"description":"Start connecting the caller's Google Calendar. Returns the Google consent URL to open in a browser; Google redirects back to the app, which stores the connection.","operationId":"connectionsStartGoogleCalendar","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"connections.startGoogleCalendar","tags":["connections"],"x-zts-kind":"action"}},"/api/v1/connections.disconnect":{"post":{"description":"Disconnect a connected account: revokes the app's access at the provider and deletes the stored tokens.","operationId":"connectionsDisconnect","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"type":"string","enum":["googleCalendar"]}},"required":["provider"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"connected":{"type":"boolean","const":false},"provider":{"type":"string","enum":["googleCalendar"]}},"required":["connected","provider"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"connections.disconnect","tags":["connections"],"x-zts-kind":"action"}},"/api/v1/connections.googleCalendars":{"post":{"description":"List the calendars in the caller's connected Google account (id, name, whether it is the primary one, access role, color). Fails when Google Calendar is not connected.","operationId":"connectionsGoogleCalendars","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"accessRole":{"type":"string"},"color":{"type":["string","null"]},"id":{"type":"string"},"primary":{"type":"boolean"},"summary":{"type":"string"}},"required":["accessRole","color","id","primary","summary"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"connections.googleCalendars","tags":["connections"],"x-zts-kind":"action"}},"/api/v1/connections.googleEvents":{"post":{"description":"List the events overlapping [from, to) (epoch ms, at most 100 days) in the caller's connected Google calendars, recurring events expanded; calendarIds limits it to those calendars (default: all). Read-only. Fails when Google Calendar is not connected.","operationId":"connectionsGoogleEvents","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"calendarIds":{"maxItems":100,"type":"array","items":{"type":"string"}},"from":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"to":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["from","to"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"array","items":{"type":"object","properties":{"allDay":{"type":"boolean"},"calendarId":{"type":"string"},"description":{"type":["string","null"]},"end":{"type":"string"},"htmlLink":{"type":["string","null"]},"id":{"type":"string"},"location":{"type":["string","null"]},"start":{"type":"string"},"title":{"type":"string"}},"required":["allDay","calendarId","description","end","htmlLink","id","location","start","title"],"additionalProperties":false}}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"connections.googleEvents","tags":["connections"],"x-zts-kind":"action"}},"/api/v1/dump.unfurl":{"post":{"description":"Fetch a public web page and return its title, description, preview image, favicon and site name (OpenGraph, Twitter and meta tags). Changes nothing.","operationId":"dumpUnfurl","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":4000,"format":"uri"}},"required":["url"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"url":{"type":"string"},"canonicalUrl":{"type":["string","null"]},"siteName":{"type":["string","null"]},"kind":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"faviconUrl":{"type":["string","null"]},"themeColor":{"type":["string","null"]}},"required":["url","canonicalUrl","siteName","kind","title","description","imageUrl","faviconUrl","themeColor"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"dump.unfurl","tags":["dump"],"x-zts-kind":"action"}},"/api/v1/finance.exchangeRates":{"post":{"description":"Get the latest reference exchange rates (European Central Bank, via Frankfurter) from a base currency (ISO 4217, default EUR): units of each currency per one unit of the base, and the day they were published. Changes nothing; cached for an hour.","operationId":"financeExchangeRates","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"base":{"default":"EUR","type":"string","pattern":"^[A-Z]{3}$"}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"base":{"type":"string"},"rates":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"date":{"type":"string"}},"required":["base","rates","date"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"finance.exchangeRates","tags":["finance"],"x-zts-kind":"action"}},"/api/v1/links.unfurl":{"post":{"description":"Read a public web link (IMDb, Letterboxd, Goodreads, Steam, BoardGameGeek, Amazon, any page) and return its metadata: kind (movie, tv, book, video_game, board_game, product, article, other), title, cover image, year, creators, genres, rating, price and external ids. Changes nothing; results are cached for 10 minutes.","operationId":"linksUnfurl","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"url":{"type":"string"},"canonicalUrl":{"type":["string","null"]},"siteName":{"type":["string","null"]},"kind":{"type":"string","enum":["movie","tv","book","video_game","board_game","product","article","other"]},"title":{"type":["string","null"]},"subtitle":{"type":["string","null"]},"description":{"type":["string","null"]},"imageUrl":{"type":["string","null"]},"year":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"releaseDate":{"type":["string","null"]},"creators":{"type":"array","items":{"type":"string"}},"genres":{"type":"array","items":{"type":"string"}},"rating":{"type":["number","null"]},"ratingScale":{"type":["number","null"]},"ratingCount":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"runtimeMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"pages":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"players":{"type":["string","null"]},"playTime":{"type":["string","null"]},"price":{"type":["number","null"]},"currency":{"type":["string","null"]},"externalIds":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"extra":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"recipe":{"anyOf":[{"type":"object","properties":{"ingredients":{"type":"array","items":{"type":"string"}},"instructions":{"type":"array","items":{"type":"string"}},"yield":{"type":["string","null"]},"prepMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"cookMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"totalMinutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"category":{"type":["string","null"]},"cuisine":{"type":["string","null"]},"keywords":{"type":"array","items":{"type":"string"}}},"required":["ingredients","instructions","yield","prepMinutes","cookMinutes","totalMinutes","category","cuisine","keywords"],"additionalProperties":false},{"type":"null"}]}},"required":["url","canonicalUrl","siteName","kind","title","subtitle","description","imageUrl","year","releaseDate","creators","genres","rating","ratingScale","ratingCount","runtimeMinutes","pages","players","playTime","price","currency","externalIds","extra","recipe"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"links.unfurl","tags":["links"],"x-zts-kind":"action"}},"/api/v1/jev.status":{"post":{"description":"Show whether the caller connected Jev (TypeSafe AI's evaluation model), through which provider and model, and the key's last 4 characters.","operationId":"jevStatus","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"connected":{"type":"boolean"},"connectedAt":{"type":["number","null"]},"keyLast4":{"type":["string","null"]},"model":{"type":["string","null"]},"provider":{"anyOf":[{"type":"string","enum":["openrouter","vercel","typesafe"]},{"type":"null"}]}},"required":["connected","connectedAt","keyLast4","model","provider"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"jev.status","tags":["jev"],"x-zts-kind":"action"}},"/api/v1/jev.connect":{"post":{"description":"Store the caller's Jev connection, encrypted: the provider (OpenRouter, Vercel AI Gateway or TypeSafe AI), its API key and optionally a model id. Replaces any previous one.","operationId":"jevConnect","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string","minLength":8,"maxLength":512,"pattern":"^\\S+$"},"model":{"type":"string","maxLength":120},"provider":{"type":"string","enum":["openrouter","vercel","typesafe"]}},"required":["apiKey","provider"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"connected":{"type":"boolean"},"connectedAt":{"type":["number","null"]},"keyLast4":{"type":["string","null"]},"model":{"type":["string","null"]},"provider":{"anyOf":[{"type":"string","enum":["openrouter","vercel","typesafe"]},{"type":"null"}]}},"required":["connected","connectedAt","keyLast4","model","provider"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"jev.connect","tags":["jev"],"x-zts-kind":"action"}},"/api/v1/jev.disconnect":{"post":{"description":"Delete the caller's stored Jev connection.","operationId":"jevDisconnect","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"connected":{"type":"boolean"},"connectedAt":{"type":["number","null"]},"keyLast4":{"type":["string","null"]},"model":{"type":["string","null"]},"provider":{"anyOf":[{"type":"string","enum":["openrouter","vercel","typesafe"]},{"type":"null"}]}},"required":["connected","connectedAt","keyLast4","model","provider"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"jev.disconnect","tags":["jev"],"x-zts-kind":"action"}},"/api/v1/jev.test":{"post":{"description":"Send Jev a sample emoji question to check a connection works: the given provider, key and model, or the stored connection when they are omitted. Returns the picked emoji and how long it took.","operationId":"jevTest","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string","minLength":8,"maxLength":512,"pattern":"^\\S+$"},"model":{"type":"string","maxLength":120},"provider":{"type":"string","enum":["openrouter","vercel","typesafe"]}}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"emoji":{"type":"string"},"latencyMs":{"type":"number"},"model":{"type":"string"},"provider":{"type":"string","enum":["openrouter","vercel","typesafe"]}},"required":["emoji","latencyMs","model","provider"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"jev.test","tags":["jev"],"x-zts-kind":"action"}},"/api/v1/jev.suggestEmoji":{"post":{"description":"Ask the caller's Jev connection for one emoji that fits a name or title. Returns null when Jev is not connected.","operationId":"jevSuggestEmoji","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":200}},"required":["text"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"emoji":{"type":["string","null"]}},"required":["emoji"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"jev.suggestEmoji","tags":["jev"],"x-zts-kind":"action"}},"/api/v1/todos.export":{"post":{"description":"Export the caller's active and paused todos as a Markdown checklist.","operationId":"todosExport","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"markdown":{"type":"string"}},"required":["markdown"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"todos.export","tags":["todos"],"x-zts-kind":"action"}},"/api/v1/uploads.presign":{"post":{"description":"Get a short-lived URL to PUT one file to storage (kinds: image 16 MB, avatar 4 MB, cover 8 MB, attachment 32 MB). Send the returned headers with the PUT, then call uploads.complete with the key.","operationId":"uploadsPresign","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string","minLength":1},"kind":{"type":"string","enum":["attachment","avatar","cover","image"]},"size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["contentType","kind","size"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"key":{"type":"string"},"url":{"type":"string"}},"required":["headers","key","url"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"uploads.presign","tags":["uploads"],"x-zts-kind":"action"}},"/api/v1/uploads.complete":{"post":{"description":"Record a file PUT to a uploads.presign URL as one of the caller's uploaded images; returns its id (for avatar, cover or dump items) and public URL. Retrying with the same key returns the same image.","operationId":"uploadsComplete","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1}},"required":["key"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"url":{"type":"string"}},"required":["id","key","url"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"uploads.complete","tags":["uploads"],"x-zts-kind":"action"}},"/api/v1/uploads.delete":{"post":{"description":"Delete one of the caller's uploaded images from storage and the database; a profile using it as avatar or cover loses that image.","operationId":"uploadsDelete","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","minLength":1}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"uploads.delete","tags":["uploads"],"x-zts-kind":"action"}},"/api/v1/users.verificationEmailStatus":{"post":{"description":"Get whether the caller can request another verification email and when (ISO time); null when verification is off or the email is already verified.","operationId":"usersVerificationEmailStatus","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"object","properties":{"canResend":{"type":"boolean"},"canResendAt":{"type":["string","null"]},"maxPerHour":{"type":"number"},"sendsInLastHour":{"type":"number"}},"required":["canResend","canResendAt","maxPerHour","sendsInLastHour"],"additionalProperties":false},{"type":"null"}]}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.verificationEmailStatus","tags":["users"],"x-zts-kind":"action"}},"/api/v1/users.resendVerificationEmail":{"post":{"description":"Send the caller a new email verification link (at most one a minute, five an hour), and return the updated limits.","operationId":"usersResendVerificationEmail","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"success":{"type":"boolean","const":true},"verificationEmailResend":{"type":"object","properties":{"canResend":{"type":"boolean"},"canResendAt":{"type":["string","null"]},"maxPerHour":{"type":"number"},"sendsInLastHour":{"type":"number"}},"required":["canResend","canResendAt","maxPerHour","sendsInLastHour"],"additionalProperties":false}},"required":["success","verificationEmailResend"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"users.resendVerificationEmail","tags":["users"],"x-zts-kind":"action"}},"/api/v1/views.language":{"post":{"description":"The todo filter language views use: a guide with examples and its JSON Schema. Read this before writing a view.","operationId":"viewsLanguage","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"guide":{"type":"string"},"schema":{"$ref":"#/components/schemas/ViewsLanguageOutput__schema0"}},"required":["guide","schema"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.language","tags":["views"],"x-zts-kind":"action"}},"/api/v1/views.preview":{"post":{"description":"Run a filter-language query against the caller's todos without saving it: the matching todos (at most `limit`) and the total count. Use it to check a view before views.create.","operationId":"viewsPreview","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"limit":{"default":50,"type":"integer","minimum":1,"maximum":200},"query":{"type":"object","properties":{"filter":{"$ref":"#/components/schemas/ViewsPreviewInput__schema0"},"sort":{"default":"points","description":"Most important first for points/priority, earliest first for dates.","type":"string","enum":["points","due","planned","priority","created","title"]},"groupBy":{"default":"none","description":"\"status\" is the All view grouping (overdue, overplanned, inbox, today, tomorrow, rest, starts later).","type":"string","enum":["none","status","project","list","priority","due","planned","tag"]},"includeDone":{"default":false,"description":"Completed todos are left out unless this is true or the filter asks for done.","type":"boolean"}},"required":["filter"]}},"required":["query"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"count":{"type":"number"},"todos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false}}},"required":["count","todos"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.preview","tags":["views"],"x-zts-kind":"action"}},"/api/v1/views.run":{"post":{"description":"Run a saved view by id: its matching todos (at most `limit`) and the total count.","operationId":"viewsRun","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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)$"},"limit":{"default":50,"type":"integer","minimum":1,"maximum":200}},"required":["id"]}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"result":{"type":"object","properties":{"count":{"type":"number"},"todos":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ownerId":{"type":"string"},"title":{"type":"string"},"done":{"type":"boolean"},"status":{"type":"string","enum":["active","paused","archived"]},"plannedFor":{"type":["string","null"]},"startDate":{"type":["string","null"]},"dueDate":{"type":["string","null"]},"description":{"type":["string","null"]},"location":{"type":["string","null"]},"link":{"type":["string","null"]},"emoji":{"type":["string","null"]},"waiting":{"type":"boolean"},"waitingReason":{"type":["string","null"]},"taskType":{"type":"string","enum":["any","work","personal"]},"inInbox":{"type":"boolean"},"completedAt":{"type":["number","null"]},"priority":{"type":"string","enum":["none","low","medium","high"]},"pinned":{"type":"boolean"},"mandatory":{"type":"boolean"},"isPrivate":{"type":"boolean"},"durationMinutes":{"type":["number","null"]},"timeOfDay":{"type":"string","enum":["any","morning","afternoon","evening","night"]},"workingHourStart":{"type":["string","null"]},"workingHourEnd":{"type":["string","null"]},"workingDays":{"type":"array","items":{"type":"string","enum":["mon","tue","wed","thu","fri","sat","sun"]}},"nagLevel":{"type":"string","enum":["never","monthly","weekly","daily","fewTimesPerDay"]},"projectId":{"type":["string","null"]},"listId":{"type":["string","null"]},"sectionId":{"type":["string","null"]},"tagIds":{"type":"array","items":{"type":"string"}},"titleHistory":{"type":"array","items":{"type":"string"}},"descriptionHistory":{"type":"array","items":{"type":"string"}},"createdAt":{"type":"number"},"updatedAt":{"type":"number"},"deletedAt":{"type":["number","null"]}},"required":["id","ownerId","title","done","status","plannedFor","startDate","dueDate","description","location","link","emoji","waiting","waitingReason","taskType","inInbox","completedAt","priority","pinned","mandatory","isPrivate","durationMinutes","timeOfDay","workingHourStart","workingHourEnd","workingDays","nagLevel","projectId","listId","sectionId","tagIds","titleHistory","descriptionHistory","createdAt","updatedAt","deletedAt"],"additionalProperties":false}}},"required":["count","todos"],"additionalProperties":false}},"required":["result"],"type":"object"}}},"description":"The method's result."},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}},"summary":"views.run","tags":["views"],"x-zts-kind":"action"}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://kanso.so"}],"tags":[{"name":"activities"},{"name":"affirmations"},{"name":"chats"},{"name":"contacts"},{"name":"checklistItems"},{"name":"checklistLists"},{"name":"checklistRuns"},{"name":"checklistSections"},{"name":"checklists"},{"name":"checkinAnswers"},{"name":"checkinCompletions"},{"name":"checkinQuestions"},{"name":"checkinTemplates"},{"name":"countdowns"},{"name":"dumpItems"},{"name":"goalMilestones"},{"name":"goalTrackerEntries"},{"name":"goalTrackers"},{"name":"goals"},{"name":"habitCompletions"},{"name":"habitLists"},{"name":"habitTags"},{"name":"habits"},{"name":"hints"},{"name":"lifeLogs"},{"name":"locations"},{"name":"noteFolders"},{"name":"notes"},{"name":"medicationLogs"},{"name":"medicationPrescriptions"},{"name":"medicationRequirements"},{"name":"medications"},{"name":"packingActivities"},{"name":"packingItems"},{"name":"ingredientLists"},{"name":"ingredients"},{"name":"mealPlans"},{"name":"plannedMeals"},{"name":"plannerBlockTodos"},{"name":"plannerEvents"},{"name":"plannerLists"},{"name":"financeCards"},{"name":"financeSubscriptions"},{"name":"pomodoros"},{"name":"problemLogs"},{"name":"problems"},{"name":"projects"},{"name":"recipeIngredients"},{"name":"recipes"},{"name":"recipeBooks"},{"name":"routineItems"},{"name":"routineLists"},{"name":"routineRuns"},{"name":"routines"},{"name":"sections"},{"name":"shareInvites"},{"name":"shares"},{"name":"stays"},{"name":"shopping"},{"name":"tags"},{"name":"todoLists"},{"name":"todos"},{"name":"tracker"},{"name":"transports"},{"name":"tripPacking"},{"name":"trips"},{"name":"users"},{"name":"views"},{"name":"wishlist"},{"name":"wishlistLists"},{"name":"aiProviders"},{"name":"aiEndpoints"},{"name":"ai"},{"name":"apiKeys"},{"name":"auth"},{"name":"billing"},{"name":"capture"},{"name":"glink"},{"name":"connections"},{"name":"dump"},{"name":"finance"},{"name":"links"},{"name":"jev"},{"name":"uploads"}]}