{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Object",
  "type": "object",
  "description": "An object in Cloud Storage. Objects are the individual pieces of data that you store in Cloud Storage.",
  "properties": {
    "kind": {
      "type": "string",
      "description": "The kind of item this is. For objects, this is always storage#object."
    },
    "id": {
      "type": "string",
      "description": "The ID of the object, including the bucket name, object name, and generation number."
    },
    "selfLink": {
      "type": "string",
      "description": "The link to this object."
    },
    "mediaLink": {
      "type": "string",
      "description": "The link to download the object's data."
    },
    "name": {
      "type": "string",
      "description": "The name of the object."
    },
    "bucket": {
      "type": "string",
      "description": "The name of the bucket containing this object."
    },
    "generation": {
      "type": "string",
      "description": "The content generation of this object. Used for object versioning."
    },
    "metageneration": {
      "type": "string",
      "description": "The version of the metadata for this object. Used for preconditions and detecting metadata changes."
    },
    "contentType": {
      "type": "string",
      "description": "Content-Type of the object data."
    },
    "timeCreated": {
      "type": "string",
      "description": "The creation time of the object in RFC 3339 format."
    },
    "updated": {
      "type": "string",
      "description": "The modification time of the object metadata in RFC 3339 format."
    },
    "timeDeleted": {
      "type": "['string', 'null']",
      "description": "The deletion time of the object in RFC 3339 format. Set only when the object is noncurrent."
    },
    "temporaryHold": {
      "type": "boolean",
      "description": "Whether the object is under a temporary hold."
    },
    "eventBasedHold": {
      "type": "boolean",
      "description": "Whether the object is under an event-based hold."
    },
    "retentionExpirationTime": {
      "type": "['string', 'null']",
      "description": "The earliest time that the object can be deleted or replaced, based on the retention policy."
    },
    "storageClass": {
      "type": "string",
      "description": "Storage class of the object."
    },
    "timeStorageClassUpdated": {
      "type": "string",
      "description": "The time at which the object's storage class was last changed."
    },
    "size": {
      "type": "string",
      "description": "Content-Length of the data in bytes."
    },
    "md5Hash": {
      "type": "string",
      "description": "MD5 hash of the data, encoded using base64. Not available for composite objects."
    },
    "crc32c": {
      "type": "string",
      "description": "CRC32c checksum, encoded using base64."
    },
    "etag": {
      "type": "string",
      "description": "HTTP 1.1 Entity tag for the object."
    },
    "componentCount": {
      "type": "integer",
      "description": "Number of underlying components that make up a composite object."
    },
    "contentEncoding": {
      "type": "string",
      "description": "Content-Encoding of the object data."
    },
    "contentDisposition": {
      "type": "string",
      "description": "Content-Disposition of the object data."
    },
    "contentLanguage": {
      "type": "string",
      "description": "Content-Language of the object data."
    },
    "cacheControl": {
      "type": "string",
      "description": "Cache-Control directive for the object data."
    },
    "metadata": {
      "type": "object",
      "description": "User-provided metadata in key/value pairs."
    },
    "acl": {
      "type": "array",
      "description": "Access controls on the object."
    },
    "owner": {
      "type": "object",
      "description": "The owner of the object."
    },
    "customerEncryption": {
      "type": "object",
      "description": "Metadata of customer-supplied encryption key, if the object is encrypted by such a key."
    },
    "kmsKeyName": {
      "type": "string",
      "description": "Cloud KMS key used to encrypt the object, if one has been specified."
    },
    "customTime": {
      "type": "string",
      "description": "A timestamp in RFC 3339 format specified by the user for an object. Typically set to enable lifecycle management conditions based on custom time."
    },
    "softDeleteTime": {
      "type": "['string', 'null']",
      "description": "The time at which the object was soft-deleted, if applicable."
    },
    "hardDeleteTime": {
      "type": "['string', 'null']",
      "description": "The time at which the soft-deleted object will be permanently deleted."
    }
  }
}