{
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/firebase": {
          "description": "View and administer all your Firebase data and settings"
        },
        "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."
        }
      }
    }
  },
  "basePath": "",
  "description": "This service provides an API for mobile app developers to request deletion of user's crash reports.",
  "discoveryVersion": "v1",
  "fullyEncodeReservedExpansion": true,
  "protocol": "rest",
  "resources": {
    "projects": {
      "resources": {
        "apps": {
          "resources": {
            "reports": {
              "methods": {
                "list": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "httpMethod": "GET",
                  "parameterOrder": [
                    "parent"
                  ],
                  "id": "firebasecrashlytics.projects.apps.reports.list",
                  "parameters": {
                    "parent": {
                      "description": "Required. The firebase application. Format: \"projects/{project}/apps/{app_id}\".",
                      "required": true,
                      "type": "string",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "location": "path"
                    },
                    "view": {
                      "description": "Optional. Response view. If not set, defaults to `REPORT_VIEW_BASIC`. `REPORT_VIEW_FULL` is not supported for list operations.",
                      "location": "query",
                      "enumDescriptions": [
                        "The default / unset value. The API will default to `REPORT_VIEW_BASIC` view for `ListReports` and `REPORT_VIEW_FULL` for `GetReport`.",
                        "Only includes the report `display_name` and optional `usage`. This is the default view for `ListReports`.",
                        "Includes all fields on report. This is the default view for `GetReport`."
                      ],
                      "enum": [
                        "REPORT_VIEW_UNSPECIFIED",
                        "REPORT_VIEW_BASIC",
                        "REPORT_VIEW_FULL"
                      ],
                      "type": "string"
                    }
                  },
                  "description": "List all of the available reports.",
                  "response": {
                    "$ref": "ListReportsResponse"
                  },
                  "path": "v1alpha/{+parent}/reports",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/reports"
                },
                "get": {
                  "id": "firebasecrashlytics.projects.apps.reports.get",
                  "response": {
                    "$ref": "Report"
                  },
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/reports/{reportsId}",
                  "httpMethod": "GET",
                  "description": "Get a report with its computed results.",
                  "parameterOrder": [
                    "name"
                  ],
                  "parameters": {
                    "granularity": {
                      "location": "query",
                      "enum": [
                        "TIME_GRANULARITY_UNSPECIFIED",
                        "TIME_GRANULARITY_NONE",
                        "TIME_GRANULARITY_HOUR",
                        "TIME_GRANULARITY_DAY"
                      ],
                      "enumDescriptions": [
                        "Unknown.",
                        "Returns a single interval for the requested time range.",
                        "Hour.",
                        "Day."
                      ],
                      "type": "string",
                      "description": "Optional. The report response will contain one data point per time grain. If omitted, the report will contain a single data point for the complete interval."
                    },
                    "filter.issue.variantId": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. Only counts events for the given issue variant ID. This field matches [IssueVariant.id]."
                    },
                    "name": {
                      "required": true,
                      "type": "string",
                      "description": "Required. The report name. Format: \"projects/{project}/apps/{app_id}/reports/{report}\".",
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+/reports/[^/]+$"
                    },
                    "filter.version.displayNames": {
                      "type": "string",
                      "location": "query",
                      "repeated": true,
                      "description": "Only counts events in the given app version. This string matches Version.display_name. Format: \"display_version (build_version)\" e.g. \"1.2.3 (456)\"."
                    },
                    "filter.issue.errorTypes": {
                      "description": "Optional. Only counts events of the given error types. This field matches [Issue.error_type].",
                      "repeated": true,
                      "enumDescriptions": [
                        "Unknown.",
                        "Fatal crash event.",
                        "Non-fatal event, such as a caught Java exception or NSError on iOS.",
                        "Application not responding error, Android only."
                      ],
                      "type": "string",
                      "location": "query",
                      "enum": [
                        "ERROR_TYPE_UNSPECIFIED",
                        "FATAL",
                        "NON_FATAL",
                        "ANR"
                      ]
                    },
                    "filter.device.formFactors": {
                      "enumDescriptions": [
                        "Unknown.",
                        "Includes mobile phones, small foldables and other form factors not fitting the other categories.",
                        "Includes tablets and larger foldables.",
                        "Includes desktops, laptops, Chromebooks, etc.",
                        "Includes televisions and set-tops.",
                        "Includes both watches and other wearables."
                      ],
                      "type": "string",
                      "description": "Only counts events from devices with the given form factor (e.g. phone or tablet).",
                      "location": "query",
                      "enum": [
                        "FORM_FACTOR_UNSPECIFIED",
                        "PHONE",
                        "TABLET",
                        "DESKTOP",
                        "TV",
                        "WATCH"
                      ],
                      "repeated": true
                    },
                    "metricsMode": {
                      "description": "Optional. Controls whether metrics are raw observed values (mobile and web) or extrapolated values (web only). If omitted, defaults to OBSERVED.",
                      "enumDescriptions": [
                        "Unknown.",
                        "Raw counts of the events, sessions, and users that were actually collected.",
                        "Web only. Estimated event counts based on the per-session sampling rate recorded on each event."
                      ],
                      "enum": [
                        "METRICS_MODE_UNSPECIFIED",
                        "METRICS_MODE_OBSERVED",
                        "METRICS_MODE_EXTRAPOLATED"
                      ],
                      "location": "query",
                      "type": "string"
                    },
                    "filter.interval.startTime": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. Inclusive start of the interval. If specified, a Timestamp matching this interval will have to be the same or after the start.",
                      "format": "google-datetime"
                    },
                    "filter.operatingSystem.displayNames": {
                      "type": "string",
                      "description": "Only counts events in the given operating system and version. This string matches OperatingSystem.display_name. Format: \"osName (osVersion)\" e.g. \"Android (11)\". or just \"osName\" for all versions, e.g. simply \"iPadOS\".",
                      "location": "query",
                      "repeated": true
                    },
                    "filter.interval.endTime": {
                      "description": "Optional. Exclusive end of the interval. If specified, a Timestamp matching this interval will have to be before the end.",
                      "format": "google-datetime",
                      "type": "string",
                      "location": "query"
                    },
                    "filter.issue.id": {
                      "type": "string",
                      "description": "Optional. Only counts events in the given issue ID. This field matches [Issue.id].",
                      "location": "query"
                    },
                    "filter.issue.signals": {
                      "type": "string",
                      "location": "query",
                      "enum": [
                        "SIGNAL_UNSPECIFIED",
                        "SIGNAL_EARLY",
                        "SIGNAL_FRESH",
                        "SIGNAL_REGRESSED",
                        "SIGNAL_REPETITIVE"
                      ],
                      "enumDescriptions": [
                        "Default.",
                        "Indicates an issue that is impacting end users early in the app session.",
                        "Indicates newly detected issues.",
                        "Indicates previously closed issues which have been detected again.",
                        "Indicates issues impacting some end users multiple times."
                      ],
                      "repeated": true,
                      "description": "Optional. Only returns issues currently marked with the given signals. This field matches [Issue.signals.signal]."
                    },
                    "filter.issue.content": {
                      "description": "Optional. A space separated list of filter terms matched against the contents of the issue. Contents include the title and the stack trace. Matches must begin at alphanumeric tokens, i.e., 'util.Sorted' matches 'java.util.SortedSet' but not 'myutil.SortedArray'. The filter matches if all filter terms match. All non-alphanumeric characters are ignored for matching. Filtering is assumed to be prefix-search and order-independent unless phrases are surrounded by \"\". Any terms contained in quotes are searched using exact-match (given filter term \"foo\", we will not return \"foobar\"), and must appear in the order given exactly. To get order-dependence but prefix-search, use a * within the quotes (\"abc foo*\" will match \"abc foobar\", but not \"foo abc\" \"abcd foobar\", or \"abc xyz foobar\").",
                      "type": "string",
                      "location": "query"
                    },
                    "filter.issue.state": {
                      "enum": [
                        "STATE_UNSPECIFIED",
                        "OPEN",
                        "CLOSED",
                        "MUTED"
                      ],
                      "enumDescriptions": [
                        "Unknown.",
                        "Ongoing issue.",
                        "Issue resolved.",
                        "Issue muted. No alerts will be fired for this issue."
                      ],
                      "type": "string",
                      "description": "Optional. Deprecated: Prefer `states` field. Only includes events for issues with the given issue state. Only available for `topIssues` reports.",
                      "location": "query",
                      "deprecated": true
                    },
                    "pageSize": {
                      "description": "Optional. The maximum number of result groups to return. The maximum value is 100; values above 100 will be coerced to 100. If omitted, defaults to 25.",
                      "type": "integer",
                      "format": "int32",
                      "location": "query"
                    },
                    "filter.browser.displayNames": {
                      "description": "Optional. Only count events from the given browser. This string matches Browser.display_name. Format: \"name (display_version)\" e.g. \"Chrome (123)\", or just \"name\" for all possible versions, e.g. simply \"Chrome\".",
                      "type": "string",
                      "repeated": true,
                      "location": "query"
                    },
                    "pageToken": {
                      "location": "query",
                      "description": "Optional. A page token, received from a previous call. The page token is only valid for the exact same set of filters, which must also be sent in subsequent requests. This token is valid for 10 minutes after the first request.",
                      "type": "string"
                    },
                    "filter.device.displayNames": {
                      "description": "Only counts events from the given Device model. This string matches Device.display_name. Format: \"manufacturer (model)\" e.g. \"Google (Pixel 6)\", or just \"manufacturer\" for all possible models, e.g. simply \"Google\". Note that a device's marketing_name field can not be used for filtering.",
                      "repeated": true,
                      "type": "string",
                      "location": "query"
                    },
                    "filter.issue.states": {
                      "repeated": true,
                      "type": "string",
                      "enum": [
                        "STATE_UNSPECIFIED",
                        "OPEN",
                        "CLOSED",
                        "MUTED"
                      ],
                      "location": "query",
                      "enumDescriptions": [
                        "Unknown.",
                        "Ongoing issue.",
                        "Issue resolved.",
                        "Issue muted. No alerts will be fired for this issue."
                      ],
                      "description": "Optional. Only includes events for issues with the given issue states. Only available for `topIssues` reports."
                    },
                    "view": {
                      "enumDescriptions": [
                        "The default / unset value. The API will default to `REPORT_VIEW_BASIC` view for `ListReports` and `REPORT_VIEW_FULL` for `GetReport`.",
                        "Only includes the report `display_name` and optional `usage`. This is the default view for `ListReports`.",
                        "Includes all fields on report. This is the default view for `GetReport`."
                      ],
                      "description": "Optional. Response view. If not set, defaults to `REPORT_VIEW_FULL`.",
                      "location": "query",
                      "enum": [
                        "REPORT_VIEW_UNSPECIFIED",
                        "REPORT_VIEW_BASIC",
                        "REPORT_VIEW_FULL"
                      ],
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "path": "v1alpha/{+name}"
                }
              }
            },
            "issues": {
              "resources": {
                "notes": {
                  "methods": {
                    "create": {
                      "parameters": {
                        "parent": {
                          "description": "Required. The parent resource where this note will be created. Format: \"projects/{project}/apps/{app}/issues/{issue}\".",
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/issues/[^/]+$",
                          "type": "string",
                          "location": "path"
                        }
                      },
                      "id": "firebasecrashlytics.projects.apps.issues.notes.create",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform",
                        "https://www.googleapis.com/auth/firebase"
                      ],
                      "httpMethod": "POST",
                      "path": "v1alpha/{+parent}/notes",
                      "response": {
                        "$ref": "Note"
                      },
                      "description": "Create a new note for an issue.",
                      "request": {
                        "$ref": "Note"
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/issues/{issuesId}/notes"
                    },
                    "delete": {
                      "httpMethod": "DELETE",
                      "description": "Delete a note by its name.",
                      "parameters": {
                        "name": {
                          "location": "path",
                          "type": "string",
                          "description": "Required. The name of the note to delete. Format: projects/{project}/apps/{app}/issues/{issue}/notes/{note}.",
                          "required": true,
                          "pattern": "^projects/[^/]+/apps/[^/]+/issues/[^/]+/notes/[^/]+$"
                        }
                      },
                      "id": "firebasecrashlytics.projects.apps.issues.notes.delete",
                      "response": {
                        "$ref": "Empty"
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "path": "v1alpha/{+name}",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform",
                        "https://www.googleapis.com/auth/firebase"
                      ],
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/issues/{issuesId}/notes/{notesId}"
                    },
                    "list": {
                      "parameterOrder": [
                        "parent"
                      ],
                      "httpMethod": "GET",
                      "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/issues/{issuesId}/notes",
                      "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform",
                        "https://www.googleapis.com/auth/firebase"
                      ],
                      "response": {
                        "$ref": "ListNotesResponse"
                      },
                      "parameters": {
                        "pageToken": {
                          "location": "query",
                          "type": "string",
                          "description": "Optional. A page token, received from a previous calls."
                        },
                        "parent": {
                          "pattern": "^projects/[^/]+/apps/[^/]+/issues/[^/]+$",
                          "type": "string",
                          "required": true,
                          "description": "Required. The issue the notes belongs to. Format: \"projects/{project}/apps/{app}/issues/{issue}\".",
                          "location": "path"
                        },
                        "pageSize": {
                          "location": "query",
                          "format": "int32",
                          "description": "Optional. The maximum number of notes per page. If omitted, defaults to 10.",
                          "type": "integer"
                        }
                      },
                      "path": "v1alpha/{+parent}/notes",
                      "id": "firebasecrashlytics.projects.apps.issues.notes.list",
                      "description": "List all notes for a certain issue, sorted in descending order by timestamp."
                    }
                  }
                }
              },
              "methods": {
                "batchUpdate": {
                  "id": "firebasecrashlytics.projects.apps.issues.batchUpdate",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "BatchUpdateIssuesRequest"
                  },
                  "parameters": {
                    "parent": {
                      "location": "path",
                      "description": "Required. The parent resource shared by all issues being updated. Format: projects/{project}/apps/{app}. If this is set, the parent field in the UpdateIssueRequest messages must either be empty or match this field.",
                      "type": "string",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "required": true
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "parameterOrder": [
                    "parent"
                  ],
                  "path": "v1alpha/{+parent}/issues:batchUpdate",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/issues:batchUpdate",
                  "description": "Change the state of a group of issues. This method is not atomic, so partial failures can occur. In the event of a partial failure, the request will fail and you will need to call `GetIssue` to see which issues were not updated.",
                  "response": {
                    "$ref": "BatchUpdateIssuesResponse"
                  }
                },
                "patch": {
                  "id": "firebasecrashlytics.projects.apps.issues.patch",
                  "response": {
                    "$ref": "Issue"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "parameterOrder": [
                    "name"
                  ],
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/issues/{issuesId}",
                  "description": "Change the state of an issue.",
                  "httpMethod": "PATCH",
                  "request": {
                    "$ref": "Issue"
                  },
                  "parameters": {
                    "name": {
                      "type": "string",
                      "pattern": "^projects/[^/]+/apps/[^/]+/issues/[^/]+$",
                      "required": true,
                      "location": "path",
                      "description": "Required. Output only. Immutable. Identifier. The name of the issue resource. Format: \"projects/{project}/apps/{app}/issues/{issue}\"."
                    },
                    "updateMask": {
                      "type": "string",
                      "location": "query",
                      "format": "google-fieldmask",
                      "description": "Optional. The list of Issue fields to update. Currently only \"state\" is mutable."
                    }
                  },
                  "path": "v1alpha/{+name}"
                },
                "get": {
                  "parameters": {
                    "name": {
                      "type": "string",
                      "location": "path",
                      "description": "Required. The name of the issue to retrieve. Format: \"projects/{project}/apps/{app}/issues/{issue}\".",
                      "required": true,
                      "pattern": "^projects/[^/]+/apps/[^/]+/issues/[^/]+$"
                    }
                  },
                  "path": "v1alpha/{+name}",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/issues/{issuesId}",
                  "id": "firebasecrashlytics.projects.apps.issues.get",
                  "description": "Retrieve an issue.",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "Issue"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "parameterOrder": [
                    "name"
                  ]
                }
              }
            },
            "events": {
              "methods": {
                "list": {
                  "description": "List the events for an issue matching filter criteria, sorted in descending order by timestamp.",
                  "parameters": {
                    "readMask": {
                      "type": "string",
                      "description": "Optional. The list of Event fields to include in the response. If omitted, the full event is returned.",
                      "format": "google-fieldmask",
                      "location": "query"
                    },
                    "filter.issue.content": {
                      "type": "string",
                      "description": "Optional. A space separated list of filter terms matched against the contents of the issue. Contents include the title and the stack trace. Matches must begin at alphanumeric tokens, i.e., 'util.Sorted' matches 'java.util.SortedSet' but not 'myutil.SortedArray'. The filter matches if all filter terms match. All non-alphanumeric characters are ignored for matching. Filtering is assumed to be prefix-search and order-independent unless phrases are surrounded by \"\". Any terms contained in quotes are searched using exact-match (given filter term \"foo\", we will not return \"foobar\"), and must appear in the order given exactly. To get order-dependence but prefix-search, use a * within the quotes (\"abc foo*\" will match \"abc foobar\", but not \"foo abc\" \"abcd foobar\", or \"abc xyz foobar\").",
                      "location": "query"
                    },
                    "filter.issue.signals": {
                      "location": "query",
                      "description": "Optional. Only returns issues currently marked with the given signals. This field matches [Issue.signals.signal].",
                      "type": "string",
                      "enumDescriptions": [
                        "Default.",
                        "Indicates an issue that is impacting end users early in the app session.",
                        "Indicates newly detected issues.",
                        "Indicates previously closed issues which have been detected again.",
                        "Indicates issues impacting some end users multiple times."
                      ],
                      "repeated": true,
                      "enum": [
                        "SIGNAL_UNSPECIFIED",
                        "SIGNAL_EARLY",
                        "SIGNAL_FRESH",
                        "SIGNAL_REGRESSED",
                        "SIGNAL_REPETITIVE"
                      ]
                    },
                    "filter.issue.errorTypes": {
                      "enumDescriptions": [
                        "Unknown.",
                        "Fatal crash event.",
                        "Non-fatal event, such as a caught Java exception or NSError on iOS.",
                        "Application not responding error, Android only."
                      ],
                      "description": "Optional. Only counts events of the given error types. This field matches [Issue.error_type].",
                      "location": "query",
                      "type": "string",
                      "repeated": true,
                      "enum": [
                        "ERROR_TYPE_UNSPECIFIED",
                        "FATAL",
                        "NON_FATAL",
                        "ANR"
                      ]
                    },
                    "parent": {
                      "type": "string",
                      "required": true,
                      "description": "Required. The Firebase application. Format: \"projects/{project}/apps/{app_id}\".",
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "location": "path"
                    },
                    "filter.interval.startTime": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. Inclusive start of the interval. If specified, a Timestamp matching this interval will have to be the same or after the start.",
                      "format": "google-datetime"
                    },
                    "filter.browser.displayNames": {
                      "description": "Optional. Only count events from the given browser. This string matches Browser.display_name. Format: \"name (display_version)\" e.g. \"Chrome (123)\", or just \"name\" for all possible versions, e.g. simply \"Chrome\".",
                      "type": "string",
                      "repeated": true,
                      "location": "query"
                    },
                    "filter.issue.id": {
                      "type": "string",
                      "description": "Optional. Only counts events in the given issue ID. This field matches [Issue.id].",
                      "location": "query"
                    },
                    "filter.device.displayNames": {
                      "location": "query",
                      "description": "Only counts events from the given Device model. This string matches Device.display_name. Format: \"manufacturer (model)\" e.g. \"Google (Pixel 6)\", or just \"manufacturer\" for all possible models, e.g. simply \"Google\". Note that a device's marketing_name field can not be used for filtering.",
                      "repeated": true,
                      "type": "string"
                    },
                    "pageToken": {
                      "type": "string",
                      "location": "query",
                      "description": "Optional. A page token, received from a previous calls."
                    },
                    "filterExpression": {
                      "type": "string",
                      "description": "Optional. Filters events by custom keys (https://firebase.google.com/docs/crashlytics/customize-crash-reports#add-keys). Supported forms: * Equality: `custom_keys.level = \"vip\"` or `custom_keys.level:\"vip\"` * Presence: `custom_keys.level:*` * OR across values of one key: `custom_keys.level = \"vip\" OR custom_keys.level = \"enterprise\"` * AND across different keys: `custom_keys.level = \"vip\" AND custom_keys.region = \"us\"` Keys are case-sensitive. Keys and values containing spaces must be double-quoted, for example `custom_keys.\"app state\" = \"background\"`. OR across different keys, repeating a key within an AND, NOT, and comparators other than `=` and `:` are rejected with INVALID_ARGUMENT. Wildcards are not supported in values; use `custom_keys.:*` to match events that set a key to any value. This filter expression applies in addition to the `filter` field above. The syntax is a subset of AIP-160 (https://google.aip.dev/160).",
                      "location": "query"
                    },
                    "pageSize": {
                      "type": "integer",
                      "location": "query",
                      "description": "Optional. The maximum number of events per page. If omitted, defaults to 10.",
                      "format": "int32"
                    },
                    "filter.device.formFactors": {
                      "location": "query",
                      "enumDescriptions": [
                        "Unknown.",
                        "Includes mobile phones, small foldables and other form factors not fitting the other categories.",
                        "Includes tablets and larger foldables.",
                        "Includes desktops, laptops, Chromebooks, etc.",
                        "Includes televisions and set-tops.",
                        "Includes both watches and other wearables."
                      ],
                      "description": "Only counts events from devices with the given form factor (e.g. phone or tablet).",
                      "type": "string",
                      "enum": [
                        "FORM_FACTOR_UNSPECIFIED",
                        "PHONE",
                        "TABLET",
                        "DESKTOP",
                        "TV",
                        "WATCH"
                      ],
                      "repeated": true
                    },
                    "filter.interval.endTime": {
                      "location": "query",
                      "type": "string",
                      "description": "Optional. Exclusive end of the interval. If specified, a Timestamp matching this interval will have to be before the end.",
                      "format": "google-datetime"
                    },
                    "filter.issue.states": {
                      "location": "query",
                      "enumDescriptions": [
                        "Unknown.",
                        "Ongoing issue.",
                        "Issue resolved.",
                        "Issue muted. No alerts will be fired for this issue."
                      ],
                      "enum": [
                        "STATE_UNSPECIFIED",
                        "OPEN",
                        "CLOSED",
                        "MUTED"
                      ],
                      "repeated": true,
                      "description": "Optional. Only includes events for issues with the given issue states. Only available for `topIssues` reports.",
                      "type": "string"
                    },
                    "filter.operatingSystem.displayNames": {
                      "description": "Only counts events in the given operating system and version. This string matches OperatingSystem.display_name. Format: \"osName (osVersion)\" e.g. \"Android (11)\". or just \"osName\" for all versions, e.g. simply \"iPadOS\".",
                      "location": "query",
                      "type": "string",
                      "repeated": true
                    },
                    "filter.issue.state": {
                      "type": "string",
                      "description": "Optional. Deprecated: Prefer `states` field. Only includes events for issues with the given issue state. Only available for `topIssues` reports.",
                      "location": "query",
                      "deprecated": true,
                      "enum": [
                        "STATE_UNSPECIFIED",
                        "OPEN",
                        "CLOSED",
                        "MUTED"
                      ],
                      "enumDescriptions": [
                        "Unknown.",
                        "Ongoing issue.",
                        "Issue resolved.",
                        "Issue muted. No alerts will be fired for this issue."
                      ]
                    },
                    "filter.version.displayNames": {
                      "repeated": true,
                      "type": "string",
                      "description": "Only counts events in the given app version. This string matches Version.display_name. Format: \"display_version (build_version)\" e.g. \"1.2.3 (456)\".",
                      "location": "query"
                    },
                    "filter.issue.variantId": {
                      "type": "string",
                      "location": "query",
                      "description": "Optional. Only counts events for the given issue variant ID. This field matches [IssueVariant.id]."
                    }
                  },
                  "id": "firebasecrashlytics.projects.apps.events.list",
                  "httpMethod": "GET",
                  "response": {
                    "$ref": "ListEventsResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "parameterOrder": [
                    "parent"
                  ],
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/events",
                  "path": "v1alpha/{+parent}/events"
                },
                "batchGet": {
                  "parameters": {
                    "parent": {
                      "pattern": "^projects/[^/]+/apps/[^/]+$",
                      "description": "Required. The firebase application. Format: \"projects/{project}/apps/{app_id}\".",
                      "type": "string",
                      "location": "path",
                      "required": true
                    },
                    "names": {
                      "location": "query",
                      "description": "Required. The resource names of the desired events. A maximum of 100 events can be retrieved in a batch. Format: \"projects/{project}/apps/{app_id}/events/{event_id}\". The app_id and event_id are required, but project may be \"-\" to conserve space in long URIs.",
                      "repeated": true,
                      "type": "string"
                    },
                    "readMask": {
                      "description": "Optional. The list of Event fields to include in the response. If omitted, the full event is returned.",
                      "format": "google-fieldmask",
                      "type": "string",
                      "location": "query"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "id": "firebasecrashlytics.projects.apps.events.batchGet",
                  "response": {
                    "$ref": "BatchGetEventsResponse"
                  },
                  "path": "v1alpha/{+parent}/events:batchGet",
                  "httpMethod": "GET",
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/events:batchGet",
                  "parameterOrder": [
                    "parent"
                  ],
                  "description": "Fetch a batch of up to 100 events by name."
                }
              }
            },
            "users": {
              "methods": {
                "deleteCrashReports": {
                  "scopes": [
                    "https://www.googleapis.com/auth/cloud-platform",
                    "https://www.googleapis.com/auth/firebase"
                  ],
                  "flatPath": "v1alpha/projects/{projectsId}/apps/{appsId}/users/{usersId}/crashReports",
                  "path": "v1alpha/{+name}",
                  "response": {
                    "$ref": "DeleteUserCrashReportsResponse"
                  },
                  "httpMethod": "DELETE",
                  "parameterOrder": [
                    "name"
                  ],
                  "id": "firebasecrashlytics.projects.apps.users.deleteCrashReports",
                  "description": "Enqueues a request to permanently remove crash reports associated with the specified user. All reports belonging to the specified user will be deleted typically within 24 hours of receiving the crash report.",
                  "parameters": {
                    "name": {
                      "location": "path",
                      "pattern": "^projects/[^/]+/apps/[^/]+/users/[^/]+/crashReports$",
                      "type": "string",
                      "required": true,
                      "description": "Required. Resource name for user reports, in the format: projects/ PROJECT_IDENTIFIER/apps/APP_ID/users/USER_ID/crashReports - PROJECT_IDENTIFIER: The Firebase project's project number (recommended) or its project ID. Learn more about using project identifiers in Google's [AIP 2510 standard](https://google.aip.dev/cloud/2510). - APP_ID: The globally unique, Firebase-assigned identifier for the Firebase App. This is not your package name or bundle ID. Learn how to [find your app ID](https://firebase.google.com/support/faq/#find-app-id). - USER_ID: The user ID set using the Crashlytics SDK. Learn how to [set user identifiers](https://firebase.google.com/docs/crashlytics/customize-crash-reports#set-user-ids)."
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "batchPath": "batch",
  "title": "Firebase Crashlytics API",
  "name": "firebasecrashlytics",
  "servicePath": "",
  "baseUrl": "https://firebasecrashlytics.googleapis.com/",
  "version_module": true,
  "revision": "20261012",
  "ownerName": "Google",
  "rootUrl": "https://firebasecrashlytics.googleapis.com/",
  "mtlsRootUrl": "https://firebasecrashlytics.mtls.googleapis.com/",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "version": "v1alpha",
  "parameters": {
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "quotaUser": {
      "location": "query",
      "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.",
      "type": "string"
    },
    "prettyPrint": {
      "location": "query",
      "default": "true",
      "type": "boolean",
      "description": "Returns response with indentations and line breaks."
    },
    "uploadType": {
      "location": "query",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "type": "string"
    },
    "alt": {
      "type": "string",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "default": "json",
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query",
      "description": "Data format for response."
    },
    "$.xgafv": {
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query",
      "type": "string",
      "enum": [
        "1",
        "2"
      ],
      "description": "V1 error format."
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "access_token": {
      "description": "OAuth access token.",
      "location": "query",
      "type": "string"
    },
    "key": {
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query",
      "type": "string"
    },
    "callback": {
      "location": "query",
      "description": "JSONP",
      "type": "string"
    }
  },
  "canonicalName": "Firebase Crashlytics",
  "ownerDomain": "google.com",
  "documentationLink": "https://firebase.google.com/docs/crashlytics",
  "id": "firebasecrashlytics:v1alpha",
  "schemas": {
    "User": {
      "id": "User",
      "description": "Developer-provided end user identifiers.",
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "description": "User id if provided by the app developer."
        }
      }
    },
    "ListEventsResponse": {
      "id": "ListEventsResponse",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "A pagination token to retrieve the next page of events. The next page will have earlier or later events depending on the request's ordering. If this field is not present, there are no subsequent events."
        },
        "events": {
          "items": {
            "$ref": "Event"
          },
          "description": "Returns one element per event, in descending order the by event timestamp.",
          "type": "array"
        }
      },
      "description": "Response message for the ListEvents method."
    },
    "Exception": {
      "id": "Exception",
      "properties": {
        "nested": {
          "description": "True for all but the last-thrown exception (i.e. the first record).",
          "type": "boolean"
        },
        "subtitle": {
          "type": "string",
          "description": "The subtitle of the exception."
        },
        "title": {
          "type": "string",
          "description": "The title of the exception."
        },
        "exceptionMessage": {
          "description": "A message associated with the exception.",
          "type": "string"
        },
        "frames": {
          "items": {
            "$ref": "Frame"
          },
          "type": "array",
          "description": "The frames in the exception's stacktrace."
        },
        "blamed": {
          "description": "True when the Crashlytics analysis has determined that this thread is where the fault occurred.",
          "type": "boolean"
        },
        "type": {
          "description": "The exception type e.g. java.lang.IllegalStateException.",
          "type": "string"
        }
      },
      "description": "A Java or Javascript exception and its stacktrace. Only from Android or web apps.",
      "type": "object"
    },
    "BatchUpdateIssuesResponse": {
      "type": "object",
      "properties": {
        "issues": {
          "items": {
            "$ref": "Issue"
          },
          "description": "Issues updated in the same order as in BatchUpdateIssuesRequest.",
          "type": "array"
        }
      },
      "description": "Response message for the BatchUpdateIssues method.",
      "id": "BatchUpdateIssuesResponse"
    },
    "WebMetricsGroup": {
      "description": "Represents a grouping for metrics specific to web applications.",
      "id": "WebMetricsGroup",
      "properties": {
        "id": {
          "type": "string",
          "description": "The id of the web metrics group"
        }
      },
      "type": "object"
    },
    "Empty": {
      "id": "Empty",
      "type": "object",
      "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); }",
      "properties": {}
    },
    "FirebaseSessionEvent": {
      "type": "object",
      "properties": {
        "firstSessionId": {
          "description": "The identifier of the first session since the last cold start. This id and the session_id will be the same for app launches.",
          "type": "string"
        },
        "operatingSystem": {
          "$ref": "OperatingSystem",
          "description": "Operating system and version."
        },
        "eventTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "The start timestamp for the session event."
        },
        "version": {
          "description": "Mobile application version numbers.",
          "$ref": "Version"
        },
        "sessionIndex": {
          "description": "Indicates the number of sessions since the last cold start.",
          "format": "int32",
          "type": "integer"
        },
        "firebaseInstallationId": {
          "type": "string",
          "description": "Uniquely identifies a device with Firebase apps installed."
        },
        "device": {
          "$ref": "Device",
          "description": "Mobile device metadata."
        },
        "sessionId": {
          "description": "Unique identifier for the Firebase session.",
          "type": "string"
        },
        "eventType": {
          "enum": [
            "SESSION_EVENT_TYPE_UNKNOWN",
            "SESSION_START"
          ],
          "description": "Session event type. The SDK only supports SESSION_START events at this time.",
          "type": "string",
          "enumDescriptions": [
            "Unknown.",
            "Application session started."
          ]
        }
      },
      "id": "FirebaseSessionEvent",
      "description": "Sessions recorded by the Firebase App Quality Sessions SDK."
    },
    "IssueVariant": {
      "properties": {
        "uri": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Provides a link to the variant on the Firebase console. When this variant is obtained as part of a Report, then the link will be configured with the same time interval and filters as the request."
        },
        "sampleEvent": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The resource name for a sample event in this variant."
        },
        "id": {
          "description": "Output only. Immutable. Distinct identifier for the variant.",
          "readOnly": true,
          "type": "string"
        }
      },
      "id": "IssueVariant",
      "type": "object",
      "description": "A variant is a subgroup of an issue where all events have very similar stack traces. Issues may contain one or more variants."
    },
    "Storage": {
      "id": "Storage",
      "description": "Mobile device disk/flash usage. Not reported for all devices.",
      "properties": {
        "free": {
          "type": "string",
          "format": "int64",
          "description": "Bytes free."
        },
        "used": {
          "type": "string",
          "description": "Bytes used.",
          "format": "int64"
        }
      },
      "type": "object"
    },
    "BatchGetEventsResponse": {
      "properties": {
        "events": {
          "type": "array",
          "description": "The list of retrieved events.",
          "items": {
            "$ref": "Event"
          }
        }
      },
      "description": "Response message for the BatchGetEvents method.",
      "type": "object",
      "id": "BatchGetEventsResponse"
    },
    "ReportGroup": {
      "properties": {
        "metrics": {
          "description": "Scalar metrics will contain a single object covering the entire interval, while time-dimensioned graphs will contain one per time grain.",
          "type": "array",
          "items": {
            "$ref": "IntervalMetrics"
          }
        },
        "version": {
          "$ref": "Version",
          "description": "Version metrics group."
        },
        "browser": {
          "description": "Browser metrics group.",
          "$ref": "Browser"
        },
        "customAttribute": {
          "description": "Custom attribute metrics group.",
          "$ref": "CustomAttribute"
        },
        "subgroups": {
          "items": {
            "$ref": "ReportGroup"
          },
          "description": "When applicable, this field contains additional nested groupings. For example, events can be grouped by operating system and by operating system version.",
          "type": "array"
        },
        "operatingSystem": {
          "$ref": "OperatingSystem",
          "description": "Operating system metrics group."
        },
        "device": {
          "description": "Device metrics group.",
          "$ref": "Device"
        },
        "variant": {
          "description": "Issue variant metrics group.",
          "$ref": "IssueVariant"
        },
        "webMetricsGroup": {
          "$ref": "WebMetricsGroup",
          "description": "Web metrics group."
        },
        "issue": {
          "$ref": "Issue",
          "description": "Issue metrics group."
        }
      },
      "description": "A group of results in an EventReport. In any report, the group_parent field is strictly the same type for all of the groups in any collection.",
      "id": "ReportGroup",
      "type": "object"
    },
    "Version": {
      "properties": {
        "displayVersion": {
          "description": "Readable version string, e.g. \"1.2.3\". On Android, strictly the same as \"version name\". On iOS, strictly the same as \"version number\" or CFBundleShortVersionString.",
          "type": "string"
        },
        "buildVersion": {
          "description": "Mobile only. One display_version can have many build_version. On Android, strictly the same as \"version code\". On iOS, strictly the same as \"build number\" or CFBundleVersion.",
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "Compound readable string containing both display and build versions. Format: \"display_version (build_version)\" e.g. \"1.2.3 (456)\". This string can be used for filtering with the VersionFilter.display_name field."
        },
        "tracks": {
          "description": "Indicates releases which have artifacts that are currently available in the Play Store to the target audience of the track. Versions may be available in multiple tracks.",
          "items": {
            "$ref": "PlayTrack"
          },
          "type": "array"
        }
      },
      "description": "Application software version.",
      "id": "Version",
      "type": "object"
    },
    "PlayTrack": {
      "description": "Describes a release track in the Play Developer Console.",
      "id": "PlayTrack",
      "properties": {
        "title": {
          "type": "string",
          "description": "User-generated or auto-generated name of the track. PROD and INTERNAL track types always have auto-generated names, e.g. \"prod\" and \"internal\" respectively. Tracks of type EARLY_ACCESS always have a user-generated name. Other track types do not have any guarantees, might have user-generated or auto-generated names."
        },
        "type": {
          "enum": [
            "TRACK_TYPE_UNSPECIFIED",
            "TRACK_TYPE_PROD",
            "TRACK_TYPE_INTERNAL",
            "TRACK_TYPE_OPEN_TESTING",
            "TRACK_TYPE_CLOSED_TESTING",
            "TRACK_TYPE_EARLY_ACCESS"
          ],
          "description": "The type of track (prod, internal, etc...).",
          "enumDescriptions": [
            "Unknown.",
            "Production.",
            "Internal testing.",
            "Open testing.",
            "Closed testing.",
            "Early access."
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "Error": {
      "id": "Error",
      "description": "A non-fatal error and its stacktrace, only from Apple apps.",
      "type": "object",
      "properties": {
        "code": {
          "format": "int64",
          "type": "string",
          "description": "Error code associated with the app's custom logged NSError."
        },
        "frames": {
          "items": {
            "$ref": "Frame"
          },
          "type": "array",
          "description": "The frames in the error's stacktrace."
        },
        "queue": {
          "description": "The queue on which the thread was running.",
          "type": "string"
        },
        "blamed": {
          "description": "True when the Crashlytics analysis has determined that the stacktrace in this error is where the fault occurred.",
          "type": "boolean"
        },
        "title": {
          "description": "The title of the error.",
          "type": "string"
        },
        "subtitle": {
          "description": "The subtitle of the error.",
          "type": "string"
        }
      }
    },
    "ListNotesResponse": {
      "type": "object",
      "id": "ListNotesResponse",
      "description": "Response message for the ListNotes method.",
      "properties": {
        "nextPageToken": {
          "description": "A pagination token to retrieve the next page of notes. If this field is not present, there are no subsequent notes.",
          "type": "string"
        },
        "notes": {
          "description": "Returns notes ordered descending by the timestamp.",
          "items": {
            "$ref": "Note"
          },
          "type": "array"
        }
      }
    },
    "Event": {
      "id": "Event",
      "type": "object",
      "properties": {
        "issue": {
          "$ref": "Issue",
          "description": "Details for the [Issue] assigned to this [Event]."
        },
        "memory": {
          "description": "Mobile device memory usage.",
          "$ref": "Memory"
        },
        "browser": {
          "$ref": "Browser",
          "description": "Browser and version."
        },
        "version": {
          "$ref": "Version",
          "description": "Mobile application version."
        },
        "blameFrame": {
          "description": "The stack trace frame blamed by Crashlytics processing. May not be present in future analyzer.",
          "$ref": "Frame"
        },
        "installationUuid": {
          "description": "Unique identifier for the device-app installation. This field is used to compute the unique number of impacted users.",
          "type": "string"
        },
        "buildStamp": {
          "type": "string",
          "description": "Metadata provided by the app's build system, including version control repository info."
        },
        "receivedTime": {
          "description": "Server timestamp that the event was received by Crashlytics.",
          "format": "google-datetime",
          "type": "string"
        },
        "crashlyticsSdkVersion": {
          "type": "string",
          "description": "Crashlytics SDK version."
        },
        "issueVariant": {
          "description": "Details for the [IssueVariant] assigned to this [Event].",
          "$ref": "IssueVariant"
        },
        "storage": {
          "description": "Mobile device disk/flash usage.",
          "$ref": "Storage"
        },
        "exceptions": {
          "items": {
            "$ref": "Exception"
          },
          "description": "Android and web only. Exceptions that occurred during this event. Nested exceptions are presented in reverse chronological order, so that the last record is the first exception thrown.",
          "type": "array"
        },
        "issueSubtitle": {
          "description": "The subtitle of the issue in which the event was grouped. This is usually a symbol or an exception message.",
          "type": "string"
        },
        "eventId": {
          "readOnly": true,
          "description": "Output only. Immutable. The unique event identifier is assigned during processing.",
          "type": "string"
        },
        "routePath": {
          "type": "string",
          "description": "Output only. Web only. The route path of the web application when the event occurred, excluding query parameters and fragment.",
          "readOnly": true
        },
        "logs": {
          "description": "Log messages recorded by the developer during the session.",
          "type": "array",
          "items": {
            "$ref": "Log"
          }
        },
        "threads": {
          "type": "array",
          "description": "Application threads present at the time the event was recorded. Each contains a stacktrace. One thread will be blamed for the error.",
          "items": {
            "$ref": "Thread"
          }
        },
        "name": {
          "readOnly": true,
          "description": "Required. Output only. Immutable. Identifier. The name of the event resource. Format: \"projects/{project}/apps/{app_id}/events/{event}\".",
          "type": "string"
        },
        "breadcrumbs": {
          "description": "Analytics events recorded by the analytics SDK during the session.",
          "type": "array",
          "items": {
            "$ref": "Breadcrumb"
          }
        },
        "issueTitle": {
          "type": "string",
          "description": "The title of the issue in which the event was grouped. This is usually a source file or method name."
        },
        "sessionId": {
          "description": "Unique identifier for the Firebase session.",
          "type": "string"
        },
        "appOrientation": {
          "type": "string",
          "description": "App orientation at the time of the crash (portrait or landscape)."
        },
        "user": {
          "$ref": "User",
          "description": "End user identifiers for the device owner."
        },
        "platform": {
          "description": "ANDROID, IOS, or WEB.",
          "type": "string"
        },
        "customKeys": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Custom keys set by the developer during the session.",
          "type": "object"
        },
        "eventTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Device timestamp that the event was recorded."
        },
        "device": {
          "description": "Mobile device metadata.",
          "$ref": "Device"
        },
        "deviceOrientation": {
          "type": "string",
          "description": "Device orientation at the time of the crash (portrait or landscape)."
        },
        "processState": {
          "type": "string",
          "description": "The state of the app process at the time of the event."
        },
        "bundleOrPackage": {
          "type": "string",
          "description": "The bundle name for iOS apps or the package name of Android apps. Format: \"com.mycompany.myapp\"."
        },
        "errors": {
          "items": {
            "$ref": "Error"
          },
          "description": "Apple only. A non-fatal error captured by the iOS SDK and its stacktrace.",
          "type": "array"
        },
        "operatingSystem": {
          "$ref": "OperatingSystem",
          "description": "Operating system and version."
        }
      },
      "description": "The message describing a single Crashlytics event. Related to BigQuery export schema, which can be found at [Export Crashlytics data to BigQuery](https://firebase.google.com/docs/crashlytics/bigquery-export#dataset-schema-crashlytics)"
    },
    "IssueSignals": {
      "id": "IssueSignals",
      "type": "object",
      "properties": {
        "description": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. Supporting detail information."
        },
        "signal": {
          "enum": [
            "SIGNAL_UNSPECIFIED",
            "SIGNAL_EARLY",
            "SIGNAL_FRESH",
            "SIGNAL_REGRESSED",
            "SIGNAL_REPETITIVE"
          ],
          "enumDescriptions": [
            "Default.",
            "Indicates an issue that is impacting end users early in the app session.",
            "Indicates newly detected issues.",
            "Indicates previously closed issues which have been detected again.",
            "Indicates issues impacting some end users multiple times."
          ],
          "type": "string",
          "readOnly": true,
          "description": "Output only. The signal name."
        }
      },
      "description": "Distinctive characteristics assigned by the Crashlytics analyzer."
    },
    "Note": {
      "description": "Developer notes for an issue.",
      "type": "object",
      "properties": {
        "body": {
          "description": "Immutable. The body of the note.",
          "type": "string"
        },
        "name": {
          "description": "Output only. Identifier. Format: \"projects/{project}/apps/app/issues/{issue}/notes/{note}\".",
          "type": "string",
          "readOnly": true
        },
        "createTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Output only. Time when the note was created.",
          "readOnly": true
        },
        "author": {
          "type": "string",
          "description": "Output only. The email of the author of the note.",
          "readOnly": true
        }
      },
      "id": "Note"
    },
    "Device": {
      "description": "Mobile device metadata.",
      "type": "object",
      "id": "Device",
      "properties": {
        "formFactor": {
          "type": "string",
          "description": "See FormFactor message.",
          "enum": [
            "FORM_FACTOR_UNSPECIFIED",
            "PHONE",
            "TABLET",
            "DESKTOP",
            "TV",
            "WATCH"
          ],
          "enumDescriptions": [
            "Unknown.",
            "Includes mobile phones, small foldables and other form factors not fitting the other categories.",
            "Includes tablets and larger foldables.",
            "Includes desktops, laptops, Chromebooks, etc.",
            "Includes televisions and set-tops.",
            "Includes both watches and other wearables."
          ]
        },
        "companyName": {
          "type": "string",
          "description": "An invariant name of the manufacturer that submitted this product in its most recognizable public form, e.g. \"Google\"."
        },
        "marketingName": {
          "description": "Marketing name, most recognizable public form, e.g. \"Pixel 6\".",
          "type": "string"
        },
        "manufacturer": {
          "description": "Device brand name which is consistent with android.os.Build.BRAND.",
          "type": "string"
        },
        "architecture": {
          "type": "string",
          "description": "Device processor architecture."
        },
        "displayName": {
          "description": "Full device name, suitable for passing to DeviceFilter. Format: \"manufacturer (model)\".",
          "type": "string"
        },
        "model": {
          "type": "string",
          "description": "The model name which is consistent with android.os.Build.MODEL, e.g. (\"SPH-L710\", \"GT-I9300\")."
        }
      }
    },
    "OperatingSystem": {
      "type": "object",
      "id": "OperatingSystem",
      "properties": {
        "os": {
          "description": "Operating system name.",
          "type": "string"
        },
        "type": {
          "description": "The OS type on Apple platforms (iOS, iPadOS, etc.).",
          "type": "string"
        },
        "displayVersion": {
          "type": "string",
          "description": "Operating system display version number."
        },
        "modificationState": {
          "type": "string",
          "description": "Indicates if the OS has been modified or \"jailbroken\"."
        },
        "deviceType": {
          "description": "The device category (mobile, tablet, desktop).",
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "Name and version number. Formatted to be suitable for passing to OperatingSystemFilter."
        }
      },
      "description": "Mobile device operating system metadata."
    },
    "Report": {
      "description": "Response message for the GetReport method. A report consists of the results of a query over an application's events. The events may be filtered by various criteria defined in the filters proto. The result will consist of a number of paginated groups, of a type relevant to the report such as issues or device models.",
      "type": "object",
      "id": "Report",
      "properties": {
        "usage": {
          "description": "Usage instructions for the report with a description of the result metrics. This field contains a description of the underlying query and describes the expected response data with any known caveats. This string can be displayed in the UI of any integration that offers comprehensive access to all Crashlytics reports.",
          "type": "string"
        },
        "name": {
          "type": "string",
          "description": "The name of the report. Format: \"projects/{project}/apps/{app_id}/reports/{report}\"."
        },
        "totalSize": {
          "type": "integer",
          "readOnly": true,
          "format": "int32",
          "description": "Output only. The total number of groups retrievable by the request."
        },
        "displayName": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The displayable title of the report."
        },
        "groups": {
          "type": "array",
          "description": "Aggregate event statistics in the report will be grouped by a dimension, such as by issue or by version. The response contains one element per group, and all ReportGroup messages will have the same parent field.",
          "items": {
            "$ref": "ReportGroup"
          }
        },
        "nextPageToken": {
          "description": "Output only. A page token used to retrieve additional report groups. If this field is not present, there are no subsequent pages available to retrieve.",
          "readOnly": true,
          "type": "string"
        }
      }
    },
    "Issue": {
      "description": "An issue describes a set of similar events that have been analyzed by Crashlytics and grouped together. All events within an issue will be of the same error_type: crash, non-fatal exception or ANR. All events within an issue will contain similar stack traces in their blamed thread.",
      "type": "object",
      "id": "Issue",
      "properties": {
        "stateUpdateTime": {
          "description": "Output only. The time at which the issue state was last changed.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "variants": {
          "description": "Output only. Immutable. The top 12 variants (subgroups) within the issue. Variants group events within an issue that are very similar. A single result implies that the variant is the same as the parent issue. This field will be empty when multiple issues are requested. Request a single issue to list variants.",
          "type": "array",
          "items": {
            "$ref": "IssueVariant"
          },
          "readOnly": true
        },
        "notesCount": {
          "format": "int64",
          "type": "string",
          "description": "Output only. The number of notes attached to an issue.",
          "readOnly": true
        },
        "title": {
          "readOnly": true,
          "description": "Output only. Immutable. Caption title. This is usually a source file or method name.",
          "type": "string"
        },
        "subtitle": {
          "readOnly": true,
          "description": "Output only. Immutable. Caption subtitle. This is usually a symbol or an exception message.",
          "type": "string"
        },
        "lastSeenTime": {
          "description": "Output only. The most recent time this issue was seen.",
          "type": "string",
          "readOnly": true,
          "format": "google-datetime"
        },
        "firstSeenTime": {
          "description": "Output only. Immutable. The first time this issue was seen.",
          "readOnly": true,
          "type": "string",
          "format": "google-datetime"
        },
        "state": {
          "enumDescriptions": [
            "Unknown.",
            "Ongoing issue.",
            "Issue resolved.",
            "Issue muted. No alerts will be fired for this issue."
          ],
          "type": "string",
          "description": "Output only. Indicates whether this issue is open, closed or muted. For details on how issue states change without user actions, see [Regressed Issues](https://firebase.google.com/docs/crashlytics/troubleshooting?platform=ios#regressed-issues).",
          "enum": [
            "STATE_UNSPECIFIED",
            "OPEN",
            "CLOSED",
            "MUTED"
          ],
          "readOnly": true
        },
        "firstSeenVersion": {
          "type": "string",
          "description": "Output only. Immutable. The first app display_version in which this issue was seen, populated for mobile issues only.",
          "readOnly": true
        },
        "id": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. Immutable. Unique identifier for the issue."
        },
        "signals": {
          "items": {
            "$ref": "IssueSignals"
          },
          "description": "Output only. Immutable. Distinctive characteristics assigned by the Crashlytics analyzer.",
          "readOnly": true,
          "type": "array"
        },
        "errorType": {
          "enum": [
            "ERROR_TYPE_UNSPECIFIED",
            "FATAL",
            "NON_FATAL",
            "ANR"
          ],
          "description": "Output only. Immutable. Indicates whether this issue is a crash, non-fatal exception, or ANR.",
          "enumDescriptions": [
            "Unknown.",
            "Fatal crash event.",
            "Non-fatal event, such as a caught Java exception or NSError on iOS.",
            "Application not responding error, Android only."
          ],
          "type": "string",
          "readOnly": true
        },
        "sampleEvent": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The resource name for a sample event in this issue."
        },
        "uri": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. Provides a link to the Issue on the Firebase console. When this Issue is obtained as part of a Report, then the link will be configured with the same time interval and filters as the request."
        },
        "name": {
          "type": "string",
          "readOnly": true,
          "description": "Required. Output only. Immutable. Identifier. The name of the issue resource. Format: \"projects/{project}/apps/{app}/issues/{issue}\"."
        },
        "lastSeenVersion": {
          "type": "string",
          "description": "Output only. The most recent app display_version in which this issue was seen, populated for mobile issues only.",
          "readOnly": true
        }
      }
    },
    "Breadcrumb": {
      "description": "Analytics events recorded during the session.",
      "properties": {
        "title": {
          "description": "Analytic event name.",
          "type": "string"
        },
        "params": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "description": "Event parameters."
        },
        "eventTime": {
          "description": "Device timestamp for the event.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "type": "object",
      "id": "Breadcrumb"
    },
    "IntervalMetrics": {
      "properties": {
        "endTime": {
          "format": "google-datetime",
          "description": "The end of the interval covered by the computation.",
          "type": "string"
        },
        "impactedUsersCount": {
          "description": "The number of distinct users in the set of events.",
          "type": "string",
          "format": "int64"
        },
        "totalUsersCount": {
          "description": "The number of distinct users.",
          "type": "string",
          "format": "int64"
        },
        "sessionsCount": {
          "format": "int64",
          "type": "string",
          "description": "Deprecated: Prefer `impacted_sessions_count`. The number of distinct sessions in the set of events.",
          "deprecated": true
        },
        "crashFreeSessionsPercentage": {
          "type": "number",
          "description": "Mobile only. Percentage of crash-free sessions. (total_sessions_count - impacted_sessions_count) / total_sessions_count * 100.",
          "format": "float"
        },
        "startTime": {
          "type": "string",
          "description": "The start of the interval covered by the computation.",
          "format": "google-datetime"
        },
        "crashFreeUsersPercentage": {
          "type": "number",
          "description": "Mobile only. Percentage of crash-free users. (total_users_count - impacted_users_count) / total_users_count * 100",
          "format": "float"
        },
        "impactedSessionsCount": {
          "description": "The number of distinct sessions in the set of events.",
          "format": "int64",
          "type": "string"
        },
        "totalSessionsCount": {
          "description": "The number of distinct sessions.",
          "format": "int64",
          "type": "string"
        },
        "eventsCount": {
          "description": "The total count of events in the interval.",
          "type": "string",
          "format": "int64"
        }
      },
      "id": "IntervalMetrics",
      "description": "A set of computed metric values for a time interval",
      "type": "object"
    },
    "Frame": {
      "description": "A frame in a stacktrace.",
      "properties": {
        "blamed": {
          "type": "boolean",
          "description": "True when the Crashlytics analysis has determined that this frame is likely to be the cause of the error."
        },
        "owner": {
          "description": "One of DEVELOPER, VENDOR, RUNTIME, PLATFORM, or SYSTEM.",
          "type": "string"
        },
        "offset": {
          "format": "int64",
          "description": "The byte offset into the binary image that contains the code. Present for native frames.",
          "type": "string"
        },
        "symbol": {
          "description": "The frame symbol after it has been deobfuscated or symbolicated. The raw symbol from the device if it could not be hydrated.",
          "type": "string"
        },
        "file": {
          "description": "The name of the source file in which the frame is found.",
          "type": "string"
        },
        "line": {
          "format": "int64",
          "type": "string",
          "description": "The line number in the file of the frame."
        },
        "address": {
          "format": "int64",
          "type": "string",
          "description": "The address in the binary image which contains the code. Present for native frames."
        },
        "library": {
          "description": "The display name of the library that includes the frame.",
          "type": "string"
        },
        "column": {
          "format": "int64",
          "type": "string",
          "description": "The column on the line."
        }
      },
      "type": "object",
      "id": "Frame"
    },
    "DeleteUserCrashReportsResponse": {
      "type": "object",
      "properties": {
        "targetCompleteTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Target time to complete the delete crash reports operation."
        }
      },
      "id": "DeleteUserCrashReportsResponse",
      "description": "Response message for the DeleteUserCrashReports method. All crash reports associated with the specified user will be deleted typically within 24 hours of receiving the crash report."
    },
    "Browser": {
      "description": "Web browser metadata.",
      "type": "object",
      "properties": {
        "browser": {
          "description": "Browser name.",
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "Browser name and version number. Formatted to be suitable for passing to BrowserFilter."
        },
        "displayVersion": {
          "type": "string",
          "description": "Browser display version number."
        }
      },
      "id": "Browser"
    },
    "BatchUpdateIssuesRequest": {
      "id": "BatchUpdateIssuesRequest",
      "type": "object",
      "properties": {
        "updateMask": {
          "description": "Optional. The list of Issue fields to update. If this is set, the update_mask field in the UpdateIssueRequest messages must either be empty or match this field.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "requests": {
          "description": "Required. The request message specifying the resources to update. A maximum of 100 issues can be modified in a batch.",
          "items": {
            "$ref": "UpdateIssueRequest"
          },
          "type": "array"
        }
      },
      "description": "Request message for the BatchUpdateIssues method."
    },
    "Thread": {
      "id": "Thread",
      "description": "An application thread.",
      "type": "object",
      "properties": {
        "frames": {
          "type": "array",
          "description": "The frames in the thread's stacktrace.",
          "items": {
            "$ref": "Frame"
          }
        },
        "subtitle": {
          "description": "The subtitle of the thread.",
          "type": "string"
        },
        "queue": {
          "type": "string",
          "description": "The queue on which the thread was running."
        },
        "threadId": {
          "format": "int64",
          "type": "string",
          "description": "The id of the thread, only available for ANR threads."
        },
        "name": {
          "description": "The name of the thread.",
          "type": "string"
        },
        "blamed": {
          "description": "True when the Crashlytics analysis has determined that the stacktrace in this thread is where the fault occurred.",
          "type": "boolean"
        },
        "title": {
          "description": "The title of the thread.",
          "type": "string"
        },
        "crashAddress": {
          "format": "int64",
          "description": "The address of the signal that caused the application to crash. Only present on crashed native threads.",
          "type": "string"
        },
        "sysThreadId": {
          "description": "The system id of the thread, only available for ANR threads.",
          "format": "int64",
          "type": "string"
        },
        "threadState": {
          "description": "Output only. The state of the thread at the time the ANR occurred.",
          "enumDescriptions": [
            "Thread state unspecified.",
            "Thread was terminated.",
            "Thread was runnable.",
            "Thread was waiting with a timeout.",
            "Thread was blocked.",
            "Thread was waiting.",
            "Thread was started, yet to run anything.",
            "The thread was native and we could not heuristically determine that it was was waiting, so assume it's runnable.",
            "We heuristically determined that the thread is waiting."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "THREAD_STATE_TERMINATED",
            "THREAD_STATE_RUNNABLE",
            "THREAD_STATE_TIMED_WAITING",
            "THREAD_STATE_BLOCKED",
            "THREAD_STATE_WAITING",
            "THREAD_STATE_NEW",
            "THREAD_STATE_NATIVE_RUNNABLE",
            "THREAD_STATE_NATIVE_WAITING"
          ],
          "readOnly": true,
          "type": "string"
        },
        "signal": {
          "type": "string",
          "description": "The name of the signal that caused the app to crash. Only present on crashed native threads."
        },
        "crashed": {
          "description": "True when the thread has crashed.",
          "type": "boolean"
        },
        "signalCode": {
          "description": "The code of the signal that caused the app to crash. Only present on crashed native threads.",
          "type": "string"
        }
      }
    },
    "ListReportsResponse": {
      "properties": {
        "reports": {
          "items": {
            "$ref": "Report"
          },
          "description": "The report objects returned will contain their names and usage instructions, but include no results. Use the `GetReport` method to run the report and obtain the paged results.",
          "type": "array"
        }
      },
      "type": "object",
      "description": "Response method for the ListReports method. The response will always include all of the available reports.",
      "id": "ListReportsResponse"
    },
    "Log": {
      "id": "Log",
      "properties": {
        "logTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Device timestamp when the line was logged."
        },
        "message": {
          "type": "string",
          "description": "Log message."
        }
      },
      "type": "object",
      "description": "Developer-provided log lines recorded during the session."
    },
    "UpdateIssueRequest": {
      "description": "Request message for the UpdateIssue method.",
      "properties": {
        "updateMask": {
          "type": "string",
          "description": "Optional. The list of Issue fields to update. Currently only \"state\" is mutable.",
          "format": "google-fieldmask"
        },
        "issue": {
          "description": "Required. The issue to update. The issue's `name` field is used to identify the issue to update. Format: \"projects/{project}/apps/{app}/issues/{issue}\".",
          "$ref": "Issue"
        }
      },
      "id": "UpdateIssueRequest",
      "type": "object"
    },
    "Memory": {
      "type": "object",
      "id": "Memory",
      "description": "Mobile device memory usage.",
      "properties": {
        "used": {
          "description": "Bytes in use.",
          "type": "string",
          "format": "int64"
        },
        "free": {
          "description": "Bytes free.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "CustomAttribute": {
      "id": "CustomAttribute",
      "description": "Developer-provided custom key-value pair metadata.",
      "type": "object",
      "properties": {
        "value": {
          "description": "Output only. Custom attribute value.",
          "readOnly": true,
          "type": "string"
        },
        "key": {
          "description": "Output only. Custom attribute key name.",
          "readOnly": true,
          "type": "string"
        }
      }
    }
  },
  "kind": "discovery#restDescription"
}
