{
  "openapi": "3.1.0",
  "info": {
    "title": "ClaudeLearn Content API",
    "version": "1.0.0",
    "summary": "Read-only API over the ClaudeLearn (learnclaude.co.il) Hebrew content catalog about Claude.",
    "description": "Free, read-only, no-auth JSON API over the ClaudeLearn catalog: 57 Hebrew learning modules about Claude (decks, how-to guides, articles, cheat sheets, comparison tables), a Hebrew-English AI glossary, and free-text search. CORS is open. Every HTML page also has a markdown variant (append .md or send Accept: text/markdown). An MCP server exposing the same data as tools is available at https://learnclaude.co.il/mcp (Streamable HTTP). Errors are always structured JSON (see the Error schema).",
    "contact": {
      "name": "ClaudeLearn",
      "email": "info@learnclaude.co.il",
      "url": "https://learnclaude.co.il/developers"
    },
    "license": {
      "name": "Content: all rights reserved. API: free to use.",
      "identifier": "LicenseRef-ClaudeLearn"
    }
  },
  "servers": [
    {
      "url": "https://learnclaude.co.il",
      "description": "Production"
    }
  ],
  "paths": {
    "/api/v1/catalog": {
      "get": {
        "operationId": "listCatalog",
        "summary": "List all catalog modules",
        "description": "Returns every module in the ClaudeLearn catalog. Filter with the optional category and type query parameters.",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Filter by category key.",
            "schema": {
              "type": "string",
              "enum": [
                "theory",
                "meet",
                "ui",
                "prompt",
                "build",
                "use"
              ]
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Filter by content type.",
            "schema": {
              "type": "string",
              "enum": [
                "deck",
                "howto",
                "article",
                "cheat",
                "table",
                "interactive"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The catalog listing.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "site",
                    "totalModules",
                    "count",
                    "items"
                  ],
                  "properties": {
                    "site": {
                      "type": "string",
                      "format": "uri"
                    },
                    "name": {
                      "type": "string"
                    },
                    "description": {
                      "type": "string"
                    },
                    "totalModules": {
                      "type": "integer"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "categories": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ModuleSummary"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid category or type filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/modules/{idOrSlug}": {
      "get": {
        "operationId": "getModule",
        "summary": "Get one module by id or slug",
        "description": "Returns a single catalog module with its full description, keywords and FAQ pairs. Accepts the two-digit id (\"02\") or the URL slug (\"tokens\").",
        "tags": [
          "catalog"
        ],
        "parameters": [
          {
            "name": "idOrSlug",
            "in": "path",
            "required": true,
            "description": "Module id (\"02\") or slug (\"tokens\").",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The module.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModuleDetail"
                }
              }
            }
          },
          "404": {
            "description": "No module with that id or slug.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/glossary": {
      "get": {
        "operationId": "listGlossary",
        "summary": "List glossary terms",
        "description": "Returns the full Hebrew-English AI glossary. Filter with the optional category parameter.",
        "tags": [
          "glossary"
        ],
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Filter by term category.",
            "schema": {
              "type": "string",
              "enum": [
                "core",
                "claude",
                "prompt",
                "api",
                "hebrew"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The glossary listing.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "count",
                    "items"
                  ],
                  "properties": {
                    "count": {
                      "type": "integer"
                    },
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Term"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid category filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/glossary/{id}": {
      "get": {
        "operationId": "getGlossaryTerm",
        "summary": "Get one glossary term",
        "description": "Returns a single glossary term by its id (e.g. \"llm\") or English name.",
        "tags": [
          "glossary"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Term id (\"llm\") or English name (\"LLM\").",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 64
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The term.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Term"
                }
              }
            }
          },
          "404": {
            "description": "No term with that id.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/search": {
      "get": {
        "operationId": "searchContent",
        "summary": "Search catalog and glossary",
        "description": "Free-text search over module titles, subtitles, keywords and glossary terms. Hebrew and English queries both work.",
        "tags": [
          "search"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "The search query (Hebrew or English).",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of results (1-50, default 10).",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Ranked search results.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "query",
                    "count",
                    "results"
                  ],
                  "properties": {
                    "query": {
                      "type": "string"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "results": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "kind",
                          "score"
                        ],
                        "properties": {
                          "kind": {
                            "type": "string",
                            "enum": [
                              "module",
                              "term"
                            ]
                          },
                          "score": {
                            "type": "number"
                          },
                          "module": {
                            "$ref": "#/components/schemas/ModuleSummary"
                          },
                          "term": {
                            "$ref": "#/components/schemas/Term"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid q parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "status",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "Stable machine-readable error code, e.g. module_not_found."
              },
              "status": {
                "type": "integer",
                "description": "HTTP status code, repeated in the body."
              },
              "message": {
                "type": "string",
                "description": "Human-readable description of what went wrong."
              },
              "hint": {
                "type": "string",
                "description": "Concrete suggestion for how to fix the request."
              },
              "docs": {
                "type": "string",
                "format": "uri",
                "description": "Link to the API documentation."
              }
            }
          }
        }
      },
      "ModuleSummary": {
        "type": "object",
        "required": [
          "id",
          "title",
          "subtitle",
          "category",
          "type",
          "status",
          "apiUrl"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Two-digit catalog id, e.g. \"02\"."
          },
          "slug": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL slug, e.g. \"tokens\"."
          },
          "title": {
            "type": "string",
            "description": "Hebrew title."
          },
          "subtitle": {
            "type": "string",
            "description": "Hebrew one-line summary."
          },
          "category": {
            "type": "string",
            "enum": [
              "theory",
              "meet",
              "ui",
              "prompt",
              "build",
              "use"
            ]
          },
          "categoryLabel": {
            "type": "string",
            "description": "Hebrew category label."
          },
          "type": {
            "type": "string",
            "enum": [
              "deck",
              "howto",
              "article",
              "cheat",
              "table",
              "interactive"
            ]
          },
          "typeLabel": {
            "type": "string",
            "description": "Hebrew content-type label."
          },
          "readingTime": {
            "type": "string",
            "description": "Approximate reading time, in Hebrew."
          },
          "parts": {
            "type": "string",
            "description": "Length descriptor (slides, steps, words)."
          },
          "status": {
            "type": "string",
            "enum": [
              "ready",
              "soon"
            ]
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "HTML page URL."
          },
          "markdownUrl": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "Markdown variant URL (.md)."
          },
          "apiUrl": {
            "type": "string",
            "format": "uri",
            "description": "JSON detail URL for this module."
          }
        }
      },
      "ModuleDetail": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id",
              "title",
              "subtitle",
              "category",
              "type",
              "status",
              "apiUrl"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "Two-digit catalog id, e.g. \"02\"."
              },
              "slug": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "URL slug, e.g. \"tokens\"."
              },
              "title": {
                "type": "string",
                "description": "Hebrew title."
              },
              "subtitle": {
                "type": "string",
                "description": "Hebrew one-line summary."
              },
              "category": {
                "type": "string",
                "enum": [
                  "theory",
                  "meet",
                  "ui",
                  "prompt",
                  "build",
                  "use"
                ]
              },
              "categoryLabel": {
                "type": "string",
                "description": "Hebrew category label."
              },
              "type": {
                "type": "string",
                "enum": [
                  "deck",
                  "howto",
                  "article",
                  "cheat",
                  "table",
                  "interactive"
                ]
              },
              "typeLabel": {
                "type": "string",
                "description": "Hebrew content-type label."
              },
              "readingTime": {
                "type": "string",
                "description": "Approximate reading time, in Hebrew."
              },
              "parts": {
                "type": "string",
                "description": "Length descriptor (slides, steps, words)."
              },
              "status": {
                "type": "string",
                "enum": [
                  "ready",
                  "soon"
                ]
              },
              "url": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uri",
                "description": "HTML page URL."
              },
              "markdownUrl": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "uri",
                "description": "Markdown variant URL (.md)."
              },
              "apiUrl": {
                "type": "string",
                "format": "uri",
                "description": "JSON detail URL for this module."
              }
            }
          },
          {
            "type": "object",
            "properties": {
              "seoTitle": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Long-form Hebrew description."
              },
              "keywords": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "faqs": {
                "type": "array",
                "description": "FAQ pairs attached to this module (Hebrew).",
                "items": {
                  "type": "object",
                  "required": [
                    "question",
                    "answer"
                  ],
                  "properties": {
                    "question": {
                      "type": "string"
                    },
                    "answer": {
                      "type": "string"
                    }
                  }
                }
              },
              "datePublished": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date"
              },
              "dateModified": {
                "type": [
                  "string",
                  "null"
                ],
                "format": "date"
              }
            }
          }
        ]
      },
      "Term": {
        "type": "object",
        "required": [
          "id",
          "hebrew",
          "category",
          "definition",
          "apiUrl"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Term id, e.g. \"llm\"."
          },
          "hebrew": {
            "type": "string",
            "description": "Hebrew term."
          },
          "english": {
            "type": [
              "string",
              "null"
            ],
            "description": "English term or acronym."
          },
          "category": {
            "type": "string",
            "enum": [
              "core",
              "claude",
              "prompt",
              "api",
              "hebrew"
            ]
          },
          "categoryLabel": {
            "type": "string",
            "description": "Hebrew category label."
          },
          "definition": {
            "type": "string",
            "description": "Hebrew definition."
          },
          "seeAlso": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Related term ids."
          },
          "apiUrl": {
            "type": "string",
            "format": "uri"
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "catalog",
      "description": "The 57-item learning catalog."
    },
    {
      "name": "glossary",
      "description": "Hebrew-English AI glossary."
    },
    {
      "name": "search",
      "description": "Free-text search."
    }
  ]
}