{"files":{"SKILL.md":"---\nname: api-reference\ndescription: \"API Reference API skill. Use when working with API Reference for api. Covers 218 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# API Reference\nAPI version: v0\n\n## Auth\nBearer bearer | Bearer DSN\n\n## Base URL\nhttps://us.sentry.io\n\n## Setup\n1. Set Authorization header with Bearer token\n2. GET /api/0/organizations/ -- return a list of organizations available to the authenticated session in a region.\n3. POST /api/0/organizations/{organization_id_or_slug}/alert-rules/ -- create first alert-rule\n\n## Endpoints\n218 endpoints across 1 group. See references/api-spec.lap for full details.\n\n### Api\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /api/0/organizations/ | Return a list of organizations available to the authenticated session in a region. |\n| GET | /api/0/organizations/{organization_id_or_slug}/ | Return details on an individual organization, including various details |\n| PUT | /api/0/organizations/{organization_id_or_slug}/ | Update various attributes and configurable settings for the given organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/alert-rules/ | ## Deprecated |\n| POST | /api/0/organizations/{organization_id_or_slug}/alert-rules/ | ## Deprecated |\n| GET | /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/ | ## Deprecated |\n| PUT | /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/ | ## Deprecated |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/ | ## Deprecated |\n| GET | /api/0/organizations/{organization_id_or_slug}/config/integrations/ | Get integration provider information about all available integrations for an organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/dashboards/ | Retrieve a list of custom dashboards that are associated with the given organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/dashboards/ | Create a new dashboard for the given Organization |\n| GET | /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/ | Return details about an organization's custom dashboard. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/ | Edit an organization's custom dashboard as well as any bulk |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/ | Delete an organization's custom dashboard, or tombstone |\n| GET | /api/0/organizations/{organization_id_or_slug}/detectors/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/detectors/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/detectors/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| GET | /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| GET | /api/0/organizations/{organization_id_or_slug}/discover/saved/ | Retrieve a list of saved queries that are associated with the given organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/discover/saved/ | Create a new saved query for the given organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/ | Retrieve a saved query. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/ | Modify a saved query. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/ | Delete a saved query. |\n| GET | /api/0/organizations/{organization_id_or_slug}/environments/ | Lists an organization's environments. |\n| GET | /api/0/organizations/{organization_id_or_slug}/eventids/{event_id}/ | This resolves an event ID to the project slug and internal issue ID and internal event ID. |\n| GET | /api/0/organizations/{organization_id_or_slug}/events/ | Retrieves explore data for a given organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/events-timeseries/ | Retrieves explore data for a given organization as a timeseries. |\n| POST | /api/0/organizations/{organization_id_or_slug}/external-users/ | Link a user from an external provider to a Sentry user. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/ | Update a user in an external provider that is currently linked to a Sentry user. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/ | Delete the link between a user from an external provider and a Sentry user. |\n| GET | /api/0/organizations/{organization_id_or_slug}/forwarding/ | Returns a list of data forwarders for an organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/forwarding/ | Creates a new data forwarder for an organization. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/ | Updates a data forwarder for an organization or update a project-specific override. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/ | Deletes a data forwarder for an organization. All project-specific overrides will be deleted as well. |\n| GET | /api/0/organizations/{organization_id_or_slug}/integrations/ | Lists all the available Integrations for an Organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/ | OrganizationIntegrationBaseEndpoints expect both Integration and |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/ | OrganizationIntegrationBaseEndpoints expect both Integration and |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/ | Return a list of issues for an organization. All parameters are supplied as query string parameters. A default query of `is:unresolved` is applied. To return all results, use an empty query value (i.e. ``?query=`). |\n| PUT | /api/0/organizations/{organization_id_or_slug}/issues/ | Bulk mutate various attributes on a maxmimum of 1000 issues. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/issues/ | Permanently remove the given issues. If IDs are provided, queries and filtering will be ignored. If any IDs are out of scope, the data won't be mutated but the endpoint will still produce a successful response. For example, if no issues were found matching the criteria, a HTTP 204 is returned. |\n| GET | /api/0/organizations/{organization_id_or_slug}/members/ | List all organization members. |\n| POST | /api/0/organizations/{organization_id_or_slug}/members/ | Add or invite a member to an organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/members/{member_id}/ | Retrieve an organization member's details. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/members/{member_id}/ | Update a member's [organization-level](https://docs.sentry.io/organization/membership/#organization-level-roles) and [team-level](https://docs.sentry.io/organization/membership/#team-level-roles) roles. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/members/{member_id}/ | Remove an organization member. |\n| POST | /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/ | This request can return various success codes depending on the context of the team: |\n| PUT | /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/ | The relevant organization member must already be a part of the team. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/ | Delete an organization member from a team. |\n| GET | /api/0/organizations/{organization_id_or_slug}/monitors/ | Lists monitors, including nested monitor environments. May be filtered to a project or environment. |\n| POST | /api/0/organizations/{organization_id_or_slug}/monitors/ | Create a new monitor. |\n| GET | /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/ | Retrieves details for a monitor. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/ | Update a monitor. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/ | Delete a monitor or monitor environments. |\n| GET | /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/ | Retrieve a list of check-ins for a monitor |\n| GET | /api/0/organizations/{organization_id_or_slug}/notifications/actions/ | Returns all Spike Protection Notification Actions for an organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/notifications/actions/ | Creates a new Notification Action for Spike Protection. |\n| GET | /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/ | Returns a serialized Spike Protection Notification Action object. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/ | Updates a Spike Protection Notification Action. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/ | Deletes a Spike Protection Notification Action. |\n| GET | /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/install-details/ | Retrieve install info for a given artifact. |\n| GET | /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/size-analysis/ | Retrieve size analysis results for a given artifact. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/ | Retrieves repository data for a given owner. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/ | Gets syncing status for repositories for an integrated organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/ | Syncs repositories for an integrated organization with GitHub. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/tokens/ | Retrieves a paginated list of repository tokens for a given owner. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/ | Retrieves repository data for a single repository. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/branches/ | Retrieves branch data for a given owner and repository. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results/ | Retrieves the list of test results for a given repository and owner. Also accepts a number of query parameters to filter the results. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results-aggregates/ | Retrieves aggregated test result metrics for a given repository and owner. |\n| GET | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-suites/ | Retrieves test suites belonging to a repository's test results. |\n| POST | /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/token/regenerate/ | Regenerates a repository upload token and returns the new token. |\n| GET | /api/0/organizations/{organization_id_or_slug}/project-keys/ | Return a list of client keys (DSNs) for all projects in an organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/projects/ | Return a list of projects bound to a organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/projects/{project_id_or_slug}/detectors/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| GET | /api/0/organizations/{organization_id_or_slug}/relay_usage/ | Return a list of trusted relays bound to an organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/ | **`[WARNING]`**: This API is an experimental Alpha feature and is subject to change! |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/{version}/ | Return details on an individual release. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/releases/{version}/ | Update a release. This can change some metadata associated with |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/releases/{version}/ | Permanently remove a release and all of its files. |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/ | Returns a list of deploys based on the organization, version, and project. |\n| POST | /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/ | Create a deploy for a given release. |\n| GET | /api/0/organizations/{organization_id_or_slug}/replay-count/ | Return a count of replays for a list of issue or transaction IDs. |\n| GET | /api/0/organizations/{organization_id_or_slug}/replay-selectors/ | Return a list of selectors for a given organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/replays/ | Return a list of replays belonging to an organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/replays/{replay_id}/ | Return details on an individual replay. |\n| GET | /api/0/organizations/{organization_id_or_slug}/repos/{repo_id}/commits/ | List a Repository's Commits |\n| GET | /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups | Returns a paginated list of teams bound to a organization with a SCIM Groups GET Request. |\n| POST | /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups | Create a new team bound to an organization via a SCIM Groups POST |\n| GET | /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug} | Query an individual team with a SCIM Group GET Request. |\n| PATCH | /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug} | Update a team's attributes with a SCIM Group PATCH Request. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug} | Delete a team with a SCIM Group DELETE Request. |\n| GET | /api/0/organizations/{organization_id_or_slug}/scim/v2/Users | Returns a paginated list of members bound to a organization with a SCIM Users GET Request. |\n| POST | /api/0/organizations/{organization_id_or_slug}/scim/v2/Users | Create a new Organization Member via a SCIM Users POST Request. |\n| GET | /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id} | Query an individual organization member with a SCIM User GET Request. |\n| PATCH | /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id} | Update an organization member's attributes with a SCIM PATCH Request. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id} | Delete an organization member with a SCIM User DELETE Request. |\n| GET | /api/0/organizations/{organization_id_or_slug}/sentry-apps/ | Retrieve the custom integrations for an organization |\n| GET | /api/0/organizations/{organization_id_or_slug}/sessions/ | Returns a time series of release health session statistics for projects bound to an organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/shortids/{issue_id}/ | Resolve a short ID to the project slug and group details. |\n| GET | /api/0/organizations/{organization_id_or_slug}/stats-summary/ | Query summarized event counts by project for your Organization. Also see https://docs.sentry.io/api/organizations/retrieve-event-counts-for-an-organization-v2/ for reference. |\n| GET | /api/0/organizations/{organization_id_or_slug}/stats_v2/ | Query event counts for your Organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/teams/ | Returns a list of teams bound to a organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/teams/ | Create a new team bound to an organization. Requires at least one of the `name` |\n| GET | /api/0/organizations/{organization_id_or_slug}/user-teams/ | Returns a list of teams the user has access to in the specified organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/workflows/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| POST | /api/0/organizations/{organization_id_or_slug}/workflows/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/workflows/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/workflows/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| GET | /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/ | ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ | Return details on an individual project. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ | Update various attributes and configurable settings for the given project. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ | Schedules a project for deletion. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/ | Lists a project's environments. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/ | Return details on a project environment. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/ | Update the visibility for a project environment. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/ | Return a list of events bound to a project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/source-map-debug/ | Return a list of source map errors for a given event. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/ | Retrieve a list of filters for a given project. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/{filter_id}/ | Update various inbound data filters for a project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/ | Return a list of client keys bound to a project. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/ | Create a new client key bound to a project.  The key's secret and public key |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/ | Return a client key bound to a project. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/ | Update various settings for a client key. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/ | Delete a client key for a given project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/members/ | Returns a list of active organization members that belong to any team assigned to the project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/ | Retrieves details for a monitor. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/ | Update a monitor. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/ | Delete a monitor or monitor environments. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/ | Retrieve a list of check-ins for a monitor |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/ | Returns details on a project's ownership configuration. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/ | Updates ownership configurations for a project. Note that only the |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/ | Get the latest installable build for a project. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/ | Delete a replay. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/clicks/ | Retrieve a collection of RRWeb DOM node-ids and the timestamp they were clicked. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/ | Return a collection of replay recording segments. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/{segment_id}/ | Return a replay recording segment. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/viewed-by/ | Return a list of users who have viewed a replay. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/ | Retrieve a collection of replay delete jobs. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/ | Create a new replay deletion job. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/{job_id}/ | Fetch a replay delete job instance. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/ | ## Deprecated |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/ | ## Deprecated |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/ | ## Deprecated |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/ | ## Deprecated |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/ | ## Deprecated |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/ | List custom symbol sources configured for a project. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/ | Add a custom symbol source to a project. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/ | Update a custom symbol source in a project. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/ | Delete a custom symbol source from a project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/ | Return a list of teams that have access to this project. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/ | Give a team access to a project. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/ | Revoke a team's access to a project. |\n| GET | /api/0/seer/models/ | Get list of actively used LLM model names from Seer. |\n| GET | /api/0/sentry-apps/{sentry_app_id_or_slug}/ | Retrieve a custom integration. |\n| PUT | /api/0/sentry-apps/{sentry_app_id_or_slug}/ | Update an existing custom integration. |\n| DELETE | /api/0/sentry-apps/{sentry_app_id_or_slug}/ | Delete a custom integration. |\n| GET | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/ | Return details on an individual team. |\n| PUT | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/ | Update various attributes and configurable settings for the given |\n| DELETE | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/ | Schedules a team for deletion. |\n| POST | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/ | Link a team from an external provider to a Sentry team. |\n| PUT | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/ | Update a team in an external provider that is currently linked to a Sentry team. |\n| DELETE | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/ | Delete the link between a team from an external provider and a Sentry team. |\n| GET | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/members/ | List all members on a team. |\n| GET | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/ | Return a list of projects bound to a team. |\n| POST | /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/ | Create a new project bound to a team. |\n| GET | /api/0/organizations/{organization_id_or_slug}/repos/ | Return a list of version control repositories for a given organization. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/ | Retrieve a list of debug information files for a given project. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/ | Upload a new debug information file for the given release. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/ | Delete a debug information file for a given project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/users/ | Return a list of users seen within this project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/tags/{key}/values/ | Return a list of values associated with this key.  The `query` |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/stats/ | Caution |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/ | Return a list of user feedback items within this project. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/ | *This endpoint is DEPRECATED. We document it here for older SDKs and users who are still migrating to the [User Feedback Widget](https://docs.sentry.io/product/user-feedback/#user-feedback-widget) or [API](https://docs.sentry.io/platforms/javascript/user-feedback/#user-feedback-api)(multi-platform). If you are a new user, do not use this endpoint - unless you don't have a JS frontend, and your platform's SDK does not offer a feedback API.* |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/ | Return a list of service hooks bound to a project. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/ | Register a new service hook on a project. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/ | Return a service hook bound to a project. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/ | Update a service hook. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/ | Remove a service hook. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/ | Return details on an individual event. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/ | **Deprecated**: This endpoint has been replaced with the [Organization Issues endpoint](/api/events/list-an-organizations-issues/) which |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/ | Bulk mutate various attributes on issues.  The list of issues to modify is given through the `id` query parameter.  It is repeated for each issue that should be modified. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/ | Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter.  It is repeated for each issue that should be removed. |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/values/ | Returns a list of values associated with this key for an issue. |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/hashes/ | This endpoint lists an issue's hashes, which are the generated checksums used to aggregate individual events. |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/ | Return details on an individual issue. This returns the basic stats for the issue (title, last seen, first seen), some overall numbers (number of comments, user reports) as well as the summarized event data. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/ | Updates an individual issue's attributes.  Only the attributes submitted are modified. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/ | Removes an individual issue. |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/ | Return a list of releases for a given organization. |\n| POST | /api/0/organizations/{organization_id_or_slug}/releases/ | Create a new release for the given organization.  Releases are used by |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/ | Return a list of files for a given release. |\n| POST | /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/ | Upload a new file for the given release. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/ | Return a list of files for a given release. |\n| POST | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/ | Upload a new file for the given release. |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/ | Retrieve a file for a given release. |\n| PUT | /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/ | Update an organization release file. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/ | Delete a file for a given release. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/ | Retrieve a file for a given release. |\n| PUT | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/ | Update a project release file. |\n| DELETE | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/ | Delete a file for a given release. |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/{version}/commits/ | List an organization release's commits. |\n| GET | /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/commits/ | List a project release's commits. |\n| GET | /api/0/organizations/{organization_id_or_slug}/releases/{version}/commitfiles/ | Retrieve files changed in a release's commits |\n| GET | /api/0/organizations/{organization_id_or_slug}/sentry-app-installations/ | Return a list of integration platform installations for a given organization. |\n| POST | /api/0/sentry-app-installations/{uuid}/external-issues/ | Create or update an external issue from an integration platform integration. |\n| DELETE | /api/0/sentry-app-installations/{uuid}/external-issues/{external_issue_id}/ | Delete an external issue. |\n| POST | /api/0/organizations/{organization_id_or_slug}/spike-protections/ | Enables Spike Protection feature for some of the projects within the organization. |\n| DELETE | /api/0/organizations/{organization_id_or_slug}/spike-protections/ | Disables Spike Protection feature for some of the projects within the organization. |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/ | Retrieve the current detailed state of an issue fix process for a specific issue including: |\n| POST | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/ | Trigger a Seer Issue Fix run for a specific issue. |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/ | Return a list of error events bound to an issue |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/{event_id}/ | Retrieves the details of an issue event. |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/external-issues/ | Retrieve custom integration issue links for the given Sentry issue |\n| GET | /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/ | Return a list of values associated with this key for an issue. When paginated can return at most 1000 values. |\n\n## Common Questions\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Search organizations?\" -> GET /api/0/organizations/\n- \"Get organization details?\" -> GET /api/0/organizations/{organization_id_or_slug}/\n- \"Update a organization?\" -> PUT /api/0/organizations/{organization_id_or_slug}/\n- \"List all alert-rules?\" -> GET /api/0/organizations/{organization_id_or_slug}/alert-rules/\n- \"Create a alert-rule?\" -> POST /api/0/organizations/{organization_id_or_slug}/alert-rules/\n- \"Get alert-rule details?\" -> GET /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\n- \"Update a alert-rule?\" -> PUT /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\n- \"Delete a alert-rule?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\n- \"List all integrations?\" -> GET /api/0/organizations/{organization_id_or_slug}/config/integrations/\n- \"List all dashboards?\" -> GET /api/0/organizations/{organization_id_or_slug}/dashboards/\n- \"Create a dashboard?\" -> POST /api/0/organizations/{organization_id_or_slug}/dashboards/\n- \"Get dashboard details?\" -> GET /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\n- \"Update a dashboard?\" -> PUT /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\n- \"Delete a dashboard?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\n- \"Search detectors?\" -> GET /api/0/organizations/{organization_id_or_slug}/detectors/\n- \"Get detector details?\" -> GET /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\n- \"Update a detector?\" -> PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\n- \"Delete a detector?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\n- \"Search saved?\" -> GET /api/0/organizations/{organization_id_or_slug}/discover/saved/\n- \"Create a saved?\" -> POST /api/0/organizations/{organization_id_or_slug}/discover/saved/\n- \"Get saved details?\" -> GET /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\n- \"Update a saved?\" -> PUT /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\n- \"Delete a saved?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\n- \"List all environments?\" -> GET /api/0/organizations/{organization_id_or_slug}/environments/\n- \"Get eventid details?\" -> GET /api/0/organizations/{organization_id_or_slug}/eventids/{event_id}/\n- \"Search events?\" -> GET /api/0/organizations/{organization_id_or_slug}/events/\n- \"Search events-timeseries?\" -> GET /api/0/organizations/{organization_id_or_slug}/events-timeseries/\n- \"Create a external-user?\" -> POST /api/0/organizations/{organization_id_or_slug}/external-users/\n- \"Update a external-user?\" -> PUT /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\n- \"Delete a external-user?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\n- \"List all forwarding?\" -> GET /api/0/organizations/{organization_id_or_slug}/forwarding/\n- \"Create a forwarding?\" -> POST /api/0/organizations/{organization_id_or_slug}/forwarding/\n- \"Update a forwarding?\" -> PUT /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/\n- \"Delete a forwarding?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/\n- \"Get integration details?\" -> GET /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\n- \"Delete a integration?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\n- \"Search issues?\" -> GET /api/0/organizations/{organization_id_or_slug}/issues/\n- \"List all members?\" -> GET /api/0/organizations/{organization_id_or_slug}/members/\n- \"Create a member?\" -> POST /api/0/organizations/{organization_id_or_slug}/members/\n- \"Get member details?\" -> GET /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\n- \"Update a member?\" -> PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\n- \"Delete a member?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\n- \"Update a team?\" -> PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\n- \"Delete a team?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\n- \"List all monitors?\" -> GET /api/0/organizations/{organization_id_or_slug}/monitors/\n- \"Create a monitor?\" -> POST /api/0/organizations/{organization_id_or_slug}/monitors/\n- \"Get monitor details?\" -> GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\n- \"Update a monitor?\" -> PUT /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\n- \"Delete a monitor?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\n- \"List all checkins?\" -> GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\n- \"List all actions?\" -> GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/\n- \"Create a action?\" -> POST /api/0/organizations/{organization_id_or_slug}/notifications/actions/\n- \"Get action details?\" -> GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\n- \"Update a action?\" -> PUT /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\n- \"Delete a action?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\n- \"List all install-details?\" -> GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/install-details/\n- \"List all size-analysis?\" -> GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/size-analysis/\n- \"List all repositories?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/\n- \"List all sync?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\n- \"Create a sync?\" -> POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\n- \"List all tokens?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/tokens/\n- \"Get repository details?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/\n- \"List all branches?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/branches/\n- \"List all test-results?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results/\n- \"List all test-results-aggregates?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results-aggregates/\n- \"List all test-suites?\" -> GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-suites/\n- \"Create a regenerate?\" -> POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/token/regenerate/\n- \"List all project-keys?\" -> GET /api/0/organizations/{organization_id_or_slug}/project-keys/\n- \"List all projects?\" -> GET /api/0/organizations/{organization_id_or_slug}/projects/\n- \"Create a detector?\" -> POST /api/0/organizations/{organization_id_or_slug}/projects/{project_id_or_slug}/detectors/\n- \"List all relay_usage?\" -> GET /api/0/organizations/{organization_id_or_slug}/relay_usage/\n- \"List all release-threshold-statuses?\" -> GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\n- \"Get release details?\" -> GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\n- \"Update a release?\" -> PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/\n- \"Delete a release?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/\n- \"List all deploys?\" -> GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\n- \"Create a deploy?\" -> POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\n- \"Search replay-count?\" -> GET /api/0/organizations/{organization_id_or_slug}/replay-count/\n- \"Search replay-selectors?\" -> GET /api/0/organizations/{organization_id_or_slug}/replay-selectors/\n- \"Search replays?\" -> GET /api/0/organizations/{organization_id_or_slug}/replays/\n- \"Get replay details?\" -> GET /api/0/organizations/{organization_id_or_slug}/replays/{replay_id}/\n- \"List all commits?\" -> GET /api/0/organizations/{organization_id_or_slug}/repos/{repo_id}/commits/\n- \"List all Groups?\" -> GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\n- \"Create a Group?\" -> POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\n- \"Get Group details?\" -> GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\n- \"Partially update a Group?\" -> PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\n- \"Delete a Group?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\n- \"List all Users?\" -> GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\n- \"Create a User?\" -> POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\n- \"Get User details?\" -> GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\n- \"Partially update a User?\" -> PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\n- \"Delete a User?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\n- \"List all sentry-apps?\" -> GET /api/0/organizations/{organization_id_or_slug}/sentry-apps/\n- \"Search sessions?\" -> GET /api/0/organizations/{organization_id_or_slug}/sessions/\n- \"Get shortid details?\" -> GET /api/0/organizations/{organization_id_or_slug}/shortids/{issue_id}/\n- \"List all stats-summary?\" -> GET /api/0/organizations/{organization_id_or_slug}/stats-summary/\n- \"List all stats_v2?\" -> GET /api/0/organizations/{organization_id_or_slug}/stats_v2/\n- \"List all teams?\" -> GET /api/0/organizations/{organization_id_or_slug}/teams/\n- \"Create a team?\" -> POST /api/0/organizations/{organization_id_or_slug}/teams/\n- \"List all user-teams?\" -> GET /api/0/organizations/{organization_id_or_slug}/user-teams/\n- \"Search workflows?\" -> GET /api/0/organizations/{organization_id_or_slug}/workflows/\n- \"Create a workflow?\" -> POST /api/0/organizations/{organization_id_or_slug}/workflows/\n- \"Get workflow details?\" -> GET /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\n- \"Update a workflow?\" -> PUT /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\n- \"Delete a workflow?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\n- \"Get project details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\n- \"Update a project?\" -> PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\n- \"Delete a project?\" -> DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\n- \"Get environment details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\n- \"Update a environment?\" -> PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\n- \"List all events?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/\n- \"List all source-map-debug?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/source-map-debug/\n- \"List all filters?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/\n- \"Update a filter?\" -> PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/{filter_id}/\n- \"List all keys?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\n- \"Create a key?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\n- \"Get key details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\n- \"Update a key?\" -> PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\n- \"Delete a key?\" -> DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\n- \"List all ownership?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\n- \"List all latest?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/\n- \"Delete a replay?\" -> DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/\n- \"Search clicks?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/clicks/\n- \"List all recording-segments?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/\n- \"Get recording-segment details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/{segment_id}/\n- \"List all viewed-by?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/viewed-by/\n- \"List all delete?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\n- \"Create a delete?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\n- \"Get delete details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/{job_id}/\n- \"List all rules?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\n- \"Create a rule?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\n- \"Get rule details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\n- \"Update a rule?\" -> PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\n- \"Delete a rule?\" -> DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\n- \"List all symbol-sources?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\n- \"Create a symbol-source?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\n- \"List all models?\" -> GET /api/0/seer/models/\n- \"Get sentry-app details?\" -> GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\n- \"Update a sentry-app?\" -> PUT /api/0/sentry-apps/{sentry_app_id_or_slug}/\n- \"Delete a sentry-app?\" -> DELETE /api/0/sentry-apps/{sentry_app_id_or_slug}/\n- \"Get team details?\" -> GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\n- \"Create a external-team?\" -> POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/\n- \"Update a external-team?\" -> PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\n- \"Delete a external-team?\" -> DELETE /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\n- \"Create a project?\" -> POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\n- \"List all repos?\" -> GET /api/0/organizations/{organization_id_or_slug}/repos/\n- \"List all dsyms?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\n- \"Create a dsym?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\n- \"Search users?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/users/\n- \"List all values?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/tags/{key}/values/\n- \"List all stats?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/stats/\n- \"List all user-feedback?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/\n- \"Create a user-feedback?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/\n- \"List all hooks?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/\n- \"Create a hook?\" -> POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/\n- \"Get hook details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\n- \"Update a hook?\" -> PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\n- \"Delete a hook?\" -> DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\n- \"Get event details?\" -> GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/\n- \"List all hashes?\" -> GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/hashes/\n- \"Get issue details?\" -> GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\n- \"Update a issue?\" -> PUT /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\n- \"Delete a issue?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\n- \"Search releases?\" -> GET /api/0/organizations/{organization_id_or_slug}/releases/\n- \"Create a release?\" -> POST /api/0/organizations/{organization_id_or_slug}/releases/\n- \"List all files?\" -> GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/\n- \"Create a file?\" -> POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/\n- \"Get file details?\" -> GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\n- \"Update a file?\" -> PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\n- \"Delete a file?\" -> DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\n- \"List all commitfiles?\" -> GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/commitfiles/\n- \"List all sentry-app-installations?\" -> GET /api/0/organizations/{organization_id_or_slug}/sentry-app-installations/\n- \"Create a external-issue?\" -> POST /api/0/sentry-app-installations/{uuid}/external-issues/\n- \"Delete a external-issue?\" -> DELETE /api/0/sentry-app-installations/{uuid}/external-issues/{external_issue_id}/\n- \"Create a spike-protection?\" -> POST /api/0/organizations/{organization_id_or_slug}/spike-protections/\n- \"List all autofix?\" -> GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\n- \"Create a autofix?\" -> POST /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\n- \"List all external-issues?\" -> GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/external-issues/\n- \"Get tag details?\" -> GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/\n- \"How to authenticate?\" -> See Auth section above\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Paginated endpoints accept limit/offset or cursor parameters\n- Create/update endpoints return the modified resource on success\n- Error responses include status codes and descriptions in the spec\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api API Reference\n@base https://us.sentry.io\n@version v0\n@auth Bearer bearer | Bearer DSN\n@common_fields {organization_id_or_slug: str # The ID or slug of the organization the resource belongs to.}\n@endpoints 218\n@hint download_for_search\n@toc api(218)\n\n@endpoint GET /api/0/organizations/\n@desc Return a list of organizations available to the authenticated session in a region.\n@optional {owner: bool # Specify `true` to restrict results to organizations in which you are an owner., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Valid query fields include: - `id`: The organization ID - `slug`: The organization slug - `status`: The organization's current status (one of `active`, `pending_deletion`, or `deletion_in_progress`) - `email` or `member_id`: Filter your organizations by the emails or [organization member IDs](/api/organizations/list-an-organizations-members/) of specific members included - `platform`: Filter your organizations to those with at least one project using this platform - `query`: Filter your organizations by name, slug, and members that contain this substring  Example: `query=(slug:foo AND status:active) OR (email:[thing-one@example.com,thing-two@example.com] AND query:bar)`, sortBy: str # The field to sort results by, in descending order. If not specified the results are sorted by the date they were created.  Valid fields include: - `members`: By number of members - `projects`: By number of projects - `events`: By number of events in the past 24 hours}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/\n@desc Return details on an individual organization, including various details\n@optional {detailed: str # Specify `\"0\"` to return organization details that do not include projects or teams.}\n@returns(200) {features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/\n@desc Update various attributes and configurable settings for the given organization.\n@optional {slug: str # The new slug for the organization, which needs to be unique., name: str # The new name for the organization., isEarlyAdopter: bool # Specify `true` to opt-in to new features before they're released to the public., hideAiFeatures: bool # Specify `true` to hide AI features from the organization., codecovAccess: bool # Specify `true` to enable Code Coverage Insights. This feature is only available for organizations on the Team plan and above. Learn more about Codecov [here](/product/codecov/)., defaultRole: str(member/admin/manager/owner) # The default role new members will receive.  * `member` - Member * `admin` - Admin * `manager` - Manager * `owner` - Owner, openMembership: bool # Specify `true` to allow organization members to freely join any team., eventsMemberAdmin: bool # Specify `true` to allow members to delete events (including the delete & discard action) by granting them the `event:admin` scope., alertsMemberWrite: bool # Specify `true` to allow members to create, edit, and delete alert rules by granting them the `alerts:write` scope., attachmentsRole: str(member/admin/manager/owner) # The role required to download event attachments, such as native crash reports or log files.  * `member` - Member * `admin` - Admin * `manager` - Manager * `owner` - Owner, debugFilesRole: str(member/admin/manager/owner) # The role required to download debug information files, ProGuard mappings and source maps.  * `member` - Member * `admin` - Admin * `manager` - Manager * `owner` - Owner, hasGranularReplayPermissions: bool # Specify `true` to enable granular replay permissions, allowing per-member access control for replay data., replayAccessMembers: [int] # A list of user IDs who have permission to access replay data. Requires the hasGranularReplayPermissions flag to be true to be enforced., avatarType: str(letter_avatar/upload) # The type of display picture for the organization.  * `letter_avatar` - Use initials * `upload` - Upload an image, avatar: str # The image to upload as the organization avatar, in base64. Required if `avatarType` is `upload`., require2FA: bool # Specify `true` to require and enforce two-factor authentication for all members., allowSharedIssues: bool # Specify `true` to allow sharing of limited details on issues to anonymous users., enhancedPrivacy: bool # Specify `true` to enable enhanced privacy controls to limit personally identifiable information (PII) as well as source code in things like notifications., scrapeJavaScript: bool # Specify `true` to allow Sentry to scrape missing JavaScript source context when possible., storeCrashReports: int(0/1/5/10/20/50/100/-1) # How many native crash reports (such as Minidumps for improved processing and download in issue details) to store per issue.  * `0` - Disabled * `1` - 1 per issue * `5` - 5 per issue * `10` - 10 per issue * `20` - 20 per issue * `50` - 50 per issue * `100` - 100 per issue * `-1` - Unlimited, allowJoinRequests: bool # Specify `true` to allow users to request to join your organization., dataScrubber: bool # Specify `true` to require server-side data scrubbing for all projects., dataScrubberDefaults: bool # Specify `true` to apply the default scrubbers to prevent things like passwords and credit cards from being stored for all projects., sensitiveFields: [str] # A list of additional global field names to match against when scrubbing data for all projects., safeFields: [str] # A list of global field names which data scrubbers should ignore., scrubIPAddresses: bool # Specify `true` to prevent IP addresses from being stored for new events on all projects., relayPiiConfig: str # Advanced data scrubbing rules that can be configured for each project as a JSON string. The new rules will only apply to new incoming events. For more details on advanced data scrubbing, see our [full documentation](/security-legal-pii/scrubbing/advanced-datascrubbing/).  > Warning: Calling this endpoint with this field fully overwrites the advanced data scrubbing rules.  Below is an example of a payload for a set of advanced data scrubbing rules for masking credit card numbers from the log message (equivalent to `[Mask] [Credit card numbers] from [$message]` in the Sentry app) and removing a specific key called `foo` (equivalent to `[Remove] [Anything] from [extra.foo]` in the Sentry app): ```json {     relayPiiConfig: \"{\\\"rules\":{\\\"0\\\":{\\\"type\\\":\\\"creditcard\\\",\\\"redaction\\\":{\\\"method\\\":\\\"mask\\\"}},\\\"1\\\":{\\\"type\\\":\\\"anything\\\",\\\"redaction\\\":{\\\"method\\\":\\\"remove\\\"}}},\\\"applications\\\":{\\\"$message\\\":[\\\"0\\\"],\\\"extra.foo\\\":[\\\"1\\\"]}}\" } ```, trustedRelays: [map] # A list of local Relays (the name, public key, and description as a JSON) registered for the organization. This feature is only available for organizations on the Business and Enterprise plans. Read more about Relay [here](/product/relay/).                                            Below is an example of a list containing a single local Relay registered for the organization:                                           ```json                                           {                                             trustedRelays: [                                                 {                                                     name: \"my-relay\",                                                     publicKey: \"eiwr9fdruw4erfh892qy4493reyf89ur34wefd90h\",                                                     description: \"Configuration for my-relay.\"                                                 }                                             ]                                           }                                           ```, githubPRBot: bool # Specify `true` to allow Sentry to comment on recent pull requests suspected of causing issues. Requires a GitHub integration., githubNudgeInvite: bool # Specify `true` to allow Sentry to detect users committing to your GitHub repositories that are not part of your Sentry organization. Requires a GitHub integration., gitlabPRBot: bool # Specify `true` to allow Sentry to comment on recent pull requests suspected of causing issues. Requires a GitLab integration., issueAlertsThreadFlag: bool # Specify `true` to allow the Sentry Slack integration to post replies in threads for an Issue Alert notification. Requires a Slack integration., metricAlertsThreadFlag: bool # Specify `true` to allow the Sentry Slack integration to post replies in threads for a Metric Alert notification. Requires a Slack integration., cancelDeletion: bool # Specify `true` to restore an organization that is pending deletion.}\n@returns(200) {features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool, role: any, orgRole: str, targetSampleRate: num(double), samplingMode: str, planSampleRate: num(double), desiredSampleRate: num(double), experiments: map, isDefault: bool, defaultRole: str, orgRoleList: [map], teamRoleList: [map], openMembership: bool, allowSharedIssues: bool, enhancedPrivacy: bool, dataScrubber: bool, dataScrubberDefaults: bool, sensitiveFields: [str], safeFields: [str], storeCrashReports: int, attachmentsRole: str, debugFilesRole: str, eventsMemberAdmin: bool, alertsMemberWrite: bool, scrubIPAddresses: bool, scrapeJavaScript: bool, allowJoinRequests: bool, relayPiiConfig: str?, trustedRelays: [map], pendingAccessRequests: int, codecovAccess: bool, hideAiFeatures: bool, githubPRBot: bool, githubNudgeInvite: bool, gitlabPRBot: bool, aggregatedDataConsent: bool, isDynamicallySampled: bool, issueAlertsThreadFlag: bool, metricAlertsThreadFlag: bool, requiresSso: bool, defaultAutofixAutomationTuning: str, defaultSeerScannerAutomation: bool, enableSeerEnhancedAlerts: bool, enableSeerCoding: bool, defaultCodingAgent: str?, defaultCodingAgentIntegrationId: int?, autoEnableCodeReview: bool, autoOpenPrs: bool, defaultCodeReviewTriggers: [str], teams: [map], projects: [map]}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 413: Image too large.}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/alert-rules/\n@desc ## Deprecated\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/alert-rules/\n@desc ## Deprecated\n@required {name: str # The name for the rule, which has a maximimum length of 256 characters., aggregate: str # A string representing the aggregate function used in this alert rule. Valid aggregate functions are `count`, `count_unique`, `percentage`, `avg`, `apdex`, `failure_rate`, `p50`, `p75`, `p95`, `p99`, `p100`, and `percentile`. See [Metric Alert Rule Types](#metric-alert-rule-types) for valid configurations., timeWindow: int(1/5/10/15/30/60/120/240/1440) # The time period to aggregate over.  * `1` - 1 minute * `5` - 5 minutes * `10` - 10 minutes * `15` - 15 minutes * `30` - 30 minutes * `60` - 1 hour * `120` - 2 hours * `240` - 4 hours * `1440` - 24 hours, projects: [str] # Metric alerts are currently limited to one project. The array should contain a single slug, representing the project to filter by., query: str # An event search query to subscribe to and monitor for alerts. For example, to filter transactions so that only those with status code 400 are included, you could use `\"query\": \"http.status_code:400\"`. Use an empty string for no filter., thresholdType: int(0/1) # The comparison operator for the critical and warning thresholds. The comparison operator for the resolved threshold is automatically set to the opposite operator. When a percentage change threshold is used, `0` is equivalent to \"Higher than\" and `1` is equivalent to \"Lower than\".  * `0` - Above * `1` - Below, triggers: [any] # A list of triggers, where each trigger is an object with the following fields: - `label`: One of `critical` or `warning`. A `critical` trigger is always required. - `alertThreshold`: The value that the subscription needs to reach to trigger the alert rule. - `actions`: A list of actions that take place when the threshold is met. ```json triggers: [     {         \"label\": \"critical\",         \"alertThreshold\": 50,         \"actions\": [             {                 \"type\": \"slack\",                 \"targetType\": \"specific\",                 \"targetIdentifier\": \"#get-crit\",                 \"inputChannelId\": 2454362                 \"integrationId\": 653532,             }         ]     },     {         \"label\": \"warning\",         \"alertThreshold\": 25,         \"actions\": []     } ] ``` Metric alert rule trigger actions follow the following structure: - `type`: The type of trigger action. Valid values are `email`, `slack`, `msteams`, `pagerduty`, `sentry_app`, `sentry_notification`, and `opsgenie`. - `targetType`: The type of target the notification will be sent to. Valid values are `specific` (`targetIdentifier` is a direct reference used by the service, like an email address or a Slack channel ID), `user` (`targetIdentifier` is a Sentry user ID), `team` (`targetIdentifier` is a Sentry team ID), and `sentry_app` (`targetIdentifier` is a SentryApp ID). - `targetIdentifier`: The ID of the target. This must be an integer for PagerDuty and Sentry apps, and a string for all others. Examples of appropriate values include a Slack channel name (`#my-channel`), a user ID, a team ID, a Sentry app ID, etc. - `inputChannelId`: The ID of the Slack channel. This is only used for the Slack action, and can be used as an alternative to providing the `targetIdentifier`. - `integrationId`: The integration ID. This is required for every action type excluding `email` and `sentry_app.` - `sentryAppId`: The ID of the Sentry app. This is required when `type` is `sentry_app`. - `priority`: The severity of the Pagerduty alert or the priority of the Opsgenie alert (optional). Defaults for Pagerduty are `critical` for critical and `warning` for warning. Defaults for Opsgenie are `P1` for critical and `P2` for warning.}\n@optional {environment: str # The name of the environment to filter by. Defaults to all environments., dataset: str # The name of the dataset that this query will be executed on. Valid values are `events`, `transactions`, `metrics`, `sessions`, and `generic-metrics`. Defaults to `events`. See [Metric Alert Rule Types](#metric-alert-rule-types) for valid configurations., queryType: int(0/1/2) # The type of query. If no value is provided, `queryType` is set to the default for the specified `dataset.` See [Metric Alert Rule Types](#metric-alert-rule-types) for valid configurations.  * `0` - event.type:error * `1` - event.type:transaction * `2` - None, eventTypes: [str] # List of event types that this alert will be related to. Valid values are `default` (events captured using [Capture Message](/product/sentry-basics/integrate-backend/capturing-errors/#capture-message)), `error` and `transaction`., comparisonDelta: int # An optional int representing the time delta to use as the comparison period, in minutes. Required when using a percentage change threshold (\"x%\" higher or lower compared to `comparisonDelta` minutes ago). A percentage change threshold cannot be used for [Crash Free Session Rate](#crash-free-session-rate) or [Crash Free User Rate](#crash-free-user-rate)., resolveThreshold: num(double) # Optional value that the metric needs to reach to resolve the alert. If no value is provided, this is set automatically based on the lowest severity trigger's `alertThreshold`. For example, if the alert is set to trigger at the warning level when the number of errors is above 50, then the alert would be set to resolve when there are less than 50 errors. If `thresholdType` is `0`, `resolveThreshold` must be greater than the critical threshold, otherwise, it must be less than the critical threshold., owner: str # The ID of the team or user that owns the rule.}\n@returns(201) {environment: str?, projects: [str]?, queryType: int?, resolveThreshold: num(double)?, dataset: str?, thresholdType: int?, eventTypes: [str]?, owner: str?, originalAlertRuleId: str?, comparisonDelta: num(double)?, snooze: bool?, errors: [str]?, extrapolationMode: str?, id: str, name: str, organizationId: str, query: str, aggregate: str, timeWindow: num(double), triggers: [map], dateModified: str(date-time), dateCreated: str(date-time), createdBy: map}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\n@desc ## Deprecated\n@required {alert_rule_id: int # The ID of the rule you'd like to query.}\n@returns(200) {environment: str?, projects: [str]?, queryType: int?, resolveThreshold: num(double)?, dataset: str?, thresholdType: int?, eventTypes: [str]?, owner: str?, originalAlertRuleId: str?, comparisonDelta: num(double)?, snooze: bool?, errors: [str]?, extrapolationMode: str?, id: str, name: str, organizationId: str, query: str, aggregate: str, timeWindow: num(double), triggers: [map], dateModified: str(date-time), dateCreated: str(date-time), createdBy: map}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\n@desc ## Deprecated\n@required {alert_rule_id: int # The ID of the rule you'd like to query., name: str # The name for the rule., aggregate: str # A string representing the aggregate function used in this alert rule. Valid aggregate functions are `count`, `count_unique`, `percentage`, `avg`, `apdex`, `failure_rate`, `p50`, `p75`, `p95`, `p99`, `p100`, and `percentile`. See **Metric Alert Rule Types** under [Create a Metric Alert Rule](/api/alerts/create-a-metric-alert-rule-for-an-organization/#metric-alert-rule-types) for valid configurations., timeWindow: int(1/5/10/15/30/60/120/240/1440) # The time period to aggregate over.  * `1` - 1 minute * `5` - 5 minutes * `10` - 10 minutes * `15` - 15 minutes * `30` - 30 minutes * `60` - 1 hour * `120` - 2 hours * `240` - 4 hours * `1440` - 24 hours, projects: [str] # The names of the projects to filter by., query: str # An event search query to subscribe to and monitor for alerts. For example, to filter transactions so that only those with status code 400 are included, you could use `\"query\": \"http.status_code:400\"`. Use an empty string for no filter., thresholdType: int(0/1) # The comparison operator for the critical and warning thresholds. The comparison operator for the resolved threshold is automatically set to the opposite operator. When a percentage change threshold is used, `0` is equivalent to \"Higher than\" and `1` is equivalent to \"Lower than\".  * `0` - Above * `1` - Below, triggers: [any] # A list of triggers, where each trigger is an object with the following fields: - `label`: One of `critical` or `warning`. A `critical` trigger is always required. - `alertThreshold`: The value that the subscription needs to reach to trigger the alert rule. - `actions`: A list of actions that take place when the threshold is met. ```json triggers: [     {         \"label\": \"critical\",         \"alertThreshold\": 100,         \"actions\": [             {                 \"type\": \"email\",                 \"targetType\": \"user\",                 \"targetIdentifier\": \"23489853\",                 \"inputChannelId\": None                 \"integrationId\": None,                 \"sentryAppId\": None             }         ]     },     {         \"label\": \"warning\",         \"alertThreshold\": 75,         \"actions\": []     } ] ``` Metric alert rule trigger actions follow the following structure: - `type`: The type of trigger action. Valid values are `email`, `slack`, `msteams`, `pagerduty`, `sentry_app`, `sentry_notification`, and `opsgenie`. - `targetType`: The type of target the notification will be sent to. Valid values are `specific`, `user`, `team`, and `sentry_app`. - `targetIdentifier`: The ID of the target. This must be an integer for PagerDuty and Sentry apps, and a string for all others. Examples of appropriate values include a Slack channel name (`#my-channel`), a user ID, a team ID, a Sentry app ID, etc. - `inputChannelId`: The ID of the Slack channel. This is only used for the Slack action, and can be used as an alternative to providing the `targetIdentifier`. - `integrationId`: The integration ID. This is required for every action type except `email` and `sentry_app.` - `sentryAppId`: The ID of the Sentry app. This is required when `type` is `sentry_app`. - `priority`: The severity of the Pagerduty alert or the priority of the Opsgenie alert (optional). Defaults for Pagerduty are `critical` for critical and `warning` for warning. Defaults for Opsgenie are `P1` for critical and `P2` for warning.}\n@optional {environment: str # The name of the environment to filter by. Defaults to all environments., dataset: str # The name of the dataset that this query will be executed on. Valid values are `events`, `transactions`, `metrics`, `sessions`, and `generic-metrics`. Defaults to `events`. See **Metric Alert Rule Types** under [Create a Metric Alert Rule](/api/alerts/create-a-metric-alert-rule-for-an-organization/#metric-alert-rule-types) for valid configurations., queryType: int(0/1/2) # The type of query. If no value is provided, `queryType` is set to the default for the specified `dataset.` See **Metric Alert Rule Types** under [Create a Metric Alert Rule](/api/alerts/create-a-metric-alert-rule-for-an-organization/#metric-alert-rule-types) for valid configurations.  * `0` - event.type:error * `1` - event.type:transaction * `2` - None, eventTypes: [str] # List of event types that this alert will be related to. Valid values are `default` (events captured using [Capture Message](/product/sentry-basics/integrate-backend/capturing-errors/#capture-message)), `error` and `transaction`., comparisonDelta: int # An optional int representing the time delta to use as the comparison period, in minutes. Required when using a percentage change threshold (\"x%\" higher or lower compared to `comparisonDelta` minutes ago). A percentage change threshold cannot be used for [Crash Free Session Rate](/api/alerts/create-a-metric-alert-rule-for-an-organization/#crash-free-session-rate) or [Crash Free User Rate](/api/alerts/create-a-metric-alert-rule-for-an-organization/#crash-free-user-rate)., resolveThreshold: num(double) # Optional value that the metric needs to reach to resolve the alert. If no value is provided, this is set automatically based on the lowest severity trigger's `alertThreshold`. For example, if the alert is set to trigger at the warning level when the number of errors is above 50, then the alert would be set to resolve when there are less than 50 errors. If `thresholdType` is `0`, `resolveThreshold` must be greater than the critical threshold. Otherwise, it must be less than the critical threshold., owner: str # The ID of the team or user that owns the rule.}\n@returns(200) {environment: str?, projects: [str]?, queryType: int?, resolveThreshold: num(double)?, dataset: str?, thresholdType: int?, eventTypes: [str]?, owner: str?, originalAlertRuleId: str?, comparisonDelta: num(double)?, snooze: bool?, errors: [str]?, extrapolationMode: str?, id: str, name: str, organizationId: str, query: str, aggregate: str, timeWindow: num(double), triggers: [map], dateModified: str(date-time), dateCreated: str(date-time), createdBy: map}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/alert-rules/{alert_rule_id}/\n@desc ## Deprecated\n@required {alert_rule_id: int # The ID of the rule you'd like to query.}\n@returns(202) Accepted\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/config/integrations/\n@desc Get integration provider information about all available integrations for an organization.\n@optional {providerKey: str # Specific integration provider to filter by such as `slack`. See our [Integrations Documentation](/product/integrations/) for an updated list of providers.}\n@returns(200) {providers: [map]}\n@errors {404: Bad Request}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/dashboards/\n@desc Retrieve a list of custom dashboards that are associated with the given organization.\n@optional {per_page: int # Limit the number of rows to return in the result. Default and maximum allowed is 100., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/dashboards/\n@desc Create a new dashboard for the given Organization\n@required {title: str # The user defined title for this dashboard.}\n@optional {id: str # A dashboard's unique id., widgets: [map{id: str, title: str, description: str, thresholds: map, display_type: str, interval: str, queries: [map], widget_type: str, limit: int, layout: any, axis_range: str, legend_type: str}] # A json list of widgets saved in this dashboard., projects: [int] # The saved projects filter for this dashboard., environment: [str] # The saved environment filter for this dashboard., period: str # The saved time range period for this dashboard., start: str(date-time) # The saved start time for this dashboard., end: str(date-time) # The saved end time for this dashboard., filters: map # The saved filters for this dashboard., utc: bool # Setting that lets you display saved time range for this dashboard in UTC., permissions: any # Permissions that restrict users from editing dashboards, is_favorited: bool=false # Favorite the dashboard automatically for the request user}\n@returns(201) {environment: [str], period: str, utc: str, expired: bool, start: str(date-time), end: str(date-time), id: str, title: str, dateCreated: str, createdBy: map?{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, widgets: [map], projects: [int], filters: map{release: [str], releaseId: [str], globalFilter: [map]}, permissions: map?{isEditableByEveryone: bool, teamsWithEditAccess: [int]}, isFavorited: bool, prebuiltId: int?}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found, 409: Conflict}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\n@desc Return details about an organization's custom dashboard.\n@required {dashboard_id: int # The ID of the dashboard you'd like to retrieve.}\n@returns(200) {environment: [str], period: str, utc: str, expired: bool, start: str(date-time), end: str(date-time), id: str, title: str, dateCreated: str, createdBy: map?{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, widgets: [map], projects: [int], filters: map{release: [str], releaseId: [str], globalFilter: [map]}, permissions: map?{isEditableByEveryone: bool, teamsWithEditAccess: [int]}, isFavorited: bool, prebuiltId: int?}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\n@desc Edit an organization's custom dashboard as well as any bulk\n@required {dashboard_id: int # The ID of the dashboard you'd like to retrieve.}\n@optional {id: str # A dashboard's unique id., title: str # The user-defined dashboard title., widgets: [map{id: str, title: str, description: str, thresholds: map, display_type: str, interval: str, queries: [map], widget_type: str, limit: int, layout: any, axis_range: str, legend_type: str}] # A json list of widgets saved in this dashboard., projects: [int] # The saved projects filter for this dashboard., environment: [str] # The saved environment filter for this dashboard., period: str # The saved time range period for this dashboard., start: str(date-time) # The saved start time for this dashboard., end: str(date-time) # The saved end time for this dashboard., filters: map # The saved filters for this dashboard., utc: bool # Setting that lets you display saved time range for this dashboard in UTC., permissions: any # Permissions that restrict users from editing dashboards}\n@returns(200) {environment: [str], period: str, utc: str, expired: bool, start: str(date-time), end: str(date-time), id: str, title: str, dateCreated: str, createdBy: map?{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, widgets: [map], projects: [int], filters: map{release: [str], releaseId: [str], globalFilter: [map]}, permissions: map?{isEditableByEveryone: bool, teamsWithEditAccess: [int]}, isFavorited: bool, prebuiltId: int?}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/dashboards/{dashboard_id}/\n@desc Delete an organization's custom dashboard, or tombstone\n@required {dashboard_id: int # The ID of the dashboard you'd like to retrieve.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/detectors/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@optional {project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, query: str # An optional search query for filtering monitors.  Available fields are: - `name` - `type`: e.g. `error`, `metric_issue`, `issue_stream` - `assignee`: email, username, #team, me, none, sortBy: str # The property to sort results by. If not specified, the results are sorted by id.  Available fields are: - `name` - `id` - `type` - `connectedWorkflows` - `latestGroup` - `openIssues`  Prefix with `-` to sort in descending order., id: [int] # The ID of the monitor you'd like to query.}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/detectors/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {name: str # Name of the monitor., type: str # The type of monitor - `metric_issue`.}\n@optional {data_sources: [any] # The data sources for the monitor to use based on what you want to measure.              **Number of Errors Metric Monitor**             ```json                 [                     {                         \"aggregate\": \"count()\",                         \"dataset\" : \"events\",                         \"environment\": \"prod\",                         \"eventTypes\": [\"default\", \"error\"],                         \"query\": \"is:unresolved\",                         \"queryType\": 0,                         \"timeWindow\": 3600,                     },                 ],             ```              **Users Experiencing Errors Metric Monitor**             ```json                 [                     {                         \"aggregate\": \"count_unique(tags[sentry:user])\",                         \"dataset\" : \"events\",                         \"environment\": \"prod\",                         \"eventTypes\": [\"default\", \"error\"],                         \"query\": \"is:unresolved\",                         \"queryType\": 0,                         \"timeWindow\": 3600,                     },                 ],             ```               **Throughput Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"count(span.duration)\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```              **Duration Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"p95(span.duration)\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```              **Failure Rate Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"failure_rate()\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```              **Largest Contentful Paint Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"p95(measurements.lcp)\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```, config: map # The issue detection type configuration.               - `detectionType`                 - `static`: Threshold based monitor                 - `percent`: Change based monitor                 - `dynamic`: Dynamic monitor             - `comparisonDelta`: If selecting a **change** detection type, the comparison delta is the time period at which to compare against in minutes.             For example, a value of 3600 compares the metric tracked against data 1 hour ago.                 - `300`: 5 minutes                 - `900`: 15 minutes                 - `3600`: 1 hour                 - `86400`: 1 day                 - `604800`: 1 week                 - `2592000`: 1 month              **Threshold**             ```json             {                 \"detectionType\": \"static\",             }             ```             **Change**             ```json             {                 \"detectionType\": \"percent\",                 \"comparisonDelta\": 3600,             }             ```             **Dynamic**             ```json             {                 \"detectionType\": \"dynamic\",             }             ```, condition_group: any # Issue detection configuration for when to create an issue and at what priority level.               - `logicType`: `any`             - `type`: Any of `gt` (greater than), `lte` (less than or equal), or `anomaly_detection` (dynamic)             - `comparison`: Any positive integer. This is threshold that must be crossed for the monitor to create an issue, e.g. \"Create a metric issue when there are more than 5 unresolved error events\".                 - If creating a **dynamic** monitor, see the options below.                     - `seasonality`: `auto`                     - `sensitivity`: Level of responsiveness. Options are one of `low`, `medium`, or `high`                     - `thresholdType`: If you want to be alerted to anomalies that are moving above, below, or in both directions in relation to your threshold.                         - `0`: Above                         - `1`: Below                         - `2`: Above and below              - `conditionResult`: The issue state change when the threshold is crossed.                 - `75`: High priority                 - `50`: Low priority                 - `0`: Resolved               **Threshold and Change Monitor**             ```json                 \"logicType\": \"any\",                 \"conditions\": [                     {                         \"type\": \"gt\",                         \"comparison\": 10,                         \"conditionResult\": 75                     },                     {                         \"type\": \"lte\",                         \"comparison\": 10,                         \"conditionResult\": 0                     }                 ],                 \"actions\": []             ```              **Threshold Monitor with Medium Priority**             ```json                 \"logicType\": \"any\",                 \"conditions\": [                     {                         type: \"gt\",                         comparison: 5,                         conditionResult: 75                     },                     {                         type: \"gt\",                         comparison: 2,                         conditionResult: 50                     },                     {                         type: \"lte\",                         comparison: 2,                         conditionResult: 0                     }                 ],                 \"actions\": []             ```              **Dynamic Monitor**             ```json                 \"logicType\": \"any\",                 \"conditions\": [                     {                         \"type\": \"anomaly_detection\",                         \"comparison\": {                             \"seasonality\": \"auto\",                             \"sensitivity\": \"medium\",                             \"thresholdType\": 2                         },                         \"conditionResult\": 75                     }                 ],                 \"actions\": []             ```, owner: str # The ID user or team who owns the monitor or alert prefaced by the string 'user' or 'team'.              **User**             ```json                 \"user:123456\"             ```              **Team**             ```json                 \"team:456789\"             ```, description: str # A description of the monitor. Will be used in the resulting issue., enabled: bool # Set to False if you want to disable the monitor.}\n@returns(201) {owner: map?{type: str, id: str, name: str, email: str}, createdBy: str?, latestGroup: map?, description: str?, id: str, projectId: str, name: str, type: str, workflowIds: [str]?, dateCreated: str(date-time), dateUpdated: str(date-time), dataSources: [map]?, conditionGroup: map?, config: map, enabled: bool, openIssues: int}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/detectors/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {enabled: bool # Whether to enable or disable the monitors}\n@optional {project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, query: str # An optional search query for filtering monitors.  Available fields are: - `name` - `type`: e.g. `error`, `metric_issue`, `issue_stream` - `assignee`: email, username, #team, me, none, id: [int] # The ID of the monitor you'd like to query.}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/detectors/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@optional {project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, query: str # An optional search query for filtering monitors.  Available fields are: - `name` - `type`: e.g. `error`, `metric_issue`, `issue_stream` - `assignee`: email, username, #team, me, none, sortBy: str # The property to sort results by. If not specified, the results are sorted by id.  Available fields are: - `name` - `id` - `type` - `connectedWorkflows` - `latestGroup` - `openIssues`  Prefix with `-` to sort in descending order., id: [int] # The ID of the monitor you'd like to query.}\n@returns(200) Success\n@returns(204) No Content\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {detector_id: int # The ID of the monitor you'd like to query.}\n@returns(200) {owner: map?{type: str, id: str, name: str, email: str}, createdBy: str?, latestGroup: map?, description: str?, id: str, projectId: str, name: str, type: str, workflowIds: [str]?, dateCreated: str(date-time), dateUpdated: str(date-time), dataSources: [map]?, conditionGroup: map?, config: map, enabled: bool, openIssues: int}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {detector_id: int # The ID of the monitor you'd like to query., name: str # Name of the monitor., type: str # The type of monitor - `metric_issue`.}\n@optional {data_sources: [any] # The data sources for the monitor to use based on what you want to measure.              **Number of Errors Metric Monitor**             ```json                 [                     {                         \"aggregate\": \"count()\",                         \"dataset\" : \"events\",                         \"environment\": \"prod\",                         \"eventTypes\": [\"default\", \"error\"],                         \"query\": \"is:unresolved\",                         \"queryType\": 0,                         \"timeWindow\": 3600,                     },                 ],             ```              **Users Experiencing Errors Metric Monitor**             ```json                 [                     {                         \"aggregate\": \"count_unique(tags[sentry:user])\",                         \"dataset\" : \"events\",                         \"environment\": \"prod\",                         \"eventTypes\": [\"default\", \"error\"],                         \"query\": \"is:unresolved\",                         \"queryType\": 0,                         \"timeWindow\": 3600,                     },                 ],             ```               **Throughput Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"count(span.duration)\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```              **Duration Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"p95(span.duration)\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```              **Failure Rate Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"failure_rate()\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```              **Largest Contentful Paint Metric Monitor**             ```json                 [                     {                         \"aggregate\":\"p95(measurements.lcp)\",                         \"dataset\":\"events_analytics_platform\",                         \"environment\":\"prod\",                         \"eventTypes\":[\"trace_item_span\"]                         \"query\":\"\",                         \"queryType\":1,                         \"timeWindow\":3600,                         \"extrapolationMode\":\"unknown\",                     },                 ],             ```, config: map # The issue detection type configuration.               - `detectionType`                 - `static`: Threshold based monitor                 - `percent`: Change based monitor                 - `dynamic`: Dynamic monitor             - `comparisonDelta`: If selecting a **change** detection type, the comparison delta is the time period at which to compare against in minutes.             For example, a value of 3600 compares the metric tracked against data 1 hour ago.                 - `300`: 5 minutes                 - `900`: 15 minutes                 - `3600`: 1 hour                 - `86400`: 1 day                 - `604800`: 1 week                 - `2592000`: 1 month              **Threshold**             ```json             {                 \"detectionType\": \"static\",             }             ```             **Change**             ```json             {                 \"detectionType\": \"percent\",                 \"comparisonDelta\": 3600,             }             ```             **Dynamic**             ```json             {                 \"detectionType\": \"dynamic\",             }             ```, condition_group: any # Issue detection configuration for when to create an issue and at what priority level.               - `logicType`: `any`             - `type`: Any of `gt` (greater than), `lte` (less than or equal), or `anomaly_detection` (dynamic)             - `comparison`: Any positive integer. This is threshold that must be crossed for the monitor to create an issue, e.g. \"Create a metric issue when there are more than 5 unresolved error events\".                 - If creating a **dynamic** monitor, see the options below.                     - `seasonality`: `auto`                     - `sensitivity`: Level of responsiveness. Options are one of `low`, `medium`, or `high`                     - `thresholdType`: If you want to be alerted to anomalies that are moving above, below, or in both directions in relation to your threshold.                         - `0`: Above                         - `1`: Below                         - `2`: Above and below              - `conditionResult`: The issue state change when the threshold is crossed.                 - `75`: High priority                 - `50`: Low priority                 - `0`: Resolved               **Threshold and Change Monitor**             ```json                 \"logicType\": \"any\",                 \"conditions\": [                     {                         \"type\": \"gt\",                         \"comparison\": 10,                         \"conditionResult\": 75                     },                     {                         \"type\": \"lte\",                         \"comparison\": 10,                         \"conditionResult\": 0                     }                 ],                 \"actions\": []             ```              **Threshold Monitor with Medium Priority**             ```json                 \"logicType\": \"any\",                 \"conditions\": [                     {                         type: \"gt\",                         comparison: 5,                         conditionResult: 75                     },                     {                         type: \"gt\",                         comparison: 2,                         conditionResult: 50                     },                     {                         type: \"lte\",                         comparison: 2,                         conditionResult: 0                     }                 ],                 \"actions\": []             ```              **Dynamic Monitor**             ```json                 \"logicType\": \"any\",                 \"conditions\": [                     {                         \"type\": \"anomaly_detection\",                         \"comparison\": {                             \"seasonality\": \"auto\",                             \"sensitivity\": \"medium\",                             \"thresholdType\": 2                         },                         \"conditionResult\": 75                     }                 ],                 \"actions\": []             ```, owner: str # The ID user or team who owns the monitor or alert prefaced by the string 'user' or 'team'.              **User**             ```json                 \"user:123456\"             ```              **Team**             ```json                 \"team:456789\"             ```, description: str # A description of the monitor. Will be used in the resulting issue., enabled: bool # Set to False if you want to disable the monitor.}\n@returns(200) {owner: map?{type: str, id: str, name: str, email: str}, createdBy: str?, latestGroup: map?, description: str?, id: str, projectId: str, name: str, type: str, workflowIds: [str]?, dateCreated: str(date-time), dateUpdated: str(date-time), dataSources: [map]?, conditionGroup: map?, config: map, enabled: bool, openIssues: int}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {detector_id: int # The ID of the monitor you'd like to query.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/discover/saved/\n@desc Retrieve a list of saved queries that are associated with the given organization.\n@optional {per_page: int # Limit the number of rows to return in the result. Default and maximum allowed is 100., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., query: str # The name of the Discover query you'd like to filter by., sortBy: str # The property to sort results by. If not specified, the results are sorted by query name.  Available fields are: - `name` - `dateCreated` - `dateUpdated` - `mostPopular` - `recentlyViewed` - `myqueries`}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/discover/saved/\n@desc Create a new saved query for the given organization.\n@required {name: str # The user-defined saved query name.}\n@optional {projects: [int] # The saved projects filter for this query., queryDataset: str(discover/error-events/transaction-like)=error-events # The dataset you would like to query. Note: `discover` is a **deprecated** value. The allowed values are: `error-events`, `transaction-like`  * `discover` * `error-events` * `transaction-like`, start: str(date-time) # The saved start time for this saved query., end: str(date-time) # The saved end time for this saved query., range: str # The saved time range period for this saved query., fields: [str] # The fields, functions, or equations that can be requested for the query. At most 20 fields can be selected per request. Each field can be one of the following types: - A built-in key field. See possible fields in the [properties table](/product/sentry-basics/search/searchable-properties/#properties-table), under any field that is an event property.     - example: `field=transaction` - A tag. Tags should use the `tag[]` formatting to avoid ambiguity with any fields     - example: `field=tag[isEnterprise]` - A function which will be in the format of `function_name(parameters,...)`. See possible functions in the [query builder documentation](/product/discover-queries/query-builder/#stacking-functions).     - when a function is included, Discover will group by any tags or fields     - example: `field=count_if(transaction.duration,greater,300)` - An equation when prefixed with `equation|`. Read more about [equations here](/product/discover-queries/query-builder/query-equations/).     - example: `field=equation|count_if(transaction.duration,greater,300) / count() * 100`, orderby: str # How to order the query results. Must be something in the `field` list, excluding equations., environment: [str] # The name of environments to filter by., query: str # Filters results by using [query syntax](/product/sentry-basics/search/)., yAxis: [str] # Aggregate functions to be plotted on the chart., display: str # Visualization type for saved query chart. Allowed values are: - default - previous - top5 - daily - dailytop5 - bar, topEvents: int # Number of top events' timeseries to be visualized., interval: str # Resolution of the time series.}\n@returns(201) {environment: [str], query: str, fields: [str], widths: [str], conditions: [str], aggregations: [str], range: str, start: str, end: str, orderby: str, limit: str, yAxis: [str], display: str, topEvents: int, interval: str, exploreQuery: map, id: str, name: str, projects: [int], version: int, queryDataset: str, datasetSource: str, expired: bool, dateCreated: str, dateUpdated: str, createdBy: map{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\n@desc Retrieve a saved query.\n@required {query_id: int # The ID of the Discover query you'd like to retrieve.}\n@returns(200) {environment: [str], query: str, fields: [str], widths: [str], conditions: [str], aggregations: [str], range: str, start: str, end: str, orderby: str, limit: str, yAxis: [str], display: str, topEvents: int, interval: str, exploreQuery: map, id: str, name: str, projects: [int], version: int, queryDataset: str, datasetSource: str, expired: bool, dateCreated: str, dateUpdated: str, createdBy: map{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\n@desc Modify a saved query.\n@required {query_id: int # The ID of the Discover query you'd like to retrieve., name: str # The user-defined saved query name.}\n@optional {projects: [int] # The saved projects filter for this query., queryDataset: str(discover/error-events/transaction-like)=error-events # The dataset you would like to query. Note: `discover` is a **deprecated** value. The allowed values are: `error-events`, `transaction-like`  * `discover` * `error-events` * `transaction-like`, start: str(date-time) # The saved start time for this saved query., end: str(date-time) # The saved end time for this saved query., range: str # The saved time range period for this saved query., fields: [str] # The fields, functions, or equations that can be requested for the query. At most 20 fields can be selected per request. Each field can be one of the following types: - A built-in key field. See possible fields in the [properties table](/product/sentry-basics/search/searchable-properties/#properties-table), under any field that is an event property.     - example: `field=transaction` - A tag. Tags should use the `tag[]` formatting to avoid ambiguity with any fields     - example: `field=tag[isEnterprise]` - A function which will be in the format of `function_name(parameters,...)`. See possible functions in the [query builder documentation](/product/discover-queries/query-builder/#stacking-functions).     - when a function is included, Discover will group by any tags or fields     - example: `field=count_if(transaction.duration,greater,300)` - An equation when prefixed with `equation|`. Read more about [equations here](/product/discover-queries/query-builder/query-equations/).     - example: `field=equation|count_if(transaction.duration,greater,300) / count() * 100`, orderby: str # How to order the query results. Must be something in the `field` list, excluding equations., environment: [str] # The name of environments to filter by., query: str # Filters results by using [query syntax](/product/sentry-basics/search/)., yAxis: [str] # Aggregate functions to be plotted on the chart., display: str # Visualization type for saved query chart. Allowed values are: - default - previous - top5 - daily - dailytop5 - bar, topEvents: int # Number of top events' timeseries to be visualized., interval: str # Resolution of the time series.}\n@returns(200) {environment: [str], query: str, fields: [str], widths: [str], conditions: [str], aggregations: [str], range: str, start: str, end: str, orderby: str, limit: str, yAxis: [str], display: str, topEvents: int, interval: str, exploreQuery: map, id: str, name: str, projects: [int], version: int, queryDataset: str, datasetSource: str, expired: bool, dateCreated: str, dateUpdated: str, createdBy: map{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/discover/saved/{query_id}/\n@desc Delete a saved query.\n@required {query_id: int # The ID of the Discover query you'd like to retrieve.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/environments/\n@desc Lists an organization's environments.\n@optional {visibility: str(all/hidden/visible) # The visibility of the environments to filter by. Defaults to `visible`.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/eventids/{event_id}/\n@desc This resolves an event ID to the project slug and internal issue ID and internal event ID.\n@required {event_id: str # The event ID to look up.}\n@returns(200) {organizationSlug: str, projectSlug: str, groupId: str, eventId: str, event: map{id: str, groupID: str?, eventID: str, projectID: str, message: str?, title: str, location: str?, user: map?{id: str?, email: str?, username: str?, ip_address: str?, name: str?, geo: map?, data: map?}, tags: [map], platform: str, dateReceived: str(date-time)?, contexts: map?, size: int?, entries: [any], dist: str?, sdk: map, context: map?, packages: map, type: str, metadata: any, errors: [any], occurrence: any, _meta: map, crashFile: str?, culprit: str?, dateCreated: str(date-time), fingerprints: [str], groupingConfig: any, startTimestamp: str(date-time), endTimestamp: str(date-time), measurements: any, breakdowns: any}}\n@errors {404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/events/\n@desc Retrieves explore data for a given organization.\n@required {field: [str] # The fields, functions, or equations to request for the query. At most 20 fields can be selected per request. Each field can be one of the following types: - A built-in key field. See possible fields in the [properties table](/concepts/search/searchable-properties/), under any field that matches the dataset passed to the dataset parameter     - example: `field=transaction` - A tag. Tags should use the `tag[{name}, {type}]` formatting to avoid ambiguity with any fields,     - example: `field=tag[isEnterprise, string]`     - example: `field=tag[numberOfBytes, number]` - A function which will be in the format of `function_name(parameters,...)`. See possible functions in the [query builder documentation](/product/discover-queries/query-builder/#stacking-functions).     - when a function is included, Discover will group by any tags or fields     - example: `field=count_if(transaction.duration,greater,300)` - An equation when prefixed with `equation|`. Read more about [equations here](/product/discover-queries/query-builder/query-equations/).     - example: `field=equation|count_if(transaction.duration,greater,300) / count() * 100`, dataset: str(logs/profile_functions/spans/uptime_results) # Which dataset to query, changing datasets changes the available fields that can be queried}\n@optional {end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., environment: [str] # The name of environments to filter by., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., per_page: int # Limit the number of rows to return in the result. Default and maximum allowed is 100., query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`, sort: str # What to order the results of the query by. Must be something in the `field` list, excluding equations.}\n@returns(200) {data: [map], meta: map{fields: map, datasetReason: str, isMetricsData: bool, isMetricsExtractedData: bool}}\n@errors {400: Invalid Query, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/events-timeseries/\n@desc Retrieves explore data for a given organization as a timeseries.\n@required {dataset: str(logs/profile_functions/spans/uptime_results) # Which dataset to query, changing datasets changes the available fields that can be queried}\n@optional {end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., environment: [str] # The name of environments to filter by., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., topEvents: int # The number of top event results to return, must be between 1 and 10. When TopEvents is passed, both sort and groupBy are required parameters, comparisonDelta: int # The delta in seconds to return additional offset timeseries by, interval: int # The size of the bucket for the timeseries to have, must be a value smaller than the window being queried. If the interval is invalid a default interval will be selected instead, sort: str # What to order the results of the query by. Must be something in the `field` list, excluding equations., groupBy: [str] # List of fields to group by, *Required* for topEvents queries as this and sort determine what the top events are, yAxis: str # The aggregate field to create the timeseries for, defaults to `count()` when not included, query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`, disableAggregateExtrapolation: str(0/1) # Whether to disable the use of extrapolation and return the sampled values, due to sampling the number returned may be less than the actual values sent to Sentry, preventMetricAggregates: str(0/1) # Whether to throw an error when aggregates are passed in the query or groupBy, excludeOther: str(0/1) # Only applicable with TopEvents, whether to include the 'other' timeseries which represents all the events that aren't in the top groups.}\n@returns(200) {meta: map{dataset: str, start: num(double), end: num(double)}, timeSeries: [map]}\n@errors {400: Invalid Query, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/external-users/\n@desc Link a user from an external provider to a Sentry user.\n@required {user_id: int # The user ID in Sentry., external_name: str # The associated name for the provider., provider: str(github/github_enterprise/jira_server/slack/perforce/gitlab/msteams/custom_scm) # The provider of the external actor.  * `github` * `github_enterprise` * `jira_server` * `slack` * `perforce` * `gitlab` * `msteams` * `custom_scm`, integration_id: int # The Integration ID., id: int # The external actor ID.}\n@optional {external_id: str # The associated user ID for provider.}\n@returns(200) {externalId: str, userId: str, teamId: str, id: str, provider: str, externalName: str, integrationId: str}\n@returns(201) {externalId: str, userId: str, teamId: str, id: str, provider: str, externalName: str, integrationId: str}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\n@desc Update a user in an external provider that is currently linked to a Sentry user.\n@required {external_user_id: int # The ID of the external user object. This is returned when creating an external user., user_id: int # The user ID in Sentry., external_name: str # The associated name for the provider., provider: str(github/github_enterprise/jira_server/slack/perforce/gitlab/msteams/custom_scm) # The provider of the external actor.  * `github` * `github_enterprise` * `jira_server` * `slack` * `perforce` * `gitlab` * `msteams` * `custom_scm`, integration_id: int # The Integration ID., id: int # The external actor ID.}\n@optional {external_id: str # The associated user ID for provider.}\n@returns(200) {externalId: str, userId: str, teamId: str, id: str, provider: str, externalName: str, integrationId: str}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/external-users/{external_user_id}/\n@desc Delete the link between a user from an external provider and a Sentry user.\n@required {external_user_id: int # The ID of the external user object. This is returned when creating an external user.}\n@returns(204) No Content\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/forwarding/\n@desc Returns a list of data forwarders for an organization.\n@returns(200)\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/forwarding/\n@desc Creates a new data forwarder for an organization.\n@required {organization_id: int # The ID of the organization related to the data forwarder., provider: str(segment/sqs/splunk) # The provider of the data forwarder. One of \"segment\", \"sqs\", or \"splunk\".  * `segment` - Segment * `sqs` - Amazon SQS * `splunk` - Splunk}\n@optional {is_enabled: bool=true # Whether the data forwarder is enabled., enroll_new_projects: bool=false # Whether to enroll new projects automatically, after they're created., config: map # The configuration for the data forwarder, specific to the provider type.  For a 'sqs' provider, the required keys are queue_url, region, access_key, secret_key. If using a FIFO queue, you must also provide a message_group_id, though s3_bucket is optional.  For a 'segment' provider, the required keys are write_key.  For a 'splunk' provider, the required keys are instance_url, index, source, token., project_ids: [int] # The IDs of the projects connected to the data forwarder. Missing project IDs will be unenrolled if previously enrolled.}\n@returns(201) {id: str, organizationId: str, isEnabled: bool, enrollNewProjects: bool, enrolledProjects: [map], provider: str, config: map, projectConfigs: [map], dateAdded: str(date-time), dateUpdated: str(date-time)}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/\n@desc Updates a data forwarder for an organization or update a project-specific override.\n@required {data_forwarder_id: int # The ID of the data forwarder you'd like to query., organization_id: int # The ID of the organization related to the data forwarder., provider: str(segment/sqs/splunk) # The provider of the data forwarder. One of \"segment\", \"sqs\", or \"splunk\".  * `segment` - Segment * `sqs` - Amazon SQS * `splunk` - Splunk}\n@optional {is_enabled: bool=true # Whether the data forwarder is enabled., enroll_new_projects: bool=false # Whether to enroll new projects automatically, after they're created., config: map # The configuration for the data forwarder, specific to the provider type.  For a 'sqs' provider, the required keys are queue_url, region, access_key, secret_key. If using a FIFO queue, you must also provide a message_group_id, though s3_bucket is optional.  For a 'segment' provider, the required keys are write_key.  For a 'splunk' provider, the required keys are instance_url, index, source, token., project_ids: [int] # The IDs of the projects connected to the data forwarder. Missing project IDs will be unenrolled if previously enrolled.}\n@returns(200) {id: str, organizationId: str, isEnabled: bool, enrollNewProjects: bool, enrolledProjects: [map], provider: str, config: map, projectConfigs: [map], dateAdded: str(date-time), dateUpdated: str(date-time)}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/forwarding/{data_forwarder_id}/\n@desc Deletes a data forwarder for an organization. All project-specific overrides will be deleted as well.\n@required {data_forwarder_id: int # The ID of the data forwarder you'd like to query.}\n@returns(204) No Content\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/integrations/\n@desc Lists all the available Integrations for an Organization.\n@optional {providerKey: str # Specific integration provider to filter by such as `slack`. See our [Integrations Documentation](/product/integrations/) for an updated list of providers., features: [str] # Integration features to filter by. See our [Integrations Documentation](/product/integrations/) for an updated list of features. Current available ones are: - `alert-rule` - `chat-unfurl` - `codeowners` - `commits` - `data-forwarding` - `deployment` - `enterprise-alert-rule` - `enterprise-incident-management` - `incident-management` - `issue-basic` - `issue-sync` - `mobile` - `serverless` - `session-replay` - `stacktrace-link` - `ticket-rules`, includeConfig: bool # Specify `True` to fetch third-party integration configurations. Note that this can add several seconds to the response time., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\n@desc OrganizationIntegrationBaseEndpoints expect both Integration and\n@required {integration_id: str # The ID of the integration installed on the organization.}\n@returns(200) {id: str, name: str, icon: str?, domainName: str?, accountType: str?, scopes: [str]?, status: str, provider: any, configOrganization: any, configData: any, externalId: str, organizationId: int, organizationIntegrationStatus: str, gracePeriodEnd: str?}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/integrations/{integration_id}/\n@desc OrganizationIntegrationBaseEndpoints expect both Integration and\n@required {integration_id: str # The ID of the integration installed on the organization.}\n@returns(204) No Content\n@errors {404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/\n@desc Return a list of issues for an organization. All parameters are supplied as query string parameters. A default query of `is:unresolved` is applied. To return all results, use an empty query value (i.e. ``?query=`).\n@optional {environment: [str] # The name of environments to filter by., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., groupStatsPeriod: str(/14d/24h/auto) # The timeline on which stats for the groups should be presented., shortIdLookup: str(0/1) # If this is set to `1` then the query will be parsed for issue short IDs. These may ignore other filters (e.g. projects), which is why it is an opt-in., query: str=is:unresolved # An optional search query for filtering issues. A default query will apply if no view/query is set. For all results use this parameter with an empty string., viewId: str # The ID of the view to use. If no query is present, the view's query and filters will be applied., sort: str(date/freq/inbox/new/trends/user)=date # The sort order of the view. Options include 'Last Seen' (`date`), 'First Seen' (`new`), 'Trends' (`trends`), 'Events' (`freq`), 'Users' (`user`), and 'Date Added' (`inbox`)., limit: int=100 # The maximum number of issues to affect. The maximum is 100., expand: [str] # Additional data to include in the response., collapse: [str] # Fields to remove from the response to improve query performance., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/issues/\n@desc Bulk mutate various attributes on a maxmimum of 1000 issues.\n@required {inbox: bool # If true, marks the issue as reviewed by the requestor., status: str(resolved/unresolved/ignored/resolvedInNextRelease/muted) # Limit mutations to only issues with the given status.  * `resolved` * `unresolved` * `ignored` * `resolvedInNextRelease` * `muted`, statusDetails: any # Additional details about the resolution. Status detail updates that include release data are only allowed for issues within a single project., substatus: str(archived_until_escalating/archived_until_condition_met/archived_forever/escalating/ongoing/regressed/new) # The new substatus of the issue.  * `archived_until_escalating` * `archived_until_condition_met` * `archived_forever` * `escalating` * `ongoing` * `regressed` * `new`, hasSeen: bool # If true, marks the issue as seen by the requestor., isBookmarked: bool # If true, bookmarks the issue for the requestor., isPublic: bool # If true, publishes the issue., isSubscribed: bool # If true, subscribes the requestor to the issue., merge: bool # If true, merges the issues together., discard: bool # If true, discards the issues instead of updating them., assignedTo: str # The user or team that should be assigned to the issues. Values take the form of ``, `user:`, ``, ``, or `team:`., priority: str(low/medium/high) # The priority that should be set for the issues  * `low` * `medium` * `high`}\n@optional {environment: [str] # The name of environments to filter by., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, id: [int] # The list of issue IDs to mutate. It is optional for status updates, in which an implicit `update all` is assumed., query: str=is:unresolved # An optional search query for filtering issues. A default query will apply if no view/query is set. For all results use this parameter with an empty string., viewId: str # The ID of the view to use. If no query is present, the view's query and filters will be applied., sort: str(date/freq/inbox/new/trends/user)=date # The sort order of the view. Options include 'Last Seen' (`date`), 'First Seen' (`new`), 'Trends' (`trends`), 'Events' (`freq`), 'Users' (`user`), and 'Date Added' (`inbox`)., limit: int=100 # The maximum number of issues to affect. The maximum is 100.}\n@returns(200) {assignedTo: map{type: str, id: str, name: str, email: str}, discard: bool, hasSeen: bool, inbox: bool, isBookmarked: bool, isPublic: bool, isSubscribed: bool, merge: map{parent: str, children: [str]}, priority: str, shareId: str, status: str, statusDetails: map{inNextRelease: bool, inRelease: str, inCommit: map{commit: str, repository: str}, ignoreDuration: int, ignoreCount: int, ignoreWindow: int, ignoreUserCount: int, ignoreUserWindow: int}, subscriptionDetails: map{disabled: bool, reason: str}, substatus: str}\n@returns(204) No Content\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/issues/\n@desc Permanently remove the given issues. If IDs are provided, queries and filtering will be ignored. If any IDs are out of scope, the data won't be mutated but the endpoint will still produce a successful response. For example, if no issues were found matching the criteria, a HTTP 204 is returned.\n@optional {environment: [str] # The name of environments to filter by., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, id: [int] # The list of issue IDs to be removed. If not provided, it will attempt to remove the first 1000 issues., query: str=is:unresolved # An optional search query for filtering issues. A default query will apply if no view/query is set. For all results use this parameter with an empty string., viewId: str # The ID of the view to use. If no query is present, the view's query and filters will be applied., sort: str(date/freq/inbox/new/trends/user)=date # The sort order of the view. Options include 'Last Seen' (`date`), 'First Seen' (`new`), 'Trends' (`trends`), 'Events' (`freq`), 'Users' (`user`), and 'Date Added' (`inbox`)., limit: int=100 # The maximum number of issues to affect. The maximum is 100.}\n@returns(204) No Content\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/members/\n@desc List all organization members.\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/members/\n@desc Add or invite a member to an organization.\n@required {email: str(email) # The email address to send the invitation to.}\n@optional {orgRole: str(billing/member/manager/owner/admin)=member # The organization-level role of the new member. Roles include:  * `billing` - Can manage payment and compliance details. * `member` - Can view and act on events, as well as view most other data within the organization. * `manager` - Has full management access to all teams and projects. Can also manage         the organization's membership. * `owner` - Has unrestricted access to the organization, its data, and its         settings. Can add, modify, and delete projects and members, as well as         make billing and plan changes. * `admin` - Can edit global integrations, manage projects, and add/remove teams.         They automatically assume the Team Admin role for teams they join.         Note: This role can no longer be assigned in Business and Enterprise plans. Use `TeamRoles` instead., teamRoles: [map] # The team and team-roles assigned to the member. Team roles can be either:         - `contributor` - Can view and act on issues. Depending on organization settings, they can also add team members.         - `admin` - Has full management access to their team's membership and projects., sendInvite: bool=true # Whether or not to send an invite notification through email. Defaults to True., reinvite: bool # Whether or not to re-invite a user who has already been invited to the organization. Defaults to True.}\n@returns(201) {externalUsers: [map], id: str, email: str, name: str, user: map{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, orgRole: str, pending: bool, expired: bool, flags: map{idp:provisioned: bool, idp:role-restricted: bool, sso:linked: bool, sso:invalid: bool, member-limit:restricted: bool, partnership:restricted: bool}, dateCreated: str(date-time), inviteStatus: str, inviterName: str?}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\n@desc Retrieve an organization member's details.\n@required {member_id: str # The ID of the organization member.}\n@returns(200) {externalUsers: [map], role: str, roleName: str, id: str, email: str, name: str, user: map{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, orgRole: str, pending: bool, expired: bool, flags: map{idp:provisioned: bool, idp:role-restricted: bool, sso:linked: bool, sso:invalid: bool, member-limit:restricted: bool, partnership:restricted: bool}, dateCreated: str(date-time), inviteStatus: str, inviterName: str?, teams: [str], teamRoles: [map], invite_link: str?, isOnlyOwner: bool, orgRoleList: [map], teamRoleList: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\n@desc Update a member's [organization-level](https://docs.sentry.io/organization/membership/#organization-level-roles) and [team-level](https://docs.sentry.io/organization/membership/#team-level-roles) roles.\n@required {member_id: str # The ID of the member to update.}\n@optional {orgRole: str(billing/member/manager/owner/admin) # The organization role of the member. The options are:  * `billing` - Can manage payment and compliance details. * `member` - Can view and act on events, as well as view most other data within the organization. * `manager` - Has full management access to all teams and projects. Can also manage         the organization's membership. * `owner` - Has unrestricted access to the organization, its data, and its         settings. Can add, modify, and delete projects and members, as well as         make billing and plan changes. * `admin` - Can edit global integrations, manage projects, and add/remove teams.         They automatically assume the Team Admin role for teams they join.         Note: This role can no longer be assigned in Business and Enterprise plans. Use `TeamRoles` instead., teamRoles: [map] # Configures the team role of the member. The two roles are: - `contributor` - Can view and act on issues. Depending on organization settings, they can also add team members. - `admin` - Has full management access to their team's membership and projects. ```json {     \"teamRoles\": [         {             \"teamSlug\": \"ancient-gabelers\",             \"role\": \"admin\"         },         {             \"teamSlug\": \"powerful-abolitionist\",             \"role\": \"contributor\"         }     ] } ```}\n@returns(200) {externalUsers: [map], role: str, roleName: str, id: str, email: str, name: str, user: map{identities: [map], avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, orgRole: str, pending: bool, expired: bool, flags: map{idp:provisioned: bool, idp:role-restricted: bool, sso:linked: bool, sso:invalid: bool, member-limit:restricted: bool, partnership:restricted: bool}, dateCreated: str(date-time), inviteStatus: str, inviterName: str?, teams: [str], teamRoles: [map], invite_link: str?, isOnlyOwner: bool, orgRoleList: [map], teamRoleList: [map]}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/\n@desc Remove an organization member.\n@required {member_id: str # The ID of the member to delete.}\n@returns(204) No Content\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\n@desc This request can return various success codes depending on the context of the team:\n@required {member_id: str # The ID of the organization member to add to the team, team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(201) {id: str, slug: str, name: str, dateCreated: str(date-time)?, isMember: bool, teamRole: str?, flags: map, access: [str], hasAccess: bool, isPending: bool, memberCount: int, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}}\n@returns(202) Accepted\n@returns(204) No Content\n@errors {401: Unauthorized, 403: This team is managed through your organization's identity provider, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\n@desc The relevant organization member must already be a part of the team.\n@required {member_id: str # The ID of the organization member to change, team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@optional {teamRole: str(contributor/admin)=contributor # The team-level role to switch to. Valid roles include:  * `contributor` - Contributors can view and act on events, as well as view most other data within the team's projects. * `admin` - Admin privileges on the team. They can create and remove projects, and can manage the team's memberships.}\n@returns(200) {isActive: bool, teamRole: str}\n@errors {400: Bad Request, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/members/{member_id}/teams/{team_id_or_slug}/\n@desc Delete an organization member from a team.\n@required {member_id: str # The ID of the organization member to delete from the team, team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(200) {id: str, slug: str, name: str, dateCreated: str(date-time)?, isMember: bool, teamRole: str?, flags: map, access: [str], hasAccess: bool, isPending: bool, memberCount: int, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}}\n@errors {400: Bad Request, 403: This team is managed through your organization's identity provider, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/monitors/\n@desc Lists monitors, including nested monitor environments. May be filtered to a project or environment.\n@optional {project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, environment: [str] # The name of environments to filter by., owner: str # The owner of the monitor, in the format `user:id` or `team:id`. May be specified multiple times., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/monitors/\n@desc Create a new monitor.\n@required {project: str # The project slug to associate the monitor to., name: str # Name of the monitor. Used for notifications. If not set the slug will be derived from your monitor name., config: any # The configuration for the monitor.}\n@optional {slug: str # Uniquely identifies your monitor within your organization. Changing this slug will require updates to any instrumented check-in calls., status: str(active/disabled)=active # Status of the monitor. Disabled monitors will not accept events and will not count towards the monitor quota.  * `active` * `disabled`, owner: str # The ID of the team or user that owns the monitor. (eg. user:51 or team:6), is_muted: bool # Disable creation of monitor incidents}\n@returns(201) {alertRule: map{targets: [map], environment: str}, id: str, name: str, slug: str, status: str, isMuted: bool, isUpserting: bool, config: map{schedule_type: str, schedule: any, checkin_margin: int?, max_runtime: int?, timezone: str?, failure_issue_threshold: int?, recovery_threshold: int?, alert_rule_id: int?}, dateCreated: str(date-time), project: map{stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str}, environments: map{name: str, status: str, isMuted: bool, dateCreated: str(date-time), lastCheckIn: str(date-time), nextCheckIn: str(date-time), nextCheckInLatest: str(date-time), activeIncident: map?{startingTimestamp: str(date-time), resolvingTimestamp: str(date-time), brokenNotice: map?{userNotifiedTimestamp: str(date-time), environmentMutedTimestamp: str(date-time)}}}, owner: map{type: str, id: str, name: str, email: str}}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\n@desc Retrieves details for a monitor.\n@required {monitor_id_or_slug: str # The ID or slug of the monitor.}\n@optional {environment: [str] # The name of environments to filter by.}\n@returns(200) {alertRule: map{targets: [map], environment: str}, id: str, name: str, slug: str, status: str, isMuted: bool, isUpserting: bool, config: map{schedule_type: str, schedule: any, checkin_margin: int?, max_runtime: int?, timezone: str?, failure_issue_threshold: int?, recovery_threshold: int?, alert_rule_id: int?}, dateCreated: str(date-time), project: map{stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str}, environments: map{name: str, status: str, isMuted: bool, dateCreated: str(date-time), lastCheckIn: str(date-time), nextCheckIn: str(date-time), nextCheckInLatest: str(date-time), activeIncident: map?{startingTimestamp: str(date-time), resolvingTimestamp: str(date-time), brokenNotice: map?{userNotifiedTimestamp: str(date-time), environmentMutedTimestamp: str(date-time)}}}, owner: map{type: str, id: str, name: str, email: str}}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\n@desc Update a monitor.\n@required {monitor_id_or_slug: str # The ID or slug of the monitor., project: str # The project slug to associate the monitor to., name: str # Name of the monitor. Used for notifications. If not set the slug will be derived from your monitor name., config: any # The configuration for the monitor.}\n@optional {slug: str # Uniquely identifies your monitor within your organization. Changing this slug will require updates to any instrumented check-in calls., status: str(active/disabled)=active # Status of the monitor. Disabled monitors will not accept events and will not count towards the monitor quota.  * `active` * `disabled`, owner: str # The ID of the team or user that owns the monitor. (eg. user:51 or team:6), is_muted: bool # Disable creation of monitor incidents}\n@returns(200) {alertRule: map{targets: [map], environment: str}, id: str, name: str, slug: str, status: str, isMuted: bool, isUpserting: bool, config: map{schedule_type: str, schedule: any, checkin_margin: int?, max_runtime: int?, timezone: str?, failure_issue_threshold: int?, recovery_threshold: int?, alert_rule_id: int?}, dateCreated: str(date-time), project: map{stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str}, environments: map{name: str, status: str, isMuted: bool, dateCreated: str(date-time), lastCheckIn: str(date-time), nextCheckIn: str(date-time), nextCheckInLatest: str(date-time), activeIncident: map?{startingTimestamp: str(date-time), resolvingTimestamp: str(date-time), brokenNotice: map?{userNotifiedTimestamp: str(date-time), environmentMutedTimestamp: str(date-time)}}}, owner: map{type: str, id: str, name: str, email: str}}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/\n@desc Delete a monitor or monitor environments.\n@required {monitor_id_or_slug: str # The ID or slug of the monitor.}\n@optional {environment: [str] # The name of environments to filter by.}\n@returns(202) Accepted\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\n@desc Retrieve a list of check-ins for a monitor\n@required {monitor_id_or_slug: str # The ID or slug of the monitor.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/\n@desc Returns all Spike Protection Notification Actions for an organization.\n@optional {project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, project_id_or_slug: [str] # The project slugs to filter by. Use `$all` to include all available projects. For example, the following are valid parameters: - `/?projectSlug=$all` - `/?projectSlug=android&projectSlug=javascript-react`, triggerType: str # Type of the trigger that causes the notification. The only supported value right now is: `spike-protection`}\n@returns(201)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/notifications/actions/\n@desc Creates a new Notification Action for Spike Protection.\n@required {trigger_type: str # Type of the trigger that causes the notification. The only supported trigger right now is: `spike-protection`., service_type: str # Service that is used for sending the notification. - `email` - `slack` - `sentry_notification` - `pagerduty` - `opsgenie`}\n@optional {integration_id: int # ID of the integration used as the notification service. See [List Integrations](https://docs.sentry.io/api/integrations/list-an-organizations-available-integrations/) to retrieve a full list of integrations.  Required if **service_type** is `slack`, `pagerduty` or `opsgenie`., target_identifier: str # ID of the notification target, like a Slack channel ID.  Required if **service_type** is `slack` or `opsgenie`., target_display: str # Name of the notification target, like a Slack channel name.  Required if **service_type** is `slack` or `opsgenie`., projects: [str] # List of projects slugs that the Notification Action is created for.}\n@returns(201)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\n@desc Returns a serialized Spike Protection Notification Action object.\n@required {action_id: int # ID of the notification action to retrieve}\n@returns(200)\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\n@desc Updates a Spike Protection Notification Action.\n@required {action_id: int # ID of the notification action to retrieve, trigger_type: str # Type of the trigger that causes the notification. The only supported trigger right now is: `spike-protection`., service_type: str # Service that is used for sending the notification. - `email` - `slack` - `sentry_notification` - `pagerduty` - `opsgenie`}\n@optional {integration_id: int # ID of the integration used as the notification service. See [List Integrations](https://docs.sentry.io/api/integrations/list-an-organizations-available-integrations/) to retrieve a full list of integrations.  Required if **service_type** is `slack`, `pagerduty` or `opsgenie`., target_identifier: str # ID of the notification target, like a Slack channel ID.  Required if **service_type** is `slack` or `opsgenie`., target_display: str # Name of the notification target, like a Slack channel name.  Required if **service_type** is `slack` or `opsgenie`., projects: [str] # List of projects slugs that the Notification Action is created for.}\n@returns(202)\n@errors {400: Bad Request}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/notifications/actions/{action_id}/\n@desc Deletes a Spike Protection Notification Action.\n@required {action_id: int # ID of the notification action to retrieve}\n@returns(204) No Content\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/install-details/\n@desc Retrieve install info for a given artifact.\n@required {artifact_id: str # The ID of the build artifact.}\n@returns(200) {buildId: str, state: str, appInfo: map{appId: str?, name: str?, version: str?, buildNumber: int?, artifactType: str?, dateAdded: str?, dateBuilt: str?}, gitInfo: map?{headSha: str?, baseSha: str?, provider: str?, headRepoName: str?, baseRepoName: str?, headRef: str?, baseRef: str?, prNumber: int?}, platform: str?, projectId: str, projectSlug: str, buildConfiguration: str?, isInstallable: bool, installUrl: str?, downloadCount: int, releaseNotes: str?, installGroups: [str]?, isCodeSignatureValid: bool?, profileName: str?, codesigningType: str?}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/preprodartifacts/{artifact_id}/size-analysis/\n@desc Retrieve size analysis results for a given artifact.\n@required {artifact_id: str # The ID of the build artifact.}\n@optional {baseArtifactId: str # Optional ID of the base artifact to compare against. If not provided, uses the default base head artifact.}\n@returns(200) {buildId: str, state: str, appInfo: map{appId: str?, name: str?, version: str?, buildNumber: int?, artifactType: str?, dateAdded: str?, dateBuilt: str?}, gitInfo: map?{headSha: str?, baseSha: str?, provider: str?, headRepoName: str?, baseRepoName: str?, headRef: str?, baseRef: str?, prNumber: int?}, errorCode: str?, errorMessage: str?, downloadSize: int?, installSize: int?, analysisDuration: num(double)?, analysisVersion: str?, baseBuildId: str?, baseAppInfo: map?{appId: str?, name: str?, version: str?, buildNumber: int?, artifactType: str?, dateAdded: str?, dateBuilt: str?}, insights: map?, appComponents: [map]?, comparisons: [map]?}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/\n@desc Retrieves repository data for a given owner.\n@required {owner: str # The owner of the repository.}\n@optional {limit: int # The number of results to return. If not specified, defaults to 20., navigation: str # Whether to get the previous or next page from paginated results. Use `next` for forward pagination after the cursor or `prev` for backward pagination before the cursor. If not specified, defaults to `next`. If no cursor is provided, the cursor is the beginning of the result set., cursor: str # The cursor pointing to a specific position in the result set to start the query from. Results after the cursor will be returned if used with `next` or before the cursor if used with `prev` for `navigation`., term: str # The term substring to filter name strings by using the `contains` operator.}\n@returns(200) {results: [map], pageInfo: map{endCursor: str?, startCursor: str?, hasPreviousPage: bool, hasNextPage: bool}, totalCount: int}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\n@desc Gets syncing status for repositories for an integrated organization.\n@required {owner: str # The owner of the repository.}\n@returns(200) {isSyncing: bool}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/sync/\n@desc Syncs repositories for an integrated organization with GitHub.\n@required {owner: str # The owner of the repository.}\n@returns(200) {isSyncing: bool}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repositories/tokens/\n@desc Retrieves a paginated list of repository tokens for a given owner.\n@required {owner: str # The owner of the repository.}\n@optional {limit: int # The number of results to return. If not specified, defaults to 20., navigation: str # Whether to get the previous or next page from paginated results. Use `next` for forward pagination after the cursor or `prev` for backward pagination before the cursor. If not specified, defaults to `next`. If no cursor is provided, the cursor is the beginning of the result set., cursor: str # The cursor pointing to a specific position in the result set to start the query from. Results after the cursor will be returned if used with `next` or before the cursor if used with `prev` for `navigation`., sortBy: str # The property to sort results by. If not specified, the default is `COMMIT_DATE` in descending order. Use `-`         for descending order.  Available fields are: - `NAME` - `COMMIT_DATE`}\n@returns(200) {results: [map], pageInfo: map{endCursor: str?, startCursor: str?, hasPreviousPage: bool, hasNextPage: bool}, totalCount: int}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/\n@desc Retrieves repository data for a single repository.\n@required {owner: str # The owner of the repository., repository: str # The name of the repository.}\n@returns(200) {uploadToken: str?, testAnalyticsEnabled: bool}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/branches/\n@desc Retrieves branch data for a given owner and repository.\n@required {owner: str # The owner of the repository., repository: str # The name of the repository.}\n@optional {limit: int # The number of results to return. If not specified, defaults to 20., navigation: str # Whether to get the previous or next page from paginated results. Use `next` for forward pagination after the cursor or `prev` for backward pagination before the cursor. If not specified, defaults to `next`. If no cursor is provided, the cursor is the beginning of the result set., cursor: str # The cursor pointing to a specific position in the result set to start the query from. Results after the cursor will be returned if used with `next` or before the cursor if used with `prev` for `navigation`., term: str # The term substring to filter name strings by using the `contains` operator.}\n@returns(200) {defaultBranch: str, results: [map], pageInfo: map{endCursor: str?, startCursor: str?, hasPreviousPage: bool, hasNextPage: bool}, totalCount: int}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results/\n@desc Retrieves the list of test results for a given repository and owner. Also accepts a number of query parameters to filter the results.\n@required {owner: str # The owner of the repository., repository: str # The name of the repository.}\n@optional {sortBy: str # The property to sort results by. If not specified, the default is `TOTAL_FAIL_COUNT` in descending order. Use `-`         for descending order.  Available fields are: - `AVG_DURATION` - `FLAKE_RATE` - `FAILURE_RATE` - `TOTAL_FAIL_COUNT` - `UPDATED_AT`, filterBy: str # An optional field to filter by, which will constrain the results to only include tests that match the filter.  Available fields are: - `FLAKY_TESTS` - `FAILED_TESTS` - `SLOWEST_TESTS` - `SKIPPED_TESTS`, interval: str # The time interval to search for results by.  Available fields are: - `INTERVAL_30_DAY` - `INTERVAL_7_DAY` - `INTERVAL_1_DAY`, branch: str # The branch to search for results by. If not specified, the default is all branches., limit: int # The number of results to return. If not specified, defaults to 20., navigation: str # Whether to get the previous or next page from paginated results. Use `next` for forward pagination after the cursor or `prev` for backward pagination before the cursor. If not specified, defaults to `next`. If no cursor is provided, the cursor is the beginning of the result set., cursor: str # The cursor pointing to a specific position in the result set to start the query from. Results after the cursor will be returned if used with `next` or before the cursor if used with `prev` for `navigation`., term: str # The term substring to filter name strings by using the `contains` operator.}\n@returns(200) {defaultBranch: str, results: [map], pageInfo: map{endCursor: str?, startCursor: str?, hasPreviousPage: bool, hasNextPage: bool}, totalCount: int}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-results-aggregates/\n@desc Retrieves aggregated test result metrics for a given repository and owner.\n@required {owner: str # The owner of the repository., repository: str # The name of the repository.}\n@optional {interval: str # The time interval to search for results by.  Available fields are: - `INTERVAL_30_DAY` - `INTERVAL_7_DAY` - `INTERVAL_1_DAY`, branch: str # The branch to search for results by. If not specified, the default is all branches.}\n@returns(200) {totalDuration: num(double), totalDurationPercentChange: num(double), slowestTestsDuration: num(double), slowestTestsDurationPercentChange: num(double), totalSlowTests: int, totalSlowTestsPercentChange: num(double), totalFails: int, totalFailsPercentChange: num(double), totalSkips: int, totalSkipsPercentChange: num(double), flakeCount: int, flakeCountPercentChange: num(double), flakeRate: num(double), flakeRatePercentChange: num(double)}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/test-suites/\n@desc Retrieves test suites belonging to a repository's test results.\n@required {owner: str # The owner of the repository., repository: str # The name of the repository.}\n@optional {term: str # The term substring to filter name strings by using the `contains` operator.}\n@returns(200) {testSuites: [str]}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/prevent/owner/{owner}/repository/{repository}/token/regenerate/\n@desc Regenerates a repository upload token and returns the new token.\n@required {owner: str # The owner of the repository., repository: str # The name of the repository.}\n@returns(200) {token: str}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/project-keys/\n@desc Return a list of client keys (DSNs) for all projects in an organization.\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., team: str # Filter keys by team slug or ID. If provided, only keys for projects belonging to this team will be returned., status: str(active/inactive) # Filter keys by status. Options are 'active' or 'inactive'.  * `active` * `inactive`}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/projects/\n@desc Return a list of projects bound to a organization.\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/relay_usage/\n@desc Return a list of trusted relays bound to an organization.\n@returns(200)\n@errors {404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/release-threshold-statuses/\n@desc **`[WARNING]`**: This API is an experimental Alpha feature and is subject to change!\n@required {start: str(date-time) # The start of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds. Use along with `end`., end: str(date-time) # The inclusive end of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds. Use along with `start`.}\n@optional {environment: [str] # A list of environment names to filter your results by., projectSlug: [str] # A list of project slugs to filter your results by., release: [str] # A list of release versions to filter your results by.}\n@returns(200)\n@errors {400: Bad Request}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/\n@desc Return details on an individual release.\n@required {version: str # The version identifier of the release}\n@optional {project_id: str # The project ID to filter by., health: bool # Whether or not to include health data with the release. By default, this is false., adoptionStages: bool # Whether or not to include adoption stages with the release. By default, this is false., summaryStatsPeriod: str(14d/1d/1h/24h/2d/30d/48h/7d/90d) # The period of time used to query summary stats for the release. By default, this is 14d., healthStatsPeriod: str(14d/1d/1h/24h/2d/30d/48h/7d/90d) # The period of time used to query health stats for the release. By default, this is 24h if health is enabled., sort: str(crash_free_sessions/crash_free_users/date/sessions/users) # The field used to sort results by. By default, this is `date`., status: str(archived/open) # Release statuses that you can filter by., query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`}\n@returns(200) {ref: str?, url: str?, dateReleased: str(date-time)?, dateCreated: str(date-time)?, dateStarted: str(date-time)?, owner: map?, lastCommit: map?, lastDeploy: map?{dateStarted: str?, url: str?, id: str, environment: str, dateFinished: str, name: str}, firstEvent: str(date-time)?, lastEvent: str(date-time)?, currentProjectMeta: map?, userAgent: str?, adoptionStages: map?, id: int, version: str, newGroups: int, status: str, shortVersion: str, versionInfo: map?{description: str, package: str?, version: map, buildHash: str?}, data: map, commitCount: int, deployCount: int, authors: [map], projects: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/\n@desc Update a release. This can change some metadata associated with\n@required {version: str # The version identifier of the release}\n@optional {ref: str # An optional commit reference. This is useful if a tagged version has been provided., url: str(uri) # A URL that points to the release. For instance, this can be the path to an online interface to the source code, such as a GitHub URL., dateReleased: str(date-time) # An optional date that indicates when the release went live.  If not provided the current time is used., commits: [map{id!: str, repository: str, message: str, author_name: str, author_email: str, timestamp: str(date-time), patch_set: [map]}] # An optional list of commit data to be associated., refs: [map{commit!: str, repository!: str, previousCommit: str}] # An optional way to indicate the start and end commits for each repository included in a release. Head commits must include parameters ``repository`` and ``commit`` (the HEAD SHA). For GitLab repositories, please use the Group name instead of the slug. They can optionally include ``previousCommit`` (the SHA of the HEAD of the previous release), which should be specified if this is the first time you've sent commit data.}\n@returns(200) {ref: str?, url: str?, dateReleased: str(date-time)?, dateCreated: str(date-time)?, dateStarted: str(date-time)?, owner: map?, lastCommit: map?, lastDeploy: map?{dateStarted: str?, url: str?, id: str, environment: str, dateFinished: str, name: str}, firstEvent: str(date-time)?, lastEvent: str(date-time)?, currentProjectMeta: map?, userAgent: str?, adoptionStages: map?, id: int, version: str, newGroups: int, status: str, shortVersion: str, versionInfo: map?{description: str, package: str?, version: map, buildHash: str?}, data: map, commitCount: int, deployCount: int, authors: [map], projects: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/\n@desc Permanently remove a release and all of its files.\n@required {version: str # The version identifier of the release}\n@returns(204) No Content\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\n@desc Returns a list of deploys based on the organization, version, and project.\n@required {version: str # The version identifier of the release}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/deploys/\n@desc Create a deploy for a given release.\n@required {version: str # The version identifier of the release, environment: str # The environment you're deploying to}\n@optional {name: str # The optional name of the deploy, url: str(uri) # The optional URL that points to the deploy, dateStarted: str(date-time) # An optional date that indicates when the deploy started, dateFinished: str(date-time) # An optional date that indicates when the deploy ended. If not provided, the current time is used., projects: [str] # The optional list of project slugs to create a deploy within. If not provided, deploys are created for all of the release's projects.}\n@returns(201) {id: str, environment: str, dateStarted: str(date-time)?, dateFinished: str(date-time), name: str?, url: str(uri)?}\n@errors {400: Bad Request}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/replay-count/\n@desc Return a count of replays for a list of issue or transaction IDs.\n@optional {environment: [str] # The name of environments to filter by., start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., project_id_or_slug: [str] # The project slugs to filter by. Use `$all` to include all available projects. For example, the following are valid parameters: - `/?projectSlug=$all` - `/?projectSlug=android&projectSlug=javascript-react`, query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/replay-selectors/\n@desc Return a list of selectors for a given organization.\n@optional {environment: [str] # The environment to filter by., statsPeriod: str # This defines the range of the time series, relative to now. The range is given in a `` format. For example `1d` for a one day range. Possible units are `m` for minutes, `h` for hours, `d` for days and `w` for weeks.You must either provide a `statsPeriod`, or a `start` and `end`., start: str(date-time) # This defines the start of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds.Use along with `end` instead of `statsPeriod`., end: str(date-time) # This defines the inclusive end of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds.Use along with `start` instead of `statsPeriod`., project: [int] # The ID of the projects to filter by., projectSlug: [str] # A list of project slugs to filter your results by., sort: str # The field to sort the output by., sortBy: str # The field to sort the output by., orderBy: str # The field to sort the output by., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., per_page: int # Limit the number of rows to return in the result. Default and maximum allowed is 100., query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`}\n@returns(200) {data: [map]}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/replays/\n@desc Return a list of replays belonging to an organization.\n@optional {statsPeriod: str # This defines the range of the time series, relative to now. The range is given in a `` format. For example `1d` for a one day range. Possible units are `m` for minutes, `h` for hours, `d` for days and `w` for weeks. You must either provide a `statsPeriod`, or a `start` and `end`., start: str(date-time) # This defines the start of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds. Use along with `end` instead of `statsPeriod`., end: str(date-time) # This defines the inclusive end of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds. Use along with `start` instead of `statsPeriod`., field: [str] # Specifies a field that should be marshaled in the output. Invalid fields will be rejected., project: [int] # The ID of the projects to filter by., projectSlug: [str] # A list of project slugs to filter your results by., environment: str # The environment to filter by., sort: str # The field to sort the output by., sortBy: str # The field to sort the output by., orderBy: str # The field to sort the output by., query: str # A structured query string to filter the output by., per_page: int # Limit the number of rows to return in the result., cursor: str # The cursor parameter is used to paginate results. See [here](https://docs.sentry.io/api/pagination/) for how to use this query parameter}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/replays/{replay_id}/\n@desc Return details on an individual replay.\n@required {replay_id: str(uuid) # The ID of the replay you'd like to retrieve.}\n@optional {statsPeriod: str # This defines the range of the time series, relative to now. The range is given in a `` format. For example `1d` for a one day range. Possible units are `m` for minutes, `h` for hours, `d` for days and `w` for weeks. You must either provide a `statsPeriod`, or a `start` and `end`., start: str(date-time) # This defines the start of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds. Use along with `end` instead of `statsPeriod`., end: str(date-time) # This defines the inclusive end of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds. Use along with `start` instead of `statsPeriod`., field: [str] # Specifies a field that should be marshaled in the output. Invalid fields will be rejected., project: [int] # The ID of the projects to filter by., projectSlug: [str] # A list of project slugs to filter your results by., environment: str # The environment to filter by., sort: str # The field to sort the output by., sortBy: str # The field to sort the output by., orderBy: str # The field to sort the output by., query: str # A structured query string to filter the output by., per_page: int # Limit the number of rows to return in the result., cursor: str # The cursor parameter is used to paginate results. See [here](https://docs.sentry.io/api/pagination/) for how to use this query parameter}\n@returns(200) {id: str, project_id: str, trace_ids: [str], error_ids: [str], environment: str?, tags: any, user: map{id: str?, username: str?, email: str?, ip: str?, display_name: str?, geo: map{city: str?, country_code: str?, region: str?, subdivision: str?}}, sdk: map{name: str?, version: str?}, os: map{name: str?, version: str?}, browser: map{name: str?, version: str?}, device: map{name: str?, brand: str?, model: str?, family: str?}, ota_updates: map{channel: str?, runtime_version: str?, update_id: str?}, is_archived: bool?, urls: [str]?, clicks: [map], count_dead_clicks: int?, count_rage_clicks: int?, count_errors: int?, duration: int?, finished_at: str?, started_at: str?, activity: int?, count_urls: int?, replay_type: str, count_segments: int?, platform: str?, releases: [str], dist: str?, count_warnings: int?, count_infos: int?, has_viewed: bool}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/repos/{repo_id}/commits/\n@desc List a Repository's Commits\n@required {repo_id: str # The repository ID.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\n@desc Returns a paginated list of teams bound to a organization with a SCIM Groups GET Request.\n@optional {startIndex: int=1 # SCIM 1-offset based index for pagination., count: int=100 # The maximum number of results the query should return, maximum of 100., filter: str # A SCIM filter expression. The only operator currently supported is `eq`., excludedAttributes: [str] # Fields that should be left off of return values. Right now the only supported field for this query is members.}\n@returns(200) {schemas: [str], totalResults: int, startIndex: int, itemsPerPage: int, Resources: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups\n@desc Create a new team bound to an organization via a SCIM Groups POST\n@required {displayName: str # The slug of the team that is shown in the UI.}\n@returns(201) {schemas: [str], id: str, displayName: str, meta: map{resourceType: str}, members: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\n@desc Query an individual team with a SCIM Group GET Request.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(200) {schemas: [str], id: str, displayName: str, meta: map{resourceType: str}, members: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\n@desc Update a team's attributes with a SCIM Group PATCH Request.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to., Operations: [map{op!: str, value: map, path: str}] # The list of operations to perform. Valid operations are: * Renaming a team: ```json {     \"Operations\": [{         \"op\": \"replace\",         \"value\": {             \"id\": 23,             \"displayName\": \"newName\"         }     }] } ``` * Adding a member to a team: ```json {     \"Operations\": [{         \"op\": \"add\",         \"path\": \"members\",         \"value\": [             {                 \"value\": 23,                 \"display\": \"testexample@example.com\"             }         ]     }] } ``` * Removing a member from a team: ```json {     \"Operations\": [{         \"op\": \"remove\",         \"path\": \"members[value eq \"23\"]\"     }] } ``` * Replacing an entire member set of a team: ```json {     \"Operations\": [{         \"op\": \"replace\",         \"path\": \"members\",         \"value\": [             {                 \"value\": 23,                 \"display\": \"testexample2@sentry.io\"             },             {                 \"value\": 24,                 \"display\": \"testexample3@sentry.io\"             }         ]     }] } ```}\n@returns(204) Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/scim/v2/Groups/{team_id_or_slug}\n@desc Delete a team with a SCIM Group DELETE Request.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(204) Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\n@desc Returns a paginated list of members bound to a organization with a SCIM Users GET Request.\n@optional {startIndex: int=1 # SCIM 1-offset based index for pagination., count: int=100 # The maximum number of results the query should return, maximum of 100., filter: str # A SCIM filter expression. The only operator currently supported is `eq`., excludedAttributes: [str] # Fields that should be left off of return values. Right now the only supported field for this query is members.}\n@returns(200) {schemas: [str], totalResults: int, startIndex: int, itemsPerPage: int, Resources: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/scim/v2/Users\n@desc Create a new Organization Member via a SCIM Users POST Request.\n@required {userName: str(email) # The SAML field used for email.}\n@optional {sentryOrgRole: str(billing/member/manager/admin) # The organization role of the member. If unspecified, this will be                     set to the organization's default role. The options are:  * `billing` - Can manage payment and compliance details. * `member` - Can view and act on events, as well as view most other data within the organization. * `manager` - Has full management access to all teams and projects. Can also manage         the organization's membership. * `admin` - Can edit global integrations, manage projects, and add/remove teams.         They automatically assume the Team Admin role for teams they join.         Note: This role can no longer be assigned in Business and Enterprise plans. Use `TeamRoles` instead.}\n@returns(201) {active: bool, schemas: [str], id: str, userName: str, name: map{givenName: str, familyName: str}, emails: [map], meta: map{resourceType: str}, sentryOrgRole: str}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\n@desc Query an individual organization member with a SCIM User GET Request.\n@required {member_id: str # The ID of the member to query.}\n@returns(200) {active: bool, schemas: [str], id: str, userName: str, name: map{givenName: str, familyName: str}, emails: [map], meta: map{resourceType: str}, sentryOrgRole: str}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PATCH /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\n@desc Update an organization member's attributes with a SCIM PATCH Request.\n@required {member_id: str # The ID of the member to update., Operations: [map{op!: str, value!: any, path: str}] # A list of operations to perform. Currently, the only valid operation is setting a member's `active` attribute to false, after which the member will be permanently deleted. ```json {     \"Operations\": [{         \"op\": \"replace\",         \"path\": \"active\",         \"value\": False     }] } ```}\n@returns(204) Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/scim/v2/Users/{member_id}\n@desc Delete an organization member with a SCIM User DELETE Request.\n@required {member_id: str # The ID of the member to delete.}\n@returns(204) Success\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/sentry-apps/\n@desc Retrieve the custom integrations for an organization\n@returns(200)\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/sessions/\n@desc Returns a time series of release health session statistics for projects bound to an organization.\n@required {field: [str] # The list of fields to query.  The available fields are - `sum(session)` - `count_unique(user)` - `avg`, `p50`, `p75`, `p90`, `p95`, `p99`, `max` applied to `session.duration`. For example, `p99(session.duration)`. Session duration is [no longer being recorded](https://github.com/getsentry/sentry/discussions/42716) as of on Jan 12, 2023. Returned data may be incomplete. - `crash_rate`, `crash_free_rate` applied to `user` or `session`. For example, `crash_free_rate(user)`}\n@optional {start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., environment: [str] # The name of environments to filter by., statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`, per_page: int # The number of groups to return per request., interval: str # Resolution of the time series, given in the same format as `statsPeriod`.  The default and         the minimum interval is `1h`., groupBy: [str] # The list of properties to group by.  The available groupBy conditions are `project`,         `release`, `environment` and `session.status`., orderBy: str # An optional field to order by, which must be one of the fields provided in `field`. Use `-`         for descending order, for example, `-sum(session)`, includeTotals: int # Specify `0` to exclude totals from the response. The default is `1`, includeSeries: int # Specify `0` to exclude series from the response. The default is `1`, query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`}\n@returns(200) {start: str(date-time), end: str(date-time), intervals: [str], groups: [map], query: str}\n@errors {400: Bad Request, 401: Unauthorized}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/shortids/{issue_id}/\n@desc Resolve a short ID to the project slug and group details.\n@required {issue_id: str # The short ID of the issue to resolve.}\n@returns(200) {organizationSlug: str, projectSlug: str, groupId: str, group: map{isUnhandled: bool, count: str, userCount: int, firstSeen: str(date-time)?, lastSeen: str(date-time)?, id: str, shareId: str, shortId: str, title: str, culprit: str?, permalink: str, logger: str?, level: str, status: str, statusDetails: map{autoResolved: bool, ignoreCount: int, ignoreUntil: str(date-time), ignoreUserCount: int, ignoreUserWindow: int, ignoreWindow: int, actor: map{identities: [map], avatar: map, authenticators: [any], canReset2fa: bool, id: str, name: str, username: str, email: str, avatarUrl: str, isActive: bool, hasPasswordAuth: bool, isManaged: bool, dateJoined: str(date-time), lastLogin: str(date-time)?, has2fa: bool, lastActive: str(date-time)?, isSuperuser: bool, isStaff: bool, experiments: map, emails: [map]}, inNextRelease: bool, inRelease: str, inCommit: str, pendingEvents: int, info: any}, substatus: str?, isPublic: bool, platform: str?, priority: str?, priorityLockedAt: str(date-time)?, seerFixabilityScore: num(double)?, seerAutofixLastTriggered: str(date-time)?, seerExplorerAutofixLastTriggered: str(date-time)?, project: map{id: str, name: str, slug: str, platform: str?}, type: str, issueType: str, issueCategory: str, metadata: map, numComments: int, assignedTo: map{type: str, id: str, name: str, email: str}, isBookmarked: bool, isSubscribed: bool, subscriptionDetails: map?{disabled: bool, reason: str}, hasSeen: bool, annotations: [map]}, shortId: str}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/stats-summary/\n@desc Query summarized event counts by project for your Organization. Also see https://docs.sentry.io/api/organizations/retrieve-event-counts-for-an-organization-v2/ for reference.\n@required {field: str(sum(quantity)/sum(times_seen)) # the `sum(quantity)` field is bytes for attachments, and all others the 'event' count for those types of events.  `sum(times_seen)` sums the number of times an event has been seen. For 'normal' event types, this will be equal to `sum(quantity)` for now. For sessions, quantity will sum the total number of events seen in a session, while `times_seen` will be the unique number of sessions. and for attachments, `times_seen` will be the total number of attachments, while quantity will be the total sum of attachment bytes.  * `sum(quantity)` * `sum(times_seen)`}\n@optional {statsPeriod: str # This defines the range of the time series, relative to now. The range is given in a `` format. For example `1d` for a one day range. Possible units are `m` for minutes, `h` for hours, `d` for days and `w` for weeks.You must either provide a `statsPeriod`, or a `start` and `end`., interval: str # This is the resolution of the time series, given in the same format as `statsPeriod`. The default resolution is `1h` and the minimum resolution is currently restricted to `1h` as well. Intervals larger than `1d` are not supported, and the interval has to cleanly divide one day., start: str(date-time) # This defines the start of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds.Use along with `end` instead of `statsPeriod`., end: str(date-time) # This defines the inclusive end of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds.Use along with `start` instead of `statsPeriod`., project: [any] # The ID of the projects to filter by., category: str(error/transaction/attachment/replays/profiles) # If filtering by attachments, you cannot filter by any other category due to quantity values becoming nonsensical (combining bytes and event counts).  If filtering by `error`, it will automatically add `default` and `security` as we currently roll those two categories into `error` for displaying.  * `error` * `transaction` * `attachment` * `replays` * `profiles`, outcome: str(accepted/filtered/rate_limited/invalid/abuse/client_discard/cardinality_limited) # See https://docs.sentry.io/product/stats/ for more information on outcome statuses.  * `accepted` * `filtered` * `rate_limited` * `invalid` * `abuse` * `client_discard` * `cardinality_limited`, reason: str # The reason field will contain why an event was filtered/dropped., download: bool # Download the API response in as a csv file}\n@returns(200) {start: str, end: str, projects: [map]}\n@errors {401: Unauthorized, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/stats_v2/\n@desc Query event counts for your Organization.\n@required {groupBy: [str] # can pass multiple groupBy parameters to group by multiple, e.g. `groupBy=project&groupBy=outcome` to group by multiple dimensions. Note that grouping by project can cause missing rows if the number of projects / interval is large. If you have a large number of projects, we recommend filtering and querying by them individually.Also note that grouping by projects does not currently support timeseries interval responses and will instead be a sum of the projectover the entire period specified., field: str(sum(quantity)/sum(times_seen)) # the `sum(quantity)` field is bytes for attachments, and all others the 'event' count for those types of events.  `sum(times_seen)` sums the number of times an event has been seen. For 'normal' event types, this will be equal to `sum(quantity)` for now. For sessions, quantity will sum the total number of events seen in a session, while `times_seen` will be the unique number of sessions. and for attachments, `times_seen` will be the total number of attachments, while quantity will be the total sum of attachment bytes.  * `sum(quantity)` * `sum(times_seen)`}\n@optional {statsPeriod: str # This defines the range of the time series, relative to now. The range is given in a `` format. For example `1d` for a one day range. Possible units are `m` for minutes, `h` for hours, `d` for days and `w` for weeks.You must either provide a `statsPeriod`, or a `start` and `end`., interval: str # This is the resolution of the time series, given in the same format as `statsPeriod`. The default resolution is `1h` and the minimum resolution is currently restricted to `1h` as well. Intervals larger than `1d` are not supported, and the interval has to cleanly divide one day., start: str(date-time) # This defines the start of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds.Use along with `end` instead of `statsPeriod`., end: str(date-time) # This defines the inclusive end of the time series range as an explicit datetime, either in UTC ISO8601 or epoch seconds.Use along with `start` instead of `statsPeriod`., project: [any] # The ID of the projects to filter by.  Use `-1` to include all accessible projects., category: str(error/transaction/attachment/replay/profile/profile_duration/profile_duration_ui/profile_chunk/profile_chunk_ui/monitor) # Filter by data category. Each category represents a different type of data:  - `error`: Error events (includes `default` and `security` categories) - `transaction`: Transaction events - `attachment`: File attachments (note: cannot be combined with other categories since quantity represents bytes) - `replay`: Session replay events - `profile`: Performance profiles - `profile_duration`: Profile duration data (note: cannot be combined with other categories since quantity represents milliseconds) - `profile_duration_ui`: Profile duration (UI) data (note: cannot be combined with other categories since quantity represents milliseconds) - `profile_chunk`: Profile chunk data - `profile_chunk_ui`: Profile chunk (UI) data - `monitor`: Cron monitor events  * `error` * `transaction` * `attachment` * `replay` * `profile` * `profile_duration` * `profile_duration_ui` * `profile_chunk` * `profile_chunk_ui` * `monitor`, outcome: str(accepted/filtered/rate_limited/invalid/abuse/client_discard/cardinality_limited) # See https://docs.sentry.io/product/stats/ for more information on outcome statuses.  * `accepted` * `filtered` * `rate_limited` * `invalid` * `abuse` * `client_discard` * `cardinality_limited`, reason: str # The reason field will contain why an event was filtered/dropped.}\n@returns(200) {start: str, end: str, intervals: [str], groups: [map]}\n@errors {401: Unauthorized, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/teams/\n@desc Returns a list of teams bound to a organization.\n@optional {detailed: str # Specify `\"0\"` to return team details that do not include projects., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/teams/\n@desc Create a new team bound to an organization. Requires at least one of the `name`\n@optional {slug: str # Uniquely identifies a team and is used for the interface. If not         provided, it is automatically generated from the name., name: str # **`[DEPRECATED]`** The name for the team. If not provided, it is         automatically generated from the slug}\n@returns(201) {id: str, slug: str, name: str, dateCreated: str(date-time)?, isMember: bool, teamRole: str?, flags: map, access: [str], hasAccess: bool, isPending: bool, memberCount: int, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, externalTeams: [map], organization: map{features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool}, projects: [map]}\n@errors {400: Bad Request, 403: Forbidden, 404: A team with this slug already exists.}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/user-teams/\n@desc Returns a list of teams the user has access to in the specified organization.\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/workflows/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@optional {sortBy: str # The field to sort results by. If not specified, the results are sorted by id.  Available fields are: - `name` - `id` - `dateCreated` - `dateUpdated` - `connectedDetectors` - `actions` - `priorityDetector`  Prefix with `-` to sort in descending order., query: str # An optional search query for filtering alerts., id: [int] # The ID of the alert you'd like to query., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/workflows/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {name: str # The name of the alert}\n@optional {id: str # The ID of the existing alert, enabled: bool=true # Whether the alert is enabled or disabled, config: map # Typically the frequency at which the alert will fire, in minutes.          - `0`: 0 minutes         - `5`: 5 minutes         - `10`: 10 minutes         - `30`: 30 minutes         - `60`: 1 hour         - `180`: 3 hours         - `720`: 12 hours         - `1440`: 24 hours          ```json             {                 \"frequency\":3600             }         ```, environment: str # The name of the environment for the alert to evaluate in, triggers: any # The conditions on which the alert will trigger. See available options below.         ```json             \"triggers\": {                 \"organizationId\": \"1\",                 \"logicType\": \"any-short\",                 \"conditions\": [                     {                         \"type\": \"first_seen_event\",                         \"comparison\": true,                         \"conditionResult\": true                     },                     {                         \"type\": \"issue_resolved_trigger\",                         \"comparison\": true,                         \"conditionResult\": true                     },                     {                         \"type\": \"reappeared_event\",                         \"comparison\": true,                         \"conditionResult\": true                     },                     {                         \"type\": \"regression_event\",                         \"comparison\": true,                         \"conditionResult\": true                     }                 ],                 \"actions\": []             }         ```, action_filters: [any] # The filters to run before the action will fire and the action(s) to fire.          `logicType` can be one of `any-short`, `all`, or `none`.          Below is a basic example. See below for all other options.          ```json             \"actionFilters\": [                 {                     \"logicType\": \"any\",                     \"conditions\": [                         {                             \"type\": \"level\",                             \"comparison\": {                                 \"level\": 50,                                 \"match\": \"eq\"                             },                             \"conditionResult\": true                         }                     ],                     \"actions\": [                         {                             \"id\": \"123\",                             \"type\": \"email\",                             \"integrationId\": null,                             \"data\": {},                             \"config\": {                                 \"targetType\": \"user\",                                 \"targetDisplay\": null,                                 \"targetIdentifier\": \"56789\"                             },                             \"status\": \"active\"                         }                     ]                 }             ]         ```          ## Conditions          **Issue Age**         - `time`: One of `minute`, `hour`, `day`, or `week`.         - `value`: A positive integer.         - `comparisonType`: One of `older` or `newer`.         ```json             {                 \"type\": \"age_comparison\",                 \"comparison\": {                     \"time\": \"minute\",                     \"value\": 10,                     \"comparisonType\": \"older\"                 },                 \"conditionResult\": true             }          ```          **Issue Assignment**         - `targetType`: Who the issue is assigned to             - `Unassigned`: Unassigned             - `Member`: Assigned to a user             - `Team`: Assigned to a team         - `targetIdentifier`: The ID of the user or team from the `targetType`. Enter \"\" if `targetType` is `Unassigned`.         ```json             {                 \"type\": \"assigned_to\",                 \"comparison\": {                     \"targetType\": \"Member\",                     \"targetIdentifier\": 123456                 },                 \"conditionResult\": true             }         ```          **Issue Category**         - `value`: The issue category to filter to.             - `1`: Error issues             - `6`: Feedback issues             - `10`: Outage issues             - `11`: Metric issues             - `12`: DB Query issues             - `13`: HTTP Client issues             - `14`: Front end issues             - `15`: Mobile issues         ```json             {                 \"type\": \"issue_category\",                 \"comparison\": {                     \"value\": 1                 },                 \"conditionResult\": true             }         ```          **Issue Frequency**         - `value`: A positive integer representing how many times the issue has to happen before the alert will fire.         ```json             {                 \"type\": \"issue_occurrences\",                 \"comparison\": {                     \"value\": 10                 },                 \"conditionResult\": true             }         ```          **De-escalation**         ```json             {                 \"type\": \"issue_priority_deescalating\",                 \"comparison\": true,                 \"conditionResult\": true             }         ```          **Issue Priority**         - `comparison`: The priority the issue must be for the alert to fire.             - `75`: High priority             - `50`: Medium priority             - `25`: Low priority         ```json             {                 \"type\": \"issue_priority_greater_or_equal\",                 \"comparison\": 75,                 \"conditionResult\": true             }         ```          **Number of Users Affected**         - `value`: A positive integer representing the number of users that must be affected before the alert will fire.         - `filters`: A list of additional sub-filters to evaluate before the alert will fire.         - `interval`: The time period in which to evaluate the value. e.g. Number of users affected by an issue is more than `value` in `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         ```json             {                 \"type\": \"event_unique_user_frequency_count\",                 \"comparison\": {                     \"value\": 100,                     \"filters\": [{\"key\": \"foo\", \"match\": \"eq\", \"value\": \"bar\"}],                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Number of Events**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Number of events in an issue is more than `value` in `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         ```json             {                 \"type\": \"event_frequency_count\",                 \"comparison\": {                     \"value\": 100,                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Percent of Events**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Number of events in an issue is `comparisonInterval` percent higher `value` compared to `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         - `comparisonInterval`: The time period to compare against. See `interval` for options.         ```json             {                 \"type\": \"event_frequency_percent\",                 \"comparison\": {                     \"value\": 100,                     \"interval\": \"1h\",                     \"comparisonInterval\": \"1w\"                 },                 \"conditionResult\": true             }          ```          **Percentage of Sessions Affected Count**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Percentage of sessions affected by an issue is more than `value` in `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         ```json             {                 \"type\": \"percent_sessions_count\",                 \"comparison\": {                     \"value\": 10,                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Percentage of Sessions Affected Percent**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Percentage of sessions affected by an issue is `comparisonInterval` percent higher `value` compared to `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         - `comparisonInterval`: The time period to compare against. See `interval` for options.         ```json             {                 \"type\": \"percent_sessions_percent\",                 \"comparison\": {                     \"value\": 10,                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Event Attribute**         The event's `attribute` value `match` `value`          - `attribute`: The event attribute to match on. Valid values are: `message`, `platform`, `environment`, `type`, `error.handled`, `error.unhandled`, `error.main_thread`, `exception.type`, `exception.value`, `user.id`, `user.email`, `user.username`, `user.ip_address`, `http.method`, `http.url`, `http.status_code`, `sdk.name`, `stacktrace.code`, `stacktrace.module`, `stacktrace.filename`, `stacktrace.abs_path`, `stacktrace.package`, `unreal.crash_type`, `app.in_foreground`.         - `match`: The comparison operator             - `co`: Contains             - `nc`: Does not contain             - `eq`: Equals             - `ne`: Does not equal             - `sw`: Starts with             - `ew`: Ends with             - `is`: Is set             - `ns`: Is not set         - `value`: A string. Not required when match is `is` or `ns`.          ```json             {                 \"type\": \"event_attribute\",                 \"comparison\": {                     \"match\": \"co\",                     \"value\": \"bar\",                     \"attribute\": \"message\"                 },                 \"conditionResult\": true             }         ```          **Tagged Event**         The event's tags `key` match `value`         - `key`: The tag value         - `match`: The comparison operator             - `co`: Contains             - `nc`: Does not contain             - `eq`: Equals             - `ne`: Does not equal             - `sw`: Starts with             - `ew`: Ends with             - `is`: Is set             - `ns`: Is not set         - `value`: A string. Not required when match is `is` or `ns`.          ```json             {                 \"type\": \"tagged_event\",                 \"comparison\": {                     \"key\": \"level\",                     \"match\": \"eq\",                     \"value\": \"error\"                 },                 \"conditionResult\": true             }         ```          **Latest Release**         The event is from the latest release          ```json             {                 \"type\": \"latest_release\",                 \"comparison\": true,                 \"conditionResult\": true             }         ```          **Release Age**         ```json             {                 \"type\": \"latest_adopted_release\",                 \"comparison\": {                     \"environment\": \"12345\",                     \"ageComparison\": \"older\",                     \"releaseAgeType\": \"oldest\"                 },                 \"conditionResult\": true             }         ```          **Event Level**         The event's level is `match` `level`         - `match`: The comparison operator             - `eq`: Equal             - `gte`: Greater than or equal             - `lte`: Less than or equal         - `level`: The event level             - `50`: Fatal             - `40`: Error             - `30`: Warning             - `20`: Info             - `10`: Debug             - `0`: Sample          ```json             {                 \"type\": \"level\",                 \"comparison\": {                     \"level\": 50,                     \"match\": \"eq\"                 },                 \"conditionResult\": true             }         ```          ## Actions         A list of actions that take place when all required conditions and filters for the alert are met. See below for a list of possible actions.           **Notify on Preferred Channel**         - `data`: A dictionary with the fallthrough type option when choosing to notify Suggested Assignees. Leave empty if notifying a user or team.             - `fallthroughType`                 - `ActiveMembers`                 - `AllMembers`                 - `NoOne`         - `config`: A dictionary with the configuration options for notification.             - `targetType`: The type of recipient to notify                 - `user`: User                 - `team`: Team                 - `issue_owners`: Suggested Assignees             - `targetDisplay`: null             - `targetIdentifier`: The id of the user or team to notify. Leave null for Suggested Assignees.          ```json             {                 \"type\":\"email\",                 \"integrationId\":null,                 \"data\":{},                 \"config\":{                     \"targetType\":\"user\",                     \"targetDisplay\":null,                     \"targetIdentifier\":\"232692\"                 },                 \"status\":\"active\"             },             {                 \"type\":\"email\",                 \"integrationId\":null,                 \"data\":{                     \"fallthroughType\":\"ActiveMembers\"                 },                 \"config\":{                     \"targetType\":\"issue_owners\",                     \"targetDisplay\":null,                     \"targetIdentifier\":\"\"}                 ,                 \"status\":\"active\"             }         ```         **Notify on Slack**         - `targetDisplay`: The name of the channel to notify in.         `integrationId`: The stringified ID of the integration.          ```json             {                 \"type\":\"slack\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"\",                     \"targetDisplay\":\"notify-errors\"                 },                 \"integrationId\":\"1\",                 \"data\":{},                 \"status\":\"active\"             }         ```          **Notify on PagerDuty**         - `targetDisplay`: The name of the service to create the ticket in.         - `integrationId`: The stringified ID of the integration.         - `data[\"priority\"]`: The severity level for the notification.          ```json             {                 \"type\":\"pagerduty\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"123456\",                     \"targetDisplay\":\"Error Service\"                     },                 \"integrationId\":\"2345\",                 \"data\":{                     \"priority\":\"default\"                 },                 \"status\":\"active\"             }         ```          **Notify on Discord**         - `targetDisplay`: The name of the service to create the ticket in.         - `integrationId`: The stringified ID of the integration.         - `data[\"tags\"]`: Comma separated list of tags to add to the notification.          ```json             {                 \"type\":\"discord\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"12345\",                     \"targetDisplay\":\"\",                     },                 \"integrationId\":\"1234\",                 \"data\":{                     \"tags\":\"transaction,environment\"                 },                 \"status\":\"active\"             }         ```          **Notify on MSTeams**         - `targetIdentifier` - The integration ID associated with the Microsoft Teams team.         - `targetDisplay` - The name of the channel to send the notification to.         - `integrationId`: The stringified ID of the integration.         ```json             {                 \"type\":\"msteams\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"19:a4b3kghaghgkjah357y6847@thread.skype\",                     \"targetDisplay\":\"notify-errors\"                 },                 \"integrationId\":\"1\",                 \"data\":{},                 \"status\":\"active\"             }         ```          **Notify on OpsGenie**         - `targetDisplay`: The name of the Opsgenie team.         - `targetIdentifier`: The ID of the Opsgenie team to send the notification to.         - `integrationId`: The stringified ID of the integration.         - `data[\"priority\"]`: The priority level for the notification.          ```json             {                 \"type\":\"opsgenie\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"123456-Error-Service\",                     \"targetDisplay\":\"Error Service\"                     },                 \"integrationId\":\"2345\",                 \"data\":{                     \"priority\":\"P3\"                 },                 \"status\":\"active\"             }         ```          **Notify on Azure DevOps**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"vsts\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```          **Create a Jira ticket**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"jira\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```          **Create a Jira Server ticket**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"jira_server\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```          **Create a GitHub issue**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"github\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```, owner: str # The ID user or team who owns the monitor or alert prefaced by the string 'user' or 'team'.              **User**             ```json                 \"user:123456\"             ```              **Team**             ```json                 \"team:456789\"             ```}\n@returns(201) {id: str, name: str, organizationId: str, createdBy: str?, dateCreated: str(date-time), dateUpdated: str(date-time), triggers: map?{id: str, organizationId: str, logicType: str, conditions: any, actions: any}, actionFilters: [map]?, environment: str?, config: map, detectorIds: [str]?, enabled: bool, lastTriggered: str(date-time)?, owner: str?}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/workflows/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {enabled: bool # Whether to enable or disable the alerts}\n@optional {query: str # An optional search query for filtering alerts., id: [int] # The ID of the alert you'd like to query., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/workflows/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@optional {query: str # An optional search query for filtering alerts., id: [int] # The ID of the alert you'd like to query., project: [int] # The IDs of projects to filter by. `-1` means all available projects. For example, the following are valid parameters: - `/?project=1234&project=56789` - `/?project=-1`}\n@returns(200) Success\n@returns(204) No Content\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {workflow_id: int # The ID of the alert you'd like to query.}\n@returns(200) {id: str, name: str, organizationId: str, createdBy: str?, dateCreated: str(date-time), dateUpdated: str(date-time), triggers: map?{id: str, organizationId: str, logicType: str, conditions: any, actions: any}, actionFilters: [map]?, environment: str?, config: map, detectorIds: [str]?, enabled: bool, lastTriggered: str(date-time)?, owner: str?}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {workflow_id: int # The ID of the alert you'd like to query., name: str # The name of the alert}\n@optional {id: str # The ID of the existing alert, enabled: bool=true # Whether the alert is enabled or disabled, config: map # Typically the frequency at which the alert will fire, in minutes.          - `0`: 0 minutes         - `5`: 5 minutes         - `10`: 10 minutes         - `30`: 30 minutes         - `60`: 1 hour         - `180`: 3 hours         - `720`: 12 hours         - `1440`: 24 hours          ```json             {                 \"frequency\":3600             }         ```, environment: str # The name of the environment for the alert to evaluate in, triggers: any # The conditions on which the alert will trigger. See available options below.         ```json             \"triggers\": {                 \"organizationId\": \"1\",                 \"logicType\": \"any-short\",                 \"conditions\": [                     {                         \"type\": \"first_seen_event\",                         \"comparison\": true,                         \"conditionResult\": true                     },                     {                         \"type\": \"issue_resolved_trigger\",                         \"comparison\": true,                         \"conditionResult\": true                     },                     {                         \"type\": \"reappeared_event\",                         \"comparison\": true,                         \"conditionResult\": true                     },                     {                         \"type\": \"regression_event\",                         \"comparison\": true,                         \"conditionResult\": true                     }                 ],                 \"actions\": []             }         ```, action_filters: [any] # The filters to run before the action will fire and the action(s) to fire.          `logicType` can be one of `any-short`, `all`, or `none`.          Below is a basic example. See below for all other options.          ```json             \"actionFilters\": [                 {                     \"logicType\": \"any\",                     \"conditions\": [                         {                             \"type\": \"level\",                             \"comparison\": {                                 \"level\": 50,                                 \"match\": \"eq\"                             },                             \"conditionResult\": true                         }                     ],                     \"actions\": [                         {                             \"id\": \"123\",                             \"type\": \"email\",                             \"integrationId\": null,                             \"data\": {},                             \"config\": {                                 \"targetType\": \"user\",                                 \"targetDisplay\": null,                                 \"targetIdentifier\": \"56789\"                             },                             \"status\": \"active\"                         }                     ]                 }             ]         ```          ## Conditions          **Issue Age**         - `time`: One of `minute`, `hour`, `day`, or `week`.         - `value`: A positive integer.         - `comparisonType`: One of `older` or `newer`.         ```json             {                 \"type\": \"age_comparison\",                 \"comparison\": {                     \"time\": \"minute\",                     \"value\": 10,                     \"comparisonType\": \"older\"                 },                 \"conditionResult\": true             }          ```          **Issue Assignment**         - `targetType`: Who the issue is assigned to             - `Unassigned`: Unassigned             - `Member`: Assigned to a user             - `Team`: Assigned to a team         - `targetIdentifier`: The ID of the user or team from the `targetType`. Enter \"\" if `targetType` is `Unassigned`.         ```json             {                 \"type\": \"assigned_to\",                 \"comparison\": {                     \"targetType\": \"Member\",                     \"targetIdentifier\": 123456                 },                 \"conditionResult\": true             }         ```          **Issue Category**         - `value`: The issue category to filter to.             - `1`: Error issues             - `6`: Feedback issues             - `10`: Outage issues             - `11`: Metric issues             - `12`: DB Query issues             - `13`: HTTP Client issues             - `14`: Front end issues             - `15`: Mobile issues         ```json             {                 \"type\": \"issue_category\",                 \"comparison\": {                     \"value\": 1                 },                 \"conditionResult\": true             }         ```          **Issue Frequency**         - `value`: A positive integer representing how many times the issue has to happen before the alert will fire.         ```json             {                 \"type\": \"issue_occurrences\",                 \"comparison\": {                     \"value\": 10                 },                 \"conditionResult\": true             }         ```          **De-escalation**         ```json             {                 \"type\": \"issue_priority_deescalating\",                 \"comparison\": true,                 \"conditionResult\": true             }         ```          **Issue Priority**         - `comparison`: The priority the issue must be for the alert to fire.             - `75`: High priority             - `50`: Medium priority             - `25`: Low priority         ```json             {                 \"type\": \"issue_priority_greater_or_equal\",                 \"comparison\": 75,                 \"conditionResult\": true             }         ```          **Number of Users Affected**         - `value`: A positive integer representing the number of users that must be affected before the alert will fire.         - `filters`: A list of additional sub-filters to evaluate before the alert will fire.         - `interval`: The time period in which to evaluate the value. e.g. Number of users affected by an issue is more than `value` in `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         ```json             {                 \"type\": \"event_unique_user_frequency_count\",                 \"comparison\": {                     \"value\": 100,                     \"filters\": [{\"key\": \"foo\", \"match\": \"eq\", \"value\": \"bar\"}],                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Number of Events**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Number of events in an issue is more than `value` in `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         ```json             {                 \"type\": \"event_frequency_count\",                 \"comparison\": {                     \"value\": 100,                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Percent of Events**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Number of events in an issue is `comparisonInterval` percent higher `value` compared to `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         - `comparisonInterval`: The time period to compare against. See `interval` for options.         ```json             {                 \"type\": \"event_frequency_percent\",                 \"comparison\": {                     \"value\": 100,                     \"interval\": \"1h\",                     \"comparisonInterval\": \"1w\"                 },                 \"conditionResult\": true             }          ```          **Percentage of Sessions Affected Count**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Percentage of sessions affected by an issue is more than `value` in `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         ```json             {                 \"type\": \"percent_sessions_count\",                 \"comparison\": {                     \"value\": 10,                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Percentage of Sessions Affected Percent**         - `value`: A positive integer representing the number of events in an issue that must come in before the alert will fire         - `interval`: The time period in which to evaluate the value. e.g. Percentage of sessions affected by an issue is `comparisonInterval` percent higher `value` compared to `interval`.             - `1min`: 1 minute             - `5min`: 5 minutes             - `15min`: 15 minutes             - `1hr`: 1 hour             - `1d`: 1 day             - `1w`: 1 week             - `30d`: 30 days         - `comparisonInterval`: The time period to compare against. See `interval` for options.         ```json             {                 \"type\": \"percent_sessions_percent\",                 \"comparison\": {                     \"value\": 10,                     \"interval\": \"1h\"                 },                 \"conditionResult\": true             }         ```          **Event Attribute**         The event's `attribute` value `match` `value`          - `attribute`: The event attribute to match on. Valid values are: `message`, `platform`, `environment`, `type`, `error.handled`, `error.unhandled`, `error.main_thread`, `exception.type`, `exception.value`, `user.id`, `user.email`, `user.username`, `user.ip_address`, `http.method`, `http.url`, `http.status_code`, `sdk.name`, `stacktrace.code`, `stacktrace.module`, `stacktrace.filename`, `stacktrace.abs_path`, `stacktrace.package`, `unreal.crash_type`, `app.in_foreground`.         - `match`: The comparison operator             - `co`: Contains             - `nc`: Does not contain             - `eq`: Equals             - `ne`: Does not equal             - `sw`: Starts with             - `ew`: Ends with             - `is`: Is set             - `ns`: Is not set         - `value`: A string. Not required when match is `is` or `ns`.          ```json             {                 \"type\": \"event_attribute\",                 \"comparison\": {                     \"match\": \"co\",                     \"value\": \"bar\",                     \"attribute\": \"message\"                 },                 \"conditionResult\": true             }         ```          **Tagged Event**         The event's tags `key` match `value`         - `key`: The tag value         - `match`: The comparison operator             - `co`: Contains             - `nc`: Does not contain             - `eq`: Equals             - `ne`: Does not equal             - `sw`: Starts with             - `ew`: Ends with             - `is`: Is set             - `ns`: Is not set         - `value`: A string. Not required when match is `is` or `ns`.          ```json             {                 \"type\": \"tagged_event\",                 \"comparison\": {                     \"key\": \"level\",                     \"match\": \"eq\",                     \"value\": \"error\"                 },                 \"conditionResult\": true             }         ```          **Latest Release**         The event is from the latest release          ```json             {                 \"type\": \"latest_release\",                 \"comparison\": true,                 \"conditionResult\": true             }         ```          **Release Age**         ```json             {                 \"type\": \"latest_adopted_release\",                 \"comparison\": {                     \"environment\": \"12345\",                     \"ageComparison\": \"older\",                     \"releaseAgeType\": \"oldest\"                 },                 \"conditionResult\": true             }         ```          **Event Level**         The event's level is `match` `level`         - `match`: The comparison operator             - `eq`: Equal             - `gte`: Greater than or equal             - `lte`: Less than or equal         - `level`: The event level             - `50`: Fatal             - `40`: Error             - `30`: Warning             - `20`: Info             - `10`: Debug             - `0`: Sample          ```json             {                 \"type\": \"level\",                 \"comparison\": {                     \"level\": 50,                     \"match\": \"eq\"                 },                 \"conditionResult\": true             }         ```          ## Actions         A list of actions that take place when all required conditions and filters for the alert are met. See below for a list of possible actions.           **Notify on Preferred Channel**         - `data`: A dictionary with the fallthrough type option when choosing to notify Suggested Assignees. Leave empty if notifying a user or team.             - `fallthroughType`                 - `ActiveMembers`                 - `AllMembers`                 - `NoOne`         - `config`: A dictionary with the configuration options for notification.             - `targetType`: The type of recipient to notify                 - `user`: User                 - `team`: Team                 - `issue_owners`: Suggested Assignees             - `targetDisplay`: null             - `targetIdentifier`: The id of the user or team to notify. Leave null for Suggested Assignees.          ```json             {                 \"type\":\"email\",                 \"integrationId\":null,                 \"data\":{},                 \"config\":{                     \"targetType\":\"user\",                     \"targetDisplay\":null,                     \"targetIdentifier\":\"232692\"                 },                 \"status\":\"active\"             },             {                 \"type\":\"email\",                 \"integrationId\":null,                 \"data\":{                     \"fallthroughType\":\"ActiveMembers\"                 },                 \"config\":{                     \"targetType\":\"issue_owners\",                     \"targetDisplay\":null,                     \"targetIdentifier\":\"\"}                 ,                 \"status\":\"active\"             }         ```         **Notify on Slack**         - `targetDisplay`: The name of the channel to notify in.         `integrationId`: The stringified ID of the integration.          ```json             {                 \"type\":\"slack\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"\",                     \"targetDisplay\":\"notify-errors\"                 },                 \"integrationId\":\"1\",                 \"data\":{},                 \"status\":\"active\"             }         ```          **Notify on PagerDuty**         - `targetDisplay`: The name of the service to create the ticket in.         - `integrationId`: The stringified ID of the integration.         - `data[\"priority\"]`: The severity level for the notification.          ```json             {                 \"type\":\"pagerduty\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"123456\",                     \"targetDisplay\":\"Error Service\"                     },                 \"integrationId\":\"2345\",                 \"data\":{                     \"priority\":\"default\"                 },                 \"status\":\"active\"             }         ```          **Notify on Discord**         - `targetDisplay`: The name of the service to create the ticket in.         - `integrationId`: The stringified ID of the integration.         - `data[\"tags\"]`: Comma separated list of tags to add to the notification.          ```json             {                 \"type\":\"discord\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"12345\",                     \"targetDisplay\":\"\",                     },                 \"integrationId\":\"1234\",                 \"data\":{                     \"tags\":\"transaction,environment\"                 },                 \"status\":\"active\"             }         ```          **Notify on MSTeams**         - `targetIdentifier` - The integration ID associated with the Microsoft Teams team.         - `targetDisplay` - The name of the channel to send the notification to.         - `integrationId`: The stringified ID of the integration.         ```json             {                 \"type\":\"msteams\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"19:a4b3kghaghgkjah357y6847@thread.skype\",                     \"targetDisplay\":\"notify-errors\"                 },                 \"integrationId\":\"1\",                 \"data\":{},                 \"status\":\"active\"             }         ```          **Notify on OpsGenie**         - `targetDisplay`: The name of the Opsgenie team.         - `targetIdentifier`: The ID of the Opsgenie team to send the notification to.         - `integrationId`: The stringified ID of the integration.         - `data[\"priority\"]`: The priority level for the notification.          ```json             {                 \"type\":\"opsgenie\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\"123456-Error-Service\",                     \"targetDisplay\":\"Error Service\"                     },                 \"integrationId\":\"2345\",                 \"data\":{                     \"priority\":\"P3\"                 },                 \"status\":\"active\"             }         ```          **Notify on Azure DevOps**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"vsts\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```          **Create a Jira ticket**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"jira\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```          **Create a Jira Server ticket**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"jira_server\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```          **Create a GitHub issue**         - `integrationId`: The stringified ID of the integration.         - `data` - A list of any fields you want to include in the ticket as objects.          ```json             {                 \"type\":\"github\",                 \"config\":{                     \"targetType\":\"specific\",                     \"targetIdentifier\":\",                     \"targetDisplay\":\"\"                     },                 \"integrationId\":\"2345\",                 \"data\":{...},                 \"status\":\"active\"             }         ```, owner: str # The ID user or team who owns the monitor or alert prefaced by the string 'user' or 'team'.              **User**             ```json                 \"user:123456\"             ```              **Team**             ```json                 \"team:456789\"             ```}\n@returns(200) {id: str, name: str, organizationId: str, createdBy: str?, dateCreated: str(date-time), dateUpdated: str(date-time), triggers: map?{id: str, organizationId: str, logicType: str, conditions: any, actions: any}, actionFilters: [map]?, environment: str?, config: map, detectorIds: [str]?, enabled: bool, lastTriggered: str(date-time)?, owner: str?}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/workflows/{workflow_id}/\n@desc ⚠️ This endpoint is currently in **beta** and may be subject to change. It is supported by [New Monitors and Alerts](/product/new-monitors-and-alerts/) and may not be viewable in the UI today.\n@required {workflow_id: int # The ID of the alert you'd like to query.}\n@returns(204) No Content\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\n@desc Return details on an individual project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@returns(200) {stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str, team: map{id: str, name: str, slug: str}, teams: [map], latestRelease: map?{version: str}, options: map, digestsMinDelay: int, digestsMaxDelay: int, subjectPrefix: str, allowedDomains: [str], resolveAge: int, dataScrubber: bool, dataScrubberDefaults: bool, safeFields: [str], storeCrashReports: int?, sensitiveFields: [str], subjectTemplate: str, securityToken: str, securityTokenHeader: str?, verifySSL: bool, scrubIPAddresses: bool, scrapeJavaScript: bool, highlightTags: [str], highlightContext: map, highlightPreset: map{tags: [str], context: map}, groupingConfig: str, derivedGroupingEnhancements: str, groupingEnhancements: str, secondaryGroupingExpiry: int, secondaryGroupingConfig: str?, fingerprintingRules: str, organization: map{features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool}, plugins: [map], platforms: [str], processingIssues: int, defaultEnvironment: str?, relayPiiConfig: str?, builtinSymbolSources: [str], dynamicSamplingBiases: [map], symbolSources: str, isDynamicallySampled: bool, tempestFetchScreenshots: bool, autofixAutomationTuning: str, seerScannerAutomation: bool, debugFilesRole: str?}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\n@desc Update various attributes and configurable settings for the given project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {isBookmarked: bool # Enables starring the project within the projects tab. Can be updated with **`project:read`** permission., name: str # The name for the project, slug: str # Uniquely identifies a project and is used for the interface., platform: str # The platform for the project, subjectPrefix: str # Custom prefix for emails from this project., subjectTemplate: str # The email subject to use (excluding the prefix) for individual alerts. Here are the list of variables you can use: - `$title` - `$shortID` - `$projectID` - `$orgID` - `${tag:key}` - such as `${tag:environment}` or `${tag:release}`., resolveAge: int # Automatically resolve an issue if it hasn't been seen for this many hours. Set to `0` to disable auto-resolve., highlightContext: map # A JSON mapping of context types to lists of strings for their keys. E.g. `{'user': ['id', 'email']}`, highlightTags: [str] # A list of strings with tag keys to highlight on this project's issues. E.g. `['release', 'environment']`}\n@returns(200) {stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str, team: map{id: str, name: str, slug: str}, teams: [map], latestRelease: map?{version: str}, options: map, digestsMinDelay: int, digestsMaxDelay: int, subjectPrefix: str, allowedDomains: [str], resolveAge: int, dataScrubber: bool, dataScrubberDefaults: bool, safeFields: [str], storeCrashReports: int?, sensitiveFields: [str], subjectTemplate: str, securityToken: str, securityTokenHeader: str?, verifySSL: bool, scrubIPAddresses: bool, scrapeJavaScript: bool, highlightTags: [str], highlightContext: map, highlightPreset: map{tags: [str], context: map}, groupingConfig: str, derivedGroupingEnhancements: str, groupingEnhancements: str, secondaryGroupingExpiry: int, secondaryGroupingConfig: str?, fingerprintingRules: str, organization: map{features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool}, plugins: [map], platforms: [str], processingIssues: int, defaultEnvironment: str?, relayPiiConfig: str?, builtinSymbolSources: [str], dynamicSamplingBiases: [map], symbolSources: str, isDynamicallySampled: bool, tempestFetchScreenshots: bool, autofixAutomationTuning: str, seerScannerAutomation: bool, debugFilesRole: str?}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/\n@desc Schedules a project for deletion.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/\n@desc Lists a project's environments.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {visibility: str(all/hidden/visible) # The visibility of the environments to filter by. Defaults to `visible`.}\n@returns(200)\n@errors {400: Invalid value for 'visibility'., 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\n@desc Return details on a project environment.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., environment: str # The name of the environment.}\n@returns(200) {id: str, name: str, isHidden: bool}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/environments/{environment}/\n@desc Update the visibility for a project environment.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., environment: str # The name of the environment., isHidden: bool # Specify `true` to make the environment visible or `false` to make the environment hidden.}\n@returns(200) {id: str, name: str, isHidden: bool}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/\n@desc Return a list of events bound to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., full: bool=false # Specify true to include the full event body, including the stacktrace, in the event payload., sample: bool=false # Return events in pseudo-random order. This is deterministic so an identical query will always return the same events in the same order.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/source-map-debug/\n@desc Return a list of source map errors for a given event.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., event_id: str(uuid) # The ID of the event., frame_idx: int # Index of the frame that should be used for source map resolution., exception_idx: int # Index of the exception that should be used for source map resolution.}\n@returns(200) {errors: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/\n@desc Retrieve a list of filters for a given project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@returns(200)\n@errors {403: Forbidden}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/filters/{filter_id}/\n@desc Update various inbound data filters for a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., filter_id: str # The type of filter toggle to update. The options are: - `browser-extensions` - Filter out errors known to be caused by browser extensions. - `localhost` - Filter out events coming from localhost. This applies to both IPv4 (``127.0.0.1``) and IPv6 (``::1``) addresses. - `filtered-transaction` - Filter out transactions for healthcheck and ping endpoints. - `web-crawlers` - Filter out known web crawlers. Some crawlers may execute pages in incompatible ways which cause errors that are unlikely to be seen by a normal user. - `legacy-browser` - Filter out known errors from legacy browsers. Older browsers often give less accurate information, and while they may report valid issues, the context to understand them is incorrect or missing.}\n@optional {active: bool # Toggle the browser-extensions, localhost, filtered-transaction, or web-crawlers filter on or off., subfilters: [str] # Specifies which legacy browser filters should be active. Anything excluded from the list will be disabled. The options are: - `ie` - Internet Explorer Version 11 and lower - `edge` - Edge Version 110 and lower - `safari` - Safari Version 15 and lower - `firefox` - Firefox Version 110 and lower - `chrome` - Chrome Version 110 and lower - `opera` - Opera Version 99 and lower - `android` - Android Version 3 and lower - `opera_mini` - Opera Mini Version 34 and lower  Deprecated options: - `ie_pre_9` - Internet Explorer Version 8 and lower - `ie9` - Internet Explorer Version 9 - `ie10` - Internet Explorer Version 10 - `ie11` - Internet Explorer Version 11 - `safari_pre_6` - Safari Version 5 and lower - `opera_pre_15` - Opera Version 14 and lower - `opera_mini_pre_8` - Opera Mini Version 8 and lower - `android_pre_4` - Android Version 3 and lower - `edge_pre_79` - Edge Version 18 and lower (non Chromium based)}\n@returns(204) No Content\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\n@desc Return a list of client keys bound to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., status: str # Filter client keys by `active` or `inactive`. Defaults to returning all keys if not specified.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/\n@desc Create a new client key bound to a project.  The key's secret and public key\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {name: str # The optional name of the key. If not provided it will be automatically generated., rateLimit: map{count: int, window: int} # Applies a rate limit to cap the number of errors accepted during a given time window. To disable entirely set `rateLimit` to null. ```json {     \"rateLimit\": {         \"window\": 7200, // time in seconds         \"count\": 1000 // error cap     } } ```, useCase: str(user/profiling/tempest/demo)=user # * `user` * `profiling` * `tempest` * `demo`}\n@returns(201) {id: str, name: str, label: str, public: str?, secret: str?, projectId: int, isActive: bool, rateLimit: map?{window: int, count: int}, dsn: map{secret: str, public: str, csp: str, security: str, minidump: str, nel: str, unreal: str, crons: str, cdn: str, playstation: str, integration: str, otlp_traces: str, otlp_logs: str}, browserSdkVersion: str, browserSdk: map{choices: [[str]]}, dateCreated: str(date-time)?, dynamicSdkLoaderOptions: map{hasReplay: bool, hasPerformance: bool, hasDebug: bool, hasFeedback: bool, hasLogsAndMetrics: bool}, useCase: str}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\n@desc Return a client key bound to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., key_id: str # The ID of the client key}\n@returns(200) {id: str, name: str, label: str, public: str?, secret: str?, projectId: int, isActive: bool, rateLimit: map?{window: int, count: int}, dsn: map{secret: str, public: str, csp: str, security: str, minidump: str, nel: str, unreal: str, crons: str, cdn: str, playstation: str, integration: str, otlp_traces: str, otlp_logs: str}, browserSdkVersion: str, browserSdk: map{choices: [[str]]}, dateCreated: str(date-time)?, dynamicSdkLoaderOptions: map{hasReplay: bool, hasPerformance: bool, hasDebug: bool, hasFeedback: bool, hasLogsAndMetrics: bool}, useCase: str}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\n@desc Update various settings for a client key.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., key_id: str # The ID of the key to update.}\n@optional {name: str # The name for the client key, isActive: bool # Activate or deactivate the client key., rateLimit: map{count: int, window: int} # Applies a rate limit to cap the number of errors accepted during a given time window. To disable entirely set `rateLimit` to null. ```json {     \"rateLimit\": {         \"window\": 7200, // time in seconds         \"count\": 1000 // error cap     } } ```, browserSdkVersion: str(latest/7.x) # The Sentry Javascript SDK version to use. The currently supported options are:  * `latest` - Most recent version * `7.x` - Version 7 releases, dynamicSdkLoaderOptions: map{hasReplay: bool, hasPerformance: bool, hasDebug: bool, hasFeedback: bool, hasLogsAndMetrics: bool} # Configures multiple options for the Javascript Loader Script. - `Performance Monitoring` - `Debug Bundles & Logging` - `Session Replay` - Note that the loader will load the ES6 bundle instead of the ES5 bundle. - `User Feedback` - Note that the loader will load the ES6 bundle instead of the ES5 bundle. - `Logs and Metrics` - Note that the loader will load the ES6 bundle instead of the ES5 bundle. Requires SDK >= 10.0.0. ```json {     \"dynamicSdkLoaderOptions\": {         \"hasReplay\": true,         \"hasPerformance\": true,         \"hasDebug\": true,         \"hasFeedback\": true,         \"hasLogsAndMetrics\": true     } } ```}\n@returns(200) {id: str, name: str, label: str, public: str?, secret: str?, projectId: int, isActive: bool, rateLimit: map?{window: int, count: int}, dsn: map{secret: str, public: str, csp: str, security: str, minidump: str, nel: str, unreal: str, crons: str, cdn: str, playstation: str, integration: str, otlp_traces: str, otlp_logs: str}, browserSdkVersion: str, browserSdk: map{choices: [[str]]}, dateCreated: str(date-time)?, dynamicSdkLoaderOptions: map{hasReplay: bool, hasPerformance: bool, hasDebug: bool, hasFeedback: bool, hasLogsAndMetrics: bool}, useCase: str}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/keys/{key_id}/\n@desc Delete a client key for a given project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., key_id: str # The ID of the key to delete.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/members/\n@desc Returns a list of active organization members that belong to any team assigned to the project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\n@desc Retrieves details for a monitor.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., monitor_id_or_slug: str # The ID or slug of the monitor.}\n@returns(200) {alertRule: map{targets: [map], environment: str}, id: str, name: str, slug: str, status: str, isMuted: bool, isUpserting: bool, config: map{schedule_type: str, schedule: any, checkin_margin: int?, max_runtime: int?, timezone: str?, failure_issue_threshold: int?, recovery_threshold: int?, alert_rule_id: int?}, dateCreated: str(date-time), project: map{stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str}, environments: map{name: str, status: str, isMuted: bool, dateCreated: str(date-time), lastCheckIn: str(date-time), nextCheckIn: str(date-time), nextCheckInLatest: str(date-time), activeIncident: map?{startingTimestamp: str(date-time), resolvingTimestamp: str(date-time), brokenNotice: map?{userNotifiedTimestamp: str(date-time), environmentMutedTimestamp: str(date-time)}}}, owner: map{type: str, id: str, name: str, email: str}}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\n@desc Update a monitor.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., monitor_id_or_slug: str # The ID or slug of the monitor., project: str # The project slug to associate the monitor to., name: str # Name of the monitor. Used for notifications. If not set the slug will be derived from your monitor name., config: any # The configuration for the monitor.}\n@optional {slug: str # Uniquely identifies your monitor within your organization. Changing this slug will require updates to any instrumented check-in calls., status: str(active/disabled)=active # Status of the monitor. Disabled monitors will not accept events and will not count towards the monitor quota.  * `active` * `disabled`, owner: str # The ID of the team or user that owns the monitor. (eg. user:51 or team:6), is_muted: bool # Disable creation of monitor incidents}\n@returns(200) {alertRule: map{targets: [map], environment: str}, id: str, name: str, slug: str, status: str, isMuted: bool, isUpserting: bool, config: map{schedule_type: str, schedule: any, checkin_margin: int?, max_runtime: int?, timezone: str?, failure_issue_threshold: int?, recovery_threshold: int?, alert_rule_id: int?}, dateCreated: str(date-time), project: map{stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str}, environments: map{name: str, status: str, isMuted: bool, dateCreated: str(date-time), lastCheckIn: str(date-time), nextCheckIn: str(date-time), nextCheckInLatest: str(date-time), activeIncident: map?{startingTimestamp: str(date-time), resolvingTimestamp: str(date-time), brokenNotice: map?{userNotifiedTimestamp: str(date-time), environmentMutedTimestamp: str(date-time)}}}, owner: map{type: str, id: str, name: str, email: str}}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/\n@desc Delete a monitor or monitor environments.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., monitor_id_or_slug: str # The ID or slug of the monitor.}\n@optional {environment: [str] # The name of environments to filter by.}\n@returns(202) Accepted\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/monitors/{monitor_id_or_slug}/checkins/\n@desc Retrieve a list of check-ins for a monitor\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., monitor_id_or_slug: str # The ID or slug of the monitor.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\n@desc Returns details on a project's ownership configuration.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@returns(200) {schema: map?{$version: int, rules: [map]}, raw: str, fallthrough: bool, dateCreated: str(date-time), lastUpdated: str(date-time), isActive: bool, autoAssignment: str, codeownersAutoSync: bool}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/ownership/\n@desc Updates ownership configurations for a project. Note that only the\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {raw: str # Raw input for ownership configuration. See the [Ownership Rules Documentation](/product/issues/ownership-rules/) to learn more., fallthrough: bool # A boolean determining who to assign ownership to when an ownership rule has no match. If set to `True`, all project members are made owners. Otherwise, no owners are set., autoAssignment: str # Auto-assignment settings. The available options are: - Auto Assign to Issue Owner - Auto Assign to Suspect Commits - Turn off Auto-Assignment, codeownersAutoSync: bool=true # Set to `True` to sync issue owners with CODEOWNERS updates in a release.}\n@returns(202) {schema: map?{$version: int, rules: [map]}, raw: str, fallthrough: bool, dateCreated: str(date-time), lastUpdated: str(date-time), isActive: bool, autoAssignment: str, codeownersAutoSync: bool}\n@errors {400: Bad Request}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/preprodartifacts/build-distribution/latest/\n@desc Get the latest installable build for a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., appId: str # App identifier (exact match)., platform: str # Platform: \"apple\" or \"android\".}\n@optional {buildVersion: str # Current build version. When provided, enables check-for-updates mode., buildNumber: int # Current build number. Either this or mainBinaryIdentifier must be provided when buildVersion is set., mainBinaryIdentifier: str # UUID of the main binary (e.g. Mach-O UUID for Apple builds). Either this or buildNumber must be provided when buildVersion is set., buildConfiguration: str # Filter by build configuration name (exact match)., codesigningType: str # Filter by code signing type., installGroups: [str] # Filter by install group name (repeatable for multiple groups).}\n@returns(200) {latestArtifact: map?{buildId: str, state: str, appInfo: map{appId: str?, name: str?, version: str?, buildNumber: int?, artifactType: str?, dateAdded: str?, dateBuilt: str?}, gitInfo: map?{headSha: str?, baseSha: str?, provider: str?, headRepoName: str?, baseRepoName: str?, headRef: str?, baseRef: str?, prNumber: int?}, platform: str?, projectId: str, projectSlug: str, buildConfiguration: str?, isInstallable: bool, installUrl: str?, downloadCount: int, releaseNotes: str?, installGroups: [str]?, isCodeSignatureValid: bool?, profileName: str?, codesigningType: str?}, currentArtifact: map?{buildId: str, state: str, appInfo: map{appId: str?, name: str?, version: str?, buildNumber: int?, artifactType: str?, dateAdded: str?, dateBuilt: str?}, gitInfo: map?{headSha: str?, baseSha: str?, provider: str?, headRepoName: str?, baseRepoName: str?, headRef: str?, baseRef: str?, prNumber: int?}, platform: str?, projectId: str, projectSlug: str, buildConfiguration: str?, isInstallable: bool, installUrl: str?, downloadCount: int, releaseNotes: str?, installGroups: [str]?, isCodeSignatureValid: bool?, profileName: str?, codesigningType: str?}}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/\n@desc Delete a replay.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., replay_id: str(uuid) # The ID of the replay you'd like to retrieve.}\n@returns(204) No Content\n@errors {404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/clicks/\n@desc Retrieve a collection of RRWeb DOM node-ids and the timestamp they were clicked.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., replay_id: str(uuid) # The ID of the replay you'd like to retrieve.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., environment: [str] # The name of environments to filter by., per_page: int # Limit the number of rows to return in the result. Default and maximum allowed is 100., query: str # Filters results by using [query syntax](/product/sentry-basics/search/).  Example: `query=(transaction:foo AND release:abc) OR (transaction:[bar,baz] AND release:def)`}\n@returns(200) {data: [map]}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/\n@desc Return a collection of replay recording segments.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., replay_id: str(uuid) # The ID of the replay you'd like to retrieve.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results., per_page: int # Limit the number of rows to return in the result. Default and maximum allowed is 100.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/recording-segments/{segment_id}/\n@desc Return a replay recording segment.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., replay_id: str(uuid) # The ID of the replay you'd like to retrieve., segment_id: int # The ID of the segment you'd like to retrieve.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/{replay_id}/viewed-by/\n@desc Return a list of users who have viewed a replay.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., replay_id: str(uuid) # The ID of the replay you'd like to retrieve.}\n@returns(200) {data: map{viewed_by: [map]}}\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\n@desc Retrieve a collection of replay delete jobs.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@returns(200) {data: [map]}\n@errors {403: Forbidden}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/\n@desc Create a new replay deletion job.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., data: map{rangeStart!: str(date-time), rangeEnd!: str(date-time), environments!: [str], query!: str}}\n@returns(201) {data: map{id: int, dateCreated: str, dateUpdated: str, rangeStart: str, rangeEnd: str, environments: [str], status: str, query: str, countDeleted: int}}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/replays/jobs/delete/{job_id}/\n@desc Fetch a replay delete job instance.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., job_id: int # The ID of the replay deletion job you'd like to retrieve.}\n@returns(200) {data: map{id: int, dateCreated: str, dateUpdated: str, rangeStart: str, rangeEnd: str, environments: [str], status: str, query: str, countDeleted: int}}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\n@desc ## Deprecated\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/\n@desc ## Deprecated\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., name: str # The name for the rule., frequency: int # How often to perform the actions once for an issue, in minutes. The valid range is `5` to `43200`., actionMatch: str(all/any/none) # A string determining which of the conditions need to be true before any filters are evaluated.  * `all` - All conditions must evaluate to true. * `any` - At least one of the conditions must evaluate to true. * `none` - All conditions must evaluate to false., conditions: [map] # A list of triggers that determine when the rule fires. See below for a list of possible conditions.  **A new issue is created** ```json {     \"id\": \"sentry.rules.conditions.first_seen_event.FirstSeenEventCondition\" } ```  **The issue changes state from resolved to unresolved** ```json {     \"id\": \"sentry.rules.conditions.regression_event.RegressionEventCondition\" } ```  **The issue is seen more than `value` times in `interval`** - `value` - An integer - `interval` - Valid values are `1m`, `5m`, `15m`, `1h`, `1d`, `1w` and `30d` (`m` for minutes, `h` for hours, `d` for days, and `w` for weeks). ```json {     \"id\": \"sentry.rules.conditions.event_frequency.EventFrequencyCondition\",     \"value\": 500,     \"interval\": \"1h\" } ```  **The issue is seen by more than `value` users in `interval`** - `value` - An integer - `interval` - Valid values are `1m`, `5m`, `15m`, `1h`, `1d`, `1w` and `30d` (`m` for minutes, `h` for hours, `d` for days, and `w` for weeks). ```json {     \"id\": \"sentry.rules.conditions.event_frequency.EventUniqueUserFrequencyCondition\",     \"value\": 1000,     \"interval\": \"15m\" } ```  **The issue affects more than `value` percent of sessions in `interval`** - `value` - A float - `interval` - Valid values are `5m`, `10m`, `30m`, and `1h` (`m` for minutes, `h` for hours). ```json {     \"id\": \"sentry.rules.conditions.event_frequency.EventFrequencyPercentCondition\",     \"value\": 50.0,     \"interval\": \"10m\" } ```, actions: [map] # A list of actions that take place when all required conditions and filters for the rule are met. See below for a list of possible actions.  **Send a notification to Suggested Assignees** - `fallthroughType` - Who the notification should be sent to if there are no suggested assignees. Valid values are `ActiveMembers`, `AllMembers`, and `NoOne`. ```json {     \"id\" - \"sentry.mail.actions.NotifyEmailAction\",     \"targetType\" - \"IssueOwners\",     \"fallthroughType\" - \"ActiveMembers\" } ```  **Send a notification to a Member or a Team** - `targetType` - One of `Member` or `Team`. - `fallthroughType` - Who the notification should be sent to if it cannot be sent to the original target. Valid values are `ActiveMembers`, `AllMembers`, and `NoOne`. - `targetIdentifier` - The ID of the Member or Team the notification should be sent to. ```json {     \"id\": \"sentry.mail.actions.NotifyEmailAction\",     \"targetType\": \"Team\"     \"fallthroughType\": \"AllMembers\"     \"targetIdentifier\": 4524986223 } ```  **Send a Slack notification** - `workspace` - The integration ID associated with the Slack workspace. - `channel` - The name of the channel to send the notification to (e.g., #critical, Jane Schmidt). - `channel_id` (optional) - The ID of the channel to send the notification to. - `tags` (optional) - A string of tags to show in the notification, separated by commas (e.g., \"environment, user, my_tag\"). - `notes` (optional) - Text to show alongside the notification. To @ a user, include their user id like `@`. To include a clickable link, format the link and title like ``. ```json {     \"id\": \"sentry.integrations.slack.notify_action.SlackNotifyServiceAction\",     \"workspace\": 293854098,     \"channel\": \"#warning\",     \"tags\": \"environment,level\"     \"notes\": \"Please  for triage information\" } ```  **Send a Microsoft Teams notification** - `team` - The integration ID associated with the Microsoft Teams team. - `channel` - The name of the channel to send the notification to. ```json {     \"id\": \"sentry.integrations.msteams.notify_action.MsTeamsNotifyServiceAction\",     \"team\": 23465424,     \"channel\": \"General\" } ```  **Send a Discord notification** - `server` - The integration ID associated with the Discord server. - `channel_id` - The ID of the channel to send the notification to. - `tags` (optional) - A string of tags to show in the notification, separated by commas (e.g., \"environment, user, my_tag\"). ```json {     \"id\": \"sentry.integrations.discord.notify_action.DiscordNotifyServiceAction\",     \"server\": 63408298,     \"channel_id\": 94732897,     \"tags\": \"browser,user\" } ```  **Create a Jira Ticket** - `integration` - The integration ID associated with Jira. - `project` - The ID of the Jira project. - `issuetype` - The ID of the type of issue that the ticket should be created as. - `dynamic_form_fields` - A list of any custom fields you want to include in the ticket as objects. ```json {     \"id\": \"sentry.integrations.jira.notify_action.JiraCreateTicketAction\",     \"integration\": 321424,     \"project\": \"349719\"     \"issueType\": \"1\" } ```  **Create a Jira Server Ticket** - `integration` - The integration ID associated with Jira Server. - `project` - The ID of the Jira Server project. - `issuetype` - The ID of the type of issue that the ticket should be created as. - `dynamic_form_fields` - A list of any custom fields you want to include in the ticket as objects. ```json {     \"id\": \"sentry.integrations.jira_server.notify_action.JiraServerCreateTicketAction\",     \"integration\": 321424,     \"project\": \"349719\"     \"issueType\": \"1\" } ```  **Create a GitHub Issue** - `integration` - The integration ID associated with GitHub. - `repo` - The name of the repository to create the issue in. - `title` - The title of the issue. - `body` (optional) - The contents of the issue. - `assignee` (optional) - The GitHub user to assign the issue to. - `labels` (optional) - A list of labels to assign to the issue. ```json {     \"id\": \"sentry.integrations.github.notify_action.GitHubCreateTicketAction\",     \"integration\": 93749,     \"repo\": default,     \"title\": \"My Test Issue\",     \"assignee\": \"Baxter the Hacker\",     \"labels\": [\"bug\", \"p1\"]     \"\" } ```  **Create a GitHub Enterprise Issue** - `integration` - The integration ID associated with GitHub Enterprise. - `repo` - The name of the repository to create the issue in. - `title` - The title of the issue. - `body` (optional) - The contents of the issue. - `assignee` (optional) - The GitHub user to assign the issue to. - `labels` (optional) - A list of labels to assign to the issue. ```json {     \"id\": \"sentry.integrations.github_enterprise.notify_action.GitHubEnterpriseCreateTicketAction\",     \"integration\": 93749,     \"repo\": default,     \"title\": \"My Test Issue\",     \"assignee\": \"Baxter the Hacker\",     \"labels\": [\"bug\", \"p1\"]     \"\" } ```  **Create an Azure DevOps work item** - `integration` - The integration ID. - `project` - The ID of the Azure DevOps project. - `work_item_type` - The type of work item to create. - `dynamic_form_fields` - A list of any custom fields you want to include in the work item as objects. ```json {     \"id\": \"sentry.integrations.vsts.notify_action.AzureDevopsCreateTicketAction\",     \"integration\": 294838,     \"project\": \"0389485\",     \"work_item_type\": \"Microsoft.VSTS.WorkItemTypes.Task\", } ```  **Send a PagerDuty notification** - `account` - The integration ID associated with the PagerDuty account. - `service` - The ID of the service to send the notification to. - `severity` - The severity of the Pagerduty alert. This is optional, the default is `critical` for fatal issues, `error` for error issues, `warning` for warning issues, and `info` for info and debug issues. ```json {     \"id\": \"sentry.integrations.pagerduty.notify_action.PagerDutyNotifyServiceAction\",     \"account\": 92385907,     \"service\": 9823924,     \"severity\": \"critical\" } ```  **Send an Opsgenie notification** - `account` - The integration ID associated with the Opsgenie account. - `team` - The ID of the Opsgenie team to send the notification to. - `priority` - The priority of the Opsgenie alert. This is optional, the default is `P3`. ```json {     \"id\": \"sentry.integrations.opsgenie.notify_action.OpsgenieNotifyTeamAction\",     \"account\": 8723897589,     \"team\": \"9438930258-fairy\",     \"priority\": \"P1\" } ```  **Send a notification to a service** - `service` - The plugin slug. ```json {     \"id\": \"sentry.rules.actions.notify_event_service.NotifyEventServiceAction\",     \"service\": \"mail\" } ```  **Send a notification to a Sentry app with a custom webhook payload** - `settings` - A list of objects denoting the settings each action will be created with. All required fields must be included. - `sentryAppInstallationUuid` - The ID for the Sentry app ```json {     \"id\": \"sentry.rules.actions.notify_event_sentry_app.NotifyEventSentryAppAction\",     \"settings\": [         {\"name\": \"title\", \"value\": \"Team Rocket\"},         {\"name\": \"summary\", \"value\": \"We're blasting off again.\"},     ],     \"sentryAppInstallationUuid\": 643522     \"hasSchemaFormConfig\": true } ```  **Send a notification (for all legacy integrations)** ```json {     \"id\": \"sentry.rules.actions.notify_event.NotifyEventAction\" } ```}\n@optional {environment: str # The name of the environment to filter by., owner: str # The ID of the team or user that owns the rule., filterMatch: str(all/any/none) # A string determining which filters need to be true before any actions take place. Required when a value is provided for `filters`.  * `all` - All filters must evaluate to true. * `any` - At least one of the filters must evaluate to true. * `none` - All filters must evaluate to false., filters: [map] # A list of filters that determine if a rule fires after the necessary conditions have been met. See below for a list of possible filters.  **The issue is `comparison_type` than `value` `time`** - `comparison_type` - One of `older` or `newer` - `value` - An integer - `time` - The unit of time. Valid values are `minute`, `hour`, `day`, and `week`. ```json {     \"id\": \"sentry.rules.filters.age_comparison.AgeComparisonFilter\",     \"comparison_type\": \"older\",     \"value\": 3,     \"time\": \"week\" } ```  **The issue has happened at least `value` times** - `value` - An integer ```json {     \"id\": \"sentry.rules.filters.issue_occurrences.IssueOccurrencesFilter\",     \"value\": 120 } ```  **The issue is assigned to No One** ```json {     \"id\": \"sentry.rules.filters.assigned_to.AssignedToFilter\",     \"targetType\": \"Unassigned\" } ```  **The issue is assigned to `targetType`** - `targetType` - One of `Team` or `Member` - `targetIdentifier` - The target's ID ```json {     \"id\": \"sentry.rules.filters.assigned_to.AssignedToFilter\",     \"targetType\": \"Member\",     \"targetIdentifier\": 895329789 } ```  **The event is from the latest release** ```json {     \"id\": \"sentry.rules.filters.latest_release.LatestReleaseFilter\" } ```  **The issue's category is equal to `value`** - `value` - An integer correlated with a category. Valid values are `1` (Error), `2` (Performance), `3` (Profile), `4` (Cron), and `5` (Replay). ```json {     \"id\": \"sentry.rules.filters.issue_category.IssueCategoryFilter\",     \"value\": 2 } ```  **The event's `attribute` value `match` `value`** - `attribute` - Valid values are `message`, `platform`, `environment`, `type`, `error.handled`, `error.unhandled`, `error.main_thread`, `exception.type`, `exception.value`, `user.id`, `user.email`, `user.username`, `user.ip_address`, `http.method`, `http.url`, `http.status_code`, `sdk.name`, `stacktrace.code`, `stacktrace.module`, `stacktrace.filename`, `stacktrace.abs_path`, `stacktrace.package`, `unreal.crash_type`, `app.in_foreground`. - `match` - The comparison operator. Valid values are `eq` (equals), `ne` (does not equal), `sw` (starts with), `ew` (ends with), `co` (contains), `nc` (does not contain), `is` (is set), and `ns` (is not set). - `value` - A string. Not required when `match` is `is` or `ns`. ```json {     \"id\": \"sentry.rules.conditions.event_attribute.EventAttributeCondition\",     \"attribute\": \"http.url\",     \"match\": \"nc\",     \"value\": \"localhost\" } ```  **The event's tags match `key` `match` `value`** - `key` - The tag - `match` - The comparison operator. Valid values are `eq` (equals), `ne` (does not equal), `sw` (starts with), `ew` (ends with), `co` (contains), `nc` (does not contain), `is` (is set), and `ns` (is not set). - `value` - A string. Not required when `match` is `is` or `ns`. ```json {     \"id\": \"sentry.rules.filters.tagged_event.TaggedEventFilter\",     \"key\": \"level\",     \"match\": \"eq\"     \"value\": \"error\" } ```  **The event's level is `match` `level`** - `match` - Valid values are `eq`, `gte`, and `lte`. - `level` - Valid values are `50` (fatal), `40` (error), `30` (warning), `20` (info), `10` (debug), `0` (sample). ```json {     \"id\": \"sentry.rules.filters.level.LevelFilter\",     \"match\": \"gte\"     \"level\": \"50\" } ```}\n@returns(201) {owner: str?, createdBy: map?{id: int, name: str, email: str}, environment: str?, lastTriggered: str?, snoozeCreatedBy: str?, snoozeForEveryone: bool?, disableReason: str, disableDate: str, errors: [map], id: str?, conditions: [map], filters: [map], actions: [map], actionMatch: str, filterMatch: str, frequency: int, name: str, dateCreated: str(date-time), projects: [str], status: str, snooze: bool}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\n@desc ## Deprecated\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., rule_id: int # The ID of the rule you'd like to query.}\n@returns(200) {owner: str?, createdBy: map?{id: int, name: str, email: str}, environment: str?, lastTriggered: str?, snoozeCreatedBy: str?, snoozeForEveryone: bool?, disableReason: str, disableDate: str, errors: [map], id: str?, conditions: [map], filters: [map], actions: [map], actionMatch: str, filterMatch: str, frequency: int, name: str, dateCreated: str(date-time), projects: [str], status: str, snooze: bool}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\n@desc ## Deprecated\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., rule_id: int # The ID of the rule you'd like to query., name: str # The name for the rule., actionMatch: str(all/any/none) # A string determining which of the conditions need to be true before any filters are evaluated.  * `all` - All conditions must evaluate to true. * `any` - At least one of the conditions must evaluate to true. * `none` - All conditions must evaluate to false., conditions: [map] # A list of triggers that determine when the rule fires. See [Create an Issue Alert Rule](/api/alerts/create-an-issue-alert-rule-for-a-project) for valid conditions., actions: [map] # A list of actions that take place when all required conditions and filters for the rule are met. See [Create an Issue Alert Rule](/api/alerts/create-an-issue-alert-rule-for-a-project) for valid actions., frequency: int # How often to perform the actions once for an issue, in minutes. The valid range is `5` to `43200`.}\n@optional {environment: str # The name of the environment to filter by., filterMatch: str(all/any/none) # A string determining which filters need to be true before any actions take place.  * `all` - All filters must evaluate to true. * `any` - At least one of the filters must evaluate to true. * `none` - All filters must evaluate to false., filters: [map] # A list of filters that determine if a rule fires after the necessary conditions have been met. See [Create an Issue Alert Rule](/api/alerts/create-an-issue-alert-rule-for-a-project) for valid filters., owner: str # The ID of the team or user that owns the rule.}\n@returns(200) {owner: str?, createdBy: map?{id: int, name: str, email: str}, environment: str?, lastTriggered: str?, snoozeCreatedBy: str?, snoozeForEveryone: bool?, disableReason: str, disableDate: str, errors: [map], id: str?, conditions: [map], filters: [map], actions: [map], actionMatch: str, filterMatch: str, frequency: int, name: str, dateCreated: str(date-time), projects: [str], status: str, snooze: bool}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/rules/{rule_id}/\n@desc ## Deprecated\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., rule_id: int # The ID of the rule you'd like to query.}\n@returns(202) Accepted\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\n@desc List custom symbol sources configured for a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {id: str # The ID of the source to look up. If this is not provided, all sources are returned.}\n@returns(200)\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\n@desc Add a custom symbol source to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., type: str(http/gcs/s3) # The type of the source.  * `http` - SymbolServer (HTTP) * `gcs` - Google Cloud Storage * `s3` - Amazon S3, name: str # The human-readable name of the source.}\n@optional {id: str # The internal ID of the source. Must be distinct from all other source IDs and cannot start with '`sentry:`'. If this is not provided, a new UUID will be generated., layout: map{type!: str, casing!: str} # Layout settings for the source. This is required for HTTP, GCS, and S3 sources.  **`type`** ***(string)*** - The layout of the folder structure. The options are: - `native` - Platform-Specific (SymStore / GDB / LLVM) - `symstore` - Microsoft SymStore - `symstore_index2` - Microsoft SymStore (with index2.txt) - `ssqp` - Microsoft SSQP - `unified` - Unified Symbol Server Layout - `debuginfod` - debuginfod  **`casing`** ***(string)*** - The layout of the folder structure. The options are: - `default` - Default (mixed case) - `uppercase` - Uppercase - `lowercase` - Lowercase  ```json {     \"layout\": {         \"type\": \"native\"         \"casing\": \"default\"     } } ```, filters: map{filetypes: [str], path_patterns: [str], requires_checksum: bool} # Filter settings for the source. This is optional for all sources.  **`filetypes`** ***(list)*** - A list of file types that can be found on this source. If this is left empty, all file types will be enabled. The options are: - `pe` - Windows executable files - `pdb` - Windows debug files - `portablepdb` - .NET portable debug files - `mach_code` - MacOS executable files - `mach_debug` - MacOS debug files - `elf_code` - ELF executable files - `elf_debug` - ELF debug files - `wasm_code` - WASM executable files - `wasm_debug` - WASM debug files - `breakpad` - Breakpad symbol files - `sourcebundle` - Source code bundles - `uuidmap` - Apple UUID mapping files - `bcsymbolmap` - Apple bitcode symbol maps - `il2cpp` - Unity IL2CPP mapping files - `proguard` - ProGuard mapping files  **`path_patterns`** ***(list)*** - A list of glob patterns to check against the debug and code file paths of debug files. Only files that match one of these patterns will be requested from the source. If this is left empty, no path-based filtering takes place.  **`requires_checksum`** ***(boolean)*** - Whether this source requires a debug checksum to be sent with each request. Defaults to `false`.  ```json {     \"filters\": {         \"filetypes\": [\"pe\", \"pdb\", \"portablepdb\"],         \"path_patterns\": [\"*ffmpeg*\"]     } } ```, url: str # The source's URL. Optional for HTTP sources, invalid for all others., username: str # The user name for accessing the source. Optional for HTTP sources, invalid for all others., password: str # The password for accessing the source. Optional for HTTP sources, invalid for all others., bucket: str # The GCS or S3 bucket where the source resides. Required for GCS and S3 source, invalid for HTTP sources., region: str(us-east-2/us-east-1/us-west-1/us-west-2/ap-east-1/ap-south-1/ap-northeast-2/ap-southeast-1/ap-southeast-2/ap-northeast-1/ca-central-1/cn-north-1/cn-northwest-1/eu-central-1/eu-west-1/eu-west-2/eu-west-3/eu-north-1/sa-east-1/us-gov-east-1/us-gov-west-1) # The source's [S3 region](https://docs.aws.amazon.com/general/latest/gr/s3.html). Required for S3 sources, invalid for all others.  * `us-east-2` - US East (Ohio) * `us-east-1` - US East (N. Virginia) * `us-west-1` - US West (N. California) * `us-west-2` - US West (Oregon) * `ap-east-1` - Asia Pacific (Hong Kong) * `ap-south-1` - Asia Pacific (Mumbai) * `ap-northeast-2` - Asia Pacific (Seoul) * `ap-southeast-1` - Asia Pacific (Singapore) * `ap-southeast-2` - Asia Pacific (Sydney) * `ap-northeast-1` - Asia Pacific (Tokyo) * `ca-central-1` - Canada (Central) * `cn-north-1` - China (Beijing) * `cn-northwest-1` - China (Ningxia) * `eu-central-1` - EU (Frankfurt) * `eu-west-1` - EU (Ireland) * `eu-west-2` - EU (London) * `eu-west-3` - EU (Paris) * `eu-north-1` - EU (Stockholm) * `sa-east-1` - South America (São Paulo) * `us-gov-east-1` - AWS GovCloud (US-East) * `us-gov-west-1` - AWS GovCloud (US), access_key: str # The [AWS Access Key](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html#access-keys-and-secret-access-keys).Required for S3 sources, invalid for all others., secret_key: str # The [AWS Secret Access Key](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html#access-keys-and-secret-access-keys).Required for S3 sources, invalid for all others., prefix: str # The GCS or [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html) prefix. Optional for GCS and S3 sourcse, invalid for HTTP., client_email: str # The GCS email address for authentication. Required for GCS sources, invalid for all others., private_key: str # The GCS private key. Required for GCS sources if not using impersonated tokens. Invalid for all others.}\n@returns(201)\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\n@desc Update a custom symbol source in a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., id: str # The ID of the source to update., type: str(http/gcs/s3) # The type of the source.  * `http` - SymbolServer (HTTP) * `gcs` - Google Cloud Storage * `s3` - Amazon S3, name: str # The human-readable name of the source.}\n@optional {id: str # The internal ID of the source. Must be distinct from all other source IDs and cannot start with '`sentry:`'. If this is not provided, a new UUID will be generated., layout: map{type!: str, casing!: str} # Layout settings for the source. This is required for HTTP, GCS, and S3 sources.  **`type`** ***(string)*** - The layout of the folder structure. The options are: - `native` - Platform-Specific (SymStore / GDB / LLVM) - `symstore` - Microsoft SymStore - `symstore_index2` - Microsoft SymStore (with index2.txt) - `ssqp` - Microsoft SSQP - `unified` - Unified Symbol Server Layout - `debuginfod` - debuginfod  **`casing`** ***(string)*** - The layout of the folder structure. The options are: - `default` - Default (mixed case) - `uppercase` - Uppercase - `lowercase` - Lowercase  ```json {     \"layout\": {         \"type\": \"native\"         \"casing\": \"default\"     } } ```, filters: map{filetypes: [str], path_patterns: [str], requires_checksum: bool} # Filter settings for the source. This is optional for all sources.  **`filetypes`** ***(list)*** - A list of file types that can be found on this source. If this is left empty, all file types will be enabled. The options are: - `pe` - Windows executable files - `pdb` - Windows debug files - `portablepdb` - .NET portable debug files - `mach_code` - MacOS executable files - `mach_debug` - MacOS debug files - `elf_code` - ELF executable files - `elf_debug` - ELF debug files - `wasm_code` - WASM executable files - `wasm_debug` - WASM debug files - `breakpad` - Breakpad symbol files - `sourcebundle` - Source code bundles - `uuidmap` - Apple UUID mapping files - `bcsymbolmap` - Apple bitcode symbol maps - `il2cpp` - Unity IL2CPP mapping files - `proguard` - ProGuard mapping files  **`path_patterns`** ***(list)*** - A list of glob patterns to check against the debug and code file paths of debug files. Only files that match one of these patterns will be requested from the source. If this is left empty, no path-based filtering takes place.  **`requires_checksum`** ***(boolean)*** - Whether this source requires a debug checksum to be sent with each request. Defaults to `false`.  ```json {     \"filters\": {         \"filetypes\": [\"pe\", \"pdb\", \"portablepdb\"],         \"path_patterns\": [\"*ffmpeg*\"]     } } ```, url: str # The source's URL. Optional for HTTP sources, invalid for all others., username: str # The user name for accessing the source. Optional for HTTP sources, invalid for all others., password: str # The password for accessing the source. Optional for HTTP sources, invalid for all others., bucket: str # The GCS or S3 bucket where the source resides. Required for GCS and S3 source, invalid for HTTP sources., region: str(us-east-2/us-east-1/us-west-1/us-west-2/ap-east-1/ap-south-1/ap-northeast-2/ap-southeast-1/ap-southeast-2/ap-northeast-1/ca-central-1/cn-north-1/cn-northwest-1/eu-central-1/eu-west-1/eu-west-2/eu-west-3/eu-north-1/sa-east-1/us-gov-east-1/us-gov-west-1) # The source's [S3 region](https://docs.aws.amazon.com/general/latest/gr/s3.html). Required for S3 sources, invalid for all others.  * `us-east-2` - US East (Ohio) * `us-east-1` - US East (N. Virginia) * `us-west-1` - US West (N. California) * `us-west-2` - US West (Oregon) * `ap-east-1` - Asia Pacific (Hong Kong) * `ap-south-1` - Asia Pacific (Mumbai) * `ap-northeast-2` - Asia Pacific (Seoul) * `ap-southeast-1` - Asia Pacific (Singapore) * `ap-southeast-2` - Asia Pacific (Sydney) * `ap-northeast-1` - Asia Pacific (Tokyo) * `ca-central-1` - Canada (Central) * `cn-north-1` - China (Beijing) * `cn-northwest-1` - China (Ningxia) * `eu-central-1` - EU (Frankfurt) * `eu-west-1` - EU (Ireland) * `eu-west-2` - EU (London) * `eu-west-3` - EU (Paris) * `eu-north-1` - EU (Stockholm) * `sa-east-1` - South America (São Paulo) * `us-gov-east-1` - AWS GovCloud (US-East) * `us-gov-west-1` - AWS GovCloud (US), access_key: str # The [AWS Access Key](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html#access-keys-and-secret-access-keys).Required for S3 sources, invalid for all others., secret_key: str # The [AWS Secret Access Key](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html#access-keys-and-secret-access-keys).Required for S3 sources, invalid for all others., prefix: str # The GCS or [S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html) prefix. Optional for GCS and S3 sourcse, invalid for HTTP., client_email: str # The GCS email address for authentication. Required for GCS sources, invalid for all others., private_key: str # The GCS private key. Required for GCS sources if not using impersonated tokens. Invalid for all others.}\n@returns(200)\n@errors {400: Bad Request, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/symbol-sources/\n@desc Delete a custom symbol source from a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., id: str # The ID of the source to delete.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/\n@desc Return a list of teams that have access to this project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/\n@desc Give a team access to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(201) {stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str, team: map{id: str, name: str, slug: str}, teams: [map]}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/teams/{team_id_or_slug}/\n@desc Revoke a team's access to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the resource belongs to., team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(200) {stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, isInternal: bool, isPublic: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, color: str, status: str, team: map{id: str, name: str, slug: str}, teams: [map]}\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/seer/models/\n@desc Get list of actively used LLM model names from Seer.\n@returns(200) {models: [str]}\n\n@endpoint GET /api/0/sentry-apps/{sentry_app_id_or_slug}/\n@desc Retrieve a custom integration.\n@required {sentry_app_id_or_slug: str # The ID or slug of the custom integration.}\n@returns(200) {allowedOrigins: [str], avatars: [map], events: [str], featureData: [str], isAlertable: bool, metadata: str, name: str, schema: str, scopes: [str], slug: str, status: str, uuid: str, verifyInstall: bool, author: str?, overview: str?, popularity: int?, redirectUrl: str?, webhookUrl: str?, clientSecret: str?, datePublished: str(date-time), clientId: str, owner: map{id: int, slug: str}}\n\n@endpoint PUT /api/0/sentry-apps/{sentry_app_id_or_slug}/\n@desc Update an existing custom integration.\n@required {sentry_app_id_or_slug: str # The ID or slug of the custom integration., name: str # The name of the custom integration., scopes: [str] # The custom integration's permission scopes for API access.}\n@optional {author: str # The custom integration's author., events: [str] # Webhook events the custom integration is subscribed to., schema: map # The UI components schema, used to render the custom integration's configuration UI elements. See our [schema docs](https://docs.sentry.io/organization/integrations/integration-platform/ui-components/) for more information., webhookUrl: str(uri) # The webhook destination URL., redirectUrl: str(uri) # The post-installation redirect URL., isInternal: bool=false # Whether or not the integration is internal only. False means the integration is public., isAlertable: bool=false # Marks whether or not the custom integration can be used in an alert rule., overview: str # The custom integration's description., verifyInstall: bool=true # Whether or not an installation of the custom integration should be verified., allowedOrigins: [str] # The list of allowed origins for CORS.}\n@returns(200) {allowedOrigins: [str], avatars: [map], events: [str], featureData: [str], isAlertable: bool, metadata: str, name: str, schema: str, scopes: [str], slug: str, status: str, uuid: str, verifyInstall: bool, author: str?, overview: str?, popularity: int?, redirectUrl: str?, webhookUrl: str?, clientSecret: str?, datePublished: str(date-time), clientId: str, owner: map{id: int, slug: str}}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint DELETE /api/0/sentry-apps/{sentry_app_id_or_slug}/\n@desc Delete a custom integration.\n@required {sentry_app_id_or_slug: str # The ID or slug of the custom integration.}\n@returns(204) No Content\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\n@desc Return details on an individual team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@optional {expand: str # List of strings to opt in to additional data. Supports `projects`, `externalTeams`., collapse: str # List of strings to opt out of certain pieces of data. Supports `organization`.}\n@returns(200) {id: str, slug: str, name: str, dateCreated: str(date-time)?, isMember: bool, teamRole: str?, flags: map, access: [str], hasAccess: bool, isPending: bool, memberCount: int, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, externalTeams: [map], organization: map{features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool}, projects: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\n@desc Update various attributes and configurable settings for the given\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to., slug: str # Uniquely identifies a team. This is must be available.}\n@returns(200) {id: str, slug: str, name: str, dateCreated: str(date-time)?, isMember: bool, teamRole: str?, flags: map, access: [str], hasAccess: bool, isPending: bool, memberCount: int, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, externalTeams: [map], organization: map{features: [str], extraOptions: map, access: [str], onboardingTasks: [map], id: str, slug: str, status: map{id: str, name: str}, name: str, dateCreated: str(date-time), isEarlyAdopter: bool, require2FA: bool, avatar: map{avatarType: str, avatarUuid: str?, avatarUrl: str?}, links: map{organizationUrl: str, regionUrl: str}, hasAuthProvider: bool, allowMemberInvite: bool, allowMemberProjectCreation: bool, allowSuperuserAccess: bool}, projects: [map]}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint DELETE /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/\n@desc Schedules a team for deletion.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@returns(204) No Content\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/\n@desc Link a team from an external provider to a Sentry team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to., external_name: str # The associated name for the provider., provider: str(github/github_enterprise/jira_server/slack/perforce/gitlab/msteams/custom_scm) # The provider of the external actor.  * `github` * `github_enterprise` * `jira_server` * `slack` * `perforce` * `gitlab` * `msteams` * `custom_scm`, integration_id: int # The Integration ID.}\n@optional {external_id: str # The associated user ID for provider.}\n@returns(200) {externalId: str, userId: str, teamId: str, id: str, provider: str, externalName: str, integrationId: str}\n@returns(201) {externalId: str, userId: str, teamId: str, id: str, provider: str, externalName: str, integrationId: str}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint PUT /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\n@desc Update a team in an external provider that is currently linked to a Sentry team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to., external_team_id: int # The ID of the external team object. This is returned when creating an external team., external_name: str # The associated name for the provider., provider: str(github/github_enterprise/jira_server/slack/perforce/gitlab/msteams/custom_scm) # The provider of the external actor.  * `github` * `github_enterprise` * `jira_server` * `slack` * `perforce` * `gitlab` * `msteams` * `custom_scm`, integration_id: int # The Integration ID.}\n@optional {external_id: str # The associated user ID for provider.}\n@returns(200) {externalId: str, userId: str, teamId: str, id: str, provider: str, externalName: str, integrationId: str}\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint DELETE /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/external-teams/{external_team_id}/\n@desc Delete the link between a team from an external provider and a Sentry team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to., external_team_id: int # The ID of the external team object. This is returned when creating an external team.}\n@returns(204) No Content\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/members/\n@desc List all members on a team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\n@desc Return a list of projects bound to a team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {403: Forbidden, 404: Team not found.}\n\n@endpoint POST /api/0/teams/{organization_id_or_slug}/{team_id_or_slug}/projects/\n@desc Create a new project bound to a team.\n@required {team_id_or_slug: str # The ID or slug of the team the resource belongs to., name: str # The name for the project.}\n@optional {slug: str # Uniquely identifies a project and is used for the interface.         If not provided, it is automatically generated from the name., platform: str # The platform for the project., default_rules: bool # Defaults to true where the behavior is to alert the user on every new issue. Setting this to false will turn this off and the user must create their own alerts to be notified of new issues.}\n@returns(201) {latestDeploys: map?, options: map, stats: any, transactionStats: any, sessionStats: any, id: str, slug: str, name: str, platform: str?, dateCreated: str(date-time), isBookmarked: bool, isMember: bool, features: [str], firstEvent: str(date-time)?, firstTransactionEvent: bool, access: [str], hasAccess: bool, hasFeedbacks: bool, hasFlags: bool, hasMinifiedStackTrace: bool, hasMonitors: bool, hasNewFeedbacks: bool, hasProfiles: bool, hasReplays: bool, hasSessions: bool, hasInsightsHttp: bool, hasInsightsDb: bool, hasInsightsAssets: bool, hasInsightsAppStart: bool, hasInsightsScreenLoad: bool, hasInsightsVitals: bool, hasInsightsCaches: bool, hasInsightsQueues: bool, hasInsightsAgentMonitoring: bool, hasInsightsMCP: bool, hasLogs: bool, hasTraceMetrics: bool, team: map?{id: str, name: str, slug: str}, teams: [map], platforms: [str], hasUserReports: bool, environments: [str], latestRelease: map?{version: str}}\n@errors {400: Bad Request, 403: Forbidden, 404: Team not found., 409: A project with this slug already exists.}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/repos/\n@desc Return a list of version control repositories for a given organization.\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\n@desc Retrieve a list of debug information files for a given project.\n@required {project_id_or_slug: str # The ID or slug of the project to list the DIFs of.}\n@returns(200) Success\n@errors {403: Forbidden, 404: The requested resource does not exist}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\n@desc Upload a new debug information file for the given release.\n@required {project_id_or_slug: str # The ID or slug of the project to upload a file to.}\n@returns(201) Success\n@errors {400: Bad Input, 403: Forbidden, 404: The requested resource does not exist}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/files/dsyms/\n@desc Delete a debug information file for a given project.\n@required {project_id_or_slug: str # The ID or slug of the project to delete the DIF., id: str # The ID of the DIF to delete.}\n@returns(204) Success\n@errors {403: Forbidden, 404: The requested resource does not exist}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/users/\n@desc Return a list of users seen within this project.\n@required {project_id_or_slug: str # The ID or slug of the project.}\n@optional {query: str # Limit results to users matching the given query. Prefixes should be used to suggest the field to match on: `id`, `email`, `username`, `ip`. For example, `query=email:foo@example.com`, cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/tags/{key}/values/\n@desc Return a list of values associated with this key.  The `query`\n@required {project_id_or_slug: str # The ID or slug of the project., key: str # The tag key to look up.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/stats/\n@desc Caution\n@required {project_id_or_slug: str # The ID or slug of the project.}\n@optional {stat: str(received/rejected/blacklisted/generated) # The name of the stat to query `(\"received\", \"rejected\", \"blacklisted\", \"generated\")`., since: str(date-time) # A timestamp to set the start of the query in seconds since UNIX epoch., until: str(date-time) # A timestamp to set the end of the query in seconds since UNIX epoch., resolution: str(10s/1h/1d) # An explicit resolution to search for (one of `10s`, `1h`, and `1d`).}\n@returns(200) Success\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/\n@desc Return a list of user feedback items within this project.\n@required {project_id_or_slug: str # The ID or slug of the project.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/user-feedback/\n@desc *This endpoint is DEPRECATED. We document it here for older SDKs and users who are still migrating to the [User Feedback Widget](https://docs.sentry.io/product/user-feedback/#user-feedback-widget) or [API](https://docs.sentry.io/platforms/javascript/user-feedback/#user-feedback-api)(multi-platform). If you are a new user, do not use this endpoint - unless you don't have a JS frontend, and your platform's SDK does not offer a feedback API.*\n@required {project_id_or_slug: str # The ID or slug of the project., event_id: str # The event ID. This can be retrieved from the [beforeSend callback](https://docs.sentry.io/platforms/javascript/configuration/filtering/#using-beforesend)., name: str # User's name., email: str # User's email address., comments: str # Comments supplied by user.}\n@returns(200) {comments: str, dateCreated: str, email: str, event: map{eventID: str, id: str?}, eventID: str, id: str, issue: map?, name: str, user: map?} # Success\n@errors {400: Bad Input, 403: Forbidden, 404: The requested resource does not exist, 409: Conflict}\n@example_request {\"event_id\":\"14bad9a2e3774046977a21440ddb39b2\",\"name\":\"Jane Schmidt\",\"email\":\"jane@empowerplant.io\",\"comments\":\"It broke!\"}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/\n@desc Return a list of service hooks bound to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the client keys belong to.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: You do not have that feature enabled}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/\n@desc Register a new service hook on a project.\n@required {project_id_or_slug: str # The ID or slug of the project the client keys belong to., url: str # The URL for the webhook., events: [str] # The events to subscribe to.}\n@returns(201) {dateCreated: str, events: [str], id: str, secret: str, status: str, url: str} # Success\n@errors {403: You do not have that feature enabled, 404: The requested resource does not exist}\n@example_request {\"url\":\"https://empowerplant.io/sentry-hook\",\"events\":[\"event.alert\",\"event.created\"]}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\n@desc Return a service hook bound to a project.\n@required {project_id_or_slug: str # The ID or slug of the project the client keys belong to., hook_id: str # The GUID of the service hook.}\n@returns(200) {dateCreated: str, events: [str], id: str, secret: str, status: str, url: str} # Success\n@errors {403: Forbidden, 404: The requested resource does not exist}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\n@desc Update a service hook.\n@required {project_id_or_slug: str # The ID or slug of the project the client keys belong to., hook_id: str # The GUID of the service hook., url: str # The URL for the webhook., events: [str] # The events to subscribe to.}\n@returns(200) {dateCreated: str, events: [str], id: str, secret: str, status: str, url: str} # Success\n@errors {400: Bad Input, 403: Forbidden, 404: The requested resource does not exist}\n@example_request {\"url\":\"https://empowerplant.io/sentry-hook\",\"events\":[\"event.alert\",\"event.created\"]}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/hooks/{hook_id}/\n@desc Remove a service hook.\n@required {project_id_or_slug: str # The ID or slug of the project the client keys belong to., hook_id: str # The GUID of the service hook.}\n@returns(204) Success\n@errors {403: Forbidden, 404: The requested resource does not exist}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/events/{event_id}/\n@desc Return details on an individual event.\n@required {project_id_or_slug: str # The ID or slug of the project the event belongs to., event_id: str # The ID of the event to retrieve. It is the hexadecimal ID as reported by the client.}\n@returns(200) {eventID: str, dist: str?, userReport: map?, previousEventID: str?, message: str, id: str, size: int, errors: [map], platform: str, nextEventID: str?, type: str, metadata: any, tags: [map], dateCreated: str, dateReceived: str, user: map?{username: str?, name: str?, ip_address: str?, email: str?, data: map?{isStaff: bool}, id: str}, entries: [any], packages: map, sdk: map{version: str, name: str}, _meta: map{user: str?, context: str?, entries: map, contexts: str?, message: str?, packages: str?, tags: map, sdk: str?}, contexts: map{ForbiddenError: map{status: int, statusText: str, responseJSON: map{detail: str}, type: str}, browser: map{version: str, type: str, name: str}, os: map{version: str, type: str, name: str}, trace: map{span_id: str, type: str, trace_id: str, op: str}, organization: map{type: str, id: str, slug: str}}, fingerprints: [str], context: map{resp: map{status: int, responseJSON: map{detail: str}, name: str, statusText: str, message: str, stack: str}, session: map{foo: str}, unauthorized: bool, url: str}, release: map?, groupID: str, title: str} # Success\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/\n@desc **Deprecated**: This endpoint has been replaced with the [Organization Issues endpoint](/api/events/list-an-organizations-issues/) which\n@required {project_id_or_slug: str # The ID or slug of the project the issues belong to.}\n@optional {statsPeriod: str # An optional stat period (can be one of `\"24h\"`, `\"14d\"`, and `\"\"`), defaults to \"24h\" if not provided., shortIdLookup: bool # If this is set to true then short IDs are looked up by this function as well. This can cause the return value of the function to return an event issue of a different project which is why this is an opt-in. Set to 1 to enable., query: str # An optional Sentry structured search query. If not provided an implied `\"is:unresolved\"` is assumed., hashes: str # A list of hashes of groups to return. Is not compatible with 'query' parameter. The maximum number of hashes that can be sent is 100. If more are sent, only the first 100 will be used., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/\n@desc Bulk mutate various attributes on issues.  The list of issues to modify is given through the `id` query parameter.  It is repeated for each issue that should be modified.\n@required {project_id_or_slug: str # The ID or slug of the project the issues belong to.}\n@optional {id: int # A list of IDs of the issues to be mutated. This parameter shall be repeated for each issue. It is optional only if a status is mutated in which case an implicit update all is assumed., status: str # Optionally limits the query to issues of the specified status. Valid values are `\"resolved\"`, `\"reprocessing\"`, `\"unresolved\"`, and `\"ignored\"`., status: str # The new status for the issues. Valid values are `\"resolved\"`, `\"resolvedInNextRelease\"`, `\"unresolved\"`, and `\"ignored\"`., statusDetails: map{inRelease: str, inNextRelease: bool, inCommit: str, ignoreDuration: int, ignoreCount: int, ignoreWindow: int, ignoreUserCount: int, ignoreUserWindow: int} # Additional details about the resolution. Valid values are `\"inRelease\"`, `\"inNextRelease\"`, `\"inCommit\"`, `\"ignoreDuration\"`, `\"ignoreCount\"`, `\"ignoreWindow\"`, `\"ignoreUserCount\"`, and `\"ignoreUserWindow\"`., ignoreDuration: int # The number of minutes to ignore this issue., isPublic: bool # Sets the issue to public or private., merge: bool # Allows to merge or unmerge different issues., assignedTo: str # The actor ID (or username) of the user or team that should be assigned to this issue., hasSeen: bool # In case this API call is invoked with a user context this allows changing of the flag that indicates if the user has seen the event., isBookmarked: bool # In case this API call is invoked with a user context this allows changing of the bookmark flag.}\n@returns(200) {isPublic: bool, status: str, statusDetails: map} # Success\n@errors {400: Bad Input, 403: Forbidden, 404: The requested resource does not exist}\n@example_request {\"isPublic\":false,\"status\":\"unresolved\"}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/issues/\n@desc Permanently remove the given issues. The list of issues to modify is given through the `id` query parameter.  It is repeated for each issue that should be removed.\n@required {project_id_or_slug: str # The ID or slug of the project the issues belong to.}\n@optional {id: int # A list of IDs of the issues to be removed. This parameter shall be repeated for each issue, e.g. `?id=1&id=2&id=3`. If this parameter is not provided, it will attempt to remove the first 1000 issues.}\n@returns(204) Success\n@errors {403: Forbidden, 404: Project not found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/values/\n@desc Returns a list of values associated with this key for an issue.\n@required {issue_id: int # The ID of the issue you'd like to query., key: str # The tag key to look the values up for.}\n@optional {sort: str(age/count/date/id) # Sort order of the resulting tag values. Prefix with '-' for descending order. Default is '-id'., environment: [str] # The name of environments to filter by.}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/hashes/\n@desc This endpoint lists an issue's hashes, which are the generated checksums used to aggregate individual events.\n@required {issue_id: str # The ID of the issue to retrieve.}\n@optional {full: bool=true # If this is set to true, the event payload will include the full event body, including the stacktrace. Set to 1 to enable., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\n@desc Return details on an individual issue. This returns the basic stats for the issue (title, last seen, first seen), some overall numbers (number of comments, user reports) as well as the summarized event data.\n@required {issue_id: str # The ID of the issue to retrieve.}\n@returns(200) {activity: [map], annotations: [map], assignedTo: map?, count: str, culprit: str, firstRelease: map?{authors: [str], commitCount: int, data: map?, dateCreated: str, dateReleased: str?, deployCount: int, firstEvent: str, lastCommit: str?, lastDeploy: str?, lastEvent: str, newGroups: int, owner: str?, projects: [map], ref: str?, shortVersion: str, url: str?, version: str}, firstSeen: str, hasSeen: bool, id: str, isBookmarked: bool, isPublic: bool, isSubscribed: bool, lastRelease: map?, lastSeen: str, level: str, logger: str?, metadata: any, numComments: int, participants: [map], permalink: str, pluginActions: [[str]], pluginContexts: [str], pluginIssues: [map], project: map{id: str, name: str, slug: str}, seenBy: [map], shareId: str?, shortId: str, stats: map{24h: [[num]], 30d: [[num]]}, status: str, statusDetails: map, subscriptionDetails: map?, tags: [map], title: str, type: str, userCount: int, userReportCount: int} # Success\n@errors {403: Forbidden}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\n@desc Updates an individual issue's attributes.  Only the attributes submitted are modified.\n@required {issue_id: str # The ID of the group to retrieve.}\n@optional {status: str # The new status for the issues. Valid values are `\"resolved\"`, `\"resolvedInNextRelease\"`, `\"unresolved\"`, and `\"ignored\"`., statusDetails: map{inNextRelease: bool, inRelease: str, inCommit: str} # Additional details about the resolution. Supported values are `\"inRelease\"`, `\"inNextRelease\"`, `\"inCommit\"`, `\"ignoreDuration\"`, `\"ignoreCount\"`, `\"ignoreWindow\"`, `\"ignoreUserCount\"`, and `\"ignoreUserWindow\"`., assignedTo: str # The actor id (or username) of the user or team that should be assigned to this issue., hasSeen: bool # In case this API call is invoked with a user context this allows changing of the flag that indicates if the user has seen the event., isBookmarked: bool # In case this API call is invoked with a user context this allows changing of the bookmark flag., isSubscribed: bool # In case this API call is invoked with a user context this allows the user to subscribe to workflow notications for this issue., isPublic: bool # Sets the issue to public or private.}\n@returns(200) {annotations: [str], assignedTo: map?, count: str, culprit: str, firstSeen: str, hasSeen: bool, id: str, isBookmarked: bool, isPublic: bool, isSubscribed: bool, lastSeen: str, level: str, logger: str?, metadata: any, numComments: int, permalink: str, project: map{id: str, name: str, slug: str}, shareId: str?, shortId: str, status: str, statusDetails: map, subscriptionDetails: map?, title: str, type: str, userCount: int} # Success\n@errors {403: Forbidden, 404: The requested resource does not exist}\n@example_request {\"status\":\"unresolved\"}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/\n@desc Removes an individual issue.\n@required {issue_id: str # The ID of the issue to delete.}\n@returns(202) Success\n@errors {403: Forbidden, 404: The requested resource does not exist}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/\n@desc Return a list of releases for a given organization.\n@optional {query: str # This parameter can be used to create a \"starts with\" filter for the version., cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {401: Permission Denied, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/releases/\n@desc Create a new release for the given organization.  Releases are used by\n@required {version: str # A version identifier for this release. Can be a version number, a commit hash, etc., projects: [str] # A list of project slugs that are involved in this release.}\n@optional {ref: str # An optional commit reference. This is useful if a tagged version has been provided., url: str # A URL that points to the release. This can be the path to an online interface to the source code for instance, dateReleased: str(date-time) # An optional date that indicates when the release went live. If not provided the current time is assumed., commits: [map{patch_set: [map], repository: str, author_name: str, author_email: str, timestamp: str(date-time), message: str, id: str}] # An optional list of commit data to be associated with the release. Commits must include parameters `id` (the SHA of the commit), and can optionally include `repository`, `message`, `patch_set`, `author_name`, `author_email`, and `timestamp`., refs: [map{repository: str, commit: str, previousCommit: str}] # An optional way to indicate the start and end commits for each repository included in a release. Head commits must include parameters `repository` and `commit` (the HEAD sha). They can optionally include `previousCommit` (the sha of the HEAD of the previous release), which should be specified if this is the first time you've sent commit data. `commit` may contain a range in the form of `previousCommit..commit`.}\n@returns(201) {id: int, authors: [map], commitCount: int(int64), data: map, dateCreated: str(date-time), dateReleased: str(date-time)?, deployCount: int(int64), firstEvent: str(date-time)?, lastCommit: map?, lastDeploy: map?, lastEvent: str(date-time)?, newGroups: int(int64), owner: map?, projects: [map], ref: str?, shortVersion: str, version: str, url: str?} # Success\n@errors {400: Bad Input, 403: Forbidden}\n@example_request {\"version\":\"2.0rc2\",\"ref\":\"6ba09a7c53235ee8a8fa5ee4c1ca8ca886e7fdbb\",\"projects\":[\"pump-station\"]}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/\n@desc Return a list of files for a given release.\n@required {version: str # The version identifier of the release.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/\n@desc Upload a new file for the given release.\n@required {version: str # The version identifier of the release.}\n@returns(201) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/\n@desc Return a list of files for a given release.\n@required {project_id_or_slug: str # The ID or slug of the project., version: str # The version identifier of the release.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/\n@desc Upload a new file for the given release.\n@required {project_id_or_slug: str # The ID or slug of the project., version: str # The version identifier of the release.}\n@returns(201) {sha1: str, dist: str?, name: str, dateCreated: str(date-time), headers: map{Content-Type: str}, id: str, size: int} # Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\n@desc Retrieve a file for a given release.\n@required {version: str # The version identifier of the release., file_id: str # The ID of the file to retrieve.}\n@optional {download: bool # If this is set to true, then the response payload will be the raw file contents. Otherwise, the response will be the file metadata as JSON.}\n@returns(200) {sha1: str, dist: str?, name: str, dateCreated: str(date-time), headers: map{Content-Type: str}, id: str, size: int} # Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\n@desc Update an organization release file.\n@required {version: str # The version identifier of the release., file_id: str # The ID of the file to retrieve.}\n@optional {name: str # The new name (full path) of the file., dist: str # The new name of the dist.}\n@returns(200) {sha1: str, dist: str?, name: str, dateCreated: str(date-time), headers: map{Content-Type: str}, id: str, size: int} # Success\n@errors {403: Forbidden, 404: Not Found}\n@example_request {\"name\":\"/demo/goodbye.txt\"}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/releases/{version}/files/{file_id}/\n@desc Delete a file for a given release.\n@required {version: str # The version identifier of the release., file_id: str # The ID of the file to delete.}\n@returns(204) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/\n@desc Retrieve a file for a given release.\n@required {project_id_or_slug: str # The ID or slug of the project., version: str # The version identifier of the release., file_id: str # The ID of the file to retrieve.}\n@optional {download: bool # If this is set to true, then the response payload will be the raw file contents. Otherwise, the response will be the file metadata as JSON.}\n@returns(200) {sha1: str, dist: str?, name: str, dateCreated: str(date-time), headers: map{Content-Type: str}, id: str, size: int} # Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint PUT /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/\n@desc Update a project release file.\n@required {project_id_or_slug: str # The ID or slug of the project., version: str # The version identifier of the release., file_id: str # The ID of the file to retrieve.}\n@optional {name: str # The new name (full path) of the file., dist: str # The new name of the dist.}\n@returns(200) {sha1: str, dist: str?, name: str, dateCreated: str(date-time), headers: map{Content-Type: str}, id: str, size: int} # Success\n@errors {403: Forbidden, 404: Not Found}\n@example_request {\"name\":\"/demo/goodbye.txt\"}\n\n@endpoint DELETE /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/files/{file_id}/\n@desc Delete a file for a given release.\n@required {project_id_or_slug: str # The ID or slug of the project., version: str # The version identifier of the release., file_id: str # The ID of the file to delete.}\n@returns(204) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/commits/\n@desc List an organization release's commits.\n@required {version: str # The version identifier of the release.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/projects/{organization_id_or_slug}/{project_id_or_slug}/releases/{version}/commits/\n@desc List a project release's commits.\n@required {project_id_or_slug: str # The ID or slug of the project the release belongs to., version: str # The version identifier of the release.}\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/releases/{version}/commitfiles/\n@desc Retrieve files changed in a release's commits\n@required {version: str # The version identifier of the release.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/sentry-app-installations/\n@desc Return a list of integration platform installations for a given organization.\n@optional {cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200) Success\n@errors {403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/sentry-app-installations/{uuid}/external-issues/\n@desc Create or update an external issue from an integration platform integration.\n@required {uuid: str # The uuid of the integration platform integration., issueId: int # The ID of the Sentry issue to link the external issue to., webUrl: str # The URL of the external service to link the issue to., project: str # The external service's project., identifier: str # A unique identifier of the external issue.}\n@returns(200) {id: str, issueId: str, serviceType: str, displayName: str, webUrl: str} # Success\n@errors {403: Forbidden, 404: Not Found}\n@example_request {\"issueId\":1,\"webUrl\":\"https://somerandom.io/project/issue-id\",\"project\":\"ExternalProj\",\"identifier\":\"issue-1\"}\n\n@endpoint DELETE /api/0/sentry-app-installations/{uuid}/external-issues/{external_issue_id}/\n@desc Delete an external issue.\n@required {uuid: str # The uuid of the integration platform integration., external_issue_id: str # The ID of the external issue.}\n@returns(204) Success\n@errors {403: Forbidden, 404: External issue not found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/spike-protections/\n@desc Enables Spike Protection feature for some of the projects within the organization.\n@required {projects: [str] # Slugs of projects to enable Spike Protection for. Set to `$all` to enable Spike Protection for all the projects in the organization.}\n@returns(201) Success\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint DELETE /api/0/organizations/{organization_id_or_slug}/spike-protections/\n@desc Disables Spike Protection feature for some of the projects within the organization.\n@required {projects: [str] # Slugs of projects to disable Spike Protection for. Set to `$all` to disable Spike Protection for all the projects in the organization.}\n@returns(200) Success\n@errors {400: Bad Request, 403: Forbidden}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\n@desc Retrieve the current detailed state of an issue fix process for a specific issue including:\n@required {issue_id: int # The ID of the issue you'd like to query.}\n@returns(200) {autofix: map?}\n@errors {401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint POST /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/autofix/\n@desc Trigger a Seer Issue Fix run for a specific issue.\n@required {issue_id: int # The ID of the issue you'd like to query.}\n@optional {event_id: str # Run issue fix on a specific event. If not provided, the recommended event for the issue will be used., instruction: str # Optional custom instruction to guide the issue fix process., pr_to_comment_on_url: str(uri) # URL of a pull request where the issue fix should add comments., stopping_point: str(root_cause/solution/code_changes/open_pr) # Where the issue fix process should stop. If not provided, will run to root cause.  * `root_cause` * `solution` * `code_changes` * `open_pr`}\n@returns(202) {run_id: int}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/\n@desc Return a list of error events bound to an issue\n@required {issue_id: int # The ID of the issue you'd like to query.}\n@optional {start: str(date-time) # The start of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., end: str(date-time) # The end of the period of time for the query, expected in ISO-8601 format. For example, `2001-12-14T12:34:56.7890`., statsPeriod: str # The period of time for the query, will override the start & end parameters, a number followed by one of: - `d` for days - `h` for hours - `m` for minutes - `s` for seconds - `w` for weeks  For example, `24h`, to mean query data starting from 24 hours ago to now., environment: [str] # The name of environments to filter by., full: bool=false # Specify true to include the full event body, including the stacktrace, in the event payload., sample: bool=false # Return events in pseudo-random order. This is deterministic so an identical query will always return the same events in the same order., query: str # An optional search query for filtering events. See [search syntax](https://docs.sentry.io/concepts/search/) and queryable event properties at [Sentry Search Documentation](https://docs.sentry.io/concepts/search/searchable-properties/events/) for more information. An example query might be `query=transaction:foo AND release:abc`, cursor: str # A pointer to the last object fetched and its sort order; used to retrieve the next or previous results.}\n@returns(200)\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/events/{event_id}/\n@desc Retrieves the details of an issue event.\n@required {issue_id: int # The ID of the issue you'd like to query., event_id: str(latest/oldest/recommended) # The ID of the event to retrieve, or 'latest', 'oldest', or 'recommended'.}\n@optional {environment: [str] # The name of environments to filter by.}\n@returns(200) {id: str, groupID: str?, eventID: str, projectID: str, message: str?, title: str, location: str?, user: map?{id: str?, email: str?, username: str?, ip_address: str?, name: str?, geo: map?, data: map?}, tags: [map], platform: str, dateReceived: str(date-time)?, contexts: map?, size: int?, entries: [any], dist: str?, sdk: map, context: map?, packages: map, type: str, metadata: any, errors: [any], occurrence: any, _meta: map, crashFile: str?, culprit: str?, dateCreated: str(date-time), fingerprints: [str], groupingConfig: any, startTimestamp: str(date-time), endTimestamp: str(date-time), measurements: any, breakdowns: any, release: map?{id: int, commitCount: int, data: map, dateCreated: str(date-time), dateReleased: str(date-time)?, deployCount: int, ref: str?, lastCommit: map?, lastDeploy: map?{dateStarted: str?, url: str?, id: str, environment: str, dateFinished: str, name: str}, status: str, url: str?, userAgent: str?, version: str?, versionInfo: map?{description: str, package: str?, version: map, buildHash: str?}}, userReport: map?{id: str, eventID: str, name: str?, email: str?, comments: str, dateCreated: str, user: map?{id: str, username: str?, email: str?, name: str?, ipAddress: str?, avatarUrl: str?}, event: map{id: str, eventID: str}}, sdkUpdates: [map], resolvedWith: [str], nextEventID: str?, previousEventID: str?}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/external-issues/\n@desc Retrieve custom integration issue links for the given Sentry issue\n@required {issue_id: int # The ID of the issue you'd like to query.}\n@returns(200)\n\n@endpoint GET /api/0/organizations/{organization_id_or_slug}/issues/{issue_id}/tags/{key}/\n@desc Return a list of values associated with this key for an issue. When paginated can return at most 1000 values.\n@required {issue_id: int # The ID of the issue you'd like to query., key: str # The tag key to look the values up for.}\n@optional {environment: [str] # The name of environments to filter by.}\n@returns(200) {uniqueValues: int?, totalValues: int?, topValues: [map]?, key: str, name: str}\n@errors {400: Bad Request, 401: Unauthorized, 403: Forbidden, 404: Not Found}\n\n@end\n"}}