{
  "type": "object",
  "properties": {
    "schema_version": {
      "const": "1.0.0"
    },
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
    },
    "platform": {
      "enum": [
        "Bugcrowd",
        "HackerOne",
        "Intigriti"
      ]
    },
    "reviewed_at": {
      "type": "string",
      "format": "date-time"
    },
    "review_state": {
      "const": "directory_listing_only"
    },
    "coverage": {
      "type": "object",
      "properties": {
        "completeness": {
          "enum": [
            "partial",
            "complete_visible_listing"
          ]
        },
        "filters": {
          "type": "string",
          "minLength": 1
        },
        "pagination_note": {
          "type": "string",
          "minLength": 1
        },
        "continuation_note": {
          "type": "string",
          "minLength": 1
        },
        "limitations": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1
          },
          "minItems": 1,
          "uniqueItems": true
        }
      },
      "required": [
        "completeness",
        "filters",
        "pagination_note",
        "continuation_note",
        "limitations"
      ],
      "additionalProperties": false
    },
    "sources": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "observed_at": {
            "type": "string",
            "format": "date-time"
          },
          "access_method": {
            "enum": [
              "browser",
              "text",
              "text_and_browser"
            ]
          },
          "page_label": {
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "id",
          "url",
          "observed_at",
          "access_method",
          "page_label"
        ],
        "additionalProperties": false
      }
    },
    "entries": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "program_url": {
            "type": "string",
            "format": "uri"
          },
          "program_type": {
            "enum": [
              "paid_bounty",
              "vulnerability_disclosure",
              "unknown"
            ]
          },
          "submission_status": {
            "enum": [
              "accepting_reports",
              "paused",
              "closed",
              "unknown",
              "active_directory_listing"
            ]
          },
          "source_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "minItems": 1,
            "uniqueItems": true
          },
          "evidence_note": {
            "type": "string",
            "minLength": 1
          },
          "directory_card": {
            "type": "object",
            "properties": {
              "publisher_category": {"type": "string", "minLength": 1},
              "reward_summary": {"type": ["string", "null"]},
              "reward_min": {"type": ["string", "null"]},
              "reward_max": {"type": ["string", "null"]},
              "scope_rank": {"type": ["integer", "null"], "minimum": 0},
              "access_status": {"type": "string", "minLength": 1},
              "industry": {"type": ["string", "null"]},
              "service_level": {"type": ["string", "null"]},
              "badge": {"type": ["string", "null"]},
              "ends_at": {"type": ["string", "null"]},
              "is_external_listing": {"type": "boolean"},
              "is_demo": {"type": "boolean"},
              "is_private": {"type": "boolean"}
            },
            "required": ["publisher_category", "reward_summary", "reward_min", "reward_max", "scope_rank", "access_status", "industry", "service_level", "badge", "ends_at", "is_external_listing", "is_demo", "is_private"],
            "additionalProperties": false
          }
        },
        "required": [
          "id",
          "name",
          "program_url",
          "program_type",
          "submission_status",
          "source_ids",
          "evidence_note"
        ],
        "additionalProperties": false
      }
    },
    "content_scope": {
      "const": "public_program_listing_metadata"
    },
    "rights": {
      "const": "Original selection and commentary CC BY 4.0; facts, linked sources and trademarks retain their own rights."
    }
  },
  "required": [
    "schema_version",
    "id",
    "platform",
    "reviewed_at",
    "review_state",
    "coverage",
    "sources",
    "entries",
    "content_scope",
    "rights"
  ],
  "additionalProperties": false,
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Official directory discovery batch; not verified policy or asset scope"
}
