{
  "type": "object",
  "id": "https://www.gstatic.com/mtcs/cosigners/v1/cosigners_schema.json",
  "$schema": "http://json-schema.org/draft-07/schema",
  "required": [
    "version",
    "operators"
  ],
  "definitions": {
    "operator": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "title": "Cosigner operator's organization name",
          "description": "Name of this cosigner operator.",
          "type": "string"
        },
        "email": {
          "title": "Cosigner operator email addresses",
          "description": "Email addresses the operator can be contacted at.",
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "type": "string",
            "format": "email"
          }
        }
      }
    },
    "state_change": {
      "type": "object",
      "required": [
        "state"
      ],
      "properties": {
        "state": {
          "title": "Cosigner inclusion state",
          "description": "The state of the cosigner from Chrome's perspective",
          "type": "string",
          "enum": [
            "UNSET",
            "CANDIDATE",
            "QUALIFIED",
            "USABLE",
            "FROZEN",
            "REMOVED"
          ]
        },
        "state_start": {
          "title": "State start timestamp",
          "description": "The time at which the cosigner entered this state.",
          "type": "string",
          "format": "date-time",
          "examples": [
            "2026-05-07T07:00:00Z"
          ]
        }
      }
    },
    "operator_change": {
      "type": "object",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "title": "Name of the cosigner operator",
          "description": "Name of the operator running the cosigner during the time period beginning at operator_start.",
          "type": "string"
        },
        "operator_start": {
          "title": "Operator start timestamp",
          "description": "The time at which the operator started operating this cosigner.",
          "type": "string",
          "format": "date-time",
          "examples": [
            "2026-05-07T07:00:00Z"
          ]
        }
      }
    },
    "signer": {
      "type": "object",
      "required": [
        "friendly_name",
        "base_id",
        "base_url",
        "key_sha256"
      ],
      "properties": {
        "friendly_name": {
          "title": "Human-readable friendly name of the cosigner",
          "description": "A one-word human-readable name, without an operator prefix. e.g. \"cosigner1\".",
          "type": "string"
        },
        "base_id": {
          "title": "CA ID",
          "description": "CA ID, as a relative OID in ASCII format (e.g. 1.2.3.4).",
          "type": "string"
        },
        "state_history": {
          "title": "State history",
          "description": "History of state changes for this cosigner, in reverse chronological order (with current state first).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/state_change"
          }
        },
        "operator_history": {
          "title": "Operator history",
          "description": "Operators that have operated this cosigner, in reverse chronological order (with current operator first).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/operator_change"
          }
        },
        "base_url": {
          "title": "Monitoring base URL",
          "description": "Monitoring URL of the cosigner.",
          "type": "string",
          "format": "uri"
        },
        "type": {
          "title": "Cosigner type",
          "description": "Whether the cosigner is a mirror or an issuer log.",
          "type": "string",
          "enum": [
            "UNSET",
            "ISSUER",
            "MIRROR"
          ]
        },
        "realm": {
          "title": "Authentication realm",
          "description": "Log's authentication realm. Only PUBLICLY_TRUSTED logs are trusted by default in Chrome.",
          "type": "string",
          "enum": [
            "UNSET",
            "UNTRUSTED_VALIDATION_ONLY",
            "PUBLICLY_TRUSTED"
          ]
        },
        "max_cert_lifetime_seconds": {
          "title": "Maximum certificate lifetime in seconds",
          "description": "Maximum lifetime of certificates issued by this CA. Only applicable to issuers.",
          "type": "integer",
          "minimum": 0
        },
        "key_sha256": {
          "title": "SHA256 hash of the cosigner's key",
          "description": "SHA-256 hash of the cosigner's public key, as a 64-character lower-case hex string.",
          "type": "string",
          "pattern": "^[0-9a-f]{64}$"
        }
      }
    }
  },
  "properties": {
    "timestamp": {
      "title": "Freshness timestamp",
      "description": "Last time this list was checked for freshness, regardless of whether it needed updates at that time.",
      "type": "string",
      "format": "date-time",
      "examples": [
        "2026-05-07T07:00:00Z"
      ]
    },
    "version": {
      "title": "Signer set version",
      "description": "Contents version. This will be incremented whenever the contents change.",
      "type": "string",
      "examples": [
        "1.0.0"
      ]
    },
    "operators": {
      "title": "Cosigner operators",
      "description": "List of all known operators.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/operator"
      }
    },
    "issuers": {
      "title": "Issuer cosigners",
      "description": "List of all issuer logs for MTC CAs recognized by Chrome.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/signer"
      }
    },
    "mirrors": {
      "title": "Mirroring cosigners",
      "description": "List of all mirrors accepted (or under evaluation) by Chrome.",
      "type": "array",
      "items": {
        "$ref": "#/definitions/signer"
      }
    }
  }
}
