{
  "openapi": "3.1.0",
  "info": {
    "title": "AILatest Todo API",
    "version": "1.0.0",
    "description": "Versioned task and public-calendar API for AILatest Todo. Personal task endpoints require an active Max membership.",
    "contact": { "name": "AILatest Studio", "email": "contact@ailatest.org", "url": "https://ailatest.org/" }
  },
  "servers": [{ "url": "https://todo.ailatest.org/api/v1" }],
  "security": [{ "bearerAuth": [] }],
  "paths": {
    "/": {
      "get": { "security": [], "summary": "Discover API resources", "responses": { "200": { "description": "API metadata" } } }
    },
    "/tasks": {
      "get": {
        "summary": "List tasks",
        "parameters": [{ "name": "since", "in": "query", "schema": { "type": "string", "format": "date-time" } }],
        "responses": { "200": { "description": "Task collection", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskCollection" } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/MaxRequired" } }
      },
      "post": {
        "summary": "Create a task",
        "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskInput" } } } },
        "responses": { "201": { "description": "Task created" }, "400": { "description": "Invalid request" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/MaxRequired" } }
      }
    },
    "/tasks/{id}": {
      "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }],
      "patch": { "summary": "Update a task", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TaskPatch" } } } }, "responses": { "200": { "description": "Task updated" }, "404": { "description": "Task not found" } } },
      "delete": { "summary": "Delete a task", "responses": { "204": { "description": "Task deleted" }, "404": { "description": "Task not found" } } }
    },
    "/calendars": {
      "get": { "security": [], "summary": "List public calendar packs", "responses": { "200": { "description": "Calendar manifest" } } }
    },
    "/calendars/{id}": {
      "get": { "security": [], "summary": "Read a public calendar pack", "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "responses": { "200": { "description": "Calendar pack" }, "404": { "description": "Pack not found" } } }
    }
  },
  "components": {
    "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "AILatest access token" } },
    "responses": {
      "Unauthorized": { "description": "Sign-in required" },
      "MaxRequired": { "description": "Active Max membership required" }
    },
    "schemas": {
      "TaskInput": {
        "type": "object", "required": ["title"], "additionalProperties": false,
        "properties": { "title": { "type": "string", "maxLength": 500 }, "listId": { "type": "string" }, "due": { "type": "string" }, "reminder": { "type": "string" }, "repeat": { "type": "string" }, "notes": { "type": "string", "maxLength": 20000 }, "important": { "type": "boolean" } }
      },
      "TaskPatch": {
        "type": "object", "additionalProperties": false,
        "properties": { "title": { "type": "string", "maxLength": 500 }, "listId": { "type": "string" }, "completed": { "type": "boolean" }, "important": { "type": "boolean" }, "due": { "type": "string" }, "reminder": { "type": ["string", "null"] }, "repeat": { "type": "string" }, "notes": { "type": "string", "maxLength": 20000 } }
      },
      "Task": { "allOf": [{ "$ref": "#/components/schemas/TaskInput" }, { "type": "object", "required": ["id", "completed", "updatedAt"], "properties": { "id": { "type": "string" }, "completed": { "type": "boolean" }, "updatedAt": { "type": "string", "format": "date-time" } } }] },
      "TaskCollection": { "type": "object", "required": ["data", "meta"], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Task" } }, "meta": { "type": "object", "properties": { "count": { "type": "integer" }, "serverTime": { "type": "string", "format": "date-time" } } } } }
    }
  }
}
