{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://botcentral.org/v1/schema.json",
  "title": "BotCentral card",
  "type": "object",
  "additionalProperties": true,
  "required": [
    "botcentral",
    "domain",
    "canonical",
    "name",
    "summary",
    "topics",
    "allow_bots",
    "allow",
    "deny",
    "pointers",
    "pages",
    "updated",
    "verification",
    "consent"
  ],
  "properties": {
    "botcentral": {
      "enum": [
        "1.0",
        "1.1"
      ]
    },
    "domain": {
      "type": "string",
      "pattern": "^[a-z0-9.-]+\\.[a-z]{2,}$"
    },
    "canonical": {
      "type": "string",
      "format": "uri"
    },
    "name": {
      "type": "string",
      "minLength": 1
    },
    "summary": {
      "type": "string",
      "minLength": 1
    },
    "topics": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "allow_bots": {
      "type": "boolean"
    },
    "allow": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "deny": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "pointers": {
      "type": "object",
      "required": [
        "robots",
        "sitemap",
        "llms"
      ],
      "properties": {
        "robots": {
          "type": "string",
          "format": "uri"
        },
        "sitemap": {
          "type": "string",
          "format": "uri"
        },
        "llms": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    "pages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "url",
          "rel"
        ],
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "rel": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          }
        }
      }
    },
    "consent": {
      "type": "object",
      "required": [
        "retrieve",
        "train",
        "act",
        "cite",
        "tdm"
      ],
      "properties": {
        "retrieve": {
          "type": "boolean",
          "description": "RAG / citation / answering"
        },
        "train": {
          "type": "boolean",
          "description": "Foundation-model training"
        },
        "act": {
          "type": "boolean",
          "description": "Agentic tools, MCP, writes"
        },
        "cite": {
          "type": "boolean"
        },
        "tdm": {
          "enum": [
            "open",
            "reserved",
            "licensed"
          ]
        }
      }
    },
    "capabilities": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "kind"
        ],
        "properties": {
          "kind": {
            "enum": [
              "read",
              "cite",
              "search",
              "mcp",
              "openapi",
              "a2a",
              "iso20022",
              "checkout",
              "booking"
            ]
          },
          "href": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          }
        }
      }
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "crawl": {
      "type": "object",
      "properties": {
        "delay_ms": {
          "type": "integer"
        },
        "burst": {
          "type": "integer"
        },
        "revalidate_hours": {
          "type": "integer"
        }
      }
    },
    "freshness": {
      "type": "object",
      "properties": {
        "status": {
          "enum": [
            "fresh",
            "stale",
            "unproven"
          ]
        },
        "checked": {
          "type": [
            "string",
            "null"
          ]
        },
        "revalidate_hours": {
          "type": "integer"
        }
      }
    },
    "verification": {
      "type": "object",
      "required": [
        "method"
      ],
      "properties": {
        "method": {
          "enum": [
            "dns-txt",
            "well-known-file",
            "pending",
            "unverified",
            "stale"
          ]
        },
        "checked": {
          "type": [
            "string",
            "null"
          ]
        },
        "note": {
          "type": "string"
        }
      }
    },
    "etag": {
      "type": "string"
    },
    "contact": {
      "type": "object",
      "properties": {
        "abuse": {
          "type": "string"
        },
        "publisher": {
          "type": "string"
        },
        "security": {
          "type": "string"
        }
      }
    },
    "policy": {
      "type": "object",
      "properties": {
        "citation": {
          "type": "string"
        },
        "license": {
          "type": "string"
        }
      }
    }
  }
}
