{
  "title": "Firebase App Distribution API",
  "discoveryVersion": "v1",
  "mtlsRootUrl": "https://firebaseappdistribution.mtls.googleapis.com/",
  "version_module": true,
  "rootUrl": "https://firebaseappdistribution.googleapis.com/",
  "kind": "discovery#restDescription",
  "fullyEncodeReservedExpansion": true,
  "servicePath": "",
  "batchPath": "batch",
  "ownerDomain": "google.com",
  "canonicalName": "Firebase App Distribution",
  "version": "v1",
  "basePath": "",
  "schemas": {
    "GdataDiffUploadResponse": {
      "id": "GdataDiffUploadResponse",
      "type": "object",
      "properties": {
        "objectVersion": {
          "type": "string",
          "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."
        },
        "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"
        }
      },
      "description": "Backend response for a Diff upload request. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol."
    },
    "GoogleFirebaseAppdistroV1UploadReleaseMetadata": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseMetadata",
      "type": "object",
      "properties": {},
      "description": "Operation metadata for `UploadRelease`."
    },
    "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"
        },
        "totalSize": {
          "description": "The total number of releases.",
          "format": "int32",
          "type": "integer"
        }
      },
      "id": "GoogleFirebaseAppdistroV1ListReleasesResponse"
    },
    "GoogleProtobufEmpty": {
      "type": "object",
      "properties": {},
      "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); }"
    },
    "GoogleLongrunningOperation": {
      "type": "object",
      "properties": {
        "done": {
          "type": "boolean",
          "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."
        },
        "metadata": {
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "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."
        },
        "response": {
          "type": "object",
          "additionalProperties": {
            "description": "Properties of the object. Contains field @type with type URL.",
            "type": "any"
          },
          "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`."
        },
        "error": {
          "description": "The error result of the operation in case of failure or cancellation.",
          "$ref": "GoogleRpcStatus"
        },
        "name": {
          "type": "string",
          "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}`."
        }
      },
      "id": "GoogleLongrunningOperation",
      "description": "This resource represents a long-running operation that is the result of a network API call."
    },
    "GdataBlobstore2Info": {
      "type": "object",
      "properties": {
        "downloadExternalReadToken": {
          "type": "string",
          "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.",
          "format": "byte"
        },
        "blobId": {
          "type": "string",
          "description": "The blob id, e.g., /blobstore/prod/playground/scotty"
        },
        "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.",
          "format": "byte",
          "type": "string"
        },
        "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"
        },
        "blobGeneration": {
          "description": "The blob generation id.",
          "format": "int64",
          "type": "string"
        },
        "uploadMetadataContainer": {
          "type": "string",
          "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.",
          "format": "byte"
        },
        "downloadReadHandle": {
          "type": "string",
          "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.",
          "format": "byte"
        }
      },
      "id": "GdataBlobstore2Info",
      "description": "Information to read/write to blobstore2."
    },
    "GoogleLongrunningListOperationsResponse": {
      "type": "object",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "The standard List next-page token."
        },
        "operations": {
          "description": "A list of operations that matches the specified filter in the request.",
          "items": {
            "$ref": "GoogleLongrunningOperation"
          },
          "type": "array"
        },
        "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"
          }
        }
      },
      "id": "GoogleLongrunningListOperationsResponse",
      "description": "The response message for Operations.ListOperations."
    },
    "GdataDiffDownloadResponse": {
      "type": "object",
      "properties": {
        "objectLocation": {
          "description": "The original object location.",
          "$ref": "GdataCompositeMedia"
        }
      },
      "id": "GdataDiffDownloadResponse",
      "description": "Backend response for a Diff download response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol."
    },
    "GoogleFirebaseAppdistroV1FeedbackReport": {
      "description": "A feedback report submitted by a tester for a release.",
      "id": "GoogleFirebaseAppdistroV1FeedbackReport",
      "type": "object",
      "properties": {
        "createTime": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The time when the feedback report was created.",
          "format": "google-datetime"
        },
        "firebaseConsoleUri": {
          "description": "Output only. A link to the Firebase console displaying the feedback report.",
          "readOnly": true,
          "type": "string"
        },
        "text": {
          "description": "Output only. The text of the feedback report.",
          "readOnly": true,
          "type": "string"
        },
        "tester": {
          "description": "Output only. The resource name of the tester who submitted 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"
        },
        "name": {
          "description": "The name of the feedback report resource. Format: `projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}`",
          "type": "string"
        }
      }
    },
    "GdataDiffUploadRequest": {
      "id": "GdataDiffUploadRequest",
      "type": "object",
      "properties": {
        "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"
        },
        "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"
        }
      },
      "description": "A Diff upload request. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol."
    },
    "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"
        },
        "fusionIdDetectionMetadata": {
          "type": "string",
          "description": "Metadata information from Fusion ID detection. Serialized FusionIdDetectionMetadata proto. Only set if from_fusion_id is set.",
          "format": "byte"
        },
        "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": {
          "type": "string",
          "description": "The content type of the file derived by looking at specific bytes (i.e. \"magic bytes\") of the actual file."
        },
        "fromFileName": {
          "type": "string",
          "description": "The content type of the file derived from the file extension of the original file name used by the client."
        },
        "fromFusionId": {
          "type": "string",
          "description": "The content type of the file detected by Fusion ID. go/fusionid"
        }
      },
      "id": "GdataContentTypeInfo"
    },
    "GoogleFirebaseAppdistroV1UploadReleaseResponse": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseResponse",
      "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"
        }
      },
      "description": "Response message for `UploadRelease`."
    },
    "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"
          }
        }
      },
      "id": "GoogleFirebaseAppdistroV1BatchAddTestersResponse"
    },
    "GdataDownloadParameters": {
      "description": "Parameters specific to media downloads.",
      "id": "GdataDownloadParameters",
      "type": "object",
      "properties": {
        "ignoreRange": {
          "description": "Determining whether or not Apiary should skip the inclusion of any Content-Range header on its response to Scotty.",
          "type": "boolean"
        },
        "allowGzipCompression": {
          "type": "boolean",
          "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."
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest": {
      "type": "object",
      "properties": {
        "names": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "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."
        }
      },
      "id": "GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest",
      "description": "The request message for `BatchDeleteReleases`."
    },
    "GoogleFirebaseAppdistroV1TestCertificate": {
      "description": "App bundle test certificate",
      "type": "object",
      "properties": {
        "hashSha256": {
          "type": "string",
          "description": "Hex string of SHA256 hash of the test certificate used to resign the AAB"
        },
        "hashMd5": {
          "type": "string",
          "description": "Hex string of MD5 hash of the test certificate used to resign the AAB"
        },
        "hashSha1": {
          "type": "string",
          "description": "Hex string of SHA1 hash of the test certificate used to resign the AAB"
        }
      },
      "id": "GoogleFirebaseAppdistroV1TestCertificate"
    },
    "GoogleFirebaseAppdistroV1Group": {
      "id": "GoogleFirebaseAppdistroV1Group",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "Required. The display name of the group.",
          "type": "string"
        },
        "inviteLinkCount": {
          "description": "Output only. The number of invite links for this group.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "name": {
          "description": "The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`",
          "type": "string"
        },
        "testerCount": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. The number of testers who are members of this group.",
          "format": "int32"
        },
        "releaseCount": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. The number of releases this group is permitted to access.",
          "format": "int32"
        }
      },
      "description": "A group which can contain testers. A group can be invited to test apps in a Firebase project."
    },
    "GoogleFirebaseAppdistroV1DistributeReleaseResponse": {
      "type": "object",
      "properties": {},
      "id": "GoogleFirebaseAppdistroV1DistributeReleaseResponse",
      "description": "The response message for `DistributeRelease`."
    },
    "GoogleFirebaseAppdistroV1Tester": {
      "description": "A person that can be invited to test apps in a Firebase project.",
      "id": "GoogleFirebaseAppdistroV1Tester",
      "type": "object",
      "properties": {
        "groups": {
          "description": "The resource names of the groups this tester belongs to.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "type": "string",
          "description": "The name of the tester resource. Format: `projects/{project_number}/testers/{email_address}`"
        },
        "displayName": {
          "description": "The name of the tester associated with the Google account used to accept the tester invitation.",
          "type": "string"
        },
        "lastActivityTime": {
          "readOnly": true,
          "type": "string",
          "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.",
          "format": "google-datetime"
        }
      }
    },
    "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": {
          "type": "string",
          "description": "The total size of the server object.",
          "format": "int64"
        }
      },
      "id": "GdataDiffVersionResponse"
    },
    "GoogleFirebaseAppdistroV1DistributeReleaseRequest": {
      "description": "The request message for `DistributeRelease`.",
      "type": "object",
      "properties": {
        "testerEmails": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "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."
        },
        "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.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "id": "GoogleFirebaseAppdistroV1DistributeReleaseRequest"
    },
    "GoogleFirebaseAppdistroV1AabInfo": {
      "type": "object",
      "properties": {
        "integrationState": {
          "description": "App bundle integration state. Only valid for android apps.",
          "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",
            "ADHOC_SHARING_KEY_NOT_GENERATED",
            "ADHOC_SHARING_KEY_NOT_REGISTERED",
            "PLAY_ANDROID_DEVELOPER_CONSOLE_ACCOUNT_NOT_FOUND"
          ],
          "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 the linked Play developer account with the same bundle ID.",
            "The app in the Play developer account is not in a published state.",
            "Play App status is unavailable.",
            "Play in-app sharing terms not accepted.",
            "The ad-hoc sharing key has not been generated for this app.",
            "The ad-hoc sharing key is not yet registered in Android Developer Verification for this app.",
            "The linked Play developer account was not found or is not fully set up in Android Developer Console."
          ]
        },
        "testCertificate": {
          "description": "App bundle test certificate generated for the app. Set after the first app bundle is uploaded for this app.",
          "$ref": "GoogleFirebaseAppdistroV1TestCertificate"
        },
        "name": {
          "type": "string",
          "description": "The name of the `AabInfo` resource. Format: `projects/{project_number}/apps/{app}/aabInfo`"
        }
      },
      "id": "GoogleFirebaseAppdistroV1AabInfo",
      "description": "Android App Bundle (AAB) information for a Firebase app."
    },
    "GoogleFirebaseAppdistroV1Release": {
      "id": "GoogleFirebaseAppdistroV1Release",
      "type": "object",
      "properties": {
        "createTime": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The time the release was created.",
          "format": "google-datetime"
        },
        "installationCount": {
          "description": "Output only. Number of testers who have downloaded this release.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "androidPackageRegistrationState": {
          "description": "Output only. Registration state of the Android package (BinaryType.APK).",
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Default value.",
            "Package is registered with the release binary's certificate fingerprint.",
            "Package is not registered with any public certificate.",
            "Package is registered with another public certificate fingerprint."
          ],
          "enum": [
            "ANDROID_PACKAGE_REGISTRATION_STATE_UNSPECIFIED",
            "REGISTERED",
            "NOT_REGISTERED",
            "REGISTERED_WITH_ANOTHER_CERTIFICATE_FINGERPRINT"
          ]
        },
        "name": {
          "description": "The name of the release resource. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
          "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"
        },
        "openInvitationCount": {
          "description": "Output only. Number of testers who were invited (incl. expired invitations), but did not (yet) accept the invitation.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "testState": {
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "No test state specified",
            "No tests have been requested for this release",
            "One or more device executions are in progress",
            "All device executions passed during the most recent test",
            "Some device executions failed during the most recent test",
            "Some device executions were inconclusive, but none failed, during the most recent test"
          ],
          "enum": [
            "TEST_STATE_UNSPECIFIED",
            "NO_TESTS_REQUESTED",
            "IN_PROGRESS",
            "PASSED",
            "FAILED",
            "INCONCLUSIVE"
          ],
          "description": "Output only. The overall state of tests run on this release"
        },
        "binaryType": {
          "enum": [
            "BINARY_TYPE_UNSPECIFIED",
            "IPA",
            "APK",
            "AAB"
          ],
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "unspecified binary type",
            "iOS App Store package",
            "Android Application package",
            "Android App Bundle"
          ],
          "description": "Output only. Type of binary."
        },
        "displayVersion": {
          "readOnly": true,
          "type": "string",
          "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`."
        },
        "acceptedInvitationCount": {
          "readOnly": true,
          "type": "integer",
          "description": "Output only. Number of testers with accepted invitations.",
          "format": "int32"
        },
        "updateTime": {
          "description": "Output only. The time the release was last updated.",
          "format": "google-datetime",
          "readOnly": true,
          "type": "string"
        },
        "expireTime": {
          "description": "Output only. The time the release will expire.",
          "format": "google-datetime",
          "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"
        },
        "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"
        },
        "feedbackCount": {
          "description": "Output only. Number of feedback reports left by testers.",
          "format": "int32",
          "readOnly": true,
          "type": "integer"
        },
        "firebaseConsoleUri": {
          "description": "Output only. A link to the Firebase console displaying a single release.",
          "readOnly": true,
          "type": "string"
        },
        "releaseNotes": {
          "description": "Notes about the release.",
          "$ref": "GoogleFirebaseAppdistroV1ReleaseNotes"
        }
      },
      "description": "A release of a Firebase app."
    },
    "GoogleFirebaseAppdistroV1ListTestersResponse": {
      "description": "The response message for `ListTesters`.",
      "type": "object",
      "properties": {
        "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"
        },
        "testers": {
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1Tester"
          },
          "type": "array",
          "description": "The testers listed."
        }
      },
      "id": "GoogleFirebaseAppdistroV1ListTestersResponse"
    },
    "GoogleFirebaseAppdistroV1ListGroupsResponse": {
      "description": "The response message for `ListGroups`.",
      "type": "object",
      "properties": {
        "groups": {
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1Group"
          },
          "description": "The groups listed."
        },
        "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"
        }
      },
      "id": "GoogleFirebaseAppdistroV1ListGroupsResponse"
    },
    "GoogleFirebaseAppdistroV1ListFeedbackReportsResponse": {
      "id": "GoogleFirebaseAppdistroV1ListFeedbackReportsResponse",
      "type": "object",
      "properties": {
        "feedbackReports": {
          "description": "The feedback reports",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1FeedbackReport"
          },
          "type": "array"
        },
        "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"
        }
      },
      "description": "The response message for `ListFeedbackReports`."
    },
    "GdataCompositeMedia": {
      "description": "A sequence of media data references representing composite data. Introduced to support Bigstore composite objects. For details, visit http://go/bigstore-composites.",
      "id": "GdataCompositeMedia",
      "type": "object",
      "properties": {
        "cosmoBinaryReference": {
          "type": "string",
          "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.",
          "format": "byte"
        },
        "crc32cHash": {
          "type": "integer",
          "description": "crc32.c hash for the payload.",
          "format": "uint32"
        },
        "length": {
          "description": "Size of the data, in bytes",
          "format": "int64",
          "type": "string"
        },
        "sha1Hash": {
          "type": "string",
          "description": "SHA-1 hash for the payload.",
          "format": "byte"
        },
        "inline": {
          "description": "Media data, set if reference_type is INLINE",
          "format": "byte",
          "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",
            "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"
          ]
        },
        "objectId": {
          "description": "Reference to a TI Blob, set if reference_type is BIGSTORE_REF.",
          "$ref": "GdataObjectId"
        },
        "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.",
          "format": "byte",
          "deprecated": true,
          "type": "string"
        },
        "blobstore2Info": {
          "description": "Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to a v2 blob.",
          "$ref": "GdataBlobstore2Info"
        },
        "md5Hash": {
          "description": "MD5 hash for the payload.",
          "format": "byte",
          "type": "string"
        }
      }
    },
    "GdataDiffChecksumsResponse": {
      "description": "Backend response for a Diff get checksums response. For details on the Scotty Diff protocol, visit http://go/scotty-diff-protocol.",
      "id": "GdataDiffChecksumsResponse",
      "type": "object",
      "properties": {
        "objectSizeBytes": {
          "type": "string",
          "description": "The total size of the server object.",
          "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"
        },
        "objectVersion": {
          "type": "string",
          "description": "The object version of the object the checksums are being returned for."
        },
        "chunkSizeBytes": {
          "type": "string",
          "description": "The chunk size of checksums. Must be a multiple of 256KB.",
          "format": "int64"
        }
      }
    },
    "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": {
        "generation": {
          "type": "string",
          "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",
          "format": "int64"
        },
        "bucketName": {
          "type": "string",
          "description": "The name of the bucket to which this object belongs."
        },
        "objectName": {
          "description": "The name of the object.",
          "type": "string"
        }
      },
      "id": "GdataObjectId"
    },
    "GoogleFirebaseAppdistroV1BatchRemoveTestersRequest": {
      "description": "The request message for `BatchRemoveTesters`.",
      "id": "GoogleFirebaseAppdistroV1BatchRemoveTestersRequest",
      "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.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      }
    },
    "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": {
          "type": "boolean",
          "description": "Indicates whether to create tester resources based on `emails` if they don't exist yet."
        }
      },
      "id": "GoogleFirebaseAppdistroV1BatchJoinGroupRequest"
    },
    "GoogleFirebaseAppdistroV1ReleaseNotes": {
      "description": "Notes that belong to a release.",
      "id": "GoogleFirebaseAppdistroV1ReleaseNotes",
      "type": "object",
      "properties": {
        "text": {
          "description": "The text of the release notes.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchLeaveGroupRequest": {
      "type": "object",
      "properties": {
        "emails": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "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."
        }
      },
      "id": "GoogleFirebaseAppdistroV1BatchLeaveGroupRequest",
      "description": "Request message for `BatchLeaveGroup`"
    },
    "GoogleFirebaseAppdistroV1BatchAddTestersRequest": {
      "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.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "id": "GoogleFirebaseAppdistroV1BatchAddTestersRequest",
      "description": "The Request message for batch adding testers"
    },
    "GdataMedia": {
      "description": "A reference to data stored on the filesystem, on GFS or in blobstore.",
      "type": "object",
      "properties": {
        "diffChecksumsResponse": {
          "description": "Set if reference_type is DIFF_CHECKSUMS_RESPONSE.",
          "$ref": "GdataDiffChecksumsResponse"
        },
        "contentTypeInfo": {
          "description": "Extended content type information provided for Scotty uploads.",
          "$ref": "GdataContentTypeInfo"
        },
        "referenceType": {
          "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"
          ],
          "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."
          ],
          "description": "Describes what the field reference contains."
        },
        "sha512Hash": {
          "description": "Scotty-provided SHA512 hash for an upload.",
          "format": "byte",
          "type": "string"
        },
        "diffUploadRequest": {
          "description": "Set if reference_type is DIFF_UPLOAD_REQUEST.",
          "$ref": "GdataDiffUploadRequest"
        },
        "sha256Hash": {
          "description": "Scotty-provided SHA256 hash for an upload.",
          "format": "byte",
          "type": "string"
        },
        "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"
        },
        "crc32cHash": {
          "type": "integer",
          "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.",
          "format": "uint32"
        },
        "path": {
          "description": "Path to the data, set if reference_type is PATH",
          "type": "string"
        },
        "blobRef": {
          "deprecated": true,
          "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.",
          "format": "byte",
          "type": "string"
        },
        "blobstore2Info": {
          "description": "Blobstore v2 info, set if reference_type is BLOBSTORE_REF and it refers to a v2 blob.",
          "$ref": "GdataBlobstore2Info"
        },
        "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.",
          "items": {
            "$ref": "GdataCompositeMedia"
          },
          "type": "array"
        },
        "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"
        },
        "length": {
          "description": "Size of the data, in bytes",
          "format": "int64",
          "type": "string"
        },
        "inline": {
          "description": "Media data, set if reference_type is INLINE",
          "format": "byte",
          "type": "string"
        },
        "algorithm": {
          "type": "string",
          "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
        },
        "mediaId": {
          "type": "string",
          "description": "Media id to forward to the operation GetMedia. Can be set if reference_type is GET_MEDIA.",
          "format": "byte"
        },
        "md5Hash": {
          "type": "string",
          "description": "Scotty-provided MD5 hash for an upload.",
          "format": "byte"
        },
        "filename": {
          "type": "string",
          "description": "Original file name"
        },
        "bigstoreObjectRef": {
          "description": "Use object_id instead.",
          "format": "byte",
          "deprecated": true,
          "type": "string"
        },
        "diffVersionResponse": {
          "description": "Set if reference_type is DIFF_VERSION_RESPONSE.",
          "$ref": "GdataDiffVersionResponse"
        },
        "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"
        },
        "token": {
          "description": "A unique fingerprint/version id for the media data",
          "type": "string"
        },
        "timestamp": {
          "type": "string",
          "description": "Time at which the media data was last updated, in milliseconds since UNIX epoch",
          "format": "uint64"
        },
        "contentType": {
          "type": "string",
          "description": "MIME type of the data"
        },
        "objectId": {
          "description": "Reference to a TI Blob, set if reference_type is BIGSTORE_REF.",
          "$ref": "GdataObjectId"
        },
        "diffUploadResponse": {
          "description": "Set if reference_type is DIFF_UPLOAD_RESPONSE.",
          "$ref": "GdataDiffUploadResponse"
        },
        "downloadParameters": {
          "description": "Parameters for a media download.",
          "$ref": "GdataDownloadParameters"
        },
        "sha1Hash": {
          "description": "Scotty-provided SHA1 hash for an upload.",
          "format": "byte",
          "type": "string"
        },
        "diffDownloadResponse": {
          "description": "Set if reference_type is DIFF_DOWNLOAD_RESPONSE.",
          "$ref": "GdataDiffDownloadResponse"
        },
        "cosmoBinaryReference": {
          "type": "string",
          "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.",
          "format": "byte"
        }
      },
      "id": "GdataMedia"
    },
    "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).",
      "id": "GoogleRpcStatus",
      "type": "object",
      "properties": {
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            }
          },
          "type": "array"
        },
        "code": {
          "description": "The status code, which should be an enum value of google.rpc.Code.",
          "format": "int32",
          "type": "integer"
        },
        "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"
        }
      }
    },
    "GoogleFirebaseAppdistroV1BatchRemoveTestersResponse": {
      "type": "object",
      "properties": {
        "emails": {
          "description": "List of deleted tester emails",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "id": "GoogleFirebaseAppdistroV1BatchRemoveTestersResponse",
      "description": "The response message for `BatchRemoveTesters`"
    },
    "GoogleLongrunningWaitOperationRequest": {
      "description": "The request message for Operations.WaitOperation.",
      "id": "GoogleLongrunningWaitOperationRequest",
      "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.",
          "format": "google-duration",
          "type": "string"
        }
      }
    },
    "GoogleLongrunningCancelOperationRequest": {
      "description": "The request message for Operations.CancelOperation.",
      "id": "GoogleLongrunningCancelOperationRequest",
      "type": "object",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1UploadReleaseRequest": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseRequest",
      "type": "object",
      "properties": {
        "blob": {
          "description": "Binary to upload",
          "$ref": "GdataMedia"
        }
      },
      "description": "Request message for `UploadRelease`."
    }
  },
  "baseUrl": "https://firebaseappdistribution.googleapis.com/",
  "id": "firebaseappdistribution:v1",
  "name": "firebaseappdistribution",
  "ownerName": "Google",
  "documentationLink": "https://firebase.google.com/products/app-distribution",
  "protocol": "rest",
  "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."
        }
      }
    }
  },
  "description": "",
  "revision": "20260723",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "resources": {
    "media": {
      "methods": {
        "upload": {
          "parameters": {
            "app": {
              "description": "Required. The name of the app resource. Format: `projects/{project_number}/apps/{app}`",
              "location": "path",
              "required": true,
              "pattern": "^projects/[^/]+/apps/[^/]+$",
              "type": "string"
            }
          },
          "mediaUpload": {
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "/upload/v1/{+app}/releases:upload"
              }
            },
            "accept": [
              "*/*"
            ]
          },
          "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.",
          "id": "firebaseappdistribution.media.upload",
          "response": {
            "$ref": "GoogleLongrunningOperation"
          },
          "parameterOrder": [
            "app"
          ],
          "path": "v1/{+app}/releases:upload",
          "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases:upload",
          "request": {
            "$ref": "GoogleFirebaseAppdistroV1UploadReleaseRequest"
          },
          "httpMethod": "POST",
          "supportsMediaUpload": true,
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ]
        }
      }
    },
    "projects": {
      "resources": {
        "apps": {
          "methods": {
            "getAabInfo": {
              "parameterOrder": [
                "name"
              ],
              "id": "firebaseappdistribution.projects.apps.getAabInfo",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1AabInfo"
              },
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/apps/{appsId}/aabInfo",
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "parameters": {
                "name": {
                  "description": "Required. The name of the `AabInfo` resource to retrieve. Format: `projects/{project_number}/apps/{app}/aabInfo`",
                  "required": true,
                  "pattern": "^projects/[^/]+/apps/[^/]+/aabInfo$",
                  "type": "string",
                  "location": "path"
                }
              },
              "description": "Gets Android App Bundle (AAB) information for a Firebase app."
            }
          },
          "resources": {
            "releases": {
              "methods": {
                "list": {
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "firebaseappdistribution.projects.apps.releases.list",
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1ListReleasesResponse"
                  },
                  "path": "v1/{+parent}/releases",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases",
                  "httpMethod": "GET",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "parameters": {
                    "orderBy": {
                      "description": "Optional. The fields used to order releases. Supported fields: - `create_time` (or `createTime`) - `update_time` (or `updateTime`) - `expire_time` (or `expireTime`) 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": {
                      "type": "string",
                      "description": "Optional. The expression to filter releases listed in the response. To learn more about filtering, refer to the [AIP-160 standard](http://aip.dev/160). Supported fields: - Time fields supporting `\u003c`, `\u003c=`, `\u003e` and `\u003e=`; expecting an RFC-3339 formatted string: - `create_time` (or `createTime`) - `update_time` (or `updateTime`) - `expire_time` (or `expireTime`) - Text fields supporting `=`. The compared text can contain a wildcard character (`*`) at the beginning and/or end of the string which also enables case-insensitive matching: - `release_notes.text` (or `releaseNotes.text`) - `display_version` (or `displayVersion`) - `build_version` (or `buildVersion`). Examples: - `createTime \u003c= \"2021-09-08T00:00:00+04:00\"` - `expire_time \u003e \"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*\"` - `(display_version = \"v1.0.0-rc2\" AND `build_version = \"123\") OR release_notes = \"*v1.0.0-rc2 (123)*\"`",
                      "location": "query"
                    },
                    "pageSize": {
                      "type": "integer",
                      "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",
                      "format": "int32"
                    },
                    "pageToken": {
                      "type": "string",
                      "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"
                    },
                    "parent": {
                      "location": "path",
                      "required": true,
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "type": "string",
                      "description": "Required. The name of the app resource, which is the parent of the release resources. Format: `projects/{project_number}/apps/{app}`"
                    }
                  },
                  "description": "Lists releases. By default, sorts by `createTime` in descending order."
                },
                "distribute": {
                  "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.",
                  "parameters": {
                    "name": {
                      "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                      "type": "string",
                      "required": true,
                      "location": "path",
                      "description": "Required. The name of the release resource to distribute. Format: `projects/{project_number}/apps/{app}/releases/{release}`"
                    }
                  },
                  "httpMethod": "POST",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "id": "firebaseappdistribution.projects.apps.releases.distribute",
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1DistributeReleaseResponse"
                  },
                  "path": "v1/{+name}:distribute",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}:distribute",
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1DistributeReleaseRequest"
                  }
                },
                "get": {
                  "httpMethod": "GET",
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "id": "firebaseappdistribution.projects.apps.releases.get",
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1Release"
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}",
                  "description": "Gets a release.",
                  "parameters": {
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                      "type": "string",
                      "location": "path",
                      "description": "Required. The name of the release resource to retrieve. Format: projects/{project_number}/apps/{app}/releases/{release}"
                    }
                  }
                },
                "patch": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "httpMethod": "PATCH",
                  "path": "v1/{+name}",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}",
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1Release"
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "id": "firebaseappdistribution.projects.apps.releases.patch",
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1Release"
                  },
                  "description": "Updates a release.",
                  "parameters": {
                    "name": {
                      "description": "The name of the release resource. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                      "type": "string",
                      "required": true
                    },
                    "updateMask": {
                      "type": "string",
                      "description": "Optional. The list of fields to update.",
                      "location": "query",
                      "format": "google-fieldmask"
                    }
                  }
                },
                "batchDelete": {
                  "description": "Deletes releases. A maximum of 100 releases can be deleted per request.",
                  "parameters": {
                    "parent": {
                      "location": "path",
                      "required": true,
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "type": "string",
                      "description": "Required. The name of the app resource, which is the parent of the release resources. Format: `projects/{project_number}/apps/{app}`"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "httpMethod": "POST",
                  "path": "v1/{+parent}/releases:batchDelete",
                  "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases:batchDelete",
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1BatchDeleteReleasesRequest"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "firebaseappdistribution.projects.apps.releases.batchDelete",
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  }
                }
              },
              "resources": {
                "operations": {
                  "methods": {
                    "wait": {
                      "parameters": {
                        "name": {
                          "description": "The name of the operation resource to wait on.",
                          "location": "path",
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "type": "string"
                        }
                      },
                      "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.",
                      "id": "firebaseappdistribution.projects.apps.releases.operations.wait",
                      "response": {
                        "$ref": "GoogleLongrunningOperation"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "path": "v1/{+name}:wait",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}:wait",
                      "request": {
                        "$ref": "GoogleLongrunningWaitOperationRequest"
                      },
                      "httpMethod": "POST",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    },
                    "cancel": {
                      "parameters": {
                        "name": {
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "type": "string",
                          "location": "path",
                          "description": "The name of the operation resource to be cancelled."
                        }
                      },
                      "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`.",
                      "path": "v1/{+name}:cancel",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}:cancel",
                      "request": {
                        "$ref": "GoogleLongrunningCancelOperationRequest"
                      },
                      "id": "firebaseappdistribution.projects.apps.releases.operations.cancel",
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "httpMethod": "POST"
                    },
                    "get": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.get",
                      "response": {
                        "$ref": "GoogleLongrunningOperation"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}",
                      "httpMethod": "GET",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "parameters": {
                        "name": {
                          "description": "The name of the operation resource.",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "type": "string",
                          "required": true,
                          "location": "path"
                        }
                      },
                      "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."
                    },
                    "list": {
                      "id": "firebaseappdistribution.projects.apps.releases.operations.list",
                      "response": {
                        "$ref": "GoogleLongrunningListOperationsResponse"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "path": "v1/{+name}/operations",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations",
                      "httpMethod": "GET",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "parameters": {
                        "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"
                        },
                        "name": {
                          "description": "The name of the operation's parent resource.",
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                          "type": "string",
                          "location": "path"
                        },
                        "filter": {
                          "type": "string",
                          "description": "The standard list filter.",
                          "location": "query"
                        },
                        "pageSize": {
                          "description": "The standard list page size.",
                          "location": "query",
                          "format": "int32",
                          "type": "integer"
                        },
                        "pageToken": {
                          "type": "string",
                          "description": "The standard list page token.",
                          "location": "query"
                        }
                      },
                      "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns `UNIMPLEMENTED`."
                    },
                    "delete": {
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/operations/{operationsId}",
                      "parameterOrder": [
                        "name"
                      ],
                      "id": "firebaseappdistribution.projects.apps.releases.operations.delete",
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "httpMethod": "DELETE",
                      "parameters": {
                        "name": {
                          "location": "path",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/operations/[^/]+$",
                          "type": "string",
                          "required": true,
                          "description": "The name of the operation resource to be deleted."
                        }
                      },
                      "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`."
                    }
                  }
                },
                "feedbackReports": {
                  "methods": {
                    "delete": {
                      "description": "Deletes a feedback report.",
                      "parameters": {
                        "name": {
                          "location": "path",
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/feedbackReports/[^/]+$",
                          "type": "string",
                          "description": "Required. The name of the feedback report to delete. Format: projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}"
                        }
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "httpMethod": "DELETE",
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/feedbackReports/{feedbackReportsId}",
                      "parameterOrder": [
                        "name"
                      ],
                      "id": "firebaseappdistribution.projects.apps.releases.feedbackReports.delete",
                      "response": {
                        "$ref": "GoogleProtobufEmpty"
                      }
                    },
                    "list": {
                      "parameters": {
                        "parent": {
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                          "type": "string",
                          "location": "path",
                          "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}`"
                        },
                        "pageSize": {
                          "type": "integer",
                          "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",
                          "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"
                        }
                      },
                      "description": "Lists feedback reports. By default, sorts by `createTime` in descending order.",
                      "parameterOrder": [
                        "parent"
                      ],
                      "id": "firebaseappdistribution.projects.apps.releases.feedbackReports.list",
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1ListFeedbackReportsResponse"
                      },
                      "path": "v1/{+parent}/feedbackReports",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/feedbackReports",
                      "httpMethod": "GET",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    },
                    "get": {
                      "parameters": {
                        "name": {
                          "description": "Required. The name of the feedback report to retrieve. Format: projects/{project_number}/apps/{app}/releases/{release}/feedbackReports/{feedback_report}",
                          "location": "path",
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/feedbackReports/[^/]+$",
                          "type": "string"
                        }
                      },
                      "description": "Gets a feedback report.",
                      "parameterOrder": [
                        "name"
                      ],
                      "id": "firebaseappdistribution.projects.apps.releases.feedbackReports.get",
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1FeedbackReport"
                      },
                      "path": "v1/{+name}",
                      "flatPath": "v1/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/feedbackReports/{feedbackReportsId}",
                      "httpMethod": "GET",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "groups": {
          "methods": {
            "get": {
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}",
              "parameterOrder": [
                "name"
              ],
              "id": "firebaseappdistribution.projects.groups.get",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "Required. The name of the group resource to retrieve. Format: `projects/{project_number}/groups/{group_alias}`",
                  "required": true,
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "type": "string",
                  "location": "path"
                }
              },
              "description": "Get a group."
            },
            "patch": {
              "id": "firebaseappdistribution.projects.groups.patch",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "parameterOrder": [
                "name"
              ],
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "httpMethod": "PATCH",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "parameters": {
                "name": {
                  "description": "The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "type": "string",
                  "required": true,
                  "location": "path"
                },
                "updateMask": {
                  "type": "string",
                  "description": "Optional. The list of fields to update.",
                  "location": "query",
                  "format": "google-fieldmask"
                }
              },
              "description": "Update a group."
            },
            "create": {
              "id": "firebaseappdistribution.projects.groups.create",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "parameterOrder": [
                "parent"
              ],
              "path": "v1/{+parent}/groups",
              "flatPath": "v1/projects/{projectsId}/groups",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1Group"
              },
              "httpMethod": "POST",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "parameters": {
                "parent": {
                  "pattern": "^projects/[^/]+$",
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Required. The name of the project resource, which is the parent of the group resource. Format: `projects/{project_number}`"
                },
                "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"
                }
              },
              "description": "Create a group."
            },
            "delete": {
              "parameters": {
                "name": {
                  "location": "path",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "type": "string",
                  "required": true,
                  "description": "Required. The name of the group resource. Format: `projects/{project_number}/groups/{group_alias}`"
                }
              },
              "description": "Delete a group.",
              "parameterOrder": [
                "name"
              ],
              "id": "firebaseappdistribution.projects.groups.delete",
              "response": {
                "$ref": "GoogleProtobufEmpty"
              },
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}",
              "httpMethod": "DELETE",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ]
            },
            "list": {
              "description": "List groups.",
              "parameters": {
                "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",
                  "format": "int32",
                  "type": "integer"
                },
                "pageToken": {
                  "type": "string",
                  "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"
                },
                "parent": {
                  "pattern": "^projects/[^/]+$",
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Required. The name of the project resource, which is the parent of the group resources. Format: `projects/{project_number}`"
                }
              },
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "parameterOrder": [
                "parent"
              ],
              "id": "firebaseappdistribution.projects.groups.list",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1ListGroupsResponse"
              },
              "path": "v1/{+parent}/groups",
              "flatPath": "v1/projects/{projectsId}/groups"
            },
            "batchJoin": {
              "path": "v1/{+group}:batchJoin",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}:batchJoin",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchJoinGroupRequest"
              },
              "parameterOrder": [
                "group"
              ],
              "id": "firebaseappdistribution.projects.groups.batchJoin",
              "response": {
                "$ref": "GoogleProtobufEmpty"
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "httpMethod": "POST",
              "parameters": {
                "group": {
                  "description": "Required. The name of the group resource to which testers are added. Format: `projects/{project_number}/groups/{group_alias}`",
                  "location": "path",
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "type": "string",
                  "required": true
                }
              },
              "description": "Batch adds members to a group. The testers will gain access to all releases that the groups have access to."
            },
            "batchLeave": {
              "parameterOrder": [
                "group"
              ],
              "id": "firebaseappdistribution.projects.groups.batchLeave",
              "response": {
                "$ref": "GoogleProtobufEmpty"
              },
              "path": "v1/{+group}:batchLeave",
              "flatPath": "v1/projects/{projectsId}/groups/{groupsId}:batchLeave",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchLeaveGroupRequest"
              },
              "httpMethod": "POST",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "parameters": {
                "group": {
                  "location": "path",
                  "required": true,
                  "pattern": "^projects/[^/]+/groups/[^/]+$",
                  "type": "string",
                  "description": "Required. The name of the group resource from which testers are removed. Format: `projects/{project_number}/groups/{group_alias}`"
                }
              },
              "description": "Batch removed members from a group. The testers will lose access to all releases that the groups have access to."
            }
          }
        },
        "testers": {
          "methods": {
            "list": {
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "id": "firebaseappdistribution.projects.testers.list",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1ListTestersResponse"
              },
              "parameterOrder": [
                "parent"
              ],
              "path": "v1/{+parent}/testers",
              "flatPath": "v1/projects/{projectsId}/testers",
              "description": "Lists testers and their resource ids.",
              "parameters": {
                "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",
                  "format": "int32",
                  "type": "integer"
                },
                "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"
                },
                "parent": {
                  "description": "Required. The name of the project resource, which is the parent of the tester resources. Format: `projects/{project_number}`",
                  "pattern": "^projects/[^/]+$",
                  "type": "string",
                  "required": true,
                  "location": "path"
                },
                "filter": {
                  "type": "string",
                  "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"
                }
              }
            },
            "batchAdd": {
              "path": "v1/{+project}/testers:batchAdd",
              "flatPath": "v1/projects/{projectsId}/testers:batchAdd",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchAddTestersRequest"
              },
              "id": "firebaseappdistribution.projects.testers.batchAdd",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1BatchAddTestersResponse"
              },
              "parameterOrder": [
                "project"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "httpMethod": "POST",
              "parameters": {
                "project": {
                  "description": "Required. The name of the project resource. Format: `projects/{project_number}`",
                  "location": "path",
                  "required": true,
                  "pattern": "^projects/[^/]+$",
                  "type": "string"
                }
              },
              "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": {
              "parameters": {
                "project": {
                  "description": "Required. The name of the project resource. Format: `projects/{project_number}`",
                  "required": true,
                  "pattern": "^projects/[^/]+$",
                  "type": "string",
                  "location": "path"
                }
              },
              "description": "Batch removes testers. If found, this call deletes testers for the specified emails. Returns all deleted testers.",
              "id": "firebaseappdistribution.projects.testers.batchRemove",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1BatchRemoveTestersResponse"
              },
              "parameterOrder": [
                "project"
              ],
              "path": "v1/{+project}/testers:batchRemove",
              "flatPath": "v1/projects/{projectsId}/testers:batchRemove",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1BatchRemoveTestersRequest"
              },
              "httpMethod": "POST",
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ]
            },
            "patch": {
              "description": "Update a tester. If the testers joins a group they gain access to all releases that the group has access to.",
              "parameters": {
                "name": {
                  "required": true,
                  "pattern": "^projects/[^/]+/testers/[^/]+$",
                  "type": "string",
                  "location": "path",
                  "description": "The name of the tester resource. Format: `projects/{project_number}/testers/{email_address}`"
                },
                "updateMask": {
                  "type": "string",
                  "description": "Optional. The list of fields to update.",
                  "location": "query",
                  "format": "google-fieldmask"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "httpMethod": "PATCH",
              "path": "v1/{+name}",
              "flatPath": "v1/projects/{projectsId}/testers/{testersId}",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1Tester"
              },
              "parameterOrder": [
                "name"
              ],
              "id": "firebaseappdistribution.projects.testers.patch",
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1Tester"
              }
            }
          }
        }
      }
    }
  },
  "parameters": {
    "alt": {
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "type": "string",
      "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",
      "description": "Data format for response.",
      "default": "json"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "oauth_token": {
      "description": "OAuth 2.0 token for the current user.",
      "location": "query",
      "type": "string"
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "key": {
      "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",
      "type": "string"
    },
    "fields": {
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query",
      "type": "string"
    },
    "prettyPrint": {
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query",
      "type": "boolean"
    },
    "uploadType": {
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "quotaUser": {
      "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",
      "type": "string"
    },
    "$.xgafv": {
      "location": "query",
      "enum": [
        "1",
        "2"
      ],
      "type": "string",
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "description": "V1 error format."
    }
  }
}
