{
  "mtlsRootUrl": "https://firebaseappdistribution.mtls.googleapis.com/",
  "version": "v1alpha",
  "canonicalName": "Firebase App Distribution",
  "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."
        }
      }
    }
  },
  "ownerName": "Google",
  "basePath": "",
  "version_module": true,
  "resources": {
    "projects": {
      "methods": {
        "getTestQuota": {
          "response": {
            "$ref": "GoogleFirebaseAppdistroV1alphaTestQuota"
          },
          "parameterOrder": [
            "name"
          ],
          "httpMethod": "GET",
          "id": "firebaseappdistribution.projects.getTestQuota",
          "path": "v1alpha/{+name}",
          "flatPath": "v1alpha/projects/{projectsId}/testQuota",
          "description": "Get information about the quota for `ReleaseTests`.",
          "parameters": {
            "name": {
              "pattern": "^projects/[^/]+/testQuota$",
              "location": "path",
              "description": "Required. The name of the `TestQuota` resource to retrieve. Format: `projects/{project_number}/testQuota`",
              "type": "string",
              "required": true
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ]
        }
      },
      "resources": {
        "apps": {
          "methods": {
            "getTestConfig": {
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaTestConfig"
              },
              "parameterOrder": [
                "name"
              ],
              "id": "firebaseappdistribution.projects.apps.getTestConfig",
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testConfig",
              "parameters": {
                "name": {
                  "required": true,
                  "location": "path",
                  "description": "Required. The name of the `TestConfig` resource to retrieve. Format: `projects/{project_number}/apps/{app}/testConfig`",
                  "type": "string",
                  "pattern": "^projects/[^/]+/apps/[^/]+/testConfig$"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Gets configuration for automated tests.",
              "httpMethod": "GET"
            },
            "updateTestConfig": {
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaTestConfig"
              },
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1alphaTestConfig"
              },
              "httpMethod": "PATCH",
              "parameters": {
                "name": {
                  "description": "Identifier. The name of the test configuration resource. Format: `projects/{project_number}/apps/{app}/testConfig`",
                  "type": "string",
                  "location": "path",
                  "pattern": "^projects/[^/]+/apps/[^/]+/testConfig$",
                  "required": true
                },
                "updateMask": {
                  "format": "google-fieldmask",
                  "description": "Optional. The list of fields to update.",
                  "type": "string",
                  "location": "query"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Updates automated test configuration.",
              "id": "firebaseappdistribution.projects.apps.updateTestConfig",
              "path": "v1alpha/{+name}",
              "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testConfig"
            }
          },
          "resources": {
            "releases": {
              "resources": {
                "tests": {
                  "methods": {
                    "list": {
                      "description": "List results for automated tests run on release.",
                      "parameters": {
                        "view": {
                          "description": "Optional. The requested view on the returned ReleaseTests. Defaults to the basic view.",
                          "type": "string",
                          "location": "query",
                          "enumDescriptions": [
                            "The default / unset value. The default view depends on the RPC.",
                            "Include basic metadata about the release test and its status, but not the full result details. This is the default value for ListReleaseTests.",
                            "Include everything."
                          ],
                          "enum": [
                            "RELEASE_TEST_VIEW_UNSPECIFIED",
                            "RELEASE_TEST_VIEW_BASIC",
                            "RELEASE_TEST_VIEW_FULL"
                          ]
                        },
                        "parent": {
                          "required": true,
                          "location": "path",
                          "description": "Required. The name of the release resource, which is the parent of the tests Format: `projects/{project_number}/apps/{app}/releases/{release}`",
                          "type": "string",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$"
                        },
                        "pageSize": {
                          "location": "query",
                          "description": "Optional. The maximum number of tests to return. The service may return fewer than this value.",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "Optional. A page token, received from a previous `ListReleaseTests` call. Provide this to retrieve the subsequent page.",
                          "type": "string",
                          "location": "query"
                        }
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "id": "firebaseappdistribution.projects.apps.releases.tests.list",
                      "path": "v1alpha/{+parent}/tests",
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/tests",
                      "httpMethod": "GET",
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1alphaListReleaseTestsResponse"
                      }
                    },
                    "create": {
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1alphaReleaseTest"
                      },
                      "parameters": {
                        "parent": {
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+$",
                          "description": "Required. The name of the release resource, which is the parent of the test Format: `projects/{project_number}/apps/{app}/releases/{release}`",
                          "type": "string",
                          "location": "path",
                          "required": true
                        },
                        "releaseTestId": {
                          "description": "Optional. The ID to use for the test, which will become the final component of the test's resource name. This value should be 4-63 characters, and valid characters are /a-z-/. If it is not provided one will be automatically generated.",
                          "type": "string",
                          "location": "query"
                        }
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "description": "Run automated test(s) on release.",
                      "id": "firebaseappdistribution.projects.apps.releases.tests.create",
                      "path": "v1alpha/{+parent}/tests",
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/tests",
                      "request": {
                        "$ref": "GoogleFirebaseAppdistroV1alphaReleaseTest"
                      },
                      "httpMethod": "POST"
                    },
                    "get": {
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1alphaReleaseTest"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "httpMethod": "GET",
                      "id": "firebaseappdistribution.projects.apps.releases.tests.get",
                      "path": "v1alpha/{+name}",
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/tests/{testsId}",
                      "description": "Get results for automated test run on release.",
                      "parameters": {
                        "name": {
                          "location": "path",
                          "description": "Required. The name of the release test resource. Format: `projects/{project_number}/apps/{app}/releases/{release}/tests/{test}`",
                          "type": "string",
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/tests/[^/]+$",
                          "required": true
                        }
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ]
                    },
                    "cancel": {
                      "response": {
                        "$ref": "GoogleFirebaseAppdistroV1alphaCancelReleaseTestResponse"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "id": "firebaseappdistribution.projects.apps.releases.tests.cancel",
                      "path": "v1alpha/{+name}:cancel",
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/releases/{releasesId}/tests/{testsId}:cancel",
                      "description": "Abort automated test run on release.",
                      "parameters": {
                        "name": {
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/releases/[^/]+/tests/[^/]+$",
                          "description": "Required. The name of the release test resource. Format: `projects/{project_number}/apps/{app}/releases/{release}/tests/{test}`",
                          "type": "string",
                          "location": "path"
                        }
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                      ],
                      "httpMethod": "GET"
                    }
                  }
                }
              }
            },
            "testCases": {
              "methods": {
                "patch": {
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
                  },
                  "httpMethod": "PATCH",
                  "parameters": {
                    "allowMissing": {
                      "location": "query",
                      "description": "Optional. If set to true, and the test case is not found, a new test case will be created.",
                      "type": "boolean"
                    },
                    "name": {
                      "required": true,
                      "pattern": "^projects/[^/]+/apps/[^/]+/testCases/[^/]+$",
                      "description": "Identifier. The name of the test case resource. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
                      "type": "string",
                      "location": "path"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Update a test case.",
                  "id": "firebaseappdistribution.projects.apps.testCases.patch",
                  "path": "v1alpha/{+name}",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases/{testCasesId}",
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
                  }
                },
                "create": {
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
                  },
                  "id": "firebaseappdistribution.projects.apps.testCases.create",
                  "path": "v1alpha/{+parent}/testCases",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases",
                  "parameters": {
                    "testCaseId": {
                      "location": "query",
                      "description": "Optional. The ID to use for the test case, which will become the final component of the test case's resource name. This value should be 4-63 characters, and valid characters are /a-z-/.",
                      "type": "string"
                    },
                    "parent": {
                      "description": "Required. The parent resource where this test case will be created. Format: `projects/{project_number}/apps/{app}`",
                      "type": "string",
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "description": "Create a new test case."
                },
                "get": {
                  "httpMethod": "GET",
                  "id": "firebaseappdistribution.projects.apps.testCases.get",
                  "path": "v1alpha/{+name}",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases/{testCasesId}",
                  "description": "Get a test case.",
                  "parameters": {
                    "name": {
                      "location": "path",
                      "description": "Required. The name of the test case resource to retrieve. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
                      "type": "string",
                      "pattern": "^projects/[^/]+/apps/[^/]+/testCases/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
                  },
                  "parameterOrder": [
                    "name"
                  ]
                },
                "batchDelete": {
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaBatchDeleteTestCasesRequest"
                  },
                  "httpMethod": "POST",
                  "description": "Deletes multiple test cases.",
                  "parameters": {
                    "parent": {
                      "description": "Required. The parent resource of the test cases being deleted. Format: `projects/{project_number}/apps/{app}`",
                      "type": "string",
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "id": "firebaseappdistribution.projects.apps.testCases.batchDelete",
                  "path": "v1alpha/{+parent}/testCases:batchDelete",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases:batchDelete",
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  }
                },
                "clearTestCaseCache": {
                  "description": "Clears cached test runs for a specific test case and device(s).",
                  "parameters": {
                    "testCase": {
                      "description": "Required. The name of the test case resource for which to clear the cache. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
                      "type": "string",
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+/testCases/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "id": "firebaseappdistribution.projects.apps.testCases.clearTestCaseCache",
                  "path": "v1alpha/{+testCase}:clearTestCaseCache",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases/{testCasesId}:clearTestCaseCache",
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaClearTestCaseCacheRequest"
                  },
                  "httpMethod": "POST",
                  "parameterOrder": [
                    "testCase"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaClearTestCaseCacheResponse"
                  }
                },
                "batchUpdate": {
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaBatchUpdateTestCasesRequest"
                  },
                  "id": "firebaseappdistribution.projects.apps.testCases.batchUpdate",
                  "path": "v1alpha/{+parent}/testCases:batchUpdate",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases:batchUpdate",
                  "description": "Updates multiple test cases.",
                  "parameters": {
                    "parent": {
                      "required": true,
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "description": "Required. The parent resource of the test cases being updated. Format: `projects/{project_number}/apps/{app}`",
                      "type": "string",
                      "location": "path"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaBatchUpdateTestCasesResponse"
                  },
                  "parameterOrder": [
                    "parent"
                  ]
                },
                "delete": {
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "GoogleProtobufEmpty"
                  },
                  "httpMethod": "DELETE",
                  "description": "Delete a test case.",
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the test case resource to delete. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
                      "type": "string",
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+/testCases/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "id": "firebaseappdistribution.projects.apps.testCases.delete",
                  "path": "v1alpha/{+name}",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases/{testCasesId}"
                },
                "list": {
                  "description": "List test cases.",
                  "parameters": {
                    "pageSize": {
                      "format": "int32",
                      "location": "query",
                      "description": "Optional. The maximum number of test cases to return. The service may return fewer than this value. If unspecified, at most 50 test cases will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                      "type": "integer"
                    },
                    "pageToken": {
                      "description": "Optional. A page token, received from a previous `ListTestCases` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListTestCases` must match the call that provided the page token.",
                      "type": "string",
                      "location": "query"
                    },
                    "parent": {
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "location": "path",
                      "description": "Required. The parent resource from which to list test cases. Format: `projects/{project_number}/apps/{app}`",
                      "type": "string",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "id": "firebaseappdistribution.projects.apps.testCases.list",
                  "path": "v1alpha/{+parent}/testCases",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/testCases",
                  "httpMethod": "GET",
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaListTestCasesResponse"
                  }
                }
              }
            }
          }
        },
        "testers": {
          "methods": {
            "getUdids": {
              "parameterOrder": [
                "project"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaGetTesterUdidsResponse"
              },
              "httpMethod": "GET",
              "description": "Get UDIDs of tester iOS devices in a project",
              "parameters": {
                "project": {
                  "pattern": "^projects/[^/]+$",
                  "location": "path",
                  "description": "The name of the project, which is the parent of testers Format: `projects/{project_number}`",
                  "type": "string",
                  "required": true
                },
                "mobilesdkAppId": {
                  "description": "Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
                  "type": "string",
                  "location": "query"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "id": "firebaseappdistribution.projects.testers.getUdids",
              "path": "v1alpha/{+project}/testers:udids",
              "flatPath": "v1alpha/projects/{projectsId}/testers:udids"
            }
          }
        }
      }
    },
    "apps": {
      "methods": {
        "getJwt": {
          "httpMethod": "GET",
          "description": "Get a JWT token",
          "parameters": {
            "mobilesdkAppId": {
              "required": true,
              "description": "Required. Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
              "type": "string",
              "location": "path"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ],
          "id": "firebaseappdistribution.apps.getJwt",
          "path": "v1alpha/apps/{mobilesdkAppId}/jwt",
          "flatPath": "v1alpha/apps/{mobilesdkAppId}/jwt",
          "parameterOrder": [
            "mobilesdkAppId"
          ],
          "response": {
            "$ref": "GoogleFirebaseAppdistroV1alphaJwt"
          }
        },
        "get": {
          "description": "Get the app, if it exists",
          "parameters": {
            "mobilesdkAppId": {
              "required": true,
              "description": "Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
              "type": "string",
              "location": "path"
            },
            "appView": {
              "enum": [
                "APP_VIEW_UNSPECIFIED",
                "BASIC",
                "FULL"
              ],
              "location": "query",
              "enumDescriptions": [
                "The default / unset value. The API will default to the BASIC view.",
                "Include everything except aab_state.",
                "Include everything."
              ],
              "description": "App view. When unset or set to BASIC, returns an App with everything set except for aab_state. When set to FULL, returns an App with aab_state set.",
              "type": "string"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/cloud-platform"
          ],
          "id": "firebaseappdistribution.apps.get",
          "path": "v1alpha/apps/{mobilesdkAppId}",
          "flatPath": "v1alpha/apps/{mobilesdkAppId}",
          "httpMethod": "GET",
          "parameterOrder": [
            "mobilesdkAppId"
          ],
          "response": {
            "$ref": "GoogleFirebaseAppdistroV1alphaApp"
          }
        }
      },
      "resources": {
        "releases": {
          "methods": {
            "enable_access": {
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaEnableAccessOnReleaseResponse"
              },
              "parameterOrder": [
                "mobilesdkAppId",
                "releaseId"
              ],
              "httpMethod": "POST",
              "request": {
                "$ref": "GoogleFirebaseAppdistroV1alphaEnableAccessOnReleaseRequest"
              },
              "id": "firebaseappdistribution.apps.releases.enable_access",
              "path": "v1alpha/apps/{mobilesdkAppId}/releases/{releaseId}/enable_access",
              "flatPath": "v1alpha/apps/{mobilesdkAppId}/releases/{releaseId}/enable_access",
              "description": "Enable access on a release for testers.",
              "parameters": {
                "mobilesdkAppId": {
                  "location": "path",
                  "description": "Required. Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
                  "type": "string",
                  "required": true
                },
                "releaseId": {
                  "description": "Required. Release identifier",
                  "type": "string",
                  "location": "path",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ]
            }
          },
          "resources": {
            "notes": {
              "methods": {
                "create": {
                  "parameterOrder": [
                    "mobilesdkAppId",
                    "releaseId"
                  ],
                  "response": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaCreateReleaseNotesResponse"
                  },
                  "request": {
                    "$ref": "GoogleFirebaseAppdistroV1alphaCreateReleaseNotesRequest"
                  },
                  "httpMethod": "POST",
                  "description": "Create release notes on a release.",
                  "parameters": {
                    "mobilesdkAppId": {
                      "location": "path",
                      "description": "Required. Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
                      "type": "string",
                      "required": true
                    },
                    "releaseId": {
                      "description": "Required. Release identifier",
                      "type": "string",
                      "location": "path",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform"
                  ],
                  "id": "firebaseappdistribution.apps.releases.notes.create",
                  "path": "v1alpha/apps/{mobilesdkAppId}/releases/{releaseId}/notes",
                  "flatPath": "v1alpha/apps/{mobilesdkAppId}/releases/{releaseId}/notes"
                }
              }
            }
          }
        },
        "upload_status": {
          "methods": {
            "get": {
              "parameterOrder": [
                "mobilesdkAppId",
                "uploadToken"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaGetUploadStatusResponse"
              },
              "description": "GET Binary upload status by token",
              "parameters": {
                "mobilesdkAppId": {
                  "required": true,
                  "location": "path",
                  "description": "Required. Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
                  "type": "string"
                },
                "uploadToken": {
                  "description": "Required. The token for the upload",
                  "type": "string",
                  "location": "path",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "id": "firebaseappdistribution.apps.upload_status.get",
              "path": "v1alpha/apps/{mobilesdkAppId}/upload_status/{uploadToken}",
              "flatPath": "v1alpha/apps/{mobilesdkAppId}/upload_status/{uploadToken}",
              "httpMethod": "GET"
            }
          }
        },
        "release_by_hash": {
          "methods": {
            "get": {
              "parameterOrder": [
                "mobilesdkAppId",
                "uploadHash"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaGetReleaseByUploadHashResponse"
              },
              "description": "GET Release by binary upload hash",
              "parameters": {
                "mobilesdkAppId": {
                  "required": true,
                  "location": "path",
                  "description": "Required. Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
                  "type": "string"
                },
                "uploadHash": {
                  "description": "Required. The hash for the upload",
                  "type": "string",
                  "location": "path",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "id": "firebaseappdistribution.apps.release_by_hash.get",
              "path": "v1alpha/apps/{mobilesdkAppId}/release_by_hash/{uploadHash}",
              "flatPath": "v1alpha/apps/{mobilesdkAppId}/release_by_hash/{uploadHash}",
              "httpMethod": "GET"
            }
          }
        },
        "testers": {
          "methods": {
            "getTesterUdids": {
              "httpMethod": "GET",
              "parameters": {
                "mobilesdkAppId": {
                  "required": true,
                  "description": "Unique id for a Firebase app of the format: {version}:{project_number}:{platform}:{hash(bundle_id)} Example: 1:581234567376:android:aa0a3c7b135e90289",
                  "type": "string",
                  "location": "path"
                },
                "project": {
                  "description": "The name of the project, which is the parent of testers Format: `projects/{project_number}`",
                  "type": "string",
                  "location": "query"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/cloud-platform"
              ],
              "description": "Get UDIDs of tester iOS devices in a project",
              "id": "firebaseappdistribution.apps.testers.getTesterUdids",
              "path": "v1alpha/apps/{mobilesdkAppId}/testers:getTesterUdids",
              "flatPath": "v1alpha/apps/{mobilesdkAppId}/testers:getTesterUdids",
              "parameterOrder": [
                "mobilesdkAppId"
              ],
              "response": {
                "$ref": "GoogleFirebaseAppdistroV1alphaGetTesterUdidsResponse"
              }
            }
          }
        }
      }
    }
  },
  "batchPath": "batch",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "rootUrl": "https://firebaseappdistribution.googleapis.com/",
  "kind": "discovery#restDescription",
  "description": "",
  "baseUrl": "https://firebaseappdistribution.googleapis.com/",
  "documentationLink": "https://firebase.google.com/products/app-distribution",
  "revision": "20260814",
  "id": "firebaseappdistribution:v1alpha",
  "ownerDomain": "google.com",
  "name": "firebaseappdistribution",
  "discoveryVersion": "v1",
  "protocol": "rest",
  "parameters": {
    "upload_protocol": {
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "alt": {
      "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",
      "type": "string",
      "description": "Data format for response.",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "default": "json"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "key": {
      "location": "query",
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token."
    },
    "access_token": {
      "location": "query",
      "type": "string",
      "description": "OAuth access token."
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query"
    },
    "oauth_token": {
      "location": "query",
      "type": "string",
      "description": "OAuth 2.0 token for the current user."
    },
    "$.xgafv": {
      "enum": [
        "1",
        "2"
      ],
      "type": "string",
      "description": "V1 error format.",
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    },
    "callback": {
      "location": "query",
      "type": "string",
      "description": "JSONP"
    }
  },
  "servicePath": "",
  "title": "Firebase App Distribution API",
  "schemas": {
    "GoogleFirebaseAppdistroV1alphaDeviceInteractionEnterText": {
      "id": "GoogleFirebaseAppdistroV1alphaDeviceInteractionEnterText",
      "properties": {
        "text": {
          "description": "Output only. The text to enter.",
          "type": "string",
          "readOnly": true
        },
        "elementBounds": {
          "readOnly": true,
          "description": "Output only. The visible bounds of the element to enter text into.",
          "$ref": "AndroidxCrawlerOutputRectangle"
        }
      },
      "description": "A text entry action, that enters text into a particular text field, clearing any existing text in the field.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaTesterUdid": {
      "id": "GoogleFirebaseAppdistroV1alphaTesterUdid",
      "properties": {
        "platform": {
          "description": "The platform of the tester's device",
          "type": "string"
        },
        "udid": {
          "description": "The UDID of the tester's device",
          "type": "string"
        },
        "name": {
          "description": "The name of the tester's device",
          "type": "string"
        }
      },
      "description": "The UDIDs of a tester's iOS device",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaAiStep": {
      "id": "GoogleFirebaseAppdistroV1alphaAiStep",
      "properties": {
        "successCriteria": {
          "description": "Optional. A visual description of the screen's expected state after the step has been successfully completed. This is referred to as the \"final screen assertion\" in the Firebase console and CLI tools. This field must be provided for the last step in a test case, and is optional for all other steps.",
          "type": "string"
        },
        "goal": {
          "description": "A goal to be accomplished by the AI",
          "type": "string"
        },
        "testCase": {
          "readOnly": true,
          "description": "Output only. The test case that contained this step. Note: The test case may have changed or been deleted since this step was created. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
          "type": "string"
        },
        "hint": {
          "description": "Optional. Hint text containing suggestions to help the agent accomplish the goal",
          "type": "string"
        },
        "assertion": {
          "description": "An assertion to be checked by the AI",
          "type": "string"
        }
      },
      "description": "A step to be accomplished by the AI",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaCreateReleaseNotesRequest": {
      "description": "The request message for `CreateReleaseNotes`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaCreateReleaseNotesRequest",
      "properties": {
        "releaseNotes": {
          "description": "The actual release notes body from the user",
          "$ref": "GoogleFirebaseAppdistroV1alphaReleaseNotes"
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaAppCrash": {
      "id": "GoogleFirebaseAppdistroV1alphaAppCrash",
      "properties": {
        "message": {
          "description": "Output only. The message associated with the crash.",
          "type": "string",
          "readOnly": true
        },
        "stackTrace": {
          "readOnly": true,
          "description": "Output only. The raw stack trace.",
          "type": "string"
        }
      },
      "description": "An app crash that occurred during an automated test.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaTestDevice": {
      "id": "GoogleFirebaseAppdistroV1alphaTestDevice",
      "properties": {
        "model": {
          "description": "Required. The device model.",
          "type": "string"
        },
        "version": {
          "description": "Required. The version of the device (API level on Android).",
          "type": "string"
        },
        "locale": {
          "description": "Optional. The locale of the device (e.g. \"en_US\" for US English) during the test.",
          "type": "string"
        },
        "orientation": {
          "description": "Optional. The orientation of the device during the test.",
          "type": "string"
        }
      },
      "description": "A device on which automated tests can be run.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaAabCertificate": {
      "description": "App bundle test certificate",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaAabCertificate",
      "properties": {
        "certificateHashMd5": {
          "description": "MD5 hash of the certificate used to resign the AAB",
          "type": "string"
        },
        "certificateHashSha1": {
          "description": "SHA1 hash of the certificate used to resign the AAB",
          "type": "string"
        },
        "certificateHashSha256": {
          "description": "SHA256 hash of the certificate used to resign the AAB",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaGoalAction": {
      "id": "GoogleFirebaseAppdistroV1alphaGoalAction",
      "properties": {
        "deviceAction": {
          "description": "Output only. A high level action taken by the AI on the device.",
          "$ref": "GoogleFirebaseAppdistroV1alphaDeviceAction",
          "readOnly": true
        },
        "terminalAction": {
          "readOnly": true,
          "description": "Output only. An action taken by the AI to end the goal.",
          "$ref": "GoogleFirebaseAppdistroV1alphaTerminalAction"
        },
        "explanation": {
          "description": "Output only. An explanation justifying why the action was taken.",
          "type": "string",
          "readOnly": true
        },
        "startTime": {
          "readOnly": true,
          "format": "google-datetime",
          "description": "Output only. The time at which the action started.",
          "type": "string"
        },
        "debugInfo": {
          "description": "Output only. Debug information explaining why the agent to the specific action.",
          "$ref": "GoogleFirebaseAppdistroV1alphaGoalActionDebugInfo",
          "readOnly": true
        },
        "cachingType": {
          "enumDescriptions": [
            "Caching type unspecified.",
            "The model alone was used to determine the action with no caching.",
            "The model used information from a previous successful run to determine the action.",
            "The action was replayed from a previous successful run without model input."
          ],
          "description": "Output only. The type of caching used to determine the action.",
          "type": "string",
          "readOnly": true,
          "enum": [
            "CACHING_TYPE_UNSPECIFIED",
            "NO_CACHING",
            "CACHE_AND_MODEL",
            "CACHE_ONLY"
          ]
        }
      },
      "description": "An action taken by the AI agent while attempting to accomplish a goal.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaGetUploadStatusResponse": {
      "description": "The response message for `GetUploadStatus`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaGetUploadStatusResponse",
      "properties": {
        "message": {
          "description": "Any additional context for the given upload status (e.g. error message) Meant to be displayed to the client",
          "type": "string"
        },
        "release": {
          "description": "The release that was created from the upload (only set on \"SUCCESS\")",
          "$ref": "GoogleFirebaseAppdistroV1alphaRelease"
        },
        "status": {
          "enumDescriptions": [
            "Status unspecified.",
            "The upload is in progress.",
            "The binary has already been uploaded.",
            "The upload was successful.",
            "The upload failed."
          ],
          "description": "The status of the upload",
          "type": "string",
          "enum": [
            "STATUS_UNSPECIFIED",
            "IN_PROGRESS",
            "ALREADY_UPLOADED",
            "SUCCESS",
            "ERROR"
          ]
        },
        "errorCode": {
          "enum": [
            "ERROR_UNSPECIFIED",
            "INVALID_ZIP",
            "MISSING_PLIST",
            "MISSING_PROFILE",
            "VERSION_TOO_LONG",
            "MISSING_UUIDS",
            "MISSING_RESOURCES",
            "MISSING_MANIFEST",
            "IOS_METADATA_ERROR",
            "ANDROID_METADATA_ERROR",
            "UNSUPPORTED_PLATFORM_TYPE",
            "BUNDLE_ID_MISMATCH",
            "APK_NOT_ZIP_ALIGNED",
            "INVALID_CERTIFICATE",
            "APK_TOO_LARGE",
            "AAB_NOT_PUBLISHED",
            "INVALID_PLIST_DEVICE_FAMILIES",
            "AAB_TOS_NOT_ACCEPTED",
            "APP_NAME_TOO_LONG",
            "AAB_DEVELOPER_ACCOUNT_NOT_LINKED",
            "AAB_NO_APP_WITH_GIVEN_PACKAGE_NAME_IN_ACCOUNT",
            "AAB_UPLOAD_ERROR",
            "APP_NOT_FOUND",
            "AAB_ADHOC_SHARING_KEY_NOT_REGISTERED",
            "AAB_ANDROID_DEVELOPER_CONSOLE_ACCOUNT_NOT_FOUND",
            "AAB_ANDROID_DEVELOPER_CONSOLE_PACKAGE_NOT_FOUND"
          ],
          "description": "The error code associated with (only set on \"FAILURE\")",
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "Happens if the Firebase app no longer exists by the time of extraction",
            "",
            "A corresponding Android Developer Console account for this app's Play Console account was not found.",
            "The package was not found in the Android Developer Console."
          ]
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaBatchUpdateTestCasesResponse": {
      "id": "GoogleFirebaseAppdistroV1alphaBatchUpdateTestCasesResponse",
      "properties": {
        "testCases": {
          "description": "The updated test cases.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
          }
        }
      },
      "description": "The response message for `BatchUpdateTestCase`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaDeviceExecution": {
      "id": "GoogleFirebaseAppdistroV1alphaDeviceExecution",
      "properties": {
        "resultsStoragePath": {
          "description": "Output only. The path to a directory in Cloud Storage that will eventually contain the results for this execution. For example, gs://bucket/Nexus5-18-en-portrait.",
          "type": "string",
          "readOnly": true
        },
        "roboStats": {
          "description": "Output only. The statistics collected during the Robo test.",
          "$ref": "GoogleFirebaseAppdistroV1alphaRoboStats",
          "readOnly": true
        },
        "screenshotUris": {
          "readOnly": true,
          "description": "Output only. A list of screenshot image URIs taken from the Robo crawl. The file names are numbered by the order in which they were taken.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "name": {
          "description": "Identifier. The name of the device execution resource. Format: `projects/{project_number}/apps/{app}/releases/{release}/tests/{test}/deviceExecutions/{device_execution}`",
          "type": "string"
        },
        "appCrash": {
          "readOnly": true,
          "description": "Output only. An app crash, if any occurred during the test.",
          "$ref": "GoogleFirebaseAppdistroV1alphaAppCrash"
        },
        "videoStartTime": {
          "description": "Output only. The time at which the video started recording.",
          "type": "string",
          "readOnly": true,
          "format": "google-datetime"
        },
        "finalAiAssertionMissing": {
          "readOnly": true,
          "description": "Output only. Indicates that the test replayed saved actions and concluded without a final AI assertion.",
          "type": "boolean"
        },
        "device": {
          "description": "Required. The device that the test was run on.",
          "$ref": "GoogleFirebaseAppdistroV1alphaTestDevice"
        },
        "state": {
          "enum": [
            "TEST_STATE_UNSPECIFIED",
            "IN_PROGRESS",
            "PASSED",
            "FAILED",
            "INCONCLUSIVE"
          ],
          "enumDescriptions": [
            "Test state unspecified.",
            "The test is in progress.",
            "The test has passed.",
            "The test has failed.",
            "The test was inconclusive."
          ],
          "description": "Output only. The state of the test.",
          "type": "string",
          "readOnly": true
        },
        "executionType": {
          "enum": [
            "EXECUTION_TYPE_UNSPECIFIED",
            "AI",
            "ACTION_BASED_REPLAY",
            "AI_REPLAY",
            "RANDOM_CRAWL"
          ],
          "readOnly": true,
          "description": "Output only. The type of execution for the test.",
          "type": "string",
          "enumDescriptions": [
            "Execution type unspecified.",
            "An AI-driven test.",
            "A replay of a previous test run.",
            "A failed replay that was rerun using the AI agent.",
            "A random Robo test."
          ]
        },
        "crawlGraphUri": {
          "readOnly": true,
          "description": "Output only. A URI to an image of the Robo crawl graph.",
          "type": "string"
        },
        "inconclusiveReason": {
          "enum": [
            "INCONCLUSIVE_REASON_UNSPECIFIED",
            "QUOTA_EXCEEDED",
            "INFRASTRUCTURE_FAILURE",
            "SERVICE_NOT_ACTIVATED",
            "NO_SIGNATURE",
            "NO_LAUNCHER_ACTIVITY",
            "FORBIDDEN_PERMISSIONS",
            "DEVICE_ADMIN_RECEIVER",
            "NO_CODE_APK",
            "INVALID_APK_PREVIEW_SDK"
          ],
          "readOnly": true,
          "enumDescriptions": [
            "Reason unspecified.",
            "Not enough quota remained to run the test.",
            "The outcome of the test could not be determined because of a failure in the test running infrastructure.",
            "A required cloud service api is not activated (Google Cloud Testing API or Cloud Tool Results API).",
            "The app was not signed.",
            "A main launcher activity could not be found.",
            "The app declares one or more permissions that are not allowed.",
            "Device administrator applications are not allowed.",
            "APK contains no code. See also https://developer.android.com/guide/topics/manifest/application-element.html#code",
            "APK is built for a preview SDK which is unsupported."
          ],
          "description": "Output only. The reason why the test was inconclusive.",
          "type": "string"
        },
        "videoUri": {
          "readOnly": true,
          "description": "Output only. A URI to a video of the test run.",
          "type": "string"
        },
        "aiStepResults": {
          "readOnly": true,
          "description": "Output only. Results of the AI steps if passed in",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaAiStepResult"
          }
        },
        "originDeviceExecution": {
          "description": "Output only. The device execution from which cached steps were used during this execution. Note: This field is only populated for ACTION_BASED_REPLAY executions. If the original device execution no longer exists, this field will be empty. Format: `projects/{project_number}/apps/{app}/releases/{release}/tests/{test}/deviceExecutions/{device_execution}`",
          "type": "string",
          "readOnly": true
        },
        "failedReason": {
          "enum": [
            "FAILED_REASON_UNSPECIFIED",
            "CRASHED",
            "NOT_INSTALLED",
            "UNABLE_TO_CRAWL",
            "DEVICE_OUT_OF_MEMORY",
            "FAILED_AI_STEP",
            "TIMED_OUT"
          ],
          "description": "Output only. The reason why the test failed.",
          "type": "string",
          "enumDescriptions": [
            "Reason unspecified.",
            "The app crashed during the test.",
            "If an app is not installed and thus no test can be run with the app. This might be caused by trying to run a test on an unsupported platform.",
            "If the app could not be crawled (possibly because the app did not start).",
            "If the device ran out of memory during the test.",
            "At least one AI step failed.",
            "The crawl reached the time limit before the test could be completed."
          ],
          "readOnly": true
        }
      },
      "description": "The results of running an automated test on a particular device.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaListTestCasesResponse": {
      "id": "GoogleFirebaseAppdistroV1alphaListTestCasesResponse",
      "properties": {
        "testCases": {
          "description": "The test cases from the specified app.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
          }
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "description": "The response message for `ListTestCases`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaScreenshot": {
      "description": "A device screenshot taken during a test.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaScreenshot",
      "properties": {
        "uri": {
          "readOnly": true,
          "description": "Output only. The URI of the screenshot.",
          "type": "string"
        },
        "height": {
          "description": "Output only. The height of the screenshot, in pixels.",
          "type": "integer",
          "format": "int32",
          "readOnly": true
        },
        "width": {
          "description": "Output only. The width of the screenshot, in pixels.",
          "type": "integer",
          "format": "int32",
          "readOnly": true
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaDeviceInteractionBack": {
      "description": "A back action.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaDeviceInteractionBack",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1alphaDeviceInteractionDragAndDrop": {
      "id": "GoogleFirebaseAppdistroV1alphaDeviceInteractionDragAndDrop",
      "properties": {
        "start": {
          "description": "Output only. The start point of the drag and drop.",
          "$ref": "AndroidxCrawlerOutputPoint",
          "readOnly": true
        },
        "end": {
          "description": "Output only. The end point of the drag and drop.",
          "$ref": "AndroidxCrawlerOutputPoint",
          "readOnly": true
        }
      },
      "description": "A drag and drop action.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaReleaseTest": {
      "id": "GoogleFirebaseAppdistroV1alphaReleaseTest",
      "properties": {
        "deviceExecutions": {
          "description": "Required. The results of the test on each device.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaDeviceExecution"
          }
        },
        "testState": {
          "enum": [
            "TEST_STATE_UNSPECIFIED",
            "IN_PROGRESS",
            "PASSED",
            "FAILED",
            "INCONCLUSIVE"
          ],
          "description": "Output only. The state of the release test.",
          "type": "string",
          "enumDescriptions": [
            "Test state unspecified.",
            "The test is in progress.",
            "The test has passed.",
            "The test has failed.",
            "The test was inconclusive."
          ],
          "readOnly": true
        },
        "name": {
          "description": "The name of the release test resource. Format: `projects/{project_number}/apps/{app}/releases/{release}/tests/{test}`",
          "type": "string"
        },
        "loginCredential": {
          "description": "Optional. Input only. Login credentials for the test. Input only.",
          "$ref": "GoogleFirebaseAppdistroV1alphaLoginCredential"
        },
        "createTime": {
          "description": "Output only. Timestamp when the test was run.",
          "type": "string",
          "format": "google-datetime",
          "readOnly": true
        },
        "testCase": {
          "description": "Optional. The test case that was used to generate this release test. Note: The test case may have changed or been deleted since the release test was created. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
          "type": "string"
        },
        "displayName": {
          "description": "Optional. Display name of the release test. Required if the release test is created with multiple goals.",
          "type": "string"
        },
        "aiInstructions": {
          "description": "Optional. Instructions for AI driven test.",
          "$ref": "GoogleFirebaseAppdistroV1alphaAiInstructions"
        },
        "resultsBucket": {
          "description": "Optional. Input only. The custom Cloud Storage bucket where test results are stored. Format: `projects/{project_number}/buckets/{bucket}` If not provided, the default test lab bucket is used.",
          "type": "string"
        }
      },
      "description": "Instance of an automated test for a release.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaClearTestCaseCacheRequest": {
      "description": "Request message for `ClearTestCaseCache`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaClearTestCaseCacheRequest",
      "properties": {
        "testDevices": {
          "description": "Optional. The list of devices for which to clear the cache. If not present, clear all of them.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaTestDevice"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaCreateReleaseNotesResponse": {
      "id": "GoogleFirebaseAppdistroV1alphaCreateReleaseNotesResponse",
      "properties": {},
      "description": "The response message for `CreateReleaseNotes`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaDeviceInteraction": {
      "description": "An interaction with the device, such as a tap, text entry, wait, etc.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaDeviceInteraction",
      "properties": {
        "screenshot": {
          "readOnly": true,
          "description": "Output only. The screenshot used in the context of this action. The screen may have changed before the action was actually taken.",
          "$ref": "GoogleFirebaseAppdistroV1alphaScreenshot"
        },
        "swipe": {
          "readOnly": true,
          "description": "Output only. A swipe action.",
          "$ref": "GoogleFirebaseAppdistroV1alphaDeviceInteractionSwipe"
        },
        "targetOrientation": {
          "readOnly": true,
          "enumDescriptions": [
            "Orientation unspecified.",
            "Portrait orientation.",
            "Landscape orientation."
          ],
          "description": "Output only. The target orientation of the device in a set orientation action.",
          "type": "string",
          "enum": [
            "ORIENTATION_UNSPECIFIED",
            "PORTRAIT",
            "LANDSCAPE"
          ]
        },
        "wait": {
          "readOnly": true,
          "description": "Output only. A wait action.",
          "$ref": "GoogleFirebaseAppdistroV1alphaDeviceInteractionWait"
        },
        "backAction": {
          "readOnly": true,
          "description": "Output only. A back action.",
          "$ref": "GoogleFirebaseAppdistroV1alphaDeviceInteractionBack"
        },
        "textInput": {
          "readOnly": true,
          "description": "Output only. A text input action, that types some text into whatever field is currently focused, if any. Unlike `enter_text` this action requires that the field be brought into focus first, for example by emitting a tap action before this one.",
          "type": "string"
        },
        "targetFoldedState": {
          "description": "Output only. The target folded state of the device in a set folded state action. The valid string values are device-dependent, and can be found using `adb shell cmd device_state print-states`.",
          "type": "string",
          "readOnly": true
        },
        "dragAndDrop": {
          "description": "Output only. A drag and drop action.",
          "$ref": "GoogleFirebaseAppdistroV1alphaDeviceInteractionDragAndDrop",
          "readOnly": true
        },
        "enterText": {
          "description": "Output only. A text entry action, that enters text into a particular text field, clearing any existing text in the field. Unlike `text_input` this action does not require any other actions such as a tap to be performed before it can enter the text.",
          "$ref": "GoogleFirebaseAppdistroV1alphaDeviceInteractionEnterText",
          "readOnly": true
        },
        "longPress": {
          "readOnly": true,
          "description": "Output only. A long press (tap and hold) action.",
          "$ref": "AndroidxCrawlerOutputPoint"
        },
        "tap": {
          "readOnly": true,
          "description": "Output only. A tap action.",
          "$ref": "AndroidxCrawlerOutputPoint"
        },
        "keyCode": {
          "description": "Output only. Key code for a key event action.",
          "type": "string",
          "readOnly": true
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaClearTestCaseCacheResponse": {
      "description": "Response empty (google.protobuf.Empty) message for `ClearTestCaseCache`",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaClearTestCaseCacheResponse",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1alphaAssertionDetails": {
      "id": "GoogleFirebaseAppdistroV1alphaAssertionDetails",
      "properties": {
        "explanation": {
          "readOnly": true,
          "description": "Output only. An explanation justifying the assertion result.",
          "type": "string"
        },
        "screenshot": {
          "description": "Output only. The screenshot used in the context of this assertion.",
          "$ref": "GoogleFirebaseAppdistroV1alphaScreenshot",
          "readOnly": true
        },
        "result": {
          "description": "Output only. The result of the assertion.",
          "type": "boolean",
          "readOnly": true
        }
      },
      "description": "Details for an assertion step.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaListReleaseTestsResponse": {
      "id": "GoogleFirebaseAppdistroV1alphaListReleaseTestsResponse",
      "properties": {
        "releaseTests": {
          "description": "The tests listed.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaReleaseTest"
          }
        },
        "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 `ListReleaseTests`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaLoginCredentialFieldHints": {
      "description": "Hints to the crawler for identifying input fields",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaLoginCredentialFieldHints",
      "properties": {
        "usernameResourceName": {
          "description": "Required. The Android resource name of the username UI element. For example, in Java: R.string.foo in xml: @string/foo Only the \"foo\" part is needed. Reference doc: https://developer.android.com/guide/topics/resources/accessing-resources.html",
          "type": "string"
        },
        "passwordResourceName": {
          "description": "Required. The Android resource name of the password UI element. For example, in Java: R.string.foo in xml: @string/foo Only the \"foo\" part is needed. Reference doc: https://developer.android.com/guide/topics/resources/accessing-resources.html",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaDeviceInteractionSwipe": {
      "id": "GoogleFirebaseAppdistroV1alphaDeviceInteractionSwipe",
      "properties": {
        "start": {
          "description": "Output only. The start point of the swipe.",
          "$ref": "AndroidxCrawlerOutputPoint",
          "readOnly": true
        },
        "end": {
          "readOnly": true,
          "description": "Output only. The end point of the swipe.",
          "$ref": "AndroidxCrawlerOutputPoint"
        }
      },
      "description": "A swipe action.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaTestConfig": {
      "description": "Configuration for automated tests",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaTestConfig",
      "properties": {
        "displayName": {
          "description": "Optional. Display name of the AI driven test. Required if the release test is created with multiple goals.",
          "type": "string"
        },
        "name": {
          "description": "Identifier. The name of the test configuration resource. Format: `projects/{project_number}/apps/{app}/testConfig`",
          "type": "string"
        },
        "resultsBucket": {
          "description": "Optional. The custom Cloud Storage bucket where test results are stored. Format: `projects/{project_number}/buckets/{bucket}` If not provided, the default test lab bucket is used.",
          "type": "string"
        },
        "roboCrawler": {
          "description": "Optional. Configuration for Robo crawler",
          "$ref": "GoogleFirebaseAppdistroV1alphaRoboCrawler"
        },
        "testDevices": {
          "description": "Optional. Tests will be run on this list of devices",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaTestDevice"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaUpdateTestCaseRequest": {
      "id": "GoogleFirebaseAppdistroV1alphaUpdateTestCaseRequest",
      "properties": {
        "testCase": {
          "description": "Required. The test case to update. The test case's `name` field is used to identify the test case to update. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
          "$ref": "GoogleFirebaseAppdistroV1alphaTestCase"
        },
        "allowMissing": {
          "description": "Optional. If set to true, and the test case is not found, a new test case will be created.",
          "type": "boolean"
        }
      },
      "description": "The request message for `UpdateTestCase`.",
      "type": "object"
    },
    "GoogleProtobufEmpty": {
      "id": "GoogleProtobufEmpty",
      "properties": {},
      "description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaAiInstructions": {
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaAiInstructions",
      "properties": {
        "steps": {
          "description": "Required. Steps to be accomplished by the AI",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaAiStep"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaTestQuota": {
      "id": "GoogleFirebaseAppdistroV1alphaTestQuota",
      "properties": {
        "usage": {
          "description": "Output only. Number of `ReleaseTests` run in the current month",
          "type": "string",
          "format": "int64",
          "readOnly": true
        },
        "name": {
          "description": "Identifier. The name of the `TestQuota` resource. Format: `projects/{project_number}/testQuota`",
          "type": "string"
        },
        "limit": {
          "description": "Output only. Maximum number of `ReleaseTests` allotted for the current month.",
          "type": "string",
          "format": "int64",
          "readOnly": true
        }
      },
      "description": "Customer quota information for `ReleaseTests`. Note: This quota only applies to tests with `AiInstructions` and is separate from the quota which might apply to the device time used by any tests.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaDeviceAction": {
      "description": "A high level action taken by the AI on the device, potentially involving multiple taps, text entries, waits, etc.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaDeviceAction",
      "properties": {
        "deviceInteractions": {
          "description": "Output only. The interactions made with the device as part of this higher level action taken by the agent, such as taps, text entries, waits, etc.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaDeviceInteraction"
          },
          "readOnly": true
        },
        "description": {
          "readOnly": true,
          "description": "Output only. A short description of the high level action taken by the AI agent.",
          "type": "string"
        }
      }
    },
    "AndroidxCrawlerOutputRectangle": {
      "id": "AndroidxCrawlerOutputRectangle",
      "properties": {
        "top": {
          "format": "int32",
          "type": "integer"
        },
        "left": {
          "type": "integer",
          "format": "int32"
        },
        "right": {
          "type": "integer",
          "format": "int32"
        },
        "bottom": {
          "type": "integer",
          "format": "int32"
        }
      },
      "description": "Rectangle for describing bounding boxes",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaJwt": {
      "id": "GoogleFirebaseAppdistroV1alphaJwt",
      "properties": {
        "token": {
          "description": "The JWT token (three Base64URL-encoded strings joined by dots).",
          "type": "string"
        }
      },
      "description": "A JWT token.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaBatchUpdateTestCasesRequest": {
      "id": "GoogleFirebaseAppdistroV1alphaBatchUpdateTestCasesRequest",
      "properties": {
        "requests": {
          "description": "Required. The update requests. A maximum number of 1000 test cases can be updated in one batch",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaUpdateTestCaseRequest"
          }
        }
      },
      "description": "The request message for `BatchUpdateTestCase`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1UploadReleaseMetadata": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseMetadata",
      "properties": {},
      "description": "Operation metadata for `UploadRelease`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaReleaseNotes": {
      "id": "GoogleFirebaseAppdistroV1alphaReleaseNotes",
      "properties": {
        "releaseNotes": {
          "description": "The actual release notes text from the user.",
          "type": "string"
        }
      },
      "description": "Release notes for a release.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaEnableAccessOnReleaseResponse": {
      "description": "The response message for `EnableAccessOnRelease`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaEnableAccessOnReleaseResponse",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1alphaGetTesterUdidsResponse": {
      "id": "GoogleFirebaseAppdistroV1alphaGetTesterUdidsResponse",
      "properties": {
        "testerUdids": {
          "description": "The UDIDs of tester iOS devices in a project",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaTesterUdid"
          }
        }
      },
      "description": "Response containing the UDIDs of tester iOS devices in a project",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaGetReleaseByUploadHashResponse": {
      "id": "GoogleFirebaseAppdistroV1alphaGetReleaseByUploadHashResponse",
      "properties": {
        "release": {
          "description": "Release object",
          "$ref": "GoogleFirebaseAppdistroV1alphaRelease"
        }
      },
      "description": "Response object to get the release given a upload hash",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1Release": {
      "description": "A release of a Firebase app.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1Release",
      "properties": {
        "testState": {
          "description": "Output only. The overall state of tests run on this release",
          "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"
          ],
          "readOnly": true,
          "enum": [
            "TEST_STATE_UNSPECIFIED",
            "NO_TESTS_REQUESTED",
            "IN_PROGRESS",
            "PASSED",
            "FAILED",
            "INCONCLUSIVE"
          ]
        },
        "updateTime": {
          "description": "Output only. The time the release was last updated.",
          "type": "string",
          "format": "google-datetime",
          "readOnly": true
        },
        "name": {
          "description": "The name of the release resource. Format: `projects/{project_number}/apps/{app}/releases/{release}`",
          "type": "string"
        },
        "releaseNotes": {
          "description": "Notes about the release.",
          "$ref": "GoogleFirebaseAppdistroV1ReleaseNotes"
        },
        "testingUri": {
          "readOnly": true,
          "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.",
          "type": "string"
        },
        "installationCount": {
          "format": "int32",
          "readOnly": true,
          "description": "Output only. Number of testers who have downloaded this release.",
          "type": "integer"
        },
        "expireTime": {
          "description": "Output only. The time the release will expire.",
          "type": "string",
          "readOnly": true,
          "format": "google-datetime"
        },
        "acceptedInvitationCount": {
          "description": "Output only. Number of testers with accepted invitations.",
          "type": "integer",
          "readOnly": true,
          "format": "int32"
        },
        "feedbackCount": {
          "readOnly": true,
          "format": "int32",
          "description": "Output only. Number of feedback reports left by testers.",
          "type": "integer"
        },
        "androidPackageRegistrationState": {
          "readOnly": true,
          "description": "Output only. Registration state of the Android package (BinaryType.APK).",
          "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"
          ]
        },
        "displayVersion": {
          "description": "Output only. Display version of the release. For an Android release, the display version is the `versionName`. For an iOS release, the display version is the `CFBundleShortVersionString`.",
          "type": "string",
          "readOnly": true
        },
        "openInvitationCount": {
          "format": "int32",
          "readOnly": true,
          "description": "Output only. Number of testers who were invited (incl. expired invitations), but did not (yet) accept the invitation.",
          "type": "integer"
        },
        "createTime": {
          "readOnly": true,
          "format": "google-datetime",
          "description": "Output only. The time the release was created.",
          "type": "string"
        },
        "binaryType": {
          "readOnly": true,
          "description": "Output only. Type of binary.",
          "type": "string",
          "enumDescriptions": [
            "unspecified binary type",
            "iOS App Store package",
            "Android Application package",
            "Android App Bundle"
          ],
          "enum": [
            "BINARY_TYPE_UNSPECIFIED",
            "IPA",
            "APK",
            "AAB"
          ]
        },
        "binaryDownloadUri": {
          "description": "Output only. A signed link (which expires in one hour) to directly download the app binary (IPA/APK/AAB) file.",
          "type": "string",
          "readOnly": true
        },
        "firebaseConsoleUri": {
          "description": "Output only. A link to the Firebase console displaying a single release.",
          "type": "string",
          "readOnly": true
        },
        "buildVersion": {
          "readOnly": true,
          "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`.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaBatchDeleteTestCasesRequest": {
      "description": "The request message for `BatchDeleteTestCase`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaBatchDeleteTestCasesRequest",
      "properties": {
        "names": {
          "description": "Required. The name of the test cases to delete. A maximum number of 1000 test cases can be deleted in one batch Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaCancelReleaseTestResponse": {
      "description": "The (empty) response message for `CancelReleaseTest`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaCancelReleaseTestResponse",
      "properties": {}
    },
    "GoogleFirebaseAppdistroV1UploadReleaseResponse": {
      "id": "GoogleFirebaseAppdistroV1UploadReleaseResponse",
      "properties": {
        "result": {
          "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."
          ],
          "description": "Result of upload release.",
          "type": "string",
          "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`.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaRoboStats": {
      "id": "GoogleFirebaseAppdistroV1alphaRoboStats",
      "properties": {
        "distinctVisitedScreens": {
          "description": "Output only. Number of distinct screens visited.",
          "type": "integer",
          "readOnly": true,
          "format": "int32"
        },
        "crawlDuration": {
          "description": "Output only. Duration of crawl.",
          "type": "string",
          "format": "google-duration",
          "readOnly": true
        },
        "mainActivityCrawlTimedOut": {
          "readOnly": true,
          "description": "Output only. Whether the main activity crawl timed out.",
          "type": "boolean"
        },
        "actionsPerformed": {
          "description": "Output only. Number of actions that crawler performed.",
          "type": "integer",
          "readOnly": true,
          "format": "int32"
        }
      },
      "description": "Statistics collected during a Robo test.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaTerminalAction": {
      "id": "GoogleFirebaseAppdistroV1alphaTerminalAction",
      "properties": {
        "reason": {
          "description": "Output only. The reason why this goal was ended.",
          "type": "string",
          "enumDescriptions": [
            "Reason unspecified.",
            "The goal failed to be completed. Note that \"impossible\" is a legacy term and the goal is reported to the customer as having \"failed\".",
            "The goal was completed successfully."
          ],
          "readOnly": true,
          "enum": [
            "REASON_UNSPECIFIED",
            "GOAL_IMPOSSIBLE",
            "GOAL_COMPLETE"
          ]
        },
        "screenshot": {
          "description": "Output only. The screenshot used in the context of this terminal action.",
          "$ref": "GoogleFirebaseAppdistroV1alphaScreenshot",
          "readOnly": true
        }
      },
      "description": "An action taken by the AI to end the goal.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaEnableAccessOnReleaseRequest": {
      "description": "The request message for `EnableAccessOnRelease`.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaEnableAccessOnReleaseRequest",
      "properties": {
        "buildVersion": {
          "deprecated": true,
          "description": "Optional. Ignored. Used to be build version of the app release if an instance identifier was provided for the release_id.",
          "type": "string"
        },
        "displayVersion": {
          "deprecated": true,
          "description": "Optional. Ignored. Used to be display version of the app release if an instance identifier was provided for the release_id.",
          "type": "string"
        },
        "emails": {
          "description": "Optional. An email address which should get access to this release, for example rebeccahe@google.com",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "groupIds": {
          "description": "Optional. A repeated list of group aliases to enable access to a release for Note: This field is misnamed, but can't be changed because we need to maintain compatibility with old build tools",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaDeviceInteractionWait": {
      "id": "GoogleFirebaseAppdistroV1alphaDeviceInteractionWait",
      "properties": {
        "duration": {
          "format": "google-duration",
          "readOnly": true,
          "description": "Output only. The duration of the wait.",
          "type": "string"
        }
      },
      "description": "A wait action.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaAiStepResult": {
      "description": "Captures the results of an AiStep",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaAiStepResult",
      "properties": {
        "step": {
          "description": "Required. The step performed by the AI",
          "$ref": "GoogleFirebaseAppdistroV1alphaAiStep"
        },
        "state": {
          "enum": [
            "STEP_STATE_UNSPECIFIED",
            "IN_PROGRESS",
            "PASSED",
            "FAILED",
            "TIMED_OUT",
            "GOAL_ACTION_LIMIT_REACHED"
          ],
          "description": "Output only. The current state of the step",
          "type": "string",
          "enumDescriptions": [
            "Step state unspecified",
            "The step is in progress",
            "The step has completed successfully",
            "The step has failed",
            "The test timed out during this step",
            "The number of actions needed to reach the goal exceeded its limit"
          ],
          "readOnly": true
        },
        "goalDetails": {
          "description": "Output only. Details for a goal step.",
          "$ref": "GoogleFirebaseAppdistroV1alphaGoalDetails",
          "readOnly": true
        },
        "assertionDetails": {
          "readOnly": true,
          "description": "Output only. Details for an assertion step.",
          "$ref": "GoogleFirebaseAppdistroV1alphaAssertionDetails"
        }
      }
    },
    "AndroidxCrawlerOutputPoint": {
      "description": "Point for describing bounding boxes tap locations Top left is 0,0",
      "type": "object",
      "id": "AndroidxCrawlerOutputPoint",
      "properties": {
        "xCoordinate": {
          "type": "integer",
          "format": "int32"
        },
        "yCoordinate": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "GoogleFirebaseAppdistroV1ReleaseNotes": {
      "id": "GoogleFirebaseAppdistroV1ReleaseNotes",
      "properties": {
        "text": {
          "description": "The text of the release notes.",
          "type": "string"
        }
      },
      "description": "Notes that belong to a release.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaGoalDetails": {
      "description": "Details for a goal step.",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaGoalDetails",
      "properties": {
        "goalActions": {
          "description": "Output only. The actions taken by the AI while attempting to accomplish the goal.",
          "type": "array",
          "items": {
            "$ref": "GoogleFirebaseAppdistroV1alphaGoalAction"
          },
          "readOnly": true
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaTestCase": {
      "description": "AI test cases",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaTestCase",
      "properties": {
        "aiInstructions": {
          "description": "Optional. Instructions for AI driven test.",
          "$ref": "GoogleFirebaseAppdistroV1alphaAiInstructions"
        },
        "prerequisiteTestCase": {
          "description": "Optional. Test case that must be run before this test case.",
          "type": "string"
        },
        "dependentTestCases": {
          "description": "Output only. Other test cases that depend on this test case as a prerequisite.",
          "type": "array",
          "items": {
            "type": "string"
          },
          "readOnly": true
        },
        "name": {
          "description": "Identifier. The name of the test case resource. Format: `projects/{project_number}/apps/{app}/testCases/{test_case}`",
          "type": "string"
        },
        "createTime": {
          "format": "google-datetime",
          "readOnly": true,
          "description": "Output only. Timestamp when the test case was created",
          "type": "string"
        },
        "displayName": {
          "description": "Required. Display name of the test case.",
          "type": "string"
        }
      }
    },
    "GoogleFirebaseAppdistroV1alphaRoboCrawler": {
      "id": "GoogleFirebaseAppdistroV1alphaRoboCrawler",
      "properties": {
        "loginCredential": {
          "description": "Optional. Login credential for automated tests",
          "$ref": "GoogleFirebaseAppdistroV1alphaLoginCredential"
        },
        "aiInstructions": {
          "description": "Optional. Instructions for AI driven test",
          "$ref": "GoogleFirebaseAppdistroV1alphaAiInstructions"
        }
      },
      "description": "Configuration for Robo crawler",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaApp": {
      "id": "GoogleFirebaseAppdistroV1alphaApp",
      "properties": {
        "bundleId": {
          "description": "Bundle identifier",
          "type": "string"
        },
        "contactEmail": {
          "description": "Developer contact email for testers to reach out to about privacy or support issues.",
          "type": "string"
        },
        "aabCertificate": {
          "description": "App bundle test certificate generated for the app.",
          "$ref": "GoogleFirebaseAppdistroV1alphaAabCertificate"
        },
        "projectNumber": {
          "description": "Project number of the Firebase project, for example 300830567303.",
          "type": "string"
        },
        "aabState": {
          "description": "App bundle state. Only valid for android apps. The app_view field in the request must be set to FULL in order for this to be populated.",
          "type": "string",
          "enumDescriptions": [
            "Aab state unspecified",
            "App can receive app bundle uploads",
            "Firebase project is not linked to a Play developer account",
            "There is no app in linked Play developer account with the same bundle id",
            "The app in Play developer account is not in a published state",
            "Play App status is unavailable",
            "Play IAS terms not accepted"
          ],
          "enum": [
            "AAB_STATE_UNSPECIFIED",
            "ACTIVE",
            "PLAY_ACCOUNT_NOT_LINKED",
            "NO_APP_WITH_GIVEN_BUNDLE_ID_IN_PLAY_ACCOUNT",
            "APP_NOT_PUBLISHED",
            "AAB_STATE_UNAVAILABLE",
            "PLAY_IAS_TERMS_NOT_ACCEPTED"
          ]
        },
        "appId": {
          "description": "Firebase gmp app id",
          "type": "string"
        },
        "platform": {
          "description": "iOS or Android",
          "type": "string"
        }
      },
      "description": "An app.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaLoginCredential": {
      "id": "GoogleFirebaseAppdistroV1alphaLoginCredential",
      "properties": {
        "username": {
          "description": "Optional. Username for automated tests",
          "type": "string"
        },
        "fieldHints": {
          "description": "Optional. Hints to the crawler for identifying input fields",
          "$ref": "GoogleFirebaseAppdistroV1alphaLoginCredentialFieldHints"
        },
        "google": {
          "description": "Optional. Are these credentials for Google?",
          "type": "boolean"
        },
        "password": {
          "description": "Optional. Password for automated tests",
          "type": "string"
        }
      },
      "description": "Login credential for automated tests",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaGoalActionDebugInfo": {
      "id": "GoogleFirebaseAppdistroV1alphaGoalActionDebugInfo",
      "properties": {
        "annotatedScreenshotUri": {
          "description": "Output only. URI of the screenshot with elements labeled which was used by the agent.",
          "type": "string",
          "readOnly": true
        },
        "jsonUri": {
          "description": "Output only. Structured data explaining the agent's choice.",
          "type": "string",
          "readOnly": true
        }
      },
      "description": "Information to help the customer understand why the agent took this action.",
      "type": "object"
    },
    "GoogleFirebaseAppdistroV1alphaRelease": {
      "description": "Proto defining a release object",
      "type": "object",
      "id": "GoogleFirebaseAppdistroV1alphaRelease",
      "properties": {
        "distributedAt": {
          "description": "Timestamp when the release was created",
          "type": "string",
          "format": "google-datetime"
        },
        "buildVersion": {
          "description": "Release build version",
          "type": "string"
        },
        "id": {
          "description": "Release Id",
          "type": "string"
        },
        "lastActivityAt": {
          "description": "Last activity timestamp",
          "type": "string",
          "format": "google-datetime"
        },
        "instanceId": {
          "description": "Instance id of the release",
          "type": "string"
        },
        "releaseNotesSummary": {
          "description": "Release notes summary",
          "type": "string"
        },
        "openInvitationCount": {
          "format": "int32",
          "description": "Number of testers who have open invitations for the release",
          "type": "integer"
        },
        "displayVersion": {
          "description": "Release version",
          "type": "string"
        },
        "testerCount": {
          "description": "Count of testers added to the release",
          "type": "integer",
          "format": "int32"
        },
        "testerWithInstallCount": {
          "description": "Number of testers who have installed the release",
          "type": "integer",
          "format": "int32"
        },
        "receivedAt": {
          "description": "unused. ",
          "type": "string",
          "format": "google-datetime",
          "deprecated": true
        }
      }
    }
  },
  "fullyEncodeReservedExpansion": true
}
