{
  "title": "A JSON Schema for the Google API Discovery Format.",
  "id": "http://openapis.org/v3/schema.json#",
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "description": "This is the root document object of the Discovery Format.",
  "required": [
    "kind",
    "discoveryVersion"
  ],
  "additionalProperties": false,
  "properties": {
    "kind": {
      "type": "string"
    },
    "discoveryVersion": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "name": {
      "type": "string"
    },
    "version": {
      "type": "string"
    },
    "revision": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "description": {
      "type": "string"
    },
    "icons": {
      "$ref": "#/definitions/icons"
    },
    "documentationLink": {
      "type": "string"
    },
    "labels": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "protocol": {
      "type": "string"
    },
    "baseUrl": {
      "type": "string"
    },
    "basePath": {
      "type": "string"
    },
    "rootUrl": {
      "type": "string"
    },
    "servicePath": {
      "type": "string"
    },
    "batchPath": {
      "type": "string"
    },
    "parameters": {
      "$ref": "#/definitions/parameters"
    },
    "auth": {
      "$ref": "#/definitions/auth"
    },
    "features": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "schemas": {
      "$ref": "#/definitions/schemas"
    },
    "methods": {
      "$ref": "#/definitions/methods"
    },
    "resources": {
      "$ref": "#/definitions/resources"
    },
    "etag": {
      "type": "string"
    },
    "ownerDomain": {
      "type": "string"
    },
    "ownerName": {
      "type": "string"
    },
    "version_module": {
      "type": "boolean"
    },
    "canonicalName": {
      "type": "string"
    },
    "fullyEncodeReservedExpansion": {
      "type": "boolean"
    },
    "packagePath": {
      "type": "string"
    }
  },
  "definitions": {
    "icons": {
      "type": "object",
      "description": "Icons that represent the API.",
      "required": [
        "x16",
        "x32"
      ],
      "additionalProperties": false,
      "properties": {
        "x16": {
          "type": "string"
        },
        "x32": {
          "type": "string"
        }
      }
    },
    "parameters": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/parameter"
      }
    },
    "parameter": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "$ref": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "default": {
          "type": "string"
        },
        "required": {
          "type": "boolean"
        },
        "format": {
          "type": "string"
        },
        "pattern": {
          "type": "string"
        },
        "minimum": {
          "type": "string"
        },
        "maximum": {
          "type": "string"
        },
        "enum": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "enumDescriptions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "repeated": {
          "type": "boolean"
        },
        "location": {
          "type": "string"
        },
        "properties": {
          "$ref": "#/definitions/schemas"
        },
        "additionalProperties": {
          "$ref": "#/definitions/schema"
        },
        "items": {
          "$ref": "#/definitions/schema"
        },
        "annotations": {
          "$ref": "#/definitions/annotations"
        }
      }
    },
    "auth": {
      "type": "object",
      "properties": {
        "oauth2": {
          "type": "object",
          "properties": {
            "scopes": {
              "$ref": "#/definitions/scopes"
            }
          }
        }
      }
    },
    "schemas": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/schema"
      }
    },
    "schema": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "default": {
          "type": "string"
        },
        "required": {
          "type": "boolean"
        },
        "format": {
          "type": "string"
        },
        "pattern": {
          "type": "string"
        },
        "minimum": {
          "type": "string"
        },
        "maximum": {
          "type": "string"
        },
        "enum": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "enumDescriptions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "repeated": {
          "type": "boolean"
        },
        "location": {
          "type": "string"
        },
        "properties": {
          "$ref": "#/definitions/schemas"
        },
        "additionalProperties": {
          "$ref": "#/definitions/schema"
        },
        "items": {
          "$ref": "#/definitions/schema"
        },
        "$ref": {
          "type": "string"
        },
        "annotations": {
          "$ref": "#/definitions/annotations"
        },
        "readOnly": {
          "type": "boolean"
        }
      }
    },
    "methods": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/method"
      }
    },
    "method": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "path": {
          "type": "string"
        },
        "httpMethod": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "parameters": {
          "$ref": "#/definitions/parameters"
        },
        "parameterOrder": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "request": {
          "type": "object",
          "properties": {
            "$ref": {
              "type": "string"
            },
            "parameterName": {
              "type": "string"
            }
          }
        },
        "response": {
          "type": "object",
          "properties": {
            "$ref": {
              "type": "string"
            }
          }
        },
        "scopes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "supportsMediaDownload": {
          "type": "boolean"
        },
        "supportsMediaUpload": {
          "type": "boolean"
        },
        "useMediaDownloadService": {
          "type": "boolean"
        },
        "mediaUpload": {
          "$ref": "#/definitions/mediaUpload"
        },
        "supportsSubscription": {
          "type": "boolean"
        },
        "flatPath": {
          "type": "string"
        },
        "etagRequired": {
          "type": "boolean"
        }
      }
    },
    "resources": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/resource"
      }
    },
    "resource": {
      "type": "object",
      "properties": {
        "methods": {
          "$ref": "#/definitions/methods"
        },
        "resources": {
          "$ref": "#/definitions/resources"
        }
      }
    },
    "annotations": {
      "type": "object",
      "properties": {
        "required": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "scopes": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/scope"
      }
    },
    "scope": {
      "type": "object",
      "properties": {
        "description": {
          "type": "string"
        }
      }
    },
    "mediaUpload": {
      "type": "object",
      "properties": {
        "accept": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "maxSize": {
          "type": "string"
        },
        "protocols": {
          "type": "object",
          "properties": {
            "simple": {
              "type": "object",
              "properties": {
                "multipart": {
                  "type": "boolean"
                },
                "path": {
                  "type": "string"
                }
              }
            },
            "resumable": {
              "type": "object",
              "properties": {
                "multipart": {
                  "type": "boolean"
                },
                "path": {
                  "type": "string"
                }
              }
            }
          }
        },
        "supportsSubscription": {
          "type": "boolean"
        }
      }
    }
  }
}
