{
  "openapi": "3.1.0",
  "info": { "title": "DOTAIZ public learning catalog", "version": "1.0.0", "description": "Read-only public paths. No private notebooks or live AI generation." },
  "servers": [{ "url": "https://dotaiz.com" }],
  "paths": {
    "/api/paths": {
      "get": {
        "operationId": "searchLearningPaths",
        "summary": "Search or list open learning paths",
        "parameters": [
          { "name": "q", "in": "query", "schema": { "type": "string", "maxLength": 240 }, "description": "All words match title, description, tags, or level; case insensitive." },
          { "name": "id", "in": "query", "schema": { "type": "string", "pattern": "^[a-z0-9-]{1,80}$" }, "description": "Exact path ID. Takes precedence over q." }
        ],
        "responses": {
          "200": { "description": "Public catalog results", "content": { "application/json": { "schema": { "type": "object", "required": ["version", "total", "paths"], "properties": { "version": { "type": "integer", "const": 1 }, "total": { "type": "integer", "minimum": 0 }, "paths": { "type": "array", "items": { "type": "object", "required": ["id", "title", "canonical_url", "steps"], "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "canonical_url": { "type": "string", "format": "uri" }, "steps": { "type": "array", "items": { "type": "object" } } } } } } } } } },
          "400": { "description": "Invalid query or ID" },
          "404": { "description": "Unknown path ID" },
          "405": { "description": "Method not allowed" }
        }
      }
    }
  }
}
