diff --git a/config/_default/menus/api.en.yaml b/config/_default/menus/api.en.yaml
index 3d6c0db2752..2f2552cab70 100644
--- a/config/_default/menus/api.en.yaml
+++ b/config/_default/menus/api.en.yaml
@@ -12730,6 +12730,32 @@ menu:
url: /api/latest/status-pages/
identifier: status-pages
generated: true
+ - name: Import email subscriptions
+ url: '#import-email-subscriptions'
+ identifier: status-pages-import-email-subscriptions
+ parent: status-pages
+ generated: true
+ params:
+ versions:
+ - v2
+ operationids:
+ - ImportEmailSubscriptions
+ unstable:
+ - v2
+ order: 14
+ - name: List email subscriptions
+ url: '#list-email-subscriptions'
+ identifier: status-pages-list-email-subscriptions
+ parent: status-pages
+ generated: true
+ params:
+ versions:
+ - v2
+ operationids:
+ - ListEmailSubscriptions
+ unstable:
+ - v2
+ order: 13
- name: Update degradation
url: '#update-degradation'
identifier: status-pages-update-degradation
@@ -12874,6 +12900,19 @@ menu:
- DeleteStatusPage
unstable: []
order: 5
+ - name: Create an internal email subscription
+ url: '#create-an-internal-email-subscription'
+ identifier: status-pages-create-an-internal-email-subscription
+ parent: status-pages
+ generated: true
+ params:
+ versions:
+ - v2
+ operationids:
+ - CreateInternalEmailSubscription
+ unstable:
+ - v2
+ order: 12
- name: List degradations
url: '#list-degradations'
identifier: status-pages-list-degradations
diff --git a/content/en/api/v2/status-pages/examples.json b/content/en/api/v2/status-pages/examples.json
index e54524183b3..27876b27ea8 100644
--- a/content/en/api/v2/status-pages/examples.json
+++ b/content/en/api/v2/status-pages/examples.json
@@ -330,6 +330,124 @@
"html": ""
}
},
+ "CreateInternalEmailSubscription": {
+ "responses": {
+ "201": {
+ "json": {
+ "data": {
+ "attributes": {
+ "created_at": "2026-01-13T17:18:16.290086Z",
+ "email_address": "test+active@example.com",
+ "modified_at": "2026-01-13T17:18:16.290086Z",
+ "status": "active"
+ },
+ "id": "19121f53-04ae-4913-a7fd-64bcc2f812c2",
+ "relationships": {
+ "status_page": {
+ "data": {
+ "id": "ed50804f-f823-4d2c-ba56-c998cbd0ae0a",
+ "type": "status_pages"
+ }
+ },
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ },
+ "html": "
\n
\n
\n
\n
\n
Email subscription data from a response.
\n
\n
\n
\n
\n
\n
attributes [required]
\n
\n
\n
The email subscription attributes from a response.
\n
\n
\n
\n
\n
\n
created_at [required]
\n
\n
\n
Timestamp when the subscription was created.
\n
\n \n
\n
\n
\n
\n
\n
email_address [required]
\n
\n
\n
The email address subscribed to the status page.
\n
\n \n
\n
\n
\n
\n
\n
modified_at [required]
\n
\n
\n
Timestamp when the subscription was last modified.
\n
\n \n
\n
\n
\n
\n
\n
\n
Status of the email subscription. \nAllowed enum values: active,unconfirmed
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The email subscription ID.
\n
\n \n
\n
\n
\n
\n
\n
relationships [required]
\n
\n
\n
The email subscription relationships from a response.
\n
\n
\n
\n
\n
\n
status_page [required]
\n
\n
\n
Relationship to the status page.
\n
\n
\n
\n
\n
\n
\n
Status page relationship data.
\n
\n
\n
\n
\n
\n
\n
Status pages resource type. \nAllowed enum values: status_pages
default: status_pages
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
subscribed_components [required]
\n
\n
\n
Relationship to subscribed components.
\n
\n
\n
\n
\n
\n
\n
List of subscribed components.
\n
\n
\n
\n
\n
\n
\n
Status page component resource type. \nAllowed enum values: status_page_components
default: status_page_components
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Status page email subscription resource type. \nAllowed enum values: email_subscriptions
default: email_subscriptions
\n
\n \n
\n
\n
\n
"
+ },
+ "400": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "403": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "429": {
+ "json": {
+ "errors": [
+ "Bad Request"
+ ]
+ },
+ "html": ""
+ }
+ },
+ "request": {
+ "json_curl": {
+ "data": {
+ "attributes": {
+ "email_address": "test@example.com"
+ },
+ "relationships": {
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ },
+ "json": {
+ "data": {
+ "attributes": {
+ "email_address": "test@example.com"
+ },
+ "relationships": {
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ },
+ "html": "\n
\n
\n
\n
\n
Email subscription data for a request.
\n
\n
\n
\n
\n
\n
attributes [required]
\n
\n
\n
The email subscription attributes for a request.
\n
\n
\n
\n
\n
\n
email_address [required]
\n
\n
\n
The email address to subscribe.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The email subscription relationships for a request.
\n
\n
\n
\n
\n
\n
subscribed_components
\n
\n
\n
Relationship to subscribed components.
\n
\n
\n
\n
\n
\n
\n
List of subscribed components.
\n
\n
\n
\n
\n
\n
\n
Status page component resource type. \nAllowed enum values: status_page_components
default: status_page_components
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Status page email subscription resource type. \nAllowed enum values: email_subscriptions
default: email_subscriptions
\n
\n \n
\n
\n
\n
"
+ }
+ },
"DeleteStatusPage": {
"responses": {
"429": {
@@ -1294,5 +1412,257 @@
},
"html": "\n
\n
\n
\n
\n
\n
\n
attributes [required]
\n
\n
\n
The supported attributes for updating a degradation.
\n
\n
\n
\n
\n
\n
\n
The components affected by the degradation.
\n
\n
\n
\n
\n
\n
\n
The ID of the component. Must be a component of type component.
\n
\n \n
\n
\n
\n
\n
\n
\n
The status of the component. \nAllowed enum values: operational,degraded,partial_outage,major_outage
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The description of the degradation.
\n
\n \n
\n
\n
\n
\n
\n
\n
The status of the degradation. \nAllowed enum values: investigating,identified,monitoring,resolved
\n
\n \n
\n
\n
\n
\n
\n
\n
The title of the degradation.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The ID of the degradation.
\n
\n \n
\n
\n
\n
\n
\n
\n
Degradations resource type. \nAllowed enum values: degradations
default: degradations
\n
\n \n
\n
\n
\n
"
}
+ },
+ "ListEmailSubscriptions": {
+ "responses": {
+ "200": {
+ "json": {
+ "data": [
+ {
+ "attributes": {
+ "created_at": "2026-01-13T17:18:16.290086Z",
+ "email_address": "test+active@example.com",
+ "modified_at": "2026-01-13T17:18:16.290086Z",
+ "status": "active"
+ },
+ "id": "19121f53-04ae-4913-a7fd-64bcc2f812c2",
+ "relationships": {
+ "status_page": {
+ "data": {
+ "id": "ed50804f-f823-4d2c-ba56-c998cbd0ae0a",
+ "type": "status_pages"
+ }
+ },
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ ],
+ "meta": {
+ "page": {
+ "first_offset": 0,
+ "last_offset": 0,
+ "limit": 1000,
+ "next_offset": null,
+ "offset": 0,
+ "prev_offset": null,
+ "total": 1,
+ "type": "offset_limit"
+ }
+ }
+ },
+ "html": "\n
\n
\n
\n
\n
List of email subscriptions.
\n
\n
\n
\n
\n
\n
attributes [required]
\n
\n
\n
The email subscription attributes from a response.
\n
\n
\n
\n
\n
\n
created_at [required]
\n
\n
\n
Timestamp when the subscription was created.
\n
\n \n
\n
\n
\n
\n
\n
email_address [required]
\n
\n
\n
The email address subscribed to the status page.
\n
\n \n
\n
\n
\n
\n
\n
modified_at [required]
\n
\n
\n
Timestamp when the subscription was last modified.
\n
\n \n
\n
\n
\n
\n
\n
\n
Status of the email subscription. \nAllowed enum values: active,unconfirmed
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The email subscription ID.
\n
\n \n
\n
\n
\n
\n
\n
relationships [required]
\n
\n
\n
The email subscription relationships from a response.
\n
\n
\n
\n
\n
\n
status_page [required]
\n
\n
\n
Relationship to the status page.
\n
\n
\n
\n
\n
\n
\n
Status page relationship data.
\n
\n
\n
\n
\n
\n
\n
Status pages resource type. \nAllowed enum values: status_pages
default: status_pages
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
subscribed_components [required]
\n
\n
\n
Relationship to subscribed components.
\n
\n
\n
\n
\n
\n
\n
List of subscribed components.
\n
\n
\n
\n
\n
\n
\n
Status page component resource type. \nAllowed enum values: status_page_components
default: status_page_components
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Status page email subscription resource type. \nAllowed enum values: email_subscriptions
default: email_subscriptions
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Metadata for the list of email subscriptions.
\n
\n
\n
\n
\n
\n
\n
\n
\n
first_offset [required]
\n
\n
\n
The offset of the first page.
\n
\n \n
\n
\n
\n
\n
\n
last_offset [required]
\n
\n
\n
The offset of the last page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The maximum number of items per page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The offset of the next page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The offset of the previous page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The total number of items.
\n
\n \n
\n
\n
\n
\n
\n
"
+ },
+ "400": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "403": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "404": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "429": {
+ "json": {
+ "errors": [
+ "Bad Request"
+ ]
+ },
+ "html": ""
+ }
+ },
+ "request": {
+ "json_curl": {},
+ "json": {},
+ "html": ""
+ }
+ },
+ "ImportEmailSubscriptions": {
+ "responses": {
+ "201": {
+ "json": {
+ "data": [
+ {
+ "attributes": {
+ "created_at": "2026-01-13T17:18:16.290086Z",
+ "email_address": "test+active@example.com",
+ "modified_at": "2026-01-13T17:18:16.290086Z",
+ "status": "active"
+ },
+ "id": "19121f53-04ae-4913-a7fd-64bcc2f812c2",
+ "relationships": {
+ "status_page": {
+ "data": {
+ "id": "ed50804f-f823-4d2c-ba56-c998cbd0ae0a",
+ "type": "status_pages"
+ }
+ },
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ ],
+ "meta": {
+ "page": {
+ "first_offset": 0,
+ "last_offset": 0,
+ "limit": 1000,
+ "next_offset": null,
+ "offset": 0,
+ "prev_offset": null,
+ "total": 1,
+ "type": "offset_limit"
+ }
+ }
+ },
+ "html": "\n
\n
\n
\n
\n
List of email subscriptions.
\n
\n
\n
\n
\n
\n
attributes [required]
\n
\n
\n
The email subscription attributes from a response.
\n
\n
\n
\n
\n
\n
created_at [required]
\n
\n
\n
Timestamp when the subscription was created.
\n
\n \n
\n
\n
\n
\n
\n
email_address [required]
\n
\n
\n
The email address subscribed to the status page.
\n
\n \n
\n
\n
\n
\n
\n
modified_at [required]
\n
\n
\n
Timestamp when the subscription was last modified.
\n
\n \n
\n
\n
\n
\n
\n
\n
Status of the email subscription. \nAllowed enum values: active,unconfirmed
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The email subscription ID.
\n
\n \n
\n
\n
\n
\n
\n
relationships [required]
\n
\n
\n
The email subscription relationships from a response.
\n
\n
\n
\n
\n
\n
status_page [required]
\n
\n
\n
Relationship to the status page.
\n
\n
\n
\n
\n
\n
\n
Status page relationship data.
\n
\n
\n
\n
\n
\n
\n
Status pages resource type. \nAllowed enum values: status_pages
default: status_pages
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
subscribed_components [required]
\n
\n
\n
Relationship to subscribed components.
\n
\n
\n
\n
\n
\n
\n
List of subscribed components.
\n
\n
\n
\n
\n
\n
\n
Status page component resource type. \nAllowed enum values: status_page_components
default: status_page_components
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Status page email subscription resource type. \nAllowed enum values: email_subscriptions
default: email_subscriptions
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Metadata for the list of email subscriptions.
\n
\n
\n
\n
\n
\n
\n
\n
\n
first_offset [required]
\n
\n
\n
The offset of the first page.
\n
\n \n
\n
\n
\n
\n
\n
last_offset [required]
\n
\n
\n
The offset of the last page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The maximum number of items per page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The offset of the next page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The offset of the previous page.
\n
\n \n
\n
\n
\n
\n
\n
\n
The total number of items.
\n
\n \n
\n
\n
\n
\n
\n
"
+ },
+ "400": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "403": {
+ "json": {
+ "errors": [
+ {
+ "detail": "Missing required attribute in body",
+ "meta": {},
+ "source": {
+ "header": "Authorization",
+ "parameter": "limit",
+ "pointer": "/data/attributes/title"
+ },
+ "status": "400",
+ "title": "Bad Request"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
\n
\n
\n
A human-readable explanation specific to this occurrence of the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
Non-standard meta-information about the error
\n
\n \n
\n
\n
\n
\n
\n
\n
References to the source of the error.
\n
\n
\n
\n
\n
\n
\n
A string indicating the name of a single request header which caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A string indicating which URI query parameter caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
A JSON pointer to the value in the request document that caused the error.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
Status code of the response.
\n
\n \n
\n
\n
\n
\n
\n
\n
Short human-readable summary of the error.
\n
\n \n
\n
\n
\n
"
+ },
+ "429": {
+ "json": {
+ "errors": [
+ "Bad Request"
+ ]
+ },
+ "html": ""
+ }
+ },
+ "request": {
+ "json_curl": {
+ "data": [
+ {
+ "attributes": {
+ "email_address": "test@example.com"
+ },
+ "relationships": {
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ ]
+ },
+ "json": {
+ "data": [
+ {
+ "attributes": {
+ "email_address": "test@example.com"
+ },
+ "relationships": {
+ "subscribed_components": {
+ "data": [
+ {
+ "id": "00000000-0000-0000-0000-000000000000",
+ "type": "status_page_components"
+ }
+ ]
+ }
+ },
+ "type": "email_subscriptions"
+ }
+ ]
+ },
+ "html": "\n
\n
\n
\n
\n
List of email subscriptions to import.
\n
\n
\n
\n
\n
\n
attributes [required]
\n
\n
\n
The email subscription attributes for a request.
\n
\n
\n
\n
\n
\n
email_address [required]
\n
\n
\n
The email address to subscribe.
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
The email subscription relationships for a request.
\n
\n
\n
\n
\n
\n
subscribed_components
\n
\n
\n
Relationship to subscribed components.
\n
\n
\n
\n
\n
\n
\n
List of subscribed components.
\n
\n
\n
\n
\n
\n
\n
Status page component resource type. \nAllowed enum values: status_page_components
default: status_page_components
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Status page email subscription resource type. \nAllowed enum values: email_subscriptions
default: email_subscriptions
\n
\n \n
\n
\n
\n
"
+ }
}
}
\ No newline at end of file
diff --git a/data/api/v2/full_spec.yaml b/data/api/v2/full_spec.yaml
index aa9bfd12786..e6d113c3906 100644
--- a/data/api/v2/full_spec.yaml
+++ b/data/api/v2/full_spec.yaml
@@ -467,6 +467,13 @@ components:
required: false
schema:
$ref: '#/components/schemas/RelationType'
+ FilterStatusQueryParameter:
+ description: Filter subscriptions by status.
+ in: query
+ name: filter[status]
+ required: false
+ schema:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionStatus'
FromTimestamp:
description: The starting timestamp for the SLO status query in epoch seconds.
in: query
@@ -844,6 +851,26 @@ components:
example: f9ec96b0-8c8a-4b0a-9b0a-1b2c3d4e5f6a
format: uuid
type: string
+ PageIDPathParameter:
+ description: The ID of the status page.
+ in: path
+ name: page_id
+ required: true
+ schema:
+ example: ed50804f-f823-4d2c-ba56-c998cbd0ae0a
+ format: uuid
+ type: string
+ PageLimitQueryParameter:
+ description: The maximum number of items to return per page.
+ in: query
+ name: page[limit]
+ required: false
+ schema:
+ default: 1000
+ example: 1000
+ format: int64
+ maximum: 1000
+ type: integer
PageNumber:
description: Specific page number to return.
in: query
@@ -864,6 +891,16 @@ components:
example: 0
format: int64
type: integer
+ PageOffsetQueryParameter:
+ description: The offset for pagination.
+ in: query
+ name: page[offset]
+ required: false
+ schema:
+ default: 0
+ example: 0
+ format: int64
+ type: integer
PageSize:
description: Size for a given page. The maximum allowed value is 100.
in: query
@@ -1138,6 +1175,26 @@ components:
schema:
example: 00000000-0000-0000-0000-000000000000
type: string
+ SortQueryParameter:
+ description: Sort field for the list of subscriptions. Prefix with '-' for descending
+ order.
+ in: query
+ name: sort
+ required: false
+ schema:
+ default: created_at
+ enum:
+ - created_at
+ - -created_at
+ - modified_at
+ - -modified_at
+ example: created_at
+ type: string
+ x-enum-varnames:
+ - CREATED_AT
+ - NOT_CREATED_AT
+ - MODIFIED_AT
+ - NOT_MODIFIED_AT
SpansMetricIDParameter:
description: The name of the span-based metric.
in: path
@@ -60857,6 +60914,15 @@ components:
- type
- id
type: object
+ StatusPageComponentType:
+ default: status_page_components
+ description: Status page component resource type.
+ enum:
+ - status_page_components
+ example: status_page_components
+ type: string
+ x-enum-varnames:
+ - STATUS_PAGE_COMPONENTS
StatusPageData:
properties:
attributes:
@@ -61029,6 +61095,258 @@ components:
type: string
x-enum-varnames:
- STATUS_PAGES
+ StatusPageEmailSubscriptionRequest:
+ description: Request to create an email subscription.
+ properties:
+ data:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionRequestData'
+ required:
+ - data
+ type: object
+ StatusPageEmailSubscriptionRequestAttributes:
+ description: The email subscription attributes for a request.
+ properties:
+ email_address:
+ description: The email address to subscribe.
+ example: test@example.com
+ type: string
+ required:
+ - email_address
+ type: object
+ StatusPageEmailSubscriptionRequestData:
+ description: Email subscription data for a request.
+ properties:
+ attributes:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionRequestAttributes'
+ relationships:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionRequestRelationships'
+ type:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionType'
+ required:
+ - type
+ - attributes
+ type: object
+ StatusPageEmailSubscriptionRequestRelationships:
+ description: The email subscription relationships for a request.
+ properties:
+ subscribed_components:
+ $ref: '#/components/schemas/StatusPageRelationshipSubscribedComponents'
+ type: object
+ StatusPageEmailSubscriptionResponse:
+ description: Response containing a single email subscription.
+ properties:
+ data:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionResponseData'
+ required:
+ - data
+ type: object
+ StatusPageEmailSubscriptionResponseAttributes:
+ description: The email subscription attributes from a response.
+ properties:
+ created_at:
+ description: Timestamp when the subscription was created.
+ example: '2026-01-13T17:18:16.290086Z'
+ format: date-time
+ type: string
+ email_address:
+ description: The email address subscribed to the status page.
+ example: test+active@example.com
+ type: string
+ modified_at:
+ description: Timestamp when the subscription was last modified.
+ example: '2026-01-13T17:18:16.290086Z'
+ format: date-time
+ type: string
+ status:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionStatus'
+ required:
+ - email_address
+ - status
+ - created_at
+ - modified_at
+ type: object
+ StatusPageEmailSubscriptionResponseData:
+ description: Email subscription data from a response.
+ properties:
+ attributes:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionResponseAttributes'
+ id:
+ description: The email subscription ID.
+ example: 19121f53-04ae-4913-a7fd-64bcc2f812c2
+ format: uuid
+ type: string
+ relationships:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionResponseRelationships'
+ type:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionType'
+ required:
+ - id
+ - type
+ - attributes
+ - relationships
+ type: object
+ StatusPageEmailSubscriptionResponseRelationships:
+ description: The email subscription relationships from a response.
+ properties:
+ status_page:
+ $ref: '#/components/schemas/StatusPageRelationshipStatusPage'
+ subscribed_components:
+ $ref: '#/components/schemas/StatusPageRelationshipSubscribedComponents'
+ required:
+ - status_page
+ - subscribed_components
+ type: object
+ StatusPageEmailSubscriptionStatus:
+ description: Status of the email subscription.
+ enum:
+ - active
+ - unconfirmed
+ example: active
+ type: string
+ x-enum-varnames:
+ - ACTIVE
+ - UNCONFIRMED
+ StatusPageEmailSubscriptionType:
+ default: email_subscriptions
+ description: Status page email subscription resource type.
+ enum:
+ - email_subscriptions
+ example: email_subscriptions
+ type: string
+ x-enum-varnames:
+ - EMAIL_SUBSCRIPTIONS
+ StatusPageEmailSubscriptionsRequest:
+ description: Request to import multiple email subscriptions.
+ properties:
+ data:
+ description: List of email subscriptions to import.
+ items:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionRequestData'
+ type: array
+ required:
+ - data
+ type: object
+ StatusPageEmailSubscriptionsResponse:
+ description: Response containing a list of email subscriptions.
+ properties:
+ data:
+ description: List of email subscriptions.
+ items:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionResponseData'
+ type: array
+ meta:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionsResponseMeta'
+ required:
+ - data
+ - meta
+ type: object
+ StatusPageEmailSubscriptionsResponseMeta:
+ description: Metadata for the list of email subscriptions.
+ properties:
+ page:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionsResponseMetaPage'
+ required:
+ - page
+ type: object
+ StatusPageEmailSubscriptionsResponseMetaPage:
+ description: Pagination metadata.
+ properties:
+ first_offset:
+ description: The offset of the first page.
+ example: 0
+ format: int64
+ type: integer
+ last_offset:
+ description: The offset of the last page.
+ example: 0
+ format: int64
+ type: integer
+ limit:
+ description: The maximum number of items per page.
+ example: 1000
+ format: int64
+ type: integer
+ next_offset:
+ description: The offset of the next page.
+ example: null
+ format: int64
+ nullable: true
+ type: integer
+ offset:
+ description: The current offset.
+ example: 0
+ format: int64
+ type: integer
+ prev_offset:
+ description: The offset of the previous page.
+ example: null
+ format: int64
+ nullable: true
+ type: integer
+ total:
+ description: The total number of items.
+ example: 1
+ format: int64
+ type: integer
+ type:
+ description: The pagination type.
+ example: offset_limit
+ type: string
+ required:
+ - type
+ - offset
+ - limit
+ - total
+ - first_offset
+ - last_offset
+ type: object
+ StatusPageRelationshipStatusPage:
+ description: Relationship to the status page.
+ properties:
+ data:
+ $ref: '#/components/schemas/StatusPageRelationshipStatusPageData'
+ required:
+ - data
+ type: object
+ StatusPageRelationshipStatusPageData:
+ description: Status page relationship data.
+ properties:
+ id:
+ description: The status page ID.
+ example: ed50804f-f823-4d2c-ba56-c998cbd0ae0a
+ format: uuid
+ type: string
+ type:
+ $ref: '#/components/schemas/StatusPageDataType'
+ required:
+ - id
+ - type
+ type: object
+ StatusPageRelationshipSubscribedComponentData:
+ description: Subscribed component relationship data.
+ properties:
+ id:
+ description: The component ID.
+ example: 00000000-0000-0000-0000-000000000000
+ format: uuid
+ type: string
+ type:
+ $ref: '#/components/schemas/StatusPageComponentType'
+ required:
+ - id
+ - type
+ type: object
+ StatusPageRelationshipSubscribedComponents:
+ description: Relationship to subscribed components.
+ properties:
+ data:
+ description: List of subscribed components.
+ items:
+ $ref: '#/components/schemas/StatusPageRelationshipSubscribedComponentData'
+ type: array
+ required:
+ - data
+ type: object
StatusPagesComponent:
properties:
data:
@@ -100515,6 +100833,49 @@ paths:
operator: AND
permissions:
- status_pages_settings_read
+ /api/v2/statuspages/internal/{page_id}/subscriptions/email:
+ post:
+ description: Creates an internal email subscription for a status page.
+ operationId: CreateInternalEmailSubscription
+ parameters:
+ - $ref: '#/components/parameters/PageIDPathParameter'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionRequest'
+ required: true
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionResponse'
+ description: Created
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Bad Request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Forbidden
+ '429':
+ $ref: '#/components/responses/TooManyRequestsResponse'
+ security:
+ - apiKeyAuth: []
+ appKeyAuth: []
+ summary: Create an internal email subscription
+ tags:
+ - Status Pages
+ x-menu-order: 12
+ x-unstable: '**Note**: This endpoint is in preview and is subject to change.
+
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).'
/api/v2/statuspages/{page_id}:
delete:
description: Deletes a status page by its ID.
@@ -101055,6 +101416,100 @@ paths:
operator: AND
permissions:
- status_pages_incident_write
+ /api/v2/statuspages/{page_id}/subscriptions/email:
+ get:
+ description: Returns a list of email subscriptions for a status page. Supports
+ filtering by status and pagination.
+ operationId: ListEmailSubscriptions
+ parameters:
+ - $ref: '#/components/parameters/PageIDPathParameter'
+ - $ref: '#/components/parameters/FilterStatusQueryParameter'
+ - $ref: '#/components/parameters/PageOffsetQueryParameter'
+ - $ref: '#/components/parameters/PageLimitQueryParameter'
+ - $ref: '#/components/parameters/SortQueryParameter'
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionsResponse'
+ description: OK
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Bad Request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Forbidden
+ '404':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Not Found
+ '429':
+ $ref: '#/components/responses/TooManyRequestsResponse'
+ security:
+ - apiKeyAuth: []
+ appKeyAuth: []
+ summary: List email subscriptions
+ tags:
+ - Status Pages
+ x-menu-order: 13
+ x-unstable: '**Note**: This endpoint is in preview and is subject to change.
+
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).'
+ /api/v2/statuspages/{page_id}/subscriptions/email/import:
+ post:
+ description: Imports multiple email subscriptions for a status page. Accepts
+ up to 1000 subscriptions at once.
+ operationId: ImportEmailSubscriptions
+ parameters:
+ - $ref: '#/components/parameters/PageIDPathParameter'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionsRequest'
+ required: true
+ responses:
+ '201':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StatusPageEmailSubscriptionsResponse'
+ description: Created
+ '204':
+ description: No Content
+ '400':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Bad Request
+ '403':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/JSONAPIErrorResponse'
+ description: Forbidden
+ '429':
+ $ref: '#/components/responses/TooManyRequestsResponse'
+ security:
+ - apiKeyAuth: []
+ appKeyAuth: []
+ summary: Import email subscriptions
+ tags:
+ - Status Pages
+ x-menu-order: 14
+ x-unstable: '**Note**: This endpoint is in preview and is subject to change.
+
+ If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).'
/api/v2/synthetics/settings/on_demand_concurrency_cap:
get:
description: Get the on-demand concurrency cap.
diff --git a/data/api/v2/translate_actions.json b/data/api/v2/translate_actions.json
index 396f33cbc4d..3d670c43780 100644
--- a/data/api/v2/translate_actions.json
+++ b/data/api/v2/translate_actions.json
@@ -3652,6 +3652,12 @@
"description": "Lists all degradations for the organization. Optionally filter by status and page.",
"summary": "List degradations"
},
+ "CreateInternalEmailSubscription": {
+ "description": "Creates an internal email subscription for a status page.",
+ "summary": "Create an internal email subscription",
+ "request_description": "",
+ "request_schema_description": "Request to create an email subscription."
+ },
"DeleteStatusPage": {
"description": "Deletes a status page by its ID.",
"summary": "Delete status page"
@@ -3710,6 +3716,16 @@
"request_description": "",
"request_schema_description": ""
},
+ "ListEmailSubscriptions": {
+ "description": "Returns a list of email subscriptions for a status page. Supports filtering by status and pagination.",
+ "summary": "List email subscriptions"
+ },
+ "ImportEmailSubscriptions": {
+ "description": "Imports multiple email subscriptions for a status page. Accepts up to 1000 subscriptions at once.",
+ "summary": "Import email subscriptions",
+ "request_description": "",
+ "request_schema_description": "Request to import multiple email subscriptions."
+ },
"GetOnDemandConcurrencyCap": {
"description": "Get the on-demand concurrency cap.",
"summary": "Get the on-demand concurrency cap"