Skip to content

Instantly share code, notes, and snippets.

@evanpurkhiser
Created March 9, 2023 21:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evanpurkhiser/be1a84e7d869480d188ec7ff71f18f19 to your computer and use it in GitHub Desktop.
Save evanpurkhiser/be1a84e7d869480d188ec7ff71f18f19 to your computer and use it in GitHub Desktop.
commit 66a8ed628e9bb6958b5a5aa2d362c380964caa03
Author: Evan Purkhiser <evanpurkhiser@gmail.com>
Date: Wed Mar 8 17:05:15 2023 -0800
ref(py): Group URLs into blocks for easier readability
diff --git a/src/sentry/api/urls.py b/src/sentry/api/urls.py
index 70b0edbaa3..89a17dd8aa 100644
--- a/src/sentry/api/urls.py
+++ b/src/sentry/api/urls.py
@@ -621,54 +621,1804 @@ GROUP_URLS = [
),
]
+AUTH_URLS = [
+ url(
+ r"^$",
+ AuthIndexEndpoint.as_view(),
+ name="sentry-api-0-auth",
+ ),
+ url(
+ r"^config/$",
+ AuthConfigEndpoint.as_view(),
+ name="sentry-api-0-auth-config",
+ ),
+ url(
+ r"^login/$",
+ AuthLoginEndpoint.as_view(),
+ name="sentry-api-0-auth-login",
+ ),
+]
+
+BROADCAST_URLS = [
+ url(
+ r"^$",
+ BroadcastIndexEndpoint.as_view(),
+ name="sentry-api-0-broadcast-index",
+ ),
+ url(
+ r"^(?P<broadcast_id>[^\/]+)/$",
+ BroadcastDetailsEndpoint.as_view(),
+ ),
+]
+
+RELAY_URLS = [
+ url(
+ r"^$",
+ RelayIndexEndpoint.as_view(),
+ name="sentry-api-0-relays-index",
+ ),
+ url(
+ r"^register/challenge/$",
+ RelayRegisterChallengeEndpoint.as_view(),
+ name="sentry-api-0-relay-register-challenge",
+ ),
+ url(
+ r"^register/response/$",
+ RelayRegisterResponseEndpoint.as_view(),
+ name="sentry-api-0-relay-register-response",
+ ),
+ url(
+ r"^projectconfigs/$",
+ RelayProjectConfigsEndpoint.as_view(),
+ name="sentry-api-0-relay-projectconfigs",
+ ),
+ url(
+ r"^projectids/$",
+ RelayProjectIdsEndpoint.as_view(),
+ name="sentry-api-0-relay-projectids",
+ ),
+ url(
+ r"^publickeys/$",
+ RelayPublicKeysEndpoint.as_view(),
+ name="sentry-api-0-relay-publickeys",
+ ),
+ url(
+ r"^live/$",
+ RelayHealthCheck.as_view(),
+ name="sentry-api-0-relays-healthcheck",
+ ),
+ url(
+ r"^(?P<relay_id>[^\/]+)/$",
+ RelayDetailsEndpoint.as_view(),
+ name="sentry-api-0-relays-details",
+ ),
+]
+
+USER_URLS = [
+ url(
+ r"^$",
+ UserIndexEndpoint.as_view(),
+ name="sentry-api-0-user-index",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/$",
+ UserDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/avatar/$",
+ UserAvatarEndpoint.as_view(),
+ name="sentry-api-0-user-avatar",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/authenticators/$",
+ UserAuthenticatorIndexEndpoint.as_view(),
+ name="sentry-api-0-user-authenticator-index",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/authenticators/(?P<interface_id>[^\/]+)/enroll/$",
+ UserAuthenticatorEnrollEndpoint.as_view(),
+ name="sentry-api-0-user-authenticator-enroll",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/(?P<interface_device_id>[^\/]+)/$",
+ UserAuthenticatorDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-authenticator-device-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/$",
+ UserAuthenticatorDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-authenticator-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/emails/$",
+ UserEmailsEndpoint.as_view(),
+ name="sentry-api-0-user-emails",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/emails/confirm/$",
+ UserEmailsConfirmEndpoint.as_view(),
+ name="sentry-api-0-user-emails-confirm",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/identities/(?P<identity_id>[^\/]+)/$",
+ UserIdentityDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-identity-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/identities/$",
+ UserIdentityEndpoint.as_view(),
+ name="sentry-api-0-user-identity",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/ips/$",
+ UserIPsEndpoint.as_view(),
+ name="sentry-api-0-user-ips",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/organizations/$",
+ UserOrganizationsEndpoint.as_view(),
+ name="sentry-api-0-user-organizations",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/notification-settings/$",
+ UserNotificationSettingsDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-notification-settings",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/notifications/$",
+ UserNotificationDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-notifications",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/notifications/(?P<notification_type>[^\/]+)/$",
+ UserNotificationFineTuningEndpoint.as_view(),
+ name="sentry-api-0-user-notifications-fine-tuning",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/password/$",
+ UserPasswordEndpoint.as_view(),
+ name="sentry-api-0-user-password",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/permissions/$",
+ UserPermissionsEndpoint.as_view(),
+ name="sentry-api-0-user-permissions",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/permissions/config/$",
+ UserPermissionsConfigEndpoint.as_view(),
+ name="sentry-api-0-user-permissions-config",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/permissions/(?P<permission_name>[^\/]+)/$",
+ UserPermissionDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-permission-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/roles/$",
+ UserUserRolesEndpoint.as_view(),
+ name="sentry-api-0-user-userroles",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/roles/(?P<role_name>[^\/]+)/$",
+ UserUserRoleDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-userrole-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/social-identities/$",
+ UserSocialIdentitiesIndexEndpoint.as_view(),
+ name="sentry-api-0-user-social-identities-index",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/social-identities/(?P<identity_id>[^\/]+)/$",
+ UserSocialIdentityDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-social-identity-details",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/subscriptions/$",
+ UserSubscriptionsEndpoint.as_view(),
+ name="sentry-api-0-user-subscriptions",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/organization-integrations/$",
+ UserOrganizationIntegrationsEndpoint.as_view(),
+ name="sentry-api-0-user-organization-integrations",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/user-identities/$",
+ UserIdentityConfigEndpoint.as_view(),
+ name="sentry-api-0-user-identity-config",
+ ),
+ url(
+ r"^(?P<user_id>[^\/]+)/user-identities/(?P<category>[\w-]+)/(?P<identity_id>[^\/]+)/$",
+ UserIdentityConfigDetailsEndpoint.as_view(),
+ name="sentry-api-0-user-identity-config-details",
+ ),
+]
+
+USER_ROLE_URLS = [
+ url(
+ r"^$",
+ UserRolesEndpoint.as_view(),
+ name="sentry-api-0-userroles",
+ ),
+ url(
+ r"^(?P<role_name>[^\/]+)/$",
+ UserRoleDetailsEndpoint.as_view(),
+ name="sentry-api-0-userroles-details",
+ ),
+]
+
+ORGANIZATION_URLS = [
+ url(
+ r"^$",
+ OrganizationIndexEndpoint.as_view(),
+ name="sentry-api-0-organizations",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/$",
+ OrganizationDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-details",
+ ),
+ # Alert Rules
+ url(
+ r"^(?P<organization_slug>[^\/]+)/alert-rules/available-actions/$",
+ OrganizationAlertRuleAvailableActionIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-alert-rule-available-actions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$",
+ OrganizationAlertRuleDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-alert-rule-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/alert-rules/$",
+ OrganizationAlertRuleIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-alert-rules",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/combined-rules/$",
+ OrganizationCombinedRuleIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-combined-rules",
+ ),
+ # Data Export
+ url(
+ r"^(?P<organization_slug>[^\/]+)/data-export/$",
+ DataExportEndpoint.as_view(),
+ name="sentry-api-0-organization-data-export",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/data-export/(?P<data_export_id>[^\/]+)/$",
+ DataExportDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-data-export-details",
+ ),
+ # Incidents
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/activity/$",
+ OrganizationIncidentActivityIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-activity",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/$",
+ OrganizationIncidentCommentIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-comments",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/(?P<activity_id>[^\/]+)/$",
+ OrganizationIncidentCommentDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-comment-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/$",
+ OrganizationIncidentDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/$",
+ OrganizationIncidentIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/seen/$",
+ OrganizationIncidentSeenEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-seen",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/subscriptions/$",
+ OrganizationIncidentSubscriptionIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-incident-subscription-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/chunk-upload/$",
+ ChunkUploadEndpoint.as_view(),
+ name="sentry-api-0-chunk-upload",
+ ),
+ # Code Path Mappings
+ url(
+ r"^(?P<organization_slug>[^\/]+)/code-mappings/$",
+ OrganizationCodeMappingsEndpoint.as_view(),
+ name="sentry-api-0-organization-code-mappings",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/derive-code-mappings/$",
+ OrganizationDeriveCodeMappingsEndpoint.as_view(),
+ name="sentry-api-0-organization-derive-code-mappings",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/$",
+ OrganizationCodeMappingDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-code-mapping-details",
+ ),
+ # Codeowners
+ url(
+ r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/codeowners/$",
+ OrganizationCodeMappingCodeOwnersEndpoint.as_view(),
+ name="sentry-api-0-organization-code-mapping-codeowners",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/codeowners-associations/$",
+ OrganizationCodeOwnersAssociationsEndpoint.as_view(),
+ name="sentry-api-0-organization-codeowners-associations",
+ ),
+ # Discover
+ url(
+ r"^(?P<organization_slug>[^\/]+)/discover/homepage/$",
+ DiscoverHomepageQueryEndpoint.as_view(),
+ name="sentry-api-0-discover-homepage-query",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/discover/saved/$",
+ DiscoverSavedQueriesEndpoint.as_view(),
+ name="sentry-api-0-discover-saved-queries",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/$",
+ DiscoverSavedQueryDetailEndpoint.as_view(),
+ name="sentry-api-0-discover-saved-query-detail",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/visit/$",
+ DiscoverSavedQueryVisitEndpoint.as_view(),
+ name="sentry-api-0-discover-saved-query-visit",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/key-transactions/$",
+ KeyTransactionEndpoint.as_view(),
+ name="sentry-api-0-organization-key-transactions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/key-transactions-list/$",
+ KeyTransactionListEndpoint.as_view(),
+ name="sentry-api-0-organization-key-transactions-list",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/related-issues/$",
+ OrganizationEventsRelatedIssuesEndpoint.as_view(),
+ name="sentry-api-0-organization-related-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/project-transaction-threshold-override/$",
+ ProjectTransactionThresholdOverrideEndpoint.as_view(),
+ name="sentry-api-0-organization-project-transaction-threshold-override",
+ ),
+ # Dashboards
+ url(
+ r"^(?P<organization_slug>[^\/]+)/dashboards/$",
+ OrganizationDashboardsEndpoint.as_view(),
+ name="sentry-api-0-organization-dashboards",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/dashboards/widgets/$",
+ OrganizationDashboardWidgetDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-dashboard-widget-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/$",
+ OrganizationDashboardDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-dashboard-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/visit/$",
+ OrganizationDashboardVisitEndpoint.as_view(),
+ name="sentry-api-0-organization-dashboard-visit",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/shortids/(?P<short_id>[^\/]+)/$",
+ ShortIdLookupEndpoint.as_view(),
+ name="sentry-api-0-short-id-lookup",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/eventids/(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ EventIdLookupEndpoint.as_view(),
+ name="sentry-api-0-event-id-lookup",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/data-scrubbing-selector-suggestions/$",
+ DataScrubbingSelectorSuggestionsEndpoint.as_view(),
+ name="sentry-api-0-data-scrubbing-selector-suggestions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/slugs/$",
+ SlugsUpdateEndpoint.as_view(),
+ name="sentry-api-0-short-ids-update",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/access-requests/$",
+ OrganizationAccessRequestDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-access-requests",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/access-requests/(?P<request_id>\d+)/$",
+ OrganizationAccessRequestDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-access-request-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/activity/$",
+ OrganizationActivityEndpoint.as_view(),
+ name="sentry-api-0-organization-activity",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/api-keys/$",
+ OrganizationApiKeyIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-api-key-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/api-keys/(?P<api_key_id>[^\/]+)/$",
+ OrganizationApiKeyDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-api-key-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/audit-logs/$",
+ OrganizationAuditLogsEndpoint.as_view(),
+ name="sentry-api-0-organization-audit-logs",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/auth-provider/$",
+ OrganizationAuthProviderDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-auth-provider",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/auth-providers/$",
+ OrganizationAuthProvidersEndpoint.as_view(),
+ name="sentry-api-0-organization-auth-providers",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/auth-provider/send-reminders/$",
+ OrganizationAuthProviderSendRemindersEndpoint.as_view(),
+ name="sentry-api-0-organization-auth-provider-send-reminders",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/avatar/$",
+ OrganizationAvatarEndpoint.as_view(),
+ name="sentry-api-0-organization-avatar",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/artifactbundle/assemble/$",
+ OrganizationArtifactBundleAssembleEndpoint.as_view(),
+ name="sentry-api-0-organization-artifactbundle-assemble",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/config/integrations/$",
+ OrganizationConfigIntegrationsEndpoint.as_view(),
+ name="sentry-api-0-organization-config-integrations",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/config/repos/$",
+ OrganizationConfigRepositoriesEndpoint.as_view(),
+ name="sentry-api-0-organization-config-repositories",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/sdk-updates/$",
+ OrganizationSdkUpdatesEndpoint.as_view(),
+ name="sentry-api-0-organization-sdk-updates",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events/$",
+ OrganizationEventsEndpoint.as_view(),
+ name="sentry-api-0-organization-events",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events/(?P<project_slug>[^\/]+):(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ OrganizationEventDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-event-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-stats/$",
+ OrganizationEventsStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-geo/$",
+ OrganizationEventsGeoEndpoint.as_view(),
+ name="sentry-api-0-organization-events-geo",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-facets/$",
+ OrganizationEventsFacetsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-facets",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-facets-performance/$",
+ OrganizationEventsFacetsPerformanceEndpoint.as_view(),
+ name="sentry-api-0-organization-events-facets-performance",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-facets-performance-histogram/$",
+ OrganizationEventsFacetsPerformanceHistogramEndpoint.as_view(),
+ name="sentry-api-0-organization-events-facets-performance-histogram",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-span-ops/$",
+ OrganizationEventsSpanOpsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-span-ops",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-spans/$",
+ OrganizationEventsSpansExamplesEndpoint.as_view(),
+ name="sentry-api-0-organization-events-spans",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-spans-performance/$",
+ OrganizationEventsSpansPerformanceEndpoint.as_view(),
+ name="sentry-api-0-organization-events-spans-performance",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-spans-stats/$",
+ OrganizationEventsSpansStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-spans-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-meta/$",
+ OrganizationEventsMetaEndpoint.as_view(),
+ name="sentry-api-0-organization-events-meta",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/metrics-compatibility/$",
+ OrganizationMetricsCompatibility.as_view(),
+ name="sentry-api-0-organization-metrics-compatibility",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/metrics-compatibility-sums/$",
+ OrganizationMetricsCompatibilitySums.as_view(),
+ name="sentry-api-0-organization-metrics-compatibility-sums",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-histogram/$",
+ OrganizationEventsHistogramEndpoint.as_view(),
+ name="sentry-api-0-organization-events-histogram",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-spans-histogram/$",
+ OrganizationEventsSpansHistogramEndpoint.as_view(),
+ name="sentry-api-0-organization-events-spans-histogram",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-trends/$",
+ OrganizationEventsTrendsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-trends",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-vitals/$",
+ OrganizationEventsVitalsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-vitals",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-has-measurements/$",
+ OrganizationEventsHasMeasurementsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-has-measurements",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-trends-stats/$",
+ OrganizationEventsTrendsStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-events-trends-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-trace-light/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ OrganizationEventsTraceLightEndpoint.as_view(),
+ name="sentry-api-0-organization-events-trace-light",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-trace/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ OrganizationEventsTraceEndpoint.as_view(),
+ name="sentry-api-0-organization-events-trace",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/events-trace-meta/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ OrganizationEventsTraceMetaEndpoint.as_view(),
+ name="sentry-api-0-organization-events-trace-meta",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/measurements-meta/$",
+ OrganizationMeasurementsMeta.as_view(),
+ name="sentry-api-0-organization-measurements-meta",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/issues/$",
+ OrganizationGroupIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-group-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/issues-count/$",
+ OrganizationIssuesCountEndpoint.as_view(),
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/issues-stats/$",
+ OrganizationGroupIndexStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-group-index-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?:issues|groups)/",
+ include(GROUP_URLS),
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/integrations/$",
+ OrganizationIntegrationsEndpoint.as_view(),
+ name="sentry-api-0-organization-integrations",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/$",
+ OrganizationIntegrationDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-integration-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/repos/$",
+ OrganizationIntegrationReposEndpoint.as_view(),
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/issues/$",
+ OrganizationIntegrationIssuesEndpoint.as_view(),
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/serverless-functions/$",
+ OrganizationIntegrationServerlessFunctionsEndpoint.as_view(),
+ name="sentry-api-0-organization-integration-serverless-functions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/members/$",
+ OrganizationMemberIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-member-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/external-users/$",
+ ExternalUserEndpoint.as_view(),
+ name="sentry-api-0-organization-external-user",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/external-users/(?P<external_user_id>[^\/]+)/$",
+ ExternalUserDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-external-user-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/integration-requests/$",
+ OrganizationIntegrationRequestEndpoint.as_view(),
+ name="sentry-api-0-organization-integration-request",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/invite-requests/$",
+ OrganizationInviteRequestIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-invite-request-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/invite-requests/(?P<member_id>[^\/]+)/$",
+ OrganizationInviteRequestDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-invite-request-detail",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/monitors/$",
+ OrganizationMonitorsEndpoint.as_view(),
+ name="sentry-api-0-organization-monitors",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/$",
+ OrganizationMonitorDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-monitor-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/stats/$",
+ OrganizationMonitorStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-monitor-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/checkins/(?P<checkin_id>[^\/]+)/attachment/$",
+ OrganizationMonitorCheckInAttachmentEndpoint.as_view(),
+ name="sentry-api-0-organization-monitor-check-in-attachment",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/pinned-searches/$",
+ OrganizationPinnedSearchEndpoint.as_view(),
+ name="sentry-api-0-organization-pinned-searches",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/recent-searches/$",
+ OrganizationRecentSearchesEndpoint.as_view(),
+ name="sentry-api-0-organization-recent-searches",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/searches/(?P<search_id>[^\/]+)/$",
+ OrganizationSearchDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-search-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/searches/$",
+ OrganizationSearchesEndpoint.as_view(),
+ name="sentry-api-0-organization-searches",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/sessions/$",
+ OrganizationSessionsEndpoint.as_view(),
+ name="sentry-api-0-organization-sessions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/users/issues/$",
+ OrganizationUserIssuesSearchEndpoint.as_view(),
+ name="sentry-api-0-organization-issue-search",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$",
+ OrganizationIssuesResolvedInReleaseEndpoint.as_view(),
+ name="sentry-api-0-organization-release-resolved",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/$",
+ OrganizationMemberDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-member-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/unreleased-commits/$",
+ OrganizationMemberUnreleasedCommitsEndpoint.as_view(),
+ name="sentry-api-0-organization-member-unreleased-commits",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$",
+ OrganizationMemberTeamDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-member-team-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/onboarding-continuation-email/$",
+ OrganizationOnboardingContinuationEmail.as_view(),
+ name="sentry-api-0-organization-onboarding-continuation-email",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/processingissues/$",
+ OrganizationProcessingIssuesEndpoint.as_view(),
+ name="sentry-api-0-organization-processing-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/projects/$",
+ OrganizationProjectsEndpoint.as_view(),
+ name="sentry-api-0-organization-projects",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/projects-count/$",
+ OrganizationProjectsCountEndpoint.as_view(),
+ name="sentry-api-0-organization-projects-count",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/sent-first-event/$",
+ OrganizationProjectsSentFirstEventEndpoint.as_view(),
+ name="sentry-api-0-organization-sent-first-event",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/repos/$",
+ OrganizationRepositoriesEndpoint.as_view(),
+ name="sentry-api-0-organization-repositories",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/$",
+ OrganizationRepositoryDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-repository-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/commits/$",
+ OrganizationRepositoryCommitsEndpoint.as_view(),
+ name="sentry-api-0-organization-repository-commits",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/plugins/$",
+ OrganizationPluginsEndpoint.as_view(),
+ name="sentry-api-0-organization-plugins",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/plugins/configs/$",
+ OrganizationPluginsConfigsEndpoint.as_view(),
+ name="sentry-api-0-organization-plugins-configs",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/$",
+ OrganizationReleasesEndpoint.as_view(),
+ name="sentry-api-0-organization-releases",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/stats/$",
+ OrganizationReleasesStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-releases-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/$",
+ OrganizationReleaseDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-release-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/meta/$",
+ OrganizationReleaseMetaEndpoint.as_view(),
+ name="sentry-api-0-organization-release-meta",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/assemble/$",
+ OrganizationReleaseAssembleEndpoint.as_view(),
+ name="sentry-api-0-organization-release-assemble",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$",
+ OrganizationReleaseFilesEndpoint.as_view(),
+ name="sentry-api-0-organization-release-files",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$",
+ OrganizationReleaseFileDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-release-file-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commitfiles/$",
+ CommitFileChangeEndpoint.as_view(),
+ name="sentry-api-0-release-commitfilechange",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/deploys/$",
+ ReleaseDeploysEndpoint.as_view(),
+ name="sentry-api-0-organization-release-deploys",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$",
+ OrganizationReleaseCommitsEndpoint.as_view(),
+ name="sentry-api-0-organization-release-commits",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/previous-with-commits/$",
+ OrganizationReleasePreviousCommitsEndpoint.as_view(),
+ name="sentry-api-0-organization-release-previous-with-commits",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/user-feedback/$",
+ OrganizationUserReportsEndpoint.as_view(),
+ name="sentry-api-0-organization-user-feedback",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/user-teams/$",
+ OrganizationUserTeamsEndpoint.as_view(),
+ name="sentry-api-0-organization-user-teams",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/users/$",
+ OrganizationUsersEndpoint.as_view(),
+ name="sentry-api-0-organization-users",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/users/(?P<user_id>[^\/]+)/$",
+ OrganizationUserDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-user-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/sentry-app-installations/$",
+ SentryAppInstallationsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-installations",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/sentry-apps/$",
+ OrganizationSentryAppsEndpoint.as_view(),
+ name="sentry-api-0-organization-sentry-apps",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/stats/$",
+ OrganizationStatsEndpoint.as_view(),
+ name="sentry-api-0-organization-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/stats_v2/$",
+ OrganizationStatsEndpointV2.as_view(),
+ name="sentry-api-0-organization-stats-v2",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/teams/$",
+ OrganizationTeamsEndpoint.as_view(),
+ name="sentry-api-0-organization-teams",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/tags/$",
+ OrganizationTagsEndpoint.as_view(),
+ name="sentry-api-0-organization-tags",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$",
+ OrganizationTagKeyValuesEndpoint.as_view(),
+ name="sentry-api-0-organization-tagkey-values",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/onboarding-tasks/$",
+ OrganizationOnboardingTaskEndpoint.as_view(),
+ name="sentry-api-0-organization-onboardingtasks",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/environments/$",
+ OrganizationEnvironmentsEndpoint.as_view(),
+ name="sentry-api-0-organization-environments",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/broadcasts/$",
+ BroadcastIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-broadcasts",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/join-request/$",
+ OrganizationJoinRequestEndpoint.as_view(),
+ name="sentry-api-0-organization-join-request",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/transaction-anomaly-detection/$",
+ OrganizationTransactionAnomalyDetectionEndpoint.as_view(),
+ name="sentry-api-0-organization-transaction-anomaly-detection",
+ ),
+ # relay usage
+ url(
+ r"^(?P<organization_slug>[^\/]+)/relay_usage/$",
+ OrganizationRelayUsage.as_view(),
+ name="sentry-api-0-organization-relay-usage",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/replays/$",
+ OrganizationReplayIndexEndpoint.as_view(),
+ name="sentry-api-0-organization-replay-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/replay-count/$",
+ OrganizationReplayCountEndpoint.as_view(),
+ name="sentry-api-0-organization-replay-count",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/replays-events-meta/$",
+ OrganizationReplayEventsMetaEndpoint.as_view(),
+ name="sentry-api-0-organization-replay-events-meta",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/functions/$",
+ OrganizationSentryFunctionEndpoint.as_view(),
+ name="sentry-api-0-organization-sentry-functions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/functions/(?P<function_slug>[^\/]+)/$",
+ OrganizationSentryFunctionDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-sentry-function-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/request-project-creation/$",
+ OrganizationRequestProjectCreation.as_view(),
+ name="sentry-api-0-organization-request-project-creation",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/scim/v2/",
+ include(
+ [
+ url(
+ r"^Users$",
+ OrganizationSCIMMemberIndex.as_view(),
+ name="sentry-api-0-organization-scim-member-index",
+ ),
+ url(
+ r"^Users/(?P<member_id>\d+)$",
+ OrganizationSCIMMemberDetails.as_view(),
+ name="sentry-api-0-organization-scim-member-details",
+ ),
+ url(
+ r"^Groups$",
+ OrganizationSCIMTeamIndex.as_view(),
+ name="sentry-api-0-organization-scim-team-index",
+ ),
+ url(
+ r"^Groups/(?P<team_id>\d+)$",
+ OrganizationSCIMTeamDetails.as_view(),
+ name="sentry-api-0-organization-scim-team-details",
+ ),
+ url(
+ r"^Schemas$",
+ OrganizationSCIMSchemaIndex.as_view(),
+ name="sentry-api-0-organization-scim-schema-index",
+ ),
+ ]
+ ),
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/metrics/meta/$",
+ OrganizationMetricsEndpoint.as_view(),
+ name="sentry-api-0-organization-metrics-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/metrics/meta/(?P<metric_name>[^/]+)/$",
+ OrganizationMetricDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-metric-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/metrics/data/$",
+ OrganizationMetricsDataEndpoint.as_view(),
+ name="sentry-api-0-organization-metrics-data",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/metrics/tags/$",
+ OrganizationMetricsTagsEndpoint.as_view(),
+ name="sentry-api-0-organization-metrics-tags",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/metrics/tags/(?P<tag_name>[^/]+)/$",
+ OrganizationMetricsTagDetailsEndpoint.as_view(),
+ name="sentry-api-0-organization-metrics-tag-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/profiling/",
+ include(
+ [
+ url(
+ r"^filters/$",
+ OrganizationProfilingFiltersEndpoint.as_view(),
+ name="sentry-api-0-organization-profiling-filters",
+ ),
+ ],
+ ),
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/client-state/$",
+ ClientStateListEndpoint.as_view(),
+ name="sentry-api-0-organization-client-state-list",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/client-state/(?P<category>[^\/]+)/$",
+ ClientStateEndpoint.as_view(),
+ name="sentry-api-0-organization-client-state",
+ ),
+]
+
+PROJECT_URLS = [
+ url(
+ r"^(?P<organization_slug>[^\/]+)/rule-conditions/$",
+ ProjectAgnosticRuleConditionsEndpoint.as_view(),
+ name="sentry-api-0-project-agnostic-rule-conditions",
+ ),
+ url(
+ r"^$",
+ ProjectIndexEndpoint.as_view(),
+ name="sentry-api-0-projects",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/$",
+ ProjectDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$",
+ ProjectAlertRuleDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-alert-rule-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/$",
+ ProjectAlertRuleIndexEndpoint.as_view(),
+ name="sentry-api-0-project-alert-rules",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rule-task/(?P<task_uuid>[^\/]+)/$",
+ ProjectAlertRuleTaskDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-alert-rule-task-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/combined-rules/$",
+ ProjectCombinedRuleIndexEndpoint.as_view(),
+ name="sentry-api-0-project-combined-rules",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/avatar/$",
+ ProjectAvatarEndpoint.as_view(),
+ name="sentry-api-0-project-avatar",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample/$",
+ ProjectCreateSampleEndpoint.as_view(),
+ name="sentry-api-0-project-create-sample",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample-transaction/$",
+ ProjectCreateSampleTransactionEndpoint.as_view(),
+ name="sentry-api-0-project-create-sample-transaction",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/docs/(?P<platform>[\w-]+)/$",
+ ProjectDocsPlatformEndpoint.as_view(),
+ name="sentry-api-0-project-docs-platform",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/$",
+ ProjectEnvironmentsEndpoint.as_view(),
+ name="sentry-api-0-project-environments",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/(?P<environment>[^/]+)/$",
+ ProjectEnvironmentDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-environment-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/platforms/$",
+ ProjectPlatformsEndpoint.as_view(),
+ name="sentry-api-0-project-platform-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/$",
+ ProjectEventsEndpoint.as_view(),
+ name="sentry-api-0-project-events",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>(?:\d+|[A-Fa-f0-9]{32}))/$",
+ ProjectEventDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-event-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/grouping-info/$",
+ EventGroupingInfoEndpoint.as_view(),
+ name="sentry-api-0-event-grouping-info",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/apple-crash-report$",
+ EventAppleCrashReportEndpoint.as_view(),
+ name="sentry-api-0-event-apple-crash-report",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/$",
+ EventAttachmentsEndpoint.as_view(),
+ name="sentry-api-0-event-attachments",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/reprocessable/$",
+ EventReprocessableEndpoint.as_view(),
+ name="sentry-api-0-event-attachments",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/(?P<attachment_id>[\w-]+)/$",
+ EventAttachmentDetailsEndpoint.as_view(),
+ name="sentry-api-0-event-attachment-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/committers/$",
+ EventFileCommittersEndpoint.as_view(),
+ name="sentry-api-0-event-file-committers",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/json/$",
+ EventJsonEndpoint.as_view(),
+ name="sentry-api-0-event-json",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/owners/$",
+ EventOwnersEndpoint.as_view(),
+ name="sentry-api-0-event-owners",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/source-map-debug/$",
+ SourceMapDebugEndpoint.as_view(),
+ name="sentry-api-0-event-source-map-debug",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/$",
+ DebugFilesEndpoint.as_view(),
+ name="sentry-api-0-dsym-files",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/source-maps/$",
+ SourceMapsEndpoint.as_view(),
+ name="sentry-api-0-source-maps",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/difs/assemble/$",
+ DifAssembleEndpoint.as_view(),
+ name="sentry-api-0-assemble-dif-files",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/unknown/$",
+ UnknownDebugFilesEndpoint.as_view(),
+ name="sentry-api-0-unknown-dsym-files",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/associate/$",
+ AssociateDSymFilesEndpoint.as_view(),
+ name="sentry-api-0-associate-dsym-files",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/$",
+ ProjectFiltersEndpoint.as_view(),
+ name="sentry-api-0-project-filters",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/(?P<filter_id>[\w-]+)/$",
+ ProjectFilterDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-filters",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/$",
+ ProjectServiceHooksEndpoint.as_view(),
+ name="sentry-api-0-service-hooks",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/$",
+ ProjectServiceHookDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-service-hook-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/stats/$",
+ ProjectServiceHookStatsEndpoint.as_view(),
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/$",
+ ProjectGroupIndexEndpoint.as_view(),
+ name="sentry-api-0-project-group-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/stats/$",
+ ProjectGroupStatsEndpoint.as_view(),
+ name="sentry-api-0-project-group-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/$",
+ ProjectKeysEndpoint.as_view(),
+ name="sentry-api-0-project-keys",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/$",
+ ProjectKeyDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-key-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/stats/$",
+ ProjectKeyStatsEndpoint.as_view(),
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^/]+)/members/$",
+ ProjectMemberIndexEndpoint.as_view(),
+ name="sentry-api-0-project-member-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/$",
+ ProjectReleasesEndpoint.as_view(),
+ name="sentry-api-0-project-releases",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/commits/$",
+ ProjectCommitsEndpoint.as_view(),
+ name="sentry-api-0-project-commits",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/token/$",
+ ProjectReleasesTokenEndpoint.as_view(),
+ name="sentry-api-0-project-releases-token",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/completion/$",
+ ProjectReleaseSetupCompletionEndpoint.as_view(),
+ name="sentry-api-0-project-releases-completion-status",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/$",
+ ProjectReleaseDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-release-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$",
+ ProjectReleaseCommitsEndpoint.as_view(),
+ name="sentry-api-0-project-release-commits",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/repositories/$",
+ ProjectReleaseRepositories.as_view(),
+ name="sentry-api-0-project-release-repositories",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$",
+ ProjectIssuesResolvedInReleaseEndpoint.as_view(),
+ name="sentry-api-0-project-release-resolved",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/stats/$",
+ ProjectReleaseStatsEndpoint.as_view(),
+ name="sentry-api-0-project-release-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$",
+ ProjectReleaseFilesEndpoint.as_view(),
+ name="sentry-api-0-project-release-files",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$",
+ ProjectReleaseFileDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-release-file-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/$",
+ ProjectRulesEndpoint.as_view(),
+ name="sentry-api-0-project-rules",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/$",
+ ProjectReplayDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-replay-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/$",
+ ProjectReplayRecordingSegmentIndexEndpoint.as_view(),
+ name="sentry-api-0-project-replay-recording-segment-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/(?P<segment_id>\d+)/$",
+ ProjectReplayRecordingSegmentDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-replay-recording-segment-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/configuration/$",
+ ProjectRulesConfigurationEndpoint.as_view(),
+ name="sentry-api-0-project-rules-configuration",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/$",
+ ProjectRuleDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-rule-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/preview$",
+ ProjectRulePreviewEndpoint.as_view(),
+ name="sentry-api-0-project-rule-preview",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-actions/$",
+ ProjectRuleActionsEndpoint.as_view(),
+ name="sentry-api-0-project-rule-actions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/group-history/$",
+ ProjectRuleGroupHistoryIndexEndpoint.as_view(),
+ name="sentry-api-0-project-rule-group-history-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/stats/$",
+ ProjectRuleStatsIndexEndpoint.as_view(),
+ name="sentry-api-0-project-rule-stats-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-task/(?P<task_uuid>[^\/]+)/$",
+ ProjectRuleTaskDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-rule-task-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stats/$",
+ ProjectStatsEndpoint.as_view(),
+ name="sentry-api-0-project-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/$",
+ ProjectTagsEndpoint.as_view(),
+ name="sentry-api-0-project-tags",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/$",
+ ProjectTagKeyDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-tagkey-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$",
+ ProjectTagKeyValuesEndpoint.as_view(),
+ name="sentry-api-0-project-tagkey-values",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/$",
+ ProjectTeamsEndpoint.as_view(),
+ name="sentry-api-0-project-teams",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$",
+ ProjectTeamDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-team-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transfer/$",
+ ProjectTransferEndpoint.as_view(),
+ name="sentry-api-0-project-transfer",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/$",
+ ProjectUsersEndpoint.as_view(),
+ name="sentry-api-0-project-users",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/(?P<user_hash>[^/]+)/$",
+ ProjectUserDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-user-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:user-feedback|user-reports)/$",
+ ProjectUserReportsEndpoint.as_view(),
+ name="sentry-api-0-project-user-reports",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/user-stats/$",
+ ProjectUserStatsEndpoint.as_view(),
+ name="sentry-api-0-project-userstats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/$",
+ ProjectProcessingIssuesEndpoint.as_view(),
+ name="sentry-api-0-project-processing-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/fix$",
+ ProjectProcessingIssuesFixEndpoint.as_view(),
+ name="sentry-api-0-project-fix-processing-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/reprocessing/$",
+ ProjectReprocessingEndpoint.as_view(),
+ name="sentry-api-0-project-reprocessing",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/discard/$",
+ ProjectProcessingIssuesDiscardEndpoint.as_view(),
+ name="sentry-api-0-project-discard-processing-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/ownership/$",
+ ProjectOwnershipEndpoint.as_view(),
+ name="sentry-api-0-project-ownership",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/$",
+ ProjectCodeOwnersEndpoint.as_view(),
+ name="sentry-api-0-project-codeowners",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/(?P<codeowners_id>[^\/]+)/$",
+ ProjectCodeOwnersDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-codeowners-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transaction-threshold/configure/$",
+ ProjectTransactionThresholdEndpoint.as_view(),
+ name="sentry-api-0-project-transaction-threshold",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/performance-issues/configure/$",
+ ProjectPerformanceIssueSettingsEndpoint.as_view(),
+ name="sentry-api-0-project-performance-issue-settings",
+ ),
+ # Load plugin project urls
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/$",
+ ProjectPluginsEndpoint.as_view(),
+ name="sentry-api-0-project-plugins",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/(?P<plugin_id>[^\/]+)/$",
+ ProjectPluginDetailsEndpoint.as_view(),
+ name="sentry-api-0-project-plugin-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/cluster-transaction-names/$",
+ ProjectTransactionNamesCluster.as_view(),
+ name="sentry-api-0-organization-project-cluster-transaction-names",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins?/",
+ include("sentry.plugins.base.project_api_urls"),
+ ),
+ # Tombstone
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/$",
+ GroupTombstoneEndpoint.as_view(),
+ name="sentry-api-0-group-tombstones",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/(?P<tombstone_id>\d+)/$",
+ GroupTombstoneDetailsEndpoint.as_view(),
+ name="sentry-api-0-group-tombstone-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stacktrace-link/$",
+ ProjectStacktraceLinkEndpoint.as_view(),
+ name="sentry-api-0-project-stacktrace-link",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/repo-path-parsing/$",
+ ProjectRepoPathParsingEndpoint.as_view(),
+ name="sentry-api-0-project-repo-path-parsing",
+ ),
+ # Grouping configs
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/grouping-configs/$",
+ ProjectGroupingConfigsEndpoint.as_view(),
+ name="sentry-api-0-project-grouping-configs",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/$",
+ AppStoreConnectCreateCredentialsEndpoint.as_view(),
+ name="sentry-api-0-project-appstoreconnect-credentials-create",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/apps/$",
+ AppStoreConnectAppsEndpoint.as_view(),
+ name="sentry-api-0-project-appstoreconnect-apps",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/status/$",
+ AppStoreConnectStatusEndpoint.as_view(),
+ name="sentry-api-0-project-appstoreconnect-status",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/$",
+ AppStoreConnectUpdateCredentialsEndpoint.as_view(),
+ name="sentry-api-0-project-appstoreconnect-credentials-update",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/refresh/$",
+ AppStoreConnectRefreshEndpoint.as_view(),
+ name="sentry-api-0-project-appstoreconnect-refresh",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/functions/$",
+ ProjectProfilingFunctionsEndpoint.as_view(),
+ name="sentry-api-0-project-profiling-functions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ ProjectProfilingProfileEndpoint.as_view(),
+ name="sentry-api-0-project-profiling-profile",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/raw_profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ ProjectProfilingRawProfileEndpoint.as_view(),
+ name="sentry-api-0-project-profiling-raw-profile",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/flamegraph/$",
+ ProjectProfilingFlamegraphEndpoint.as_view(),
+ name="sentry-api-0-project-profiling-flamegraph",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/transactions/(?P<transaction_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
+ ProjectProfilingTransactionIDProfileIDEndpoint.as_view(),
+ name="sentry-api-0-project-profiling-transactions",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/dynamic-sampling/distribution/$",
+ ProjectDynamicSamplingDistributionEndpoint.as_view(),
+ name="sentry-api-0-project-dynamic-sampling-distribution",
+ ),
+]
+
+TEAM_URLS = [
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/$",
+ TeamDetailsEndpoint.as_view(),
+ name="sentry-api-0-team-details",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issues/old/$",
+ TeamGroupsOldEndpoint.as_view(),
+ name="sentry-api-0-team-oldest-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/release-count/$",
+ TeamReleaseCountEndpoint.as_view(),
+ name="sentry-api-0-team-release-count",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/time-to-resolution/$",
+ TeamTimeToResolutionEndpoint.as_view(),
+ name="sentry-api-0-team-time-to-resolution",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/unresolved-issue-age/$",
+ TeamUnresolvedIssueAgeEndpoint.as_view(),
+ name="sentry-api-0-team-unresolved-issue-age",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered/$",
+ TeamAlertsTriggeredTotalsEndpoint.as_view(),
+ name="sentry-api-0-team-alerts-triggered",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered-index/$",
+ TeamAlertsTriggeredIndexEndpoint.as_view(),
+ name="sentry-api-0-team-alerts-triggered-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issue-breakdown/$",
+ TeamIssueBreakdownEndpoint.as_view(),
+ name="sentry-api-0-team-issue-breakdown",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/all-unresolved-issues/$",
+ TeamAllUnresolvedIssuesEndpoint.as_view(),
+ name="sentry-api-0-team-all-unresolved-issues",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/notification-settings/$",
+ TeamNotificationSettingsDetailsEndpoint.as_view(),
+ name="sentry-api-0-team-notification-settings",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/members/$",
+ TeamMembersEndpoint.as_view(),
+ name="sentry-api-0-team-members",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/projects/$",
+ TeamProjectsEndpoint.as_view(),
+ name="sentry-api-0-team-project-index",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/stats/$",
+ TeamStatsEndpoint.as_view(),
+ name="sentry-api-0-team-stats",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/avatar/$",
+ TeamAvatarEndpoint.as_view(),
+ name="sentry-api-0-team-avatar",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/$",
+ ExternalTeamEndpoint.as_view(),
+ name="sentry-api-0-external-team",
+ ),
+ url(
+ r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/(?P<external_team_id>[^\/]+)/$",
+ ExternalTeamDetailsEndpoint.as_view(),
+ name="sentry-api-0-external-team-details",
+ ),
+]
+
+SENTRY_APP_URLS = [
+ url(
+ r"^$",
+ SentryAppsEndpoint.as_view(),
+ name="sentry-api-0-sentry-apps",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/$",
+ SentryAppDetailsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-details",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/features/$",
+ SentryAppFeaturesEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-features",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/components/$",
+ SentryAppComponentsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-components",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/avatar/$",
+ SentryAppAvatarEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-avatar",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/api-tokens/$",
+ SentryInternalAppTokensEndpoint.as_view(),
+ name="sentry-api-0-sentry-internal-app-tokens",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/api-tokens/(?P<api_token>[^\/]+)/$",
+ SentryInternalAppTokenDetailsEndpoint.as_view(),
+ name="sentry-api-0-sentry-internal-app-token-details",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/stats/$",
+ SentryAppStatsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-stats",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/requests/$",
+ SentryAppRequestsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-requests",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/interaction/$",
+ SentryAppInteractionEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-interaction",
+ ),
+ url(
+ r"^(?P<sentry_app_slug>[^\/]+)/publish-request/$",
+ SentryAppPublishRequestEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-publish-request",
+ ),
+]
+
+SENTRY_APP_INSTALLATION_URLS = [
+ url(
+ r"^(?P<uuid>[^\/]+)/$",
+ SentryAppInstallationDetailsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-installation-details",
+ ),
+ url(
+ r"^(?P<uuid>[^\/]+)/external-requests/$",
+ SentryAppInstallationExternalRequestsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-installation-external-requests",
+ ),
+ url(
+ r"^(?P<uuid>[^\/]+)/external-issue-actions/$",
+ SentryAppInstallationExternalIssueActionsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-installation-external-issue-actions",
+ ),
+ url(
+ r"^(?P<uuid>[^\/]+)/external-issues/$",
+ SentryAppInstallationExternalIssuesEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-installation-external-issues",
+ ),
+ url(
+ r"^(?P<uuid>[^\/]+)/external-issues/(?P<external_issue_id>[^\/]+)/$",
+ SentryAppInstallationExternalIssueDetailsEndpoint.as_view(),
+ name="sentry-api-0-sentry-app-installation-external-issue-details",
+ ),
+]
+
+INTERNAL_URLS = [
+ url(
+ r"^health/$",
+ SystemHealthEndpoint.as_view(),
+ name="sentry-api-0-system-health",
+ ),
+ url(
+ r"^options/$",
+ SystemOptionsEndpoint.as_view(),
+ name="sentry-api-0-system-options",
+ ),
+ url(
+ r"^beacon/$",
+ InternalBeaconEndpoint.as_view(),
+ name="sentry-api-0-internal-beacon",
+ ),
+ url(
+ r"^quotas/$",
+ InternalQuotasEndpoint.as_view(),
+ ),
+ url(
+ r"^queue/tasks/$",
+ InternalQueueTasksEndpoint.as_view(),
+ ),
+ url(
+ r"^stats/$",
+ InternalStatsEndpoint.as_view(),
+ ),
+ url(
+ r"^warnings/$",
+ InternalWarningsEndpoint.as_view(),
+ ),
+ url(
+ r"^packages/$",
+ InternalPackagesEndpoint.as_view(),
+ ),
+ url(
+ r"^environment/$",
+ InternalEnvironmentEndpoint.as_view(),
+ ),
+ url(
+ r"^mail/$",
+ InternalMailEndpoint.as_view(),
+ ),
+ url(
+ r"^project-config/$",
+ AdminRelayProjectConfigsEndpoint.as_view(),
+ name="sentry-api-0-internal-project-config",
+ ),
+]
+
urlpatterns = [
# Relay
url(
r"^relays/",
- include(
- [
- url(
- r"^$",
- RelayIndexEndpoint.as_view(),
- name="sentry-api-0-relays-index",
- ),
- url(
- r"^register/challenge/$",
- RelayRegisterChallengeEndpoint.as_view(),
- name="sentry-api-0-relay-register-challenge",
- ),
- url(
- r"^register/response/$",
- RelayRegisterResponseEndpoint.as_view(),
- name="sentry-api-0-relay-register-response",
- ),
- url(
- r"^projectconfigs/$",
- RelayProjectConfigsEndpoint.as_view(),
- name="sentry-api-0-relay-projectconfigs",
- ),
- url(
- r"^projectids/$",
- RelayProjectIdsEndpoint.as_view(),
- name="sentry-api-0-relay-projectids",
- ),
- url(
- r"^publickeys/$",
- RelayPublicKeysEndpoint.as_view(),
- name="sentry-api-0-relay-publickeys",
- ),
- url(
- r"^live/$",
- RelayHealthCheck.as_view(),
- name="sentry-api-0-relays-healthcheck",
- ),
- url(
- r"^(?P<relay_id>[^\/]+)/$",
- RelayDetailsEndpoint.as_view(),
- name="sentry-api-0-relays-details",
- ),
- ]
- ),
+ include(RELAY_URLS),
),
# Api Data
url(
@@ -704,25 +2454,7 @@ urlpatterns = [
# Auth
url(
r"^auth/",
- include(
- [
- url(
- r"^$",
- AuthIndexEndpoint.as_view(),
- name="sentry-api-0-auth",
- ),
- url(
- r"^config/$",
- AuthConfigEndpoint.as_view(),
- name="sentry-api-0-auth-config",
- ),
- url(
- r"^login/$",
- AuthLoginEndpoint.as_view(),
- name="sentry-api-0-auth-login",
- ),
- ]
- ),
+ include(AUTH_URLS),
),
# List Authenticators
url(
@@ -732,13 +2464,8 @@ urlpatterns = [
),
# Broadcasts
url(
- r"^broadcasts/$",
- BroadcastIndexEndpoint.as_view(),
- name="sentry-api-0-broadcast-index",
- ),
- url(
- r"^broadcasts/(?P<broadcast_id>[^\/]+)/$",
- BroadcastDetailsEndpoint.as_view(),
+ r"^broadcasts/",
+ include(BROADCAST_URLS),
),
# Project transfer
url(
@@ -796,1636 +2523,37 @@ urlpatterns = [
# Users
url(
r"^users/",
- include(
- [
- url(
- r"^$",
- UserIndexEndpoint.as_view(),
- name="sentry-api-0-user-index",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/$",
- UserDetailsEndpoint.as_view(),
- name="sentry-api-0-user-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/avatar/$",
- UserAvatarEndpoint.as_view(),
- name="sentry-api-0-user-avatar",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/authenticators/$",
- UserAuthenticatorIndexEndpoint.as_view(),
- name="sentry-api-0-user-authenticator-index",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/authenticators/(?P<interface_id>[^\/]+)/enroll/$",
- UserAuthenticatorEnrollEndpoint.as_view(),
- name="sentry-api-0-user-authenticator-enroll",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/(?P<interface_device_id>[^\/]+)/$",
- UserAuthenticatorDetailsEndpoint.as_view(),
- name="sentry-api-0-user-authenticator-device-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/$",
- UserAuthenticatorDetailsEndpoint.as_view(),
- name="sentry-api-0-user-authenticator-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/emails/$",
- UserEmailsEndpoint.as_view(),
- name="sentry-api-0-user-emails",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/emails/confirm/$",
- UserEmailsConfirmEndpoint.as_view(),
- name="sentry-api-0-user-emails-confirm",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/identities/(?P<identity_id>[^\/]+)/$",
- UserIdentityDetailsEndpoint.as_view(),
- name="sentry-api-0-user-identity-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/identities/$",
- UserIdentityEndpoint.as_view(),
- name="sentry-api-0-user-identity",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/ips/$",
- UserIPsEndpoint.as_view(),
- name="sentry-api-0-user-ips",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/organizations/$",
- UserOrganizationsEndpoint.as_view(),
- name="sentry-api-0-user-organizations",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/notification-settings/$",
- UserNotificationSettingsDetailsEndpoint.as_view(),
- name="sentry-api-0-user-notification-settings",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/notifications/$",
- UserNotificationDetailsEndpoint.as_view(),
- name="sentry-api-0-user-notifications",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/notifications/(?P<notification_type>[^\/]+)/$",
- UserNotificationFineTuningEndpoint.as_view(),
- name="sentry-api-0-user-notifications-fine-tuning",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/password/$",
- UserPasswordEndpoint.as_view(),
- name="sentry-api-0-user-password",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/permissions/$",
- UserPermissionsEndpoint.as_view(),
- name="sentry-api-0-user-permissions",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/permissions/config/$",
- UserPermissionsConfigEndpoint.as_view(),
- name="sentry-api-0-user-permissions-config",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/permissions/(?P<permission_name>[^\/]+)/$",
- UserPermissionDetailsEndpoint.as_view(),
- name="sentry-api-0-user-permission-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/roles/$",
- UserUserRolesEndpoint.as_view(),
- name="sentry-api-0-user-userroles",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/roles/(?P<role_name>[^\/]+)/$",
- UserUserRoleDetailsEndpoint.as_view(),
- name="sentry-api-0-user-userrole-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/social-identities/$",
- UserSocialIdentitiesIndexEndpoint.as_view(),
- name="sentry-api-0-user-social-identities-index",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/social-identities/(?P<identity_id>[^\/]+)/$",
- UserSocialIdentityDetailsEndpoint.as_view(),
- name="sentry-api-0-user-social-identity-details",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/subscriptions/$",
- UserSubscriptionsEndpoint.as_view(),
- name="sentry-api-0-user-subscriptions",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/organization-integrations/$",
- UserOrganizationIntegrationsEndpoint.as_view(),
- name="sentry-api-0-user-organization-integrations",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/user-identities/$",
- UserIdentityConfigEndpoint.as_view(),
- name="sentry-api-0-user-identity-config",
- ),
- url(
- r"^(?P<user_id>[^\/]+)/user-identities/(?P<category>[\w-]+)/(?P<identity_id>[^\/]+)/$",
- UserIdentityConfigDetailsEndpoint.as_view(),
- name="sentry-api-0-user-identity-config-details",
- ),
- ]
- ),
+ include(USER_URLS),
),
# UserRoles
url(
r"^userroles/",
- include(
- [
- url(
- r"^$",
- UserRolesEndpoint.as_view(),
- name="sentry-api-0-userroles",
- ),
- url(
- r"^(?P<role_name>[^\/]+)/$",
- UserRoleDetailsEndpoint.as_view(),
- name="sentry-api-0-userroles-details",
- ),
- ]
- ),
+ include(USER_ROLE_URLS),
),
# Organizations
url(
r"^organizations/",
- include(
- [
- url(
- r"^$",
- OrganizationIndexEndpoint.as_view(),
- name="sentry-api-0-organizations",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/$",
- OrganizationDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-details",
- ),
- # Alert Rules
- url(
- r"^(?P<organization_slug>[^\/]+)/alert-rules/available-actions/$",
- OrganizationAlertRuleAvailableActionIndexEndpoint.as_view(),
- name="sentry-api-0-organization-alert-rule-available-actions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$",
- OrganizationAlertRuleDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-alert-rule-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/alert-rules/$",
- OrganizationAlertRuleIndexEndpoint.as_view(),
- name="sentry-api-0-organization-alert-rules",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/combined-rules/$",
- OrganizationCombinedRuleIndexEndpoint.as_view(),
- name="sentry-api-0-organization-combined-rules",
- ),
- # Data Export
- url(
- r"^(?P<organization_slug>[^\/]+)/data-export/$",
- DataExportEndpoint.as_view(),
- name="sentry-api-0-organization-data-export",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/data-export/(?P<data_export_id>[^\/]+)/$",
- DataExportDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-data-export-details",
- ),
- # Incidents
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/activity/$",
- OrganizationIncidentActivityIndexEndpoint.as_view(),
- name="sentry-api-0-organization-incident-activity",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/$",
- OrganizationIncidentCommentIndexEndpoint.as_view(),
- name="sentry-api-0-organization-incident-comments",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/(?P<activity_id>[^\/]+)/$",
- OrganizationIncidentCommentDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-incident-comment-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/$",
- OrganizationIncidentDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-incident-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/$",
- OrganizationIncidentIndexEndpoint.as_view(),
- name="sentry-api-0-organization-incident-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/seen/$",
- OrganizationIncidentSeenEndpoint.as_view(),
- name="sentry-api-0-organization-incident-seen",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/subscriptions/$",
- OrganizationIncidentSubscriptionIndexEndpoint.as_view(),
- name="sentry-api-0-organization-incident-subscription-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/chunk-upload/$",
- ChunkUploadEndpoint.as_view(),
- name="sentry-api-0-chunk-upload",
- ),
- # Code Path Mappings
- url(
- r"^(?P<organization_slug>[^\/]+)/code-mappings/$",
- OrganizationCodeMappingsEndpoint.as_view(),
- name="sentry-api-0-organization-code-mappings",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/derive-code-mappings/$",
- OrganizationDeriveCodeMappingsEndpoint.as_view(),
- name="sentry-api-0-organization-derive-code-mappings",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/$",
- OrganizationCodeMappingDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-code-mapping-details",
- ),
- # Codeowners
- url(
- r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/codeowners/$",
- OrganizationCodeMappingCodeOwnersEndpoint.as_view(),
- name="sentry-api-0-organization-code-mapping-codeowners",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/codeowners-associations/$",
- OrganizationCodeOwnersAssociationsEndpoint.as_view(),
- name="sentry-api-0-organization-codeowners-associations",
- ),
- # Discover
- url(
- r"^(?P<organization_slug>[^\/]+)/discover/homepage/$",
- DiscoverHomepageQueryEndpoint.as_view(),
- name="sentry-api-0-discover-homepage-query",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/discover/saved/$",
- DiscoverSavedQueriesEndpoint.as_view(),
- name="sentry-api-0-discover-saved-queries",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/$",
- DiscoverSavedQueryDetailEndpoint.as_view(),
- name="sentry-api-0-discover-saved-query-detail",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/visit/$",
- DiscoverSavedQueryVisitEndpoint.as_view(),
- name="sentry-api-0-discover-saved-query-visit",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/key-transactions/$",
- KeyTransactionEndpoint.as_view(),
- name="sentry-api-0-organization-key-transactions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/key-transactions-list/$",
- KeyTransactionListEndpoint.as_view(),
- name="sentry-api-0-organization-key-transactions-list",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/related-issues/$",
- OrganizationEventsRelatedIssuesEndpoint.as_view(),
- name="sentry-api-0-organization-related-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/project-transaction-threshold-override/$",
- ProjectTransactionThresholdOverrideEndpoint.as_view(),
- name="sentry-api-0-organization-project-transaction-threshold-override",
- ),
- # Dashboards
- url(
- r"^(?P<organization_slug>[^\/]+)/dashboards/$",
- OrganizationDashboardsEndpoint.as_view(),
- name="sentry-api-0-organization-dashboards",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/dashboards/widgets/$",
- OrganizationDashboardWidgetDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-dashboard-widget-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/$",
- OrganizationDashboardDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-dashboard-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/visit/$",
- OrganizationDashboardVisitEndpoint.as_view(),
- name="sentry-api-0-organization-dashboard-visit",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/shortids/(?P<short_id>[^\/]+)/$",
- ShortIdLookupEndpoint.as_view(),
- name="sentry-api-0-short-id-lookup",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/eventids/(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- EventIdLookupEndpoint.as_view(),
- name="sentry-api-0-event-id-lookup",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/data-scrubbing-selector-suggestions/$",
- DataScrubbingSelectorSuggestionsEndpoint.as_view(),
- name="sentry-api-0-data-scrubbing-selector-suggestions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/slugs/$",
- SlugsUpdateEndpoint.as_view(),
- name="sentry-api-0-short-ids-update",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/access-requests/$",
- OrganizationAccessRequestDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-access-requests",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/access-requests/(?P<request_id>\d+)/$",
- OrganizationAccessRequestDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-access-request-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/activity/$",
- OrganizationActivityEndpoint.as_view(),
- name="sentry-api-0-organization-activity",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/api-keys/$",
- OrganizationApiKeyIndexEndpoint.as_view(),
- name="sentry-api-0-organization-api-key-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/api-keys/(?P<api_key_id>[^\/]+)/$",
- OrganizationApiKeyDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-api-key-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/audit-logs/$",
- OrganizationAuditLogsEndpoint.as_view(),
- name="sentry-api-0-organization-audit-logs",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/auth-provider/$",
- OrganizationAuthProviderDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-auth-provider",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/auth-providers/$",
- OrganizationAuthProvidersEndpoint.as_view(),
- name="sentry-api-0-organization-auth-providers",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/auth-provider/send-reminders/$",
- OrganizationAuthProviderSendRemindersEndpoint.as_view(),
- name="sentry-api-0-organization-auth-provider-send-reminders",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/avatar/$",
- OrganizationAvatarEndpoint.as_view(),
- name="sentry-api-0-organization-avatar",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/artifactbundle/assemble/$",
- OrganizationArtifactBundleAssembleEndpoint.as_view(),
- name="sentry-api-0-organization-artifactbundle-assemble",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/config/integrations/$",
- OrganizationConfigIntegrationsEndpoint.as_view(),
- name="sentry-api-0-organization-config-integrations",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/config/repos/$",
- OrganizationConfigRepositoriesEndpoint.as_view(),
- name="sentry-api-0-organization-config-repositories",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/sdk-updates/$",
- OrganizationSdkUpdatesEndpoint.as_view(),
- name="sentry-api-0-organization-sdk-updates",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events/$",
- OrganizationEventsEndpoint.as_view(),
- name="sentry-api-0-organization-events",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events/(?P<project_slug>[^\/]+):(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- OrganizationEventDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-event-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-stats/$",
- OrganizationEventsStatsEndpoint.as_view(),
- name="sentry-api-0-organization-events-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-geo/$",
- OrganizationEventsGeoEndpoint.as_view(),
- name="sentry-api-0-organization-events-geo",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-facets/$",
- OrganizationEventsFacetsEndpoint.as_view(),
- name="sentry-api-0-organization-events-facets",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-facets-performance/$",
- OrganizationEventsFacetsPerformanceEndpoint.as_view(),
- name="sentry-api-0-organization-events-facets-performance",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-facets-performance-histogram/$",
- OrganizationEventsFacetsPerformanceHistogramEndpoint.as_view(),
- name="sentry-api-0-organization-events-facets-performance-histogram",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-span-ops/$",
- OrganizationEventsSpanOpsEndpoint.as_view(),
- name="sentry-api-0-organization-events-span-ops",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-spans/$",
- OrganizationEventsSpansExamplesEndpoint.as_view(),
- name="sentry-api-0-organization-events-spans",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-spans-performance/$",
- OrganizationEventsSpansPerformanceEndpoint.as_view(),
- name="sentry-api-0-organization-events-spans-performance",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-spans-stats/$",
- OrganizationEventsSpansStatsEndpoint.as_view(),
- name="sentry-api-0-organization-events-spans-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-meta/$",
- OrganizationEventsMetaEndpoint.as_view(),
- name="sentry-api-0-organization-events-meta",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/metrics-compatibility/$",
- OrganizationMetricsCompatibility.as_view(),
- name="sentry-api-0-organization-metrics-compatibility",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/metrics-compatibility-sums/$",
- OrganizationMetricsCompatibilitySums.as_view(),
- name="sentry-api-0-organization-metrics-compatibility-sums",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-histogram/$",
- OrganizationEventsHistogramEndpoint.as_view(),
- name="sentry-api-0-organization-events-histogram",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-spans-histogram/$",
- OrganizationEventsSpansHistogramEndpoint.as_view(),
- name="sentry-api-0-organization-events-spans-histogram",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-trends/$",
- OrganizationEventsTrendsEndpoint.as_view(),
- name="sentry-api-0-organization-events-trends",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-vitals/$",
- OrganizationEventsVitalsEndpoint.as_view(),
- name="sentry-api-0-organization-events-vitals",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-has-measurements/$",
- OrganizationEventsHasMeasurementsEndpoint.as_view(),
- name="sentry-api-0-organization-events-has-measurements",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-trends-stats/$",
- OrganizationEventsTrendsStatsEndpoint.as_view(),
- name="sentry-api-0-organization-events-trends-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-trace-light/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- OrganizationEventsTraceLightEndpoint.as_view(),
- name="sentry-api-0-organization-events-trace-light",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-trace/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- OrganizationEventsTraceEndpoint.as_view(),
- name="sentry-api-0-organization-events-trace",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/events-trace-meta/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- OrganizationEventsTraceMetaEndpoint.as_view(),
- name="sentry-api-0-organization-events-trace-meta",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/measurements-meta/$",
- OrganizationMeasurementsMeta.as_view(),
- name="sentry-api-0-organization-measurements-meta",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/issues/$",
- OrganizationGroupIndexEndpoint.as_view(),
- name="sentry-api-0-organization-group-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/issues-count/$",
- OrganizationIssuesCountEndpoint.as_view(),
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/issues-stats/$",
- OrganizationGroupIndexStatsEndpoint.as_view(),
- name="sentry-api-0-organization-group-index-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?:issues|groups)/",
- include(GROUP_URLS),
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/integrations/$",
- OrganizationIntegrationsEndpoint.as_view(),
- name="sentry-api-0-organization-integrations",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/$",
- OrganizationIntegrationDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-integration-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/repos/$",
- OrganizationIntegrationReposEndpoint.as_view(),
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/issues/$",
- OrganizationIntegrationIssuesEndpoint.as_view(),
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/serverless-functions/$",
- OrganizationIntegrationServerlessFunctionsEndpoint.as_view(),
- name="sentry-api-0-organization-integration-serverless-functions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/members/$",
- OrganizationMemberIndexEndpoint.as_view(),
- name="sentry-api-0-organization-member-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/external-users/$",
- ExternalUserEndpoint.as_view(),
- name="sentry-api-0-organization-external-user",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/external-users/(?P<external_user_id>[^\/]+)/$",
- ExternalUserDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-external-user-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/integration-requests/$",
- OrganizationIntegrationRequestEndpoint.as_view(),
- name="sentry-api-0-organization-integration-request",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/invite-requests/$",
- OrganizationInviteRequestIndexEndpoint.as_view(),
- name="sentry-api-0-organization-invite-request-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/invite-requests/(?P<member_id>[^\/]+)/$",
- OrganizationInviteRequestDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-invite-request-detail",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/monitors/$",
- OrganizationMonitorsEndpoint.as_view(),
- name="sentry-api-0-organization-monitors",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/$",
- OrganizationMonitorDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-monitor-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/stats/$",
- OrganizationMonitorStatsEndpoint.as_view(),
- name="sentry-api-0-organization-monitor-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/checkins/(?P<checkin_id>[^\/]+)/attachment/$",
- OrganizationMonitorCheckInAttachmentEndpoint.as_view(),
- name="sentry-api-0-organization-monitor-check-in-attachment",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/pinned-searches/$",
- OrganizationPinnedSearchEndpoint.as_view(),
- name="sentry-api-0-organization-pinned-searches",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/recent-searches/$",
- OrganizationRecentSearchesEndpoint.as_view(),
- name="sentry-api-0-organization-recent-searches",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/searches/(?P<search_id>[^\/]+)/$",
- OrganizationSearchDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-search-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/searches/$",
- OrganizationSearchesEndpoint.as_view(),
- name="sentry-api-0-organization-searches",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/sessions/$",
- OrganizationSessionsEndpoint.as_view(),
- name="sentry-api-0-organization-sessions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/users/issues/$",
- OrganizationUserIssuesSearchEndpoint.as_view(),
- name="sentry-api-0-organization-issue-search",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$",
- OrganizationIssuesResolvedInReleaseEndpoint.as_view(),
- name="sentry-api-0-organization-release-resolved",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/$",
- OrganizationMemberDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-member-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/unreleased-commits/$",
- OrganizationMemberUnreleasedCommitsEndpoint.as_view(),
- name="sentry-api-0-organization-member-unreleased-commits",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$",
- OrganizationMemberTeamDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-member-team-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/onboarding-continuation-email/$",
- OrganizationOnboardingContinuationEmail.as_view(),
- name="sentry-api-0-organization-onboarding-continuation-email",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/processingissues/$",
- OrganizationProcessingIssuesEndpoint.as_view(),
- name="sentry-api-0-organization-processing-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/projects/$",
- OrganizationProjectsEndpoint.as_view(),
- name="sentry-api-0-organization-projects",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/projects-count/$",
- OrganizationProjectsCountEndpoint.as_view(),
- name="sentry-api-0-organization-projects-count",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/sent-first-event/$",
- OrganizationProjectsSentFirstEventEndpoint.as_view(),
- name="sentry-api-0-organization-sent-first-event",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/repos/$",
- OrganizationRepositoriesEndpoint.as_view(),
- name="sentry-api-0-organization-repositories",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/$",
- OrganizationRepositoryDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-repository-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/commits/$",
- OrganizationRepositoryCommitsEndpoint.as_view(),
- name="sentry-api-0-organization-repository-commits",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/plugins/$",
- OrganizationPluginsEndpoint.as_view(),
- name="sentry-api-0-organization-plugins",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/plugins/configs/$",
- OrganizationPluginsConfigsEndpoint.as_view(),
- name="sentry-api-0-organization-plugins-configs",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/$",
- OrganizationReleasesEndpoint.as_view(),
- name="sentry-api-0-organization-releases",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/stats/$",
- OrganizationReleasesStatsEndpoint.as_view(),
- name="sentry-api-0-organization-releases-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/$",
- OrganizationReleaseDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-release-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/meta/$",
- OrganizationReleaseMetaEndpoint.as_view(),
- name="sentry-api-0-organization-release-meta",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/assemble/$",
- OrganizationReleaseAssembleEndpoint.as_view(),
- name="sentry-api-0-organization-release-assemble",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$",
- OrganizationReleaseFilesEndpoint.as_view(),
- name="sentry-api-0-organization-release-files",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$",
- OrganizationReleaseFileDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-release-file-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commitfiles/$",
- CommitFileChangeEndpoint.as_view(),
- name="sentry-api-0-release-commitfilechange",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/deploys/$",
- ReleaseDeploysEndpoint.as_view(),
- name="sentry-api-0-organization-release-deploys",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$",
- OrganizationReleaseCommitsEndpoint.as_view(),
- name="sentry-api-0-organization-release-commits",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/previous-with-commits/$",
- OrganizationReleasePreviousCommitsEndpoint.as_view(),
- name="sentry-api-0-organization-release-previous-with-commits",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/user-feedback/$",
- OrganizationUserReportsEndpoint.as_view(),
- name="sentry-api-0-organization-user-feedback",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/user-teams/$",
- OrganizationUserTeamsEndpoint.as_view(),
- name="sentry-api-0-organization-user-teams",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/users/$",
- OrganizationUsersEndpoint.as_view(),
- name="sentry-api-0-organization-users",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/users/(?P<user_id>[^\/]+)/$",
- OrganizationUserDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-user-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/sentry-app-installations/$",
- SentryAppInstallationsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-installations",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/sentry-apps/$",
- OrganizationSentryAppsEndpoint.as_view(),
- name="sentry-api-0-organization-sentry-apps",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/stats/$",
- OrganizationStatsEndpoint.as_view(),
- name="sentry-api-0-organization-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/stats_v2/$",
- OrganizationStatsEndpointV2.as_view(),
- name="sentry-api-0-organization-stats-v2",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/teams/$",
- OrganizationTeamsEndpoint.as_view(),
- name="sentry-api-0-organization-teams",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/tags/$",
- OrganizationTagsEndpoint.as_view(),
- name="sentry-api-0-organization-tags",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$",
- OrganizationTagKeyValuesEndpoint.as_view(),
- name="sentry-api-0-organization-tagkey-values",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/onboarding-tasks/$",
- OrganizationOnboardingTaskEndpoint.as_view(),
- name="sentry-api-0-organization-onboardingtasks",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/environments/$",
- OrganizationEnvironmentsEndpoint.as_view(),
- name="sentry-api-0-organization-environments",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/broadcasts/$",
- BroadcastIndexEndpoint.as_view(),
- name="sentry-api-0-organization-broadcasts",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/join-request/$",
- OrganizationJoinRequestEndpoint.as_view(),
- name="sentry-api-0-organization-join-request",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/transaction-anomaly-detection/$",
- OrganizationTransactionAnomalyDetectionEndpoint.as_view(),
- name="sentry-api-0-organization-transaction-anomaly-detection",
- ),
- # relay usage
- url(
- r"^(?P<organization_slug>[^\/]+)/relay_usage/$",
- OrganizationRelayUsage.as_view(),
- name="sentry-api-0-organization-relay-usage",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/replays/$",
- OrganizationReplayIndexEndpoint.as_view(),
- name="sentry-api-0-organization-replay-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/replay-count/$",
- OrganizationReplayCountEndpoint.as_view(),
- name="sentry-api-0-organization-replay-count",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/replays-events-meta/$",
- OrganizationReplayEventsMetaEndpoint.as_view(),
- name="sentry-api-0-organization-replay-events-meta",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/functions/$",
- OrganizationSentryFunctionEndpoint.as_view(),
- name="sentry-api-0-organization-sentry-functions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/functions/(?P<function_slug>[^\/]+)/$",
- OrganizationSentryFunctionDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-sentry-function-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/request-project-creation/$",
- OrganizationRequestProjectCreation.as_view(),
- name="sentry-api-0-organization-request-project-creation",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/scim/v2/",
- include(
- [
- url(
- r"^Users$",
- OrganizationSCIMMemberIndex.as_view(),
- name="sentry-api-0-organization-scim-member-index",
- ),
- url(
- r"^Users/(?P<member_id>\d+)$",
- OrganizationSCIMMemberDetails.as_view(),
- name="sentry-api-0-organization-scim-member-details",
- ),
- url(
- r"^Groups$",
- OrganizationSCIMTeamIndex.as_view(),
- name="sentry-api-0-organization-scim-team-index",
- ),
- url(
- r"^Groups/(?P<team_id>\d+)$",
- OrganizationSCIMTeamDetails.as_view(),
- name="sentry-api-0-organization-scim-team-details",
- ),
- url(
- r"^Schemas$",
- OrganizationSCIMSchemaIndex.as_view(),
- name="sentry-api-0-organization-scim-schema-index",
- ),
- ]
- ),
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/metrics/meta/$",
- OrganizationMetricsEndpoint.as_view(),
- name="sentry-api-0-organization-metrics-index",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/metrics/meta/(?P<metric_name>[^/]+)/$",
- OrganizationMetricDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-metric-details",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/metrics/data/$",
- OrganizationMetricsDataEndpoint.as_view(),
- name="sentry-api-0-organization-metrics-data",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/metrics/tags/$",
- OrganizationMetricsTagsEndpoint.as_view(),
- name="sentry-api-0-organization-metrics-tags",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/metrics/tags/(?P<tag_name>[^/]+)/$",
- OrganizationMetricsTagDetailsEndpoint.as_view(),
- name="sentry-api-0-organization-metrics-tag-details",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/profiling/",
- include(
- [
- url(
- r"^filters/$",
- OrganizationProfilingFiltersEndpoint.as_view(),
- name="sentry-api-0-organization-profiling-filters",
- ),
- ],
- ),
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/client-state/$",
- ClientStateListEndpoint.as_view(),
- name="sentry-api-0-organization-client-state-list",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/client-state/(?P<category>[^\/]+)/$",
- ClientStateEndpoint.as_view(),
- name="sentry-api-0-organization-client-state",
- ),
- ]
- ),
- ),
- # Toplevel app installs
- url(
- r"^sentry-app-installations/(?P<uuid>[^\/]+)/$",
- SentryAppInstallationDetailsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-installation-details",
- ),
- url(
- r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-requests/$",
- SentryAppInstallationExternalRequestsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-installation-external-requests",
- ),
- url(
- r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-issue-actions/$",
- SentryAppInstallationExternalIssueActionsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-installation-external-issue-actions",
- ),
- url(
- r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-issues/$",
- SentryAppInstallationExternalIssuesEndpoint.as_view(),
- name="sentry-api-0-sentry-app-installation-external-issues",
- ),
- url(
- r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-issues/(?P<external_issue_id>[^\/]+)/$",
- SentryAppInstallationExternalIssueDetailsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-installation-external-issue-details",
+ include(ORGANIZATION_URLS),
),
# Teams
url(
r"^teams/",
- include(
- [
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/$",
- TeamDetailsEndpoint.as_view(),
- name="sentry-api-0-team-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issues/old/$",
- TeamGroupsOldEndpoint.as_view(),
- name="sentry-api-0-team-oldest-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/release-count/$",
- TeamReleaseCountEndpoint.as_view(),
- name="sentry-api-0-team-release-count",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/time-to-resolution/$",
- TeamTimeToResolutionEndpoint.as_view(),
- name="sentry-api-0-team-time-to-resolution",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/unresolved-issue-age/$",
- TeamUnresolvedIssueAgeEndpoint.as_view(),
- name="sentry-api-0-team-unresolved-issue-age",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered/$",
- TeamAlertsTriggeredTotalsEndpoint.as_view(),
- name="sentry-api-0-team-alerts-triggered",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered-index/$",
- TeamAlertsTriggeredIndexEndpoint.as_view(),
- name="sentry-api-0-team-alerts-triggered-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issue-breakdown/$",
- TeamIssueBreakdownEndpoint.as_view(),
- name="sentry-api-0-team-issue-breakdown",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/all-unresolved-issues/$",
- TeamAllUnresolvedIssuesEndpoint.as_view(),
- name="sentry-api-0-team-all-unresolved-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/notification-settings/$",
- TeamNotificationSettingsDetailsEndpoint.as_view(),
- name="sentry-api-0-team-notification-settings",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/members/$",
- TeamMembersEndpoint.as_view(),
- name="sentry-api-0-team-members",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/projects/$",
- TeamProjectsEndpoint.as_view(),
- name="sentry-api-0-team-project-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/stats/$",
- TeamStatsEndpoint.as_view(),
- name="sentry-api-0-team-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/avatar/$",
- TeamAvatarEndpoint.as_view(),
- name="sentry-api-0-team-avatar",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/$",
- ExternalTeamEndpoint.as_view(),
- name="sentry-api-0-external-team",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/(?P<external_team_id>[^\/]+)/$",
- ExternalTeamDetailsEndpoint.as_view(),
- name="sentry-api-0-external-team-details",
- ),
- ]
- ),
+ include(TEAM_URLS),
),
# Projects
url(
r"^projects/",
- include(
- [
- url(
- r"^(?P<organization_slug>[^\/]+)/rule-conditions/$",
- ProjectAgnosticRuleConditionsEndpoint.as_view(),
- name="sentry-api-0-project-agnostic-rule-conditions",
- ),
- url(
- r"^$",
- ProjectIndexEndpoint.as_view(),
- name="sentry-api-0-projects",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/$",
- ProjectDetailsEndpoint.as_view(),
- name="sentry-api-0-project-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$",
- ProjectAlertRuleDetailsEndpoint.as_view(),
- name="sentry-api-0-project-alert-rule-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/$",
- ProjectAlertRuleIndexEndpoint.as_view(),
- name="sentry-api-0-project-alert-rules",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rule-task/(?P<task_uuid>[^\/]+)/$",
- ProjectAlertRuleTaskDetailsEndpoint.as_view(),
- name="sentry-api-0-project-alert-rule-task-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/combined-rules/$",
- ProjectCombinedRuleIndexEndpoint.as_view(),
- name="sentry-api-0-project-combined-rules",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/avatar/$",
- ProjectAvatarEndpoint.as_view(),
- name="sentry-api-0-project-avatar",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample/$",
- ProjectCreateSampleEndpoint.as_view(),
- name="sentry-api-0-project-create-sample",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample-transaction/$",
- ProjectCreateSampleTransactionEndpoint.as_view(),
- name="sentry-api-0-project-create-sample-transaction",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/docs/(?P<platform>[\w-]+)/$",
- ProjectDocsPlatformEndpoint.as_view(),
- name="sentry-api-0-project-docs-platform",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/$",
- ProjectEnvironmentsEndpoint.as_view(),
- name="sentry-api-0-project-environments",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/(?P<environment>[^/]+)/$",
- ProjectEnvironmentDetailsEndpoint.as_view(),
- name="sentry-api-0-project-environment-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/platforms/$",
- ProjectPlatformsEndpoint.as_view(),
- name="sentry-api-0-project-platform-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/$",
- ProjectEventsEndpoint.as_view(),
- name="sentry-api-0-project-events",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>(?:\d+|[A-Fa-f0-9]{32}))/$",
- ProjectEventDetailsEndpoint.as_view(),
- name="sentry-api-0-project-event-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/grouping-info/$",
- EventGroupingInfoEndpoint.as_view(),
- name="sentry-api-0-event-grouping-info",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/apple-crash-report$",
- EventAppleCrashReportEndpoint.as_view(),
- name="sentry-api-0-event-apple-crash-report",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/$",
- EventAttachmentsEndpoint.as_view(),
- name="sentry-api-0-event-attachments",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/reprocessable/$",
- EventReprocessableEndpoint.as_view(),
- name="sentry-api-0-event-attachments",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/(?P<attachment_id>[\w-]+)/$",
- EventAttachmentDetailsEndpoint.as_view(),
- name="sentry-api-0-event-attachment-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/committers/$",
- EventFileCommittersEndpoint.as_view(),
- name="sentry-api-0-event-file-committers",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/json/$",
- EventJsonEndpoint.as_view(),
- name="sentry-api-0-event-json",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/owners/$",
- EventOwnersEndpoint.as_view(),
- name="sentry-api-0-event-owners",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/source-map-debug/$",
- SourceMapDebugEndpoint.as_view(),
- name="sentry-api-0-event-source-map-debug",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/$",
- DebugFilesEndpoint.as_view(),
- name="sentry-api-0-dsym-files",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/source-maps/$",
- SourceMapsEndpoint.as_view(),
- name="sentry-api-0-source-maps",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/difs/assemble/$",
- DifAssembleEndpoint.as_view(),
- name="sentry-api-0-assemble-dif-files",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/unknown/$",
- UnknownDebugFilesEndpoint.as_view(),
- name="sentry-api-0-unknown-dsym-files",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/associate/$",
- AssociateDSymFilesEndpoint.as_view(),
- name="sentry-api-0-associate-dsym-files",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/$",
- ProjectFiltersEndpoint.as_view(),
- name="sentry-api-0-project-filters",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/(?P<filter_id>[\w-]+)/$",
- ProjectFilterDetailsEndpoint.as_view(),
- name="sentry-api-0-project-filters",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/$",
- ProjectServiceHooksEndpoint.as_view(),
- name="sentry-api-0-service-hooks",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/$",
- ProjectServiceHookDetailsEndpoint.as_view(),
- name="sentry-api-0-project-service-hook-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/stats/$",
- ProjectServiceHookStatsEndpoint.as_view(),
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/$",
- ProjectGroupIndexEndpoint.as_view(),
- name="sentry-api-0-project-group-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/stats/$",
- ProjectGroupStatsEndpoint.as_view(),
- name="sentry-api-0-project-group-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/$",
- ProjectKeysEndpoint.as_view(),
- name="sentry-api-0-project-keys",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/$",
- ProjectKeyDetailsEndpoint.as_view(),
- name="sentry-api-0-project-key-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/stats/$",
- ProjectKeyStatsEndpoint.as_view(),
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^/]+)/members/$",
- ProjectMemberIndexEndpoint.as_view(),
- name="sentry-api-0-project-member-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/$",
- ProjectReleasesEndpoint.as_view(),
- name="sentry-api-0-project-releases",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/commits/$",
- ProjectCommitsEndpoint.as_view(),
- name="sentry-api-0-project-commits",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/token/$",
- ProjectReleasesTokenEndpoint.as_view(),
- name="sentry-api-0-project-releases-token",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/completion/$",
- ProjectReleaseSetupCompletionEndpoint.as_view(),
- name="sentry-api-0-project-releases-completion-status",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/$",
- ProjectReleaseDetailsEndpoint.as_view(),
- name="sentry-api-0-project-release-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$",
- ProjectReleaseCommitsEndpoint.as_view(),
- name="sentry-api-0-project-release-commits",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/repositories/$",
- ProjectReleaseRepositories.as_view(),
- name="sentry-api-0-project-release-repositories",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$",
- ProjectIssuesResolvedInReleaseEndpoint.as_view(),
- name="sentry-api-0-project-release-resolved",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/stats/$",
- ProjectReleaseStatsEndpoint.as_view(),
- name="sentry-api-0-project-release-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$",
- ProjectReleaseFilesEndpoint.as_view(),
- name="sentry-api-0-project-release-files",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$",
- ProjectReleaseFileDetailsEndpoint.as_view(),
- name="sentry-api-0-project-release-file-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/$",
- ProjectRulesEndpoint.as_view(),
- name="sentry-api-0-project-rules",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/$",
- ProjectReplayDetailsEndpoint.as_view(),
- name="sentry-api-0-project-replay-details",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/$",
- ProjectReplayRecordingSegmentIndexEndpoint.as_view(),
- name="sentry-api-0-project-replay-recording-segment-index",
- ),
- url(
- r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/(?P<segment_id>\d+)/$",
- ProjectReplayRecordingSegmentDetailsEndpoint.as_view(),
- name="sentry-api-0-project-replay-recording-segment-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/configuration/$",
- ProjectRulesConfigurationEndpoint.as_view(),
- name="sentry-api-0-project-rules-configuration",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/$",
- ProjectRuleDetailsEndpoint.as_view(),
- name="sentry-api-0-project-rule-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/preview$",
- ProjectRulePreviewEndpoint.as_view(),
- name="sentry-api-0-project-rule-preview",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-actions/$",
- ProjectRuleActionsEndpoint.as_view(),
- name="sentry-api-0-project-rule-actions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/group-history/$",
- ProjectRuleGroupHistoryIndexEndpoint.as_view(),
- name="sentry-api-0-project-rule-group-history-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/stats/$",
- ProjectRuleStatsIndexEndpoint.as_view(),
- name="sentry-api-0-project-rule-stats-index",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-task/(?P<task_uuid>[^\/]+)/$",
- ProjectRuleTaskDetailsEndpoint.as_view(),
- name="sentry-api-0-project-rule-task-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stats/$",
- ProjectStatsEndpoint.as_view(),
- name="sentry-api-0-project-stats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/$",
- ProjectTagsEndpoint.as_view(),
- name="sentry-api-0-project-tags",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/$",
- ProjectTagKeyDetailsEndpoint.as_view(),
- name="sentry-api-0-project-tagkey-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$",
- ProjectTagKeyValuesEndpoint.as_view(),
- name="sentry-api-0-project-tagkey-values",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/$",
- ProjectTeamsEndpoint.as_view(),
- name="sentry-api-0-project-teams",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$",
- ProjectTeamDetailsEndpoint.as_view(),
- name="sentry-api-0-project-team-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transfer/$",
- ProjectTransferEndpoint.as_view(),
- name="sentry-api-0-project-transfer",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/$",
- ProjectUsersEndpoint.as_view(),
- name="sentry-api-0-project-users",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/(?P<user_hash>[^/]+)/$",
- ProjectUserDetailsEndpoint.as_view(),
- name="sentry-api-0-project-user-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:user-feedback|user-reports)/$",
- ProjectUserReportsEndpoint.as_view(),
- name="sentry-api-0-project-user-reports",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/user-stats/$",
- ProjectUserStatsEndpoint.as_view(),
- name="sentry-api-0-project-userstats",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/$",
- ProjectProcessingIssuesEndpoint.as_view(),
- name="sentry-api-0-project-processing-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/fix$",
- ProjectProcessingIssuesFixEndpoint.as_view(),
- name="sentry-api-0-project-fix-processing-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/reprocessing/$",
- ProjectReprocessingEndpoint.as_view(),
- name="sentry-api-0-project-reprocessing",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/discard/$",
- ProjectProcessingIssuesDiscardEndpoint.as_view(),
- name="sentry-api-0-project-discard-processing-issues",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/ownership/$",
- ProjectOwnershipEndpoint.as_view(),
- name="sentry-api-0-project-ownership",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/$",
- ProjectCodeOwnersEndpoint.as_view(),
- name="sentry-api-0-project-codeowners",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/(?P<codeowners_id>[^\/]+)/$",
- ProjectCodeOwnersDetailsEndpoint.as_view(),
- name="sentry-api-0-project-codeowners-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transaction-threshold/configure/$",
- ProjectTransactionThresholdEndpoint.as_view(),
- name="sentry-api-0-project-transaction-threshold",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/performance-issues/configure/$",
- ProjectPerformanceIssueSettingsEndpoint.as_view(),
- name="sentry-api-0-project-performance-issue-settings",
- ),
- # Load plugin project urls
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/$",
- ProjectPluginsEndpoint.as_view(),
- name="sentry-api-0-project-plugins",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/(?P<plugin_id>[^\/]+)/$",
- ProjectPluginDetailsEndpoint.as_view(),
- name="sentry-api-0-project-plugin-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/cluster-transaction-names/$",
- ProjectTransactionNamesCluster.as_view(),
- name="sentry-api-0-organization-project-cluster-transaction-names",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins?/",
- include("sentry.plugins.base.project_api_urls"),
- ),
- # Tombstone
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/$",
- GroupTombstoneEndpoint.as_view(),
- name="sentry-api-0-group-tombstones",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/(?P<tombstone_id>\d+)/$",
- GroupTombstoneDetailsEndpoint.as_view(),
- name="sentry-api-0-group-tombstone-details",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stacktrace-link/$",
- ProjectStacktraceLinkEndpoint.as_view(),
- name="sentry-api-0-project-stacktrace-link",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/repo-path-parsing/$",
- ProjectRepoPathParsingEndpoint.as_view(),
- name="sentry-api-0-project-repo-path-parsing",
- ),
- # Grouping configs
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/grouping-configs/$",
- ProjectGroupingConfigsEndpoint.as_view(),
- name="sentry-api-0-project-grouping-configs",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/$",
- AppStoreConnectCreateCredentialsEndpoint.as_view(),
- name="sentry-api-0-project-appstoreconnect-credentials-create",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/apps/$",
- AppStoreConnectAppsEndpoint.as_view(),
- name="sentry-api-0-project-appstoreconnect-apps",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/status/$",
- AppStoreConnectStatusEndpoint.as_view(),
- name="sentry-api-0-project-appstoreconnect-status",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/$",
- AppStoreConnectUpdateCredentialsEndpoint.as_view(),
- name="sentry-api-0-project-appstoreconnect-credentials-update",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/refresh/$",
- AppStoreConnectRefreshEndpoint.as_view(),
- name="sentry-api-0-project-appstoreconnect-refresh",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/functions/$",
- ProjectProfilingFunctionsEndpoint.as_view(),
- name="sentry-api-0-project-profiling-functions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- ProjectProfilingProfileEndpoint.as_view(),
- name="sentry-api-0-project-profiling-profile",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/raw_profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- ProjectProfilingRawProfileEndpoint.as_view(),
- name="sentry-api-0-project-profiling-raw-profile",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/flamegraph/$",
- ProjectProfilingFlamegraphEndpoint.as_view(),
- name="sentry-api-0-project-profiling-flamegraph",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/transactions/(?P<transaction_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$",
- ProjectProfilingTransactionIDProfileIDEndpoint.as_view(),
- name="sentry-api-0-project-profiling-transactions",
- ),
- url(
- r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/dynamic-sampling/distribution/$",
- ProjectDynamicSamplingDistributionEndpoint.as_view(),
- name="sentry-api-0-project-dynamic-sampling-distribution",
- ),
- ]
- ),
+ include(PROJECT_URLS),
+ ),
+ # Toplevel app installs
+ url(
+ r"^sentry-app-installations/",
+ include(SENTRY_APP_INSTALLATION_URLS),
+ ),
+ # Groups / Issues
+ url(
+ r"^(?:issues|groups)/",
+ include(GROUP_URLS),
),
# Profiling - This is a temporary endpoint to easily go from a project id + profile id to a flamechart.
# It will be removed in the near future.
@@ -2434,11 +2562,6 @@ urlpatterns = [
ProjectProfilingEventEndpoint.as_view(),
name="sentry-api-0-profiling-project-profile",
),
- # Groups
- url(
- r"^(?:issues|groups)/",
- include(GROUP_URLS),
- ),
# TODO: include in the /organizations/ route tree + remove old dupe once hybrid cloud launches
url(
r"^organizations/(?P<organization_slug>[^\/]+)/issues/(?P<issue_id>[^\/]+)/participants/$",
@@ -2463,74 +2586,23 @@ urlpatterns = [
),
# Sentry Apps
url(
- r"^sentry-apps/$",
- SentryAppsEndpoint.as_view(),
- name="sentry-api-0-sentry-apps",
+ r"^sentry-apps/",
+ include(SENTRY_APP_URLS),
),
url(
r"^sentry-apps-stats/$",
SentryAppsStatsEndpoint.as_view(),
name="sentry-api-0-sentry-apps-stats",
),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/$",
- SentryAppDetailsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-details",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/features/$",
- SentryAppFeaturesEndpoint.as_view(),
- name="sentry-api-0-sentry-app-features",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/components/$",
- SentryAppComponentsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-components",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/avatar/$",
- SentryAppAvatarEndpoint.as_view(),
- name="sentry-api-0-sentry-app-avatar",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/api-tokens/$",
- SentryInternalAppTokensEndpoint.as_view(),
- name="sentry-api-0-sentry-internal-app-tokens",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/api-tokens/(?P<api_token>[^\/]+)/$",
- SentryInternalAppTokenDetailsEndpoint.as_view(),
- name="sentry-api-0-sentry-internal-app-token-details",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/stats/$",
- SentryAppStatsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-stats",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/requests/$",
- SentryAppRequestsEndpoint.as_view(),
- name="sentry-api-0-sentry-app-requests",
- ),
- url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/interaction/$",
- SentryAppInteractionEndpoint.as_view(),
- name="sentry-api-0-sentry-app-interaction",
- ),
- url(
- r"^organizations/(?P<organization_slug>[^\/]+)/sentry-app-components/$",
- OrganizationSentryAppComponentsEndpoint.as_view(),
- name="sentry-api-0-org-sentry-app-components",
- ),
url(
r"^sentry-app-installations/(?P<uuid>[^\/]+)/authorizations/$",
SentryAppAuthorizationsEndpoint.as_view(),
name="sentry-api-0-sentry-app-authorizations",
),
url(
- r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/publish-request/$",
- SentryAppPublishRequestEndpoint.as_view(),
- name="sentry-api-0-sentry-app-publish-request",
+ r"^organizations/(?P<organization_slug>[^\/]+)/sentry-app-components/$",
+ OrganizationSentryAppComponentsEndpoint.as_view(),
+ name="sentry-api-0-org-sentry-app-components",
),
# Document Integrations
url(
@@ -2572,60 +2644,6 @@ urlpatterns = [
BuiltinSymbolSourcesEndpoint.as_view(),
name="sentry-api-0-builtin-symbol-sources",
),
- # Internal
- url(
- r"^internal/",
- include(
- [
- url(
- r"^health/$", SystemHealthEndpoint.as_view(), name="sentry-api-0-system-health"
- ),
- url(
- r"^options/$",
- SystemOptionsEndpoint.as_view(),
- name="sentry-api-0-system-options",
- ),
- url(
- r"^beacon/$",
- InternalBeaconEndpoint.as_view(),
- name="sentry-api-0-internal-beacon",
- ),
- url(
- r"^quotas/$",
- InternalQuotasEndpoint.as_view(),
- ),
- url(
- r"^queue/tasks/$",
- InternalQueueTasksEndpoint.as_view(),
- ),
- url(
- r"^stats/$",
- InternalStatsEndpoint.as_view(),
- ),
- url(
- r"^warnings/$",
- InternalWarningsEndpoint.as_view(),
- ),
- url(
- r"^packages/$",
- InternalPackagesEndpoint.as_view(),
- ),
- url(
- r"^environment/$",
- InternalEnvironmentEndpoint.as_view(),
- ),
- url(
- r"^mail/$",
- InternalMailEndpoint.as_view(),
- ),
- url(
- r"^project-config/$",
- AdminRelayProjectConfigsEndpoint.as_view(),
- name="sentry-api-0-internal-project-config",
- ),
- ]
- ),
- ),
# Project Wizard
url(
r"^wizard/$",
@@ -2637,6 +2655,11 @@ urlpatterns = [
SetupWizard.as_view(),
name="sentry-api-0-project-wizard",
),
+ # Internal
+ url(
+ r"^internal/",
+ include(INTERNAL_URLS),
+ ),
# Catch all
url(
r"^$",
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment