{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "API Endpoint Documentation Schema",
  "description": "Schema for API endpoint documentation with classification and content control",
  "x-markitect-sections": {
    "ENDPOINT": {
      "classification": "required",
      "heading_level": 2,
      "position": "after_title",
      "content_instruction": "HTTP method and endpoint path (e.g., GET /api/v1/users)",
      "min_paragraphs": 1,
      "max_paragraphs": 3,
      "error_message": "ENDPOINT section must specify the HTTP method and path"
    },
    "DESCRIPTION": {
      "classification": "required",
      "heading_level": 2,
      "content_instruction": "What this endpoint does and when to use it",
      "min_paragraphs": 2,
      "error_message": "DESCRIPTION is required to explain endpoint functionality"
    },
    "AUTHENTICATION": {
      "classification": "required",
      "heading_level": 2,
      "content_instruction": "Authentication requirements (API key, OAuth, etc.)",
      "min_paragraphs": 1,
      "error_message": "AUTHENTICATION requirements must be documented"
    },
    "REQUEST PARAMETERS": {
      "classification": "recommended",
      "heading_level": 2,
      "content_instruction": "List all request parameters with types and descriptions",
      "alternatives": ["PARAMETERS", "REQUEST", "INPUT"],
      "warning_if_missing": "Documenting request parameters helps API consumers use the endpoint correctly"
    },
    "RESPONSE": {
      "classification": "recommended",
      "heading_level": 2,
      "content_instruction": "Response format, status codes, and example responses",
      "min_code_blocks": 1,
      "warning_if_missing": "Response documentation with examples improves API usability"
    },
    "EXAMPLES": {
      "classification": "recommended",
      "heading_level": 2,
      "content_instruction": "Complete request/response examples",
      "min_code_blocks": 2,
      "warning_if_missing": "Examples make API documentation significantly more useful"
    },
    "ERROR CODES": {
      "classification": "recommended",
      "heading_level": 2,
      "content_instruction": "Possible error responses and how to handle them",
      "alternatives": ["ERRORS", "ERROR HANDLING"],
      "warning_if_missing": "Error documentation helps developers handle failures gracefully"
    },
    "RATE LIMITING": {
      "classification": "optional",
      "heading_level": 2,
      "content_instruction": "Rate limit information for this endpoint"
    },
    "CHANGELOG": {
      "classification": "optional",
      "heading_level": 2,
      "content_instruction": "Version history and changes to this endpoint"
    },
    "SEE ALSO": {
      "classification": "optional",
      "heading_level": 2,
      "content_instruction": "Related endpoints and documentation"
    },
    "IMPLEMENTATION NOTES": {
      "classification": "discouraged",
      "heading_level": 2,
      "warning_if_missing": "Implementation details should be in developer documentation, not API docs"
    },
    "INTERNAL API": {
      "classification": "improper",
      "heading_level": 2,
      "error_message": "Internal API endpoints must not be in public documentation"
    },
    "EXPERIMENTAL": {
      "classification": "improper",
      "heading_level": 2,
      "error_message": "Experimental features must not be in stable API documentation"
    }
  },
  "x-markitect-content-control": {
    "endpoint": {
      "required_patterns": [
        "\\*\\*[A-Z]+\\*\\*",
        "`/api/",
        "\\*\\*[A-Z]+\\*\\*\\s+`/[^`]+`"
      ],
      "content_quality": {
        "min_words": 5,
        "max_words": 50,
        "readability_target": "technical"
      },
      "content_instructions": [
        "Format: **METHOD** `endpoint_path`",
        "Example: **GET** `/api/v1/users/{id}`",
        "Use bold for HTTP method",
        "Use code formatting for path",
        "Include path parameters in curly braces"
      ]
    },
    "description": {
      "discouraged_patterns": [
        "TODO",
        "FIXME",
        "TBD",
        "Coming soon"
      ],
      "forbidden_patterns": [
        "password",
        "secret",
        "api[_-]?key\\s*=",
        "token\\s*="
      ],
      "content_quality": {
        "min_words": 30,
        "max_words": 500,
        "readability_target": "technical",
        "min_sentences": 2
      },
      "content_instructions": [
        "Explain what the endpoint does",
        "Describe the main use case",
        "Mention any prerequisites",
        "Note any side effects",
        "Keep concise but complete"
      ]
    },
    "request_parameters": {
      "required_patterns": [
        "\\*\\*[a-z_]+\\*\\*",
        "\\*[A-Za-z]+\\*"
      ],
      "content_instructions": [
        "Use bold for parameter names",
        "Use italic for parameter types",
        "Include: name, type, required/optional, description",
        "Use definition list format",
        "Specify default values where applicable"
      ]
    },
    "response": {
      "required_patterns": [
        "```json",
        "200",
        "\\{[^}]*\\}"
      ],
      "content_quality": {
        "min_words": 50,
        "max_words": 500,
        "readability_target": "technical"
      },
      "content_instructions": [
        "Show example JSON response",
        "Document all status codes",
        "Explain response fields",
        "Include success and error examples",
        "Use proper JSON formatting in code blocks"
      ]
    },
    "examples": {
      "required_patterns": [
        "```bash",
        "curl",
        "```json"
      ],
      "content_quality": {
        "min_words": 100,
        "max_words": 1000,
        "readability_target": "general"
      },
      "content_instructions": [
        "Provide complete curl examples",
        "Show request headers",
        "Include example responses",
        "Add explanatory comments",
        "Cover common scenarios"
      ],
      "link_validation": {
        "check_internal": true,
        "check_external": true,
        "allow_fragments": true
      }
    }
  },
  "type": "object",
  "properties": {
    "headings": {
      "type": "object",
      "properties": {
        "level_1": {
          "type": "array",
          "minItems": 1,
          "maxItems": 1
        },
        "level_2": {
          "type": "array",
          "minItems": 3,
          "maxItems": 15
        },
        "level_3": {
          "type": "array",
          "minItems": 0,
          "maxItems": 30
        }
      }
    },
    "paragraphs": {
      "type": "array",
      "minItems": 8,
      "maxItems": 200
    },
    "code_blocks": {
      "type": "array",
      "minItems": 3,
      "maxItems": 30
    },
    "emphasis": {
      "type": "array",
      "minItems": 15,
      "maxItems": 200
    }
  }
}
