{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/dishdirectory-com/json-schema/dishdirectory-com-course-detail-schema.json",
  "title": "CourseDetail",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/dishdirectory-com-openapi.json#/components/schemas/CourseDetail",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "The stable identifier. Use it in /academy/courses/{slug}."
    },
    "title": {
      "type": "string"
    },
    "summary": {
      "type": "string"
    },
    "level": {
      "type": "string",
      "enum": [
        "foundations",
        "practitioner",
        "specialist"
      ]
    },
    "durationMinutes": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "passMarkPercent": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "maxAttempts": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "validityMonths": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": -9007199254740991,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ],
      "description": "Months a certificate stays valid. Null: it never expires."
    },
    "lessonCount": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "questionCount": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991,
      "description": "How many exam questions the course has. Not the questions."
    },
    "path": {
      "type": "string",
      "description": "The course page on this site."
    },
    "url": {
      "type": "string",
      "description": "Absolute URL of the course page."
    },
    "updated": {
      "type": "string",
      "description": "ISO 8601."
    },
    "objectives": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "faq": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string"
          },
          "a": {
            "type": "string"
          }
        },
        "required": [
          "q",
          "a"
        ],
        "additionalProperties": false
      }
    },
    "lessons": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "position": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "durationMinutes": {
            "type": "integer",
            "minimum": -9007199254740991,
            "maximum": 9007199254740991
          },
          "path": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "slug",
          "title",
          "position",
          "durationMinutes",
          "path",
          "url"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "slug",
    "title",
    "summary",
    "level",
    "durationMinutes",
    "passMarkPercent",
    "maxAttempts",
    "validityMonths",
    "lessonCount",
    "questionCount",
    "path",
    "url",
    "updated",
    "objectives",
    "faq",
    "lessons"
  ],
  "additionalProperties": false
}