{
  "schemas": {
    "GoogleLongrunningListOperationsResponse": {
      "id": "GoogleLongrunningListOperationsResponse",
      "description": "The response message for Operations.ListOperations.",
      "type": "object",
      "properties": {
        "operations": {
          "description": "A list of operations that matches the specified filter in the request.",
          "type": "array",
          "items": {
            "$ref": "GoogleLongrunningOperation"
          }
        },
        "nextPageToken": {
          "description": "The standard List next-page token.",
          "type": "string"
        },
        "unreachable": {
          "description": "Unordered list. Unreachable resources. Populated when the request sets `ListOperationsRequest.return_partial_success` and reads across collections. For example, when attempting to list all resources across all supported locations.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleLongrunningOperation": {
      "id": "GoogleLongrunningOperation",
      "description": "This resource represents a long-running operation that is the result of a network API call.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.",
          "type": "string"
        },
        "metadata": {
          "description": "Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        },
        "done": {
          "description": "If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.",
          "type": "boolean"
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "GoogleRpcStatus"
        },
        "response": {
          "description": "The normal, successful response of the operation. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.",
          "type": "object",
          "additionalProperties": {
            "type": "any",
            "description": "Properties of the object. Contains field @type with type URL."
          }
        }
      }
    },
    "GoogleRpcStatus": {
      "id": "GoogleRpcStatus",
      "description": "The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors).",
      "type": "object",
      "properties": {
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "description": "A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.",
          "type": "string"
        },
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "type": "array",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            }
          }
        }
      }
    },
    "GoogleProtobufEmpty": {
      "id": "GoogleProtobufEmpty",
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
      "type": "object",
      "properties": {}
    },
    "GoogleLongrunningCancelOperationRequest": {
      "id": "GoogleLongrunningCancelOperationRequest",
      "description": "The request message for Operations.CancelOperation.",
      "type": "object",
      "properties": {}
    },
    "GoogleLongrunningWaitOperationRequest": {
      "id": "GoogleLongrunningWaitOperationRequest",
      "description": "The request message for Operations.WaitOperation.",
      "type": "object",
      "properties": {
        "timeout": {
          "description": "The maximum duration to wait before timing out. If left blank, the wait will be at most the time permitted by the underlying HTTP/RPC protocol. If RPC context deadline is also specified, the shorter one will be used.",
          "type": "string",
          "format": "google-duration"
        }
      }
    },
    "GoogleFirebaseAppdistroV1AabInfo": {
      "id": "GoogleFirebaseAppdistroV1AabInfo",
      "description": "Android App Bundle (AAB) information for a Firebase app.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the `AabInfo` resource. Format: `projects/{project_number}/apps/{app}/aabInfo`",
          "type": "string"
        },
        "integrationState": {
          "description": "App bundle integration state. Only valid for android apps.",
          "type": "string",
          "enumDescriptions": [
            "Aab integration state unspecified",
            "App can receive app bundle uploads",
            "Firebase project is not linked to a Play developer account",
            "There is no app in linked Play developer account with the same bundle id",
            "The app in Play developer account is not in a published state",
            "Play App status is unavailable",
            "Play IAS terms not accepted"
          ],
          "enum": [
            "AAB_INTEGRATION_STATE_UNSPECIFIED",
            "INTEGRATED",
            "PLAY_ACCOUNT_NOT_LINKED",
            "NO_APP_WITH_GIVEN_BUNDLE_ID_IN_PLAY_ACCOUNT",
            "APP_NOT_PUBLISHED",
            "AAB_STATE_UNAVAILABLE",
            "PLAY_IAS_TERMS_NOT_ACCEPTED"
          ]
        },
        "testCertificate": {
          "description": "App bundle test certificate generated for the app. Set after the first app bundle is uploaded for this app.",
          "$ref": "GoogleFirebaseAppdistroV1TestCertificate"
        }
      }
    },
    "GoogleFirebaseAppdistroV1TestCertificate": {
      "id": "GoogleFirebaseAppdistroV1TestCertificate",
      "description": "App bundle test certificate",
      "type": "object",
      "properties": {
        "hashSha1": {
          "description": "Hex string of SHA1 hash of the test certificate used to resign the AAB",
          "type": "string"
        },
        "hashSha256": {
          "description": "Hex string of SHA256 hash of the test certificate used to resign the AAB",
          "type": "string"
        },
        "hashMd5": {
          "description": "Hex string of MD5 hash of the test certificate used to resign the AAB",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1UploadReleaseRequest": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseRequest",
      "description": "Request message for `UploadRelease`.",
      "type": "object",
      "properties": {
        "blob": {
          "description": "Binary to upload",
          "$ref": "GdataMedia"
        }
      }
    },
    "GdataMedia": {
      "id": "GdataMedia",
      "description": "A reference to data stored on the filesystem, on GFS or in blobstore.",
      "type": "object",
      "properties": {
        "contentType": {
          "description": "MIME type of the data",
          "type": "string"
        },
        "timestamp": {
          "description": "Time at which the media data was last updated, in milliseconds since UNIX epoch",
          "type": "string",
          "format": "uint64"
        },
        "token": {
          "description": "A unique fingerprint/version id for the media data",
          "type": "string"
        },
        "length": {
          "description": "Size of the data, in bytes",
          "type": "string",
          "format": "int64"
        },
        "filename": {
          "description": "Original file name",
          "type": "string"
        },
        "referenceType": {
          "description": "Describes what the field reference contains.",
          "type": "string",
          "enumDescriptions": [
            "Reference contains a GFS path or a local path.",
            "Reference points to a blobstore object. This could be either a v1 blob_ref or a v2 blobstore2_info. Clients should check blobstore2_info first, since v1 is being deprecated.",
            "Data is included into this proto buffer",
            "Data should be accessed from the current service using the operation GetMedia.",
            "The content for this media object is stored across multiple partial media objects under the composite_media field.",
            "Reference points to a bigstore object",
            "Indicates the data is stored in diff_version_response.",
            "Indicates the data is stored in diff_checksums_response.",
            "Indicates the data is stored in diff_download_response.",
            "Indicates the data is stored in diff_upload_request.",
            "Indicates the data is stored in diff_upload_response.",
            "Indicates the data is stored in cosmo_binary_reference.",
            "Informs Scotty to generate a response payload with the size specified in the length field. The contents of the payload are generated by Scotty and are undefined. This is useful for testing download speeds between the user and Scotty without involving a real payload source. Note: range is not supported when using arbitrary_bytes."
          ],
          "enum": [
            "PATH",
            "BLOB_REF",
            "INLINE",
            "GET_MEDIA",
            "COMPOSITE_MEDIA",
            "BIGSTORE_REF",
            "DIFF_VERSION_RESPONSE",
            "DIFF_CHECKSUMS_RESPONSE",
            "DIFF_DOWNLOAD_RESPONSE",
            "DIFF_UPLOAD_REQUEST",
            "DIFF_UPLOAD_RESPONSE",
            "COSMO_BINARY_REFERENCE",
            "ARBITRARY_BYTES"
          ]
        },
        "path": {
          "description": "Path to the data, set if reference_type is PATH",
          "type": "string"
        },
        "blobRef": {
          "description": "Blobstore v1 reference, set if reference_type is BLOBSTORE_REF This should be the byte representation of a blobstore.BlobRef. Since Blobstore is deprecating v1, use blobstore2_info instead. For now, any v2 blob will also be represented in this field as v1 BlobRef.",
          "deprecated": true,
          "type": "string",
          "format": "byte"
        },
        "inline": {
          "description": "Media data, set if reference_type is INLINE",
          "type": "string",
          "format": "byte"
        },
        "mediaId": {
          "description": "Media id to forward to the operation GetMedia. Can be set if reference_type is GET_MEDIA.",
          "type": "string",
          "format": "byte"
        },
        "hash": {
          "description": "Deprecated, use one of explicit hash type fields instead. These two hash related fields will only be populated on Scotty based media uploads and will contain the content of the hash group in the NotificationRequest: http://cs/#google3/blobstore2/api/scotty/service/proto/upload_listener.proto&q=class:Hash Hex encoded hash value of the uploaded media.",
          "deprecated": true,
          "type": "string"
        },
        "algorithm": {
          "description": "Deprecated, use one of explicit hash type fields instead. Algorithm used for calculating the hash. As of 2011/01/21, \"MD5\" is the only possible value for this field. New values may be added at any time.",
          "deprecated": true,
          "type": "string"
        },
        "compositeMedia": {
          "description": "A composite media composed of one or more media objects, set if reference_type is COMPOSITE_MEDIA. The media length field must be set to the sum of the lengths of all composite media objects. Note: All composite media must have length specified.",
          "type": "array",
          "items": {
            "$ref": "GdataCompositeMedia"
          }
        },
        "bigstoreObjectRef": {
          "description": "Use object_id instead.",
          "deprecated": true,
          "type": "string",
          "format": "byte"
        },
        "objectId": {
          "description": "Reference to a TI Blob, set if reference_type is BIGSTORE_REF.",
          "$ref": "GdataObjectId"
        },
        "blobstore2Info": {
          "description": "Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to a v2 blob.",
          "$ref": "GdataBlobstore2Info"
        },
        "diffVersionResponse": {
          "description": "Set if reference_type is DIFF_VERSION_RESPONSE.",
          "$ref": "GdataDiffVersionResponse"
        },
        "diffChecksumsResponse": {
          "description": "Set if reference_type is DIFF_CHECKSUMS_RESPONSE.",
          "$ref": "GdataDiffChecksumsResponse"
        },
        "diffDownloadResponse": {
          "description": "Set if reference_type is DIFF_DOWNLOAD_RESPONSE.",
          "$ref": "GdataDiffDownloadResponse"
        },
        "diffUploadRequest": {
          "description": "Set if reference_type is DIFF_UPLOAD_REQUEST.",
          "$ref": "GdataDiffUploadRequest"
        },
        "diffUploadResponse": {
          "description": "Set if reference_type is DIFF_UPLOAD_RESPONSE.",
          "$ref": "GdataDiffUploadResponse"
        },
        "contentTypeInfo": {
          "description": "Extended content type information provided for Scotty uploads.",
          "$ref": "GdataContentTypeInfo"
        },
        "downloadParameters": {
          "description": "Parameters for a media download.",
          "$ref": "GdataDownloadParameters"
        },
        "crc32cHash": {
          "description": "For Scotty Uploads: Scotty-provided hashes for uploads For Scotty Downloads: (WARNING: DO NOT USE WITHOUT PERMISSION FROM THE SCOTTY TEAM.) A Hash provided by the agent to be used to verify the data being downloaded. Currently only supported for inline payloads. Further, only crc32c_hash is currently supported.",
          "type": "integer",
          "format": "uint32"
        },
        "md5Hash": {
          "description": "Scotty-provided MD5 hash for an upload.",
          "type": "string",
          "format": "byte"
        },
        "sha1Hash": {
          "description": "Scotty-provided SHA1 hash for an upload.",
          "type": "string",
          "format": "byte"
        },
        "sha256Hash": {
          "description": "Scotty-provided SHA256 hash for an upload.",
          "type": "string",
          "format": "byte"
        },
        "isPotentialRetry": {
          "description": "|is_potential_retry| is set false only when Scotty is certain that it has not sent the request before. When a client resumes an upload, this field must be set true in agent calls, because Scotty cannot be certain that it has never sent the request before due to potential failure in the session state persistence.",
          "type": "boolean"
        },
        "cosmoBinaryReference": {
          "description": "A binary data reference for a media download. Serves as a technology-agnostic binary reference in some Google infrastructure. This value is a serialized storage_cosmo.BinaryReference proto. Storing it as bytes is a hack to get around the fact that the cosmo proto (as well as others it includes) doesn't support JavaScript. This prevents us from including the actual type of this field.",
          "type": "string",
          "format": "byte"
        },
        "hashVerified": {
          "description": "For Scotty uploads only. If a user sends a hash code and the backend has requested that Scotty verify the upload against the client hash, Scotty will perform the check on behalf of the backend and will reject it if the hashes don't match. This is set to true if Scotty performed this verification.",
          "type": "boolean"
        }
      }
    },
    "GdataCompositeMedia": {
      "id": "GdataCompositeMedia",
      "description": "A sequence of media data references representing composite data. Introduced to support Bigstore composite objects. For details, visit http://go/bigstore-composites.",
      "type": "object",
      "properties": {
        "length": {
          "description": "Size of the data, in bytes",
          "type": "string",
          "format": "int64"
        },
        "referenceType": {
          "description": "Describes what the field reference contains.",
          "type": "string",
          "enumDescriptions": [
            "Reference contains a GFS path or a local path.",
            "Reference points to a blobstore object. This could be either a v1 blob_ref or a v2 blobstore2_info. Clients should check blobstore2_info first, since v1 is being deprecated.",
            "Data is included into this proto buffer",
            "Reference points to a bigstore object",
            "Indicates the data is stored in cosmo_binary_reference."
          ],
          "enum": [
            "PATH",
            "BLOB_REF",
            "INLINE",
            "BIGSTORE_REF",
            "COSMO_BINARY_REFERENCE"
          ]
        },
        "path": {
          "description": "Path to the data, set if reference_type is PATH",
          "type": "string"
        },
        "blobRef": {
          "description": "Blobstore v1 reference, set if reference_type is BLOBSTORE_REF This should be the byte representation of a blobstore.BlobRef. Since Blobstore is deprecating v1, use blobstore2_info instead. For now, any v2 blob will also be represented in this field as v1 BlobRef.",
          "deprecated": true,
          "type": "string",
          "format": "byte"
        },
        "inline": {
          "description": "Media data, set if reference_type is INLINE",
          "type": "string",
          "format": "byte"
        },
        "objectId": {
          "description": "Reference to a TI Blob, set if reference_type is BIGSTORE_REF.",
          "$ref": "GdataObjectId"
        },
        "blobstore2Info": {
          "description": "Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to a v2 blob.",
          "$ref": "GdataBlobstore2Info"
        },
        "cosmoBinaryReference": {
          "description": "A binary data reference for a media download. Serves as a technology-agnostic binary reference in some Google infrastructure. This value is a serialized storage_cosmo.BinaryReference proto. Storing it as bytes is a hack to get around the fact that the cosmo proto (as well as others it includes) doesn't support JavaScript. This prevents us from including the actual type of this field.",
          "type": "string",
          "format": "byte"
        },
        "crc32cHash": {
          "description": "crc32.c hash for the payload.",
          "type": "integer",
          "format": "uint32"
        },
        "md5Hash": {
          "description": "MD5 hash for the payload.",
          "type": "string",
          "format": "byte"
        },
        "sha1Hash": {
          "description": "SHA-1 hash for the payload.",
          "type": "string",
          "format": "byte"
        }
      }
    },
    "GdataObjectId": {
      "id": "GdataObjectId",
      "description": "This is a copy of the tech.blob.ObjectId proto, which could not be used directly here due to transitive closure issues with JavaScript support; see http://b/8801763.",
      "type": "object",
      "properties": {
        "bucketName": {
          "description": "The name of the bucket to which this object belongs.",
          "type": "string"
        },
        "objectName": {
          "description": "The name of the object.",
          "type": "string"
        },
        "generation": {
          "description": "Generation of the object. Generations are monotonically increasing across writes, allowing them to be be compared to determine which generation is newer. If this is omitted in a request, then you are requesting the live object. See http://go/bigstore-versions",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GdataBlobstore2Info": {
      "id": "GdataBlobstore2Info",
      "description": "Information to read/write to blobstore2.",
      "type": "object",
      "properties": {
        "blobId": {
          "description": "The blob id, e.g., /blobstore/prod/playground/scotty",
          "type": "string"
        },
        "blobGeneration": {
          "description": "The blob generation id.",
          "type": "string",
          "format": "int64"
        },
        "readToken": {
          "description": "The blob read token. Needed to read blobs that have not been replicated. Might not be available until the final call.",
          "type": "string"
        },
        "uploadMetadataContainer": {
          "description": "Metadata passed from Blobstore -\u003e Scotty for a new GCS upload. This is a signed, serialized blobstore2.BlobMetadataContainer proto which must never be consumed outside of Bigstore, and is not applicable to non-GCS media uploads.",
          "type": "string",
          "format": "byte"
        },
        "downloadReadHandle": {
          "description": "Read handle passed from Bigstore -\u003e Scotty for a GCS download. This is a signed, serialized blobstore2.ReadHandle proto which must never be set outside of Bigstore, and is not applicable to non-GCS media downloads.",
          "type": "string",
          "format": "byte"
        },
        "downloadExternalReadToken": {
          "description": "A serialized External Read Token passed from Bigstore -\u003e Scotty for a GCS download. This field must never be consumed outside of Bigstore, and is not applicable to non-GCS media uploads.",
          "type": "string",
          "format": "byte"
        },
        "uploadFragmentListCreationInfo": {
          "description": "A serialized Object Fragment List Creation Info passed from Bigstore -\u003e Scotty for a GCS upload. This field must never be consumed outside of Bigstore, and is not applicable to non-GCS media uploads.",
          "type": "string",
          "format": "byte"
        }
      }
    },
    "GdataDiffVersionResponse": {
      "id": "GdataDiffVersionResponse",
      "description": "Backend response for a Diff get version response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "type": "object",
      "properties": {
        "objectVersion": {
          "description": "The version of the object stored at the server.",
          "type": "string"
        },
        "objectSizeBytes": {
          "description": "The total size of the server object.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "GdataDiffChecksumsResponse": {
      "id": "GdataDiffChecksumsResponse",
      "description": "Backend response for a Diff get checksums response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "type": "object",
      "properties": {
        "objectVersion": {
          "description": "The object version of the object the checksums are being returned for.",
          "type": "string"
        },
        "objectSizeBytes": {
          "description": "The total size of the server object.",
          "type": "string",
          "format": "int64"
        },
        "chunkSizeBytes": {
          "description": "The chunk size of checksums. Must be a multiple of 256KB.",
          "type": "string",
          "format": "int64"
        },
        "checksumsLocation": {
          "description": "Exactly one of these fields must be populated. If checksums_location is filled, the server will return the corresponding contents to the user. If object_location is filled, the server will calculate the checksums based on the content there and return that to the user. For details on the format of the checksums, see http://go/scotty-diff-protocol.",
          "$ref": "GdataCompositeMedia"
        },
        "objectLocation": {
          "description": "If set, calculate the checksums based on the contents and return them to the caller.",
          "$ref": "GdataCompositeMedia"
        }
      }
    },
    "GdataDiffDownloadResponse": {
      "id": "GdataDiffDownloadResponse",
      "description": "Backend response for a Diff download response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "type": "object",
      "properties": {
        "objectLocation": {
          "description": "The original object location.",
          "$ref": "GdataCompositeMedia"
        }
      }
    },
    "GdataDiffUploadRequest": {
      "id": "GdataDiffUploadRequest",
      "description": "A Diff upload request. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "type": "object",
      "properties": {
        "objectVersion": {
          "description": "The object version of the object that is the base version the incoming diff script will be applied to. This field will always be filled in.",
          "type": "string"
        },
        "objectInfo": {
          "description": "The location of the new object. Agents must clone the object located here, as the upload server will delete the contents once a response is received.",
          "$ref": "GdataCompositeMedia"
        },
        "checksumsInfo": {
          "description": "The location of the checksums for the new object. Agents must clone the object located here, as the upload server will delete the contents once a response is received. For details on the format of the checksums, see http://go/scotty-diff-protocol.",
          "$ref": "GdataCompositeMedia"
        }
      }
    },
    "GdataDiffUploadResponse": {
      "id": "GdataDiffUploadResponse",
      "description": "Backend response for a Diff upload request. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "type": "object",
      "properties": {
        "objectVersion": {
          "description": "The object version of the object at the server. Must be included in the end notification response. The version in the end notification response must correspond to the new version of the object that is now stored at the server, after the upload.",
          "type": "string"
        },
        "originalObject": {
          "description": "The location of the original file for a diff upload request. Must be filled in if responding to an upload start notification.",
          "$ref": "GdataCompositeMedia"
        }
      }
    },
    "GdataContentTypeInfo": {
      "id": "GdataContentTypeInfo",
      "description": "Detailed Content-Type information from Scotty. The Content-Type of the media will typically be filled in by the header or Scotty's best_guess, but this extended information provides the backend with more information so that it can make a better decision if needed. This is only used on media upload requests from Scotty.",
      "type": "object",
      "properties": {
        "bestGuess": {
          "description": "Scotty's best guess of what the content type of the file is.",
          "type": "string"
        },
        "fromHeader": {
          "description": "The content type of the file as specified in the request headers, multipart headers, or RUPIO start request.",
          "type": "string"
        },
        "fromFileName": {
          "description": "The content type of the file derived from the file extension of the original file name used by the client.",
          "type": "string"
        },
        "fromUrlPath": {
          "description": "The content type of the file derived from the file extension of the URL path. The URL path is assumed to represent a file name (which is typically only true for agents that are providing a REST API).",
          "type": "string"
        },
        "fromBytes": {
          "description": "The content type of the file derived by looking at specific bytes (i.e. \"magic bytes\") of the actual file.",
          "type": "string"
        }
      }
    },
    "GdataDownloadParameters": {
      "id": "GdataDownloadParameters",
      "description": "Parameters specific to media downloads.",
      "type": "object",
      "properties": {
        "allowGzipCompression": {
          "description": "A boolean to be returned in the response to Scotty. Allows/disallows gzip encoding of the payload content when the server thinks it's advantageous (hence, does not guarantee compression) which allows Scotty to GZip the response to the client.",
          "type": "boolean"
        },
        "ignoreRange": {
          "description": "Determining whether or not Apiary should skip the inclusion of any Content-Range header on its response to Scotty.",
          "type": "boolean"
        }
      }
    },
    "GoogleFirebaseAppdistroV1Release": {
      "id": "GoogleFirebaseAppdistroV1Release",
      "description": "A release of a Firebase app.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the release resource. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
          "type": "string"
        },
        "releaseNotes": {
          "description": "Notes of the release.",
          "$ref": "GoogleFirebaseAppdistroV1ReleaseNotes"
        },
        "displayVersion": {
          "description": "Output only. Display version of the release. For an Android release, the display version is the `versionName`. For an iOS release, the display version is the `CFBundleShortVersionString`.",
          "readOnly": true,
          "type": "string"
        },
        "buildVersion": {
          "description": "Output only. Build version of the release. For an Android release, the build version is the `versionCode`. For an iOS release, the build version is the `CFBundleVersion`.",
          "readOnly": true,
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The time the release was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. The time the release was last updated.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "expireTime": {
          "description": "Output only. The time the release will expire.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "firebaseConsoleUri": {
          "description": "Output only. A link to the Firebase console displaying a single release.",
          "readOnly": true,
          "type": "string"
        },
        "testingUri": {
          "description": "Output only. A link to the release in the tester web clip or Android app that lets testers (which were granted access to the app) view release notes and install the app onto their devices.",
          "readOnly": true,
          "type": "string"
        },
        "binaryDownloadUri": {
          "description": "Output only. A signed link (which expires in one hour) to directly download the app binary (IPA/APK/AAB) file.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1ReleaseNotes": {
      "id": "GoogleFirebaseAppdistroV1ReleaseNotes",
      "description": "Notes that belong to a release.",
      "type": "object",
      "properties": {
        "text": {
          "description": "The text of the release notes.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1ListReleasesResponse": {
      "id": "GoogleFirebaseAppdistroV1ListReleasesResponse",
      "description": "The response message for `ListReleases`.",
      "type": "object",
      "properties": {
        "releases": {
          "description": "The releases",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1Release"
          }
        },
        "nextPageToken": {
          "description": "A short-lived token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1DistributeReleaseRequest": {
      "id": "GoogleFirebaseAppdistroV1DistributeReleaseRequest",
      "description": "The request message for `DistributeRelease`.",
      "type": "object",
      "properties": {
        "testerEmails": {
          "description": "Optional. A list of tester email addresses to be given access to this release. A combined maximum of 999 `testerEmails` and `groupAliases` can be specified in a single request.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "groupAliases": {
          "description": "Optional. A list of group aliases (IDs) to be given access to this release. A combined maximum of 999 `testerEmails` and `groupAliases` can be specified in a single request.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1DistributeReleaseResponse": {
      "id": "GoogleFirebaseAppdistroV1DistributeReleaseResponse",
      "description": "The response message for `DistributeRelease`.",
      "type": "object",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1BatchAddTestersRequest": {
      "id": "GoogleFirebaseAppdistroV1BatchAddTestersRequest",
      "description": "The Request message for batch adding testers",
      "type": "object",
      "properties": {
        "emails": {
          "description": "Required. The email addresses of the tester resources to create. A maximum of 999 and a minimum of 1 tester can be created in a batch.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchAddTestersResponse": {
      "id": "GoogleFirebaseAppdistroV1BatchAddTestersResponse",
      "description": "The Response message for `BatchAddTesters`.",
      "type": "object",
      "properties": {
        "testers": {
          "description": "The testers which are created and/or already exist",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1Tester"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1Tester": {
      "id": "GoogleFirebaseAppdistroV1Tester",
      "description": "A person that can be invited to test apps in a Firebase project.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the tester resource. Format: `projects/{project_number}/testers/{email_address}`",
          "type": "string"
        },
        "displayName": {
          "description": "The name of the tester associated with the Google account used to accept the tester invitation.",
          "type": "string"
        },
        "groups": {
          "description": "The resource names of the groups this tester belongs to.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "lastActivityTime": {
          "description": "Output only. The time the tester was last active. This is the most recent time the tester installed one of the apps. If they've never installed one or if the release no longer exists, this is the time the tester was added to the project.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchRemoveTestersRequest": {
      "id": "GoogleFirebaseAppdistroV1BatchRemoveTestersRequest",
      "description": "The request message for `BatchRemoveTesters`.",
      "type": "object",
      "properties": {
        "emails": {
          "description": "Required. The email addresses of the tester resources to removed. A maximum of 999 and a minimum of 1 testers can be deleted in a batch.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchRemoveTestersResponse": {
      "id": "GoogleFirebaseAppdistroV1BatchRemoveTestersResponse",
      "description": "The response message for `BatchRemoveTesters`",
      "type": "object",
      "properties": {
        "emails": {
          "description": "List of deleted tester emails",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1ListTestersResponse": {
      "id": "GoogleFirebaseAppdistroV1ListTestersResponse",
      "description": "The response message for `ListTesters`.",
      "type": "object",
      "properties": {
        "testers": {
          "description": "The testers listed.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1Tester"
          }
        },
        "nextPageToken": {
          "description": "A short-lived token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest": {
      "id": "GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest",
      "description": "The request message for `BatchDeleteReleases`.",
      "type": "object",
      "properties": {
        "names": {
          "description": "Required. The names of the release resources to delete. Format: `projects/{project_number}/apps/{app}/releases/{release}` A maximum of 100 releases can be deleted per request.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1Group": {
      "id": "GoogleFirebaseAppdistroV1Group",
      "description": "A group which can contain testers. A group can be invited to test apps in a Firebase project.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`",
          "type": "string"
        },
        "displayName": {
          "description": "Required. The display name of the group.",
          "type": "string"
        },
        "testerCount": {
          "description": "Output only. The number of testers who are members of this group.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "releaseCount": {
          "description": "Output only. The number of releases this group is permitted to access.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        },
        "inviteLinkCount": {
          "description": "Output only. The number of invite links for this group.",
          "readOnly": true,
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "GoogleFirebaseAppdistroV1ListGroupsResponse": {
      "id": "GoogleFirebaseAppdistroV1ListGroupsResponse",
      "description": "The response message for `ListGroups`.",
      "type": "object",
      "properties": {
        "groups": {
          "description": "The groups listed.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1Group"
          }
        },
        "nextPageToken": {
          "description": "A short-lived token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchJoinGroupRequest": {
      "id": "GoogleFirebaseAppdistroV1BatchJoinGroupRequest",
      "description": "The request message for `BatchJoinGroup`",
      "type": "object",
      "properties": {
        "emails": {
          "description": "Required. The emails of the testers to be added to the group. A maximum of 999 and a minimum of 1 tester can be created in a batch.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "createMissingTesters": {
          "description": "Indicates whether to create tester resources based on `emails` if they don't exist yet.",
          "type": "boolean"
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchLeaveGroupRequest": {
      "id": "GoogleFirebaseAppdistroV1BatchLeaveGroupRequest",
      "description": "Request message for `BatchLeaveGroup`",
      "type": "object",
      "properties": {
        "emails": {
          "description": "Required. The email addresses of the testers to be removed from the group. A maximum of 999 and a minimum of 1 testers can be removed in a batch.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1FeedbackReport": {
      "id": "GoogleFirebaseAppdistroV1FeedbackReport",
      "description": "A feedback report submitted by a tester for a release.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The name of the feedback report resource. Format: `projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}`",
          "type": "string"
        },
        "tester": {
          "description": "Output only. The resource name of the tester who submitted the feedback report.",
          "readOnly": true,
          "type": "string"
        },
        "text": {
          "description": "Output only. The text of the feedback report.",
          "readOnly": true,
          "type": "string"
        },
        "screenshotUri": {
          "description": "Output only. A signed link (which expires in one hour) that lets you directly download the screenshot.",
          "readOnly": true,
          "type": "string"
        },
        "firebaseConsoleUri": {
          "description": "Output only. A link to the Firebase console displaying the feedback report.",
          "readOnly": true,
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The time when the feedback report was created.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "GoogleFirebaseAppdistroV1ListFeedbackReportsResponse": {
      "id": "GoogleFirebaseAppdistroV1ListFeedbackReportsResponse",
      "description": "The response message for `ListFeedbackReports`.",
      "type": "object",
      "properties": {
        "feedbackReports": {
          "description": "The feedback reports",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1FeedbackReport"
          }
        },
        "nextPageToken": {
          "description": "A short-lived token, which can be sent as `pageToken` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1UploadReleaseMetadata": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseMetadata",
      "description": "Operation metadata for `UploadRelease`.",
      "type": "object",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1UploadReleaseResponse": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseResponse",
      "description": "Response message for `UploadRelease`.",
      "type": "object",
      "properties": {
        "result": {
          "description": "Result of upload release.",
          "type": "string",
          "enumDescriptions": [
            "Upload binary result unspecified",
            "Upload binary resulted in a new release",
            "Upload binary updated an existing release",
            "Upload binary resulted in a no-op. A release with the exact same binary already exists."
          ],
          "enum": [
            "UPLOAD_RELEASE_RESULT_UNSPECIFIED",
            "RELEASE_CREATED",
            "RELEASE_UPDATED",
            "RELEASE_UNMODIFIED"
          ]
        },
        "release": {
          "description": "Release associated with the uploaded binary.",
          "$ref": "GoogleFirebaseAppdistroV1Release"
        }
      }
    }
  },
  "basePath": "",
  "canonicalName": "Firebase App Distribution",
  "ownerName": "Google",
  "version": "v1",
  "parameters": {
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query"
    },
    "upload_protocol": {
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    }
  },
  "mtlsRootUrl": "https://firebaseappdistribution.mtls.googleapis.com/",
  "kind": "discovery#restDescription",
  "batchPath": "batch",
  "protocol": "rest",
  "servicePath": "",
  "version_module": true,
  "discoveryVersion": "v1",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "documentationLink": "https://firebase.google.com/products/app-distribution",
  "baseUrl": "https://firebaseappdistribution.googleapis.com/",
  "resources": {
    "projects": {
      "resources": {
        "apps": {
          "methods": {
            "getAabInfo": {
              "id": "firebaseappdistribution.projects.apps.getAabInfo",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/apps/{appsId}/aabInfo",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Required. The name of the `AabInfo` resource to retrieve. Format: `projects/{project_number}/apps/{app}/aabInfo`",
                  "pattern": "^projects/[^/]+/apps/[^/]+/aabInfo$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1AabInfo"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Gets Android App Bundle (AAB) information for a Firebase app."
            }
          },
          "resources": {
            "releases": {
              "methods": {
                "get": {
                  "id": "firebaseappdistribution.projects.apps.releases.get",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the release resource to retrieve. Format: projects/{project_number}/apps/{app}/releases/{release}",
                      "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1Release"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Gets a release."
                },
                "list": {
                  "id": "firebaseappdistribution.projects.apps.releases.list",
                  "path": "v1/{+parent}/releases",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "Required. The name of the app resource, which is the parent of the release resources. Format: `projects/{project_number}/apps/{app}`",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "Optional. The maximum number of releases to return. The service may return fewer than this value. The valid range is [1-100]; If unspecified (0), at most 25 releases are returned. Values above 100 are coerced to 100.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "Optional. A page token, received from a previous `ListReleases` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListReleases` must match the call that provided the page token.",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "description": "Optional. The fields used to order releases. Supported fields: - `createTime` To specify descending order for a field, append a \"desc\" suffix, for example, `createTime desc`. If this parameter is not set, releases are ordered by `createTime` in descending order.",
                      "location": "query",
                      "type": "string"
                    },
                    "filter": {
                      "description": "Optional. The expression to filter releases listed in the response. To learn more about filtering, refer to [Google's AIP-160 standard](http://aip.dev/160). Supported fields: - `releaseNotes.text` supports `=` (can contain a wildcard character (`*`) at the beginning or end of the string) - `createTime` supports `\u003c`, `\u003c=`, `\u003e` and `\u003e=`, and expects an RFC-3339 formatted string Examples: - `createTime \u003c= \"2021-09-08T00:00:00+04:00\"` - `releaseNotes.text=\"fixes\" AND createTime \u003e= \"2021-09-08T00:00:00.0Z\"` - `releaseNotes.text=\"*v1.0.0-rc*\"`",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1ListReleasesResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Lists releases. By default, sorts by `createTime` in descending order."
                },
                "patch": {
                  "id": "firebaseappdistribution.projects.apps.releases.patch",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}",
                  "httpMethod": "PATCH",
                  "parameters": {
                    "name": {
                      "description": "The name of the release resource. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
                      "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "updateMask": {
                      "description": "Optional. The list of fields to update.",
                      "location": "query",
                      "type": "string",
                      "format": "google-fieldmask"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1Release"
                  },
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1Release"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Updates a release."
                },
                "distribute": {
                  "id": "firebaseappdistribution.projects.apps.releases.distribute",
                  "path": "v1/{+name}:distribute",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}:distribute",
                  "httpMethod": "POST",
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the release resource to distribute. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
                      "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1DistributeReleaseRequest"
                  },
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1DistributeReleaseResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Distributes a release to testers. This call does the following: 1. Creates testers for the specified emails, if none exist. 2. Adds the testers and groups to the release. 3. Sends new testers an invitation email. 4. Sends existing testers a new release email. The request will fail with a `INVALID_ARGUMENT` if it contains a group that doesn't exist."
                },
                "batchDelete": {
                  "id": "firebaseappdistribution.projects.apps.releases.batchDelete",
                  "path": "v1/{+parent}/releases:batchDelete",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases:batchDelete",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "Required. The name of the app resource, which is the parent of the release resources. Format: `projects/{project_number}/apps/{app}`",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest"
                  },
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Deletes releases. A maximum of 100 releases can be deleted per request."
                }
              },
              "resources": {
                "operations": {
                  "methods": {
                    "list": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.list",
                      "path": "v1/{+name}/operations",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "The name of the operation's parent resource.",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "filter": {
                          "description": "The standard list filter.",
                          "location": "query",
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "The standard list page size.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "The standard list page token.",
                          "location": "query",
                          "type": "string"
                        },
                        "returnPartialSuccess": {
                          "description": "When set to `true`, operations that are reachable are returned as normal, and those that are unreachable are returned in the ListOperationsResponse.unreachable field. This can only be `true` when reading across collections. For example, when `parent` is set to `\"projects/example/locations/-\"`. This field is not supported by default and will result in an `UNIMPLEMENTED` error if set unless explicitly documented otherwise in service or product specific documentation.",
                          "location": "query",
                          "type": "boolean"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "GoogleLongrunningListOperationsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`."
                    },
                    "get": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "The name of the operation resource.",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "GoogleLongrunningOperation"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets the latest state of a long-running operation. Clients can use this method to poll the operation result at intervals as recommended by the API service."
                    },
                    "delete": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "The name of the operation resource to be deleted.",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes a long-running operation. This method indicates that the client is no longer interested in the operation result. It does not cancel the operation. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`."
                    },
                    "cancel": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.cancel",
                      "path": "v1/{+name}:cancel",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}:cancel",
                      "httpMethod": "POST",
                      "parameters": {
                        "name": {
                          "description": "The name of the operation resource to be cancelled.",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "GoogleLongrunningCancelOperationRequest"
                      },
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. If the server doesn't support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Clients can use Operations.GetOperation or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation. On successful cancellation, the operation is not deleted; instead, it becomes an operation with an Operation.error value with a google.rpc.Status.code of `1`, corresponding to `Code.CANCELLED`."
                    },
                    "wait": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.wait",
                      "path": "v1/{+name}:wait",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}:wait",
                      "httpMethod": "POST",
                      "parameters": {
                        "name": {
                          "description": "The name of the operation resource to wait on.",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "request": {
                        "$ref": "GoogleLongrunningWaitOperationRequest"
                      },
                      "response": {
                        "$ref": "GoogleLongrunningOperation"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Waits until the specified long-running operation is done or reaches at most a specified timeout, returning the latest state. If the operation is already done, the latest state is immediately returned. If the timeout specified is greater than the default HTTP/RPC timeout, the HTTP/RPC timeout is used. If the server does not support this method, it returns `google.rpc.Code.UNIMPLEMENTED`. Note that this method is on a best-effort basis. It may return the latest state before the specified timeout (including immediately), meaning even an immediate response is no guarantee that the operation is done."
                    }
                  }
                },
                "feedbackReports": {
                  "methods": {
                    "get": {
                      "id": "firebaseappdistribution.projects.apps.releases.feedbackReports.get",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/feedbackReports/{feedbackReportsId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the feedback report to retrieve. Format: projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/feedbackReports/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1FeedbackReport"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Gets a feedback report."
                    },
                    "list": {
                      "id": "firebaseappdistribution.projects.apps.releases.feedbackReports.list",
                      "path": "v1/{+parent}/feedbackReports",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/feedbackReports",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "Required. The name of the release resource, which is the parent of the feedback report resources. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "Output only. The maximum number of feedback reports to return. The service may return fewer than this value. The valid range is [1-100]; If unspecified (0), at most 25 feedback reports are returned. Values above 100 are coerced to 100.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Output only. A page token, received from a previous `ListFeedbackReports` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListFeedbackReports` must match the call that provided the page token.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1ListFeedbackReportsResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Lists feedback reports. By default, sorts by `createTime` in descending order."
                    },
                    "delete": {
                      "id": "firebaseappdistribution.projects.apps.releases.feedbackReports.delete",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/feedbackReports/{feedbackReportsId}",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the feedback report to delete. Format: projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/feedbackReports/[^/]+$",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Deletes a feedback report."
                    }
                  }
                }
              }
            }
          }
        },
        "testers": {
          "methods": {
            "batchAdd": {
              "id": "firebaseappdistribution.projects.testers.batchAdd",
              "path": "v1/{+project}/testers:batchAdd",
              "flatPath": "v1/projects/{projectsId}/testers:batchAdd",
              "httpMethod": "POST",
              "parameters": {
                "project": {
                  "description": "Required. The name of the project resource. Format: `projects/{project_number}`",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "project"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchAddTestersRequest"
              },
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1BatchAddTestersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Batch adds testers. This call adds testers for the specified emails if they don't already exist. Returns all testers specified in the request, including newly created and previously existing testers. This action is idempotent."
            },
            "batchRemove": {
              "id": "firebaseappdistribution.projects.testers.batchRemove",
              "path": "v1/{+project}/testers:batchRemove",
              "flatPath": "v1/projects/{projectsId}/testers:batchRemove",
              "httpMethod": "POST",
              "parameters": {
                "project": {
                  "description": "Required. The name of the project resource. Format: `projects/{project_number}`",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "project"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchRemoveTestersRequest"
              },
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1BatchRemoveTestersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Batch removes testers. If found, this call deletes testers for the specified emails. Returns all deleted testers."
            },
            "list": {
              "id": "firebaseappdistribution.projects.testers.list",
              "path": "v1/{+parent}/testers",
              "flatPath": "v1/projects/{projectsId}/testers",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "Required. The name of the project resource, which is the parent of the tester resources. Format: `projects/{project_number}`",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageSize": {
                  "description": "Optional. The maximum number of testers to return. The service may return fewer than this value. The valid range is [1-1000]; If unspecified (0), at most 10 testers are returned. Values above 1000 are coerced to 1000.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "Optional. A page token, received from a previous `ListTesters` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListTesters` must match the call that provided the page token.",
                  "location": "query",
                  "type": "string"
                },
                "filter": {
                  "description": "Optional. The expression to filter testers listed in the response. To learn more about filtering, refer to [Google's AIP-160 standard](http://aip.dev/160). Supported fields: - `name` - `displayName` - `groups` Example: - `name = \"projects/-/testers/*@example.com\"` - `displayName = \"Joe Sixpack\"` - `groups = \"projects/*/groups/qa-team\"`",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1ListTestersResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Lists testers and their resource ids."
            },
            "patch": {
              "id": "firebaseappdistribution.projects.testers.patch",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/testers/{testersId}",
              "httpMethod": "PATCH",
              "parameters": {
                "name": {
                  "description": "The name of the tester resource. Format: `projects/{project_number}/testers/{email_address}`",
                  "pattern": "^projects/[^/]+/testers/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "updateMask": {
                  "description": "Optional. The list of fields to update.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1Tester"
              },
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Tester"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Update a tester. If the testers joins a group they gain access to all releases that the group has access to."
            }
          }
        },
        "groups": {
          "methods": {
            "get": {
              "id": "firebaseappdistribution.projects.groups.get",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Required. The name of the group resource to retrieve. Format: `projects/{project_number}/groups/{group_alias}`",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Get a group."
            },
            "list": {
              "id": "firebaseappdistribution.projects.groups.list",
              "path": "v1/{+parent}/groups",
              "flatPath": "v1/projects/{projectsId}/groups",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "Required. The name of the project resource, which is the parent of the group resources. Format: `projects/{project_number}`",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "pageSize": {
                  "description": "Optional. The maximum number of groups to return. The service may return fewer than this value. The valid range is [1-1000]; If unspecified (0), at most 25 groups are returned. Values above 1000 are coerced to 1000.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "Optional. A page token, received from a previous `ListGroups` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListGroups` must match the call that provided the page token.",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1ListGroupsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "List groups."
            },
            "create": {
              "id": "firebaseappdistribution.projects.groups.create",
              "path": "v1/{+parent}/groups",
              "flatPath": "v1/projects/{projectsId}/groups",
              "httpMethod": "POST",
              "parameters": {
                "parent": {
                  "description": "Required. The name of the project resource, which is the parent of the group resource. Format: `projects/{project_number}`",
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "groupId": {
                  "description": "Optional. The \"alias\" to use for the group, which will become the final component of the group's resource name. This value must be unique per project. The field is named `groupId` to comply with AIP guidance for user-specified IDs. This value should be 4-63 characters, and valid characters are `/a-z-/`. If not set, it will be generated based on the display name.",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Create a group."
            },
            "patch": {
              "id": "firebaseappdistribution.projects.groups.patch",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}",
              "httpMethod": "PATCH",
              "parameters": {
                "name": {
                  "description": "The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "updateMask": {
                  "description": "Optional. The list of fields to update.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Update a group."
            },
            "delete": {
              "id": "firebaseappdistribution.projects.groups.delete",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}",
              "httpMethod": "DELETE",
              "parameters": {
                "name": {
                  "description": "Required. The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleProtobufEmpty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Delete a group."
            },
            "batchJoin": {
              "id": "firebaseappdistribution.projects.groups.batchJoin",
              "path": "v1/{+group}:batchJoin",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}:batchJoin",
              "httpMethod": "POST",
              "parameters": {
                "group": {
                  "description": "Required. The name of the group resource to which testers are added. Format: `projects/{project_number}/groups/{group_alias}`",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "group"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchJoinGroupRequest"
              },
              "response": {
                "$ref": "GoogleProtobufEmpty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Batch adds members to a group. The testers will gain access to all releases that the groups have access to."
            },
            "batchLeave": {
              "id": "firebaseappdistribution.projects.groups.batchLeave",
              "path": "v1/{+group}:batchLeave",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}:batchLeave",
              "httpMethod": "POST",
              "parameters": {
                "group": {
                  "description": "Required. The name of the group resource from which testers are removed. Format: `projects/{project_number}/groups/{group_alias}`",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "location": "path",
                  "required": true,
                  "type": "string"
                }
              },
              "parameterOrder": [
                "group"
              ],
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchLeaveGroupRequest"
              },
              "response": {
                "$ref": "GoogleProtobufEmpty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Batch removed members from a group. The testers will lose access to all releases that the groups have access to."
            }
          }
        }
      }
    },
    "media": {
      "methods": {
        "upload": {
          "id": "firebaseappdistribution.media.upload",
          "path": "v1/{+app}/releases:upload",
          "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases:upload",
          "httpMethod": "POST",
          "parameters": {
            "app": {
              "description": "Required. The name of the app resource. Format: `projects/{project_number}/apps/{app}`",
              "pattern": "^projects/[^/]+/apps/[^/]+$",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "parameterOrder": [
            "app"
          ],
          "supportsMediaUpload": true,
          "mediaUpload": {
            "accept": [
              "*/*"
            ],
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "/upload/v1/{+app}/releases:upload"
              }
            }
          },
          "request": {
            "$ref": "GoogleFirebaseAppdistroV1UploadReleaseRequest"
          },
          "response": {
            "$ref": "GoogleLongrunningOperation"
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ],
          "description": "Uploads a binary. Uploading a binary can result in a new release being created, an update to an existing release, or a no-op if a release with the same binary already exists."
        }
      }
    }
  },
  "fullyEncodeReservedExpansion": true,
  "name": "firebaseappdistribution",
  "revision": "20260316",
  "title": "Firebase App Distribution API",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/cloud-platform": {
          "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
        }
      }
    }
  },
  "rootUrl": "https://firebaseappdistribution.googleapis.com/",
  "ownerDomain": "google.com",
  "description": "",
  "id": "firebaseappdistribution:v1"
}
