Sorry MCP by usefulapi
Read status pages and incidents; make confirmed public changes and manage individual subscribers.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"sorry-app": {
"url": "https://sorry-app.usefulapi.io/mcp"
}
}
}Remote endpoints
https://sorry-app.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (21)
🟢sorryapp_list_pages
List the status pages the API token's user can access: id, name, state (operational/degraded/...), timezone, locale, support contacts, notification channels. The id is the page_id every other tool takes. Sorry: GET /v1/pages.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_get_page(page_id, include)
Get one status page, optionally with related resources embedded (brand, components, custom_domain, notices, notices.updates, theme). Sorry: GET /v1/pages/{page_id}?include=...
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"include": {
"description": "Related resources to embed in the reply.",
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"brand",
"components",
"custom_domain",
"notices",
"notices.updates",
"notices.components",
"theme"
]
}
}
},
"required": [
"page_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_components(page_id)
List a status page's components (the parts of your service shown on the page): id, name, description, state (operational/degraded/partially-degraded), position, parent_id. Sorry: GET /v1/pages/{page_id}/components.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
}
},
"required": [
"page_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_get_component(page_id, component_id)
Get one component of a status page. Sorry: GET /v1/pages/{page_id}/components/{component_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"component_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The component id."
}
},
"required": [
"page_id",
"component_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_notices(page_id, state, type, subject_contains, created_after, ...)
List a status page's notices (incidents = type unplanned, maintenance = type planned): id, type, state, timeline_state, subject, synopsis, began/ended times, public link. Optional filters and embedded updates/components. Sorry: GET /v1/pages/{page_id}/notices.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"state": {
"description": "Only notices in this state (planned: scheduled, cancelled, underway, complete; unplanned: investigating, identified, recovering, resolved, false_alarm).",
"type": "string",
"enum": [
"scheduled",
"cancelled",
"underway",
"complete",
"investigating",
"identified",
"recovering",
"resolved",
"false_alarm"
]
},
"type": {
"description": "planned = maintenance, unplanned = incident.",
"type": "string",
"enum": [
"planned",
"unplanned"
]
},
"subject_contains": {
"description": "Only notices whose subject contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"created_after": {
"description": "Only notices created after this ISO 8601 date or datetime.",
"type": "string",
"minLength": 4,
"maxLength": 40
},
"include": {
"description": "Embed each notice's components and/or updates.",
"maxItems": 2,
"type": "array",
"items": {
"type": "string",
"enum": [
"components",
"updates"
]
}
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 10000
}
},
"required": [
"page_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_get_notice(page_id, notice_id, include)
Get one notice (incident or maintenance) with its state, times and public link. Sorry: GET /v1/pages/{page_id}/notices/{notice_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"notice_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The notice id."
},
"include": {
"description": "Embed the notice's components and/or updates.",
"maxItems": 2,
"type": "array",
"items": {
"type": "string",
"enum": [
"components",
"updates"
]
}
}
},
"required": [
"page_id",
"notice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_notice_updates(page_id, notice_id)
List the updates (timeline comments) of one notice: id, content, should_publish, public link, times. Sorry: GET /v1/pages/{page_id}/notices/{notice_id}/updates.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"notice_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The notice id."
}
},
"required": [
"page_id",
"notice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_get_notice_update(page_id, notice_id, update_id)
Get one update of a notice. Sorry: GET /v1/pages/{page_id}/notices/{notice_id}/updates/{update_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"notice_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The notice id."
},
"update_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The update id."
}
},
"required": [
"page_id",
"notice_id",
"update_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_notice_templates(page_id, name_contains, component_name_contains)
List the page's notice templates (reusable subject + opening comment for new incidents or maintenance): id, name, subject, initial_comment, optional component_id. Returns the vendor-default template page; paging controls are withheld pending a verified request contract. Sorry: GET /v1/pages/{page_id}/notice_templates.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"name_contains": {
"description": "Only templates whose name contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"component_name_contains": {
"description": "Only templates scoped to a component whose name contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"page_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_update_templates(page_id, name_contains, component_name_contains)
List the page's update templates (reusable text for one notice update): id, name, content, optional component_id. Returns the vendor-default template page; paging controls are withheld pending a verified request contract. Sorry: GET /v1/pages/{page_id}/update_templates.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"name_contains": {
"description": "Only templates whose name contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"component_name_contains": {
"description": "Only templates scoped to a component whose name contains this text.",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"page_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_subscribers(page_id, component_id, include, page, per_page)
List a status page's subscribers (people and channels notified of notices): id, email, phone number, name, company, tags, created time. Webhook URLs of Slack/Teams subscribers are redacted. Contains personal data. Sorry: GET /v1/pages/{page_id}/subscribers.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"component_id": {
"description": "Only subscribers to this component (plus those subscribed to all components).",
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
},
"include": {
"description": "Embed each subscriber's components.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"components"
]
}
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"per_page": {
"description": "Results per page (Sorry's default for subscribers is 500).",
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"page_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_get_subscriber(page_id, subscriber_id)
Get one subscriber of a status page (personal data; webhook URLs redacted). Sorry: GET /v1/pages/{page_id}/subscribers/{subscriber_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"subscriber_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The subscriber id."
}
},
"required": [
"page_id",
"subscriber_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢sorryapp_list_timezones
List the timezone names Sorry accepts for a status page (name and GMT offset label). Sorry: GET /v1/timezones.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_create_component(page_id, confirm, name, description)
WRITE: add a component to a status page. It appears on the PUBLIC status page immediately, as operational. Sorry: POST /v1/pages/{page_id}/components.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Component name, e.g. API."
},
"description": {
"description": "Optional text shown next to the name.",
"type": "string",
"maxLength": 1000
}
},
"required": [
"page_id",
"confirm",
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_update_component(page_id, confirm, component_id, name, description)
WRITE: rename a component or change its description on the PUBLIC status page (overwrites the previous value). It cannot change the component's state: state follows open notices (use the notice tools). Sorry: PATCH /v1/pages/{page_id}/components/{component_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"component_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The component id."
},
"name": {
"description": "New name.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"description": {
"description": "New description.",
"type": "string",
"maxLength": 1000
}
},
"required": [
"page_id",
"confirm",
"component_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_create_incident(page_id, confirm, subject, initial_comment, component_ids, ...)
WRITE: open an incident (an unplanned notice) on the status page. These changes are PUBLIC on the status page, including publish=false. publish=true additionally requests delivery to subscribers and integrations (email, SMS, Slack, Teams, X); vendor SMS/notification charges may apply. Confirm the content and audience first. It marks the listed components degraded on the PUBLIC page. Starts in the investigating state. Sorry: POST /v1/pages/{page_id}/notices with type=unplanned.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Incident title, e.g. API performance issues."
},
"initial_comment": {
"description": "First update shown on the incident (public).",
"type": "string",
"maxLength": 10000
},
"component_ids": {
"description": "Ids of the affected components (from sorryapp_list_components). While the notice is open they show as degraded.",
"maxItems": 100,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
}
},
"publish": {
"description": "should_publish: true also sends this out to subscribers and integrations (email, SMS, Slack, Teams, X). Default false: sent as should_publish=false to suppress the requested broadcast. The notice/change is still public; this does not make a private draft.",
"type": "boolean"
}
},
"required": [
"page_id",
"confirm",
"subject"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_create_maintenance(page_id, confirm, subject, initial_comment, begins_at_date, ...)
WRITE: schedule maintenance (a planned notice) on the status page. These changes are PUBLIC on the status page, including publish=false. publish=true additionally requests delivery to subscribers and integrations (email, SMS, Slack, Teams, X); vendor SMS/notification charges may apply. Confirm the content and audience first. Sorry: POST /v1/pages/{page_id}/notices with type=planned.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 255,
"description": "Maintenance title."
},
"initial_comment": {
"description": "First update shown on the notice (public).",
"type": "string",
"maxLength": 10000
},
"begins_at_date": {
"description": "Start date, YYYY-MM-DD (in the status page's timezone).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"begins_at_time": {
"description": "Start time, 24-hour HH:MM:SS.",
"type": "string",
"pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"
},
"duration_in_minutes": {
"description": "Expected length of the maintenance in minutes.",
"type": "integer",
"minimum": 1,
"maximum": 525600
},
"should_automate_schedule": {
"description": "true: Sorry moves the notice to underway and complete at the scheduled times.",
"type": "boolean"
},
"component_ids": {
"description": "Ids of the affected components (from sorryapp_list_components). While the notice is open they show as degraded.",
"maxItems": 100,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
}
},
"publish": {
"description": "should_publish: true also sends this out to subscribers and integrations (email, SMS, Slack, Teams, X). Default false: sent as should_publish=false to suppress the requested broadcast. The notice/change is still public; this does not make a private draft.",
"type": "boolean"
}
},
"required": [
"page_id",
"confirm",
"subject"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_update_notice(page_id, confirm, notice_id, state, subject, ...)
WRITE: change a notice: its subject, state (for example resolved), affected components, schedule, and/or add a comment (an update) to its timeline. These changes are PUBLIC on the status page, including publish=false. publish=true additionally requests delivery to subscribers and integrations (email, SMS, Slack, Teams, X); vendor SMS/notification charges may apply. Confirm the content and audience first. Fields you pass overwrite the previous values. Sorry: PATCH /v1/pages/{page_id}/notices/{notice_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"notice_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The notice id."
},
"state": {
"description": "New state. Planned: scheduled, cancelled, underway, complete. Unplanned: investigating, identified, recovering, resolved, false_alarm.",
"type": "string",
"enum": [
"scheduled",
"cancelled",
"underway",
"complete",
"investigating",
"identified",
"recovering",
"resolved",
"false_alarm"
]
},
"subject": {
"description": "New subject.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"additional_comment": {
"description": "A new public update to add to the notice timeline. publish controls the requested subscriber/integration broadcast; false still changes the public page.",
"type": "string",
"maxLength": 10000
},
"component_ids": {
"description": "Ids of the affected components (from sorryapp_list_components). While the notice is open they show as degraded.",
"maxItems": 100,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
}
},
"begins_at_date": {
"description": "Planned notices only: new start date YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"begins_at_time": {
"description": "Planned notices only: new start time HH:MM:SS.",
"type": "string",
"pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$"
},
"duration_in_minutes": {
"description": "Planned notices only: new duration in minutes.",
"type": "integer",
"minimum": 1,
"maximum": 525600
},
"publish": {
"description": "should_publish: true also sends this out to subscribers and integrations (email, SMS, Slack, Teams, X). Default false: sent as should_publish=false to suppress the requested broadcast. The notice/change is still public; this does not make a private draft.",
"type": "boolean"
}
},
"required": [
"page_id",
"confirm",
"notice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_create_notice_update(page_id, notice_id, content, confirm_publish)
WRITE: add one update (a comment) to a notice's timeline. It is PUBLIC on the status page, and Sorry's docs say a new update is also published to the page's configured integrations (email, SMS, Slack, Teams, X). The docs list no switch to suppress that on this endpoint, so confirm_publish=true is required; this endpoint has no exposed suppression switch. Sorry: POST /v1/pages/{page_id}/notices/{notice_id}/updates.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"notice_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The notice id."
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 10000,
"description": "The update text."
},
"confirm_publish": {
"type": "boolean",
"const": true,
"description": "Must be true. Confirms you understand the update is published on the PUBLIC status page and pushed to subscribers and configured integrations (email, SMS, Slack, Teams, X): Sorry's docs offer no way to add an update without that."
}
},
"required": [
"page_id",
"notice_id",
"content",
"confirm_publish"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_edit_notice_update(page_id, confirm, notice_id, update_id, content)
WRITE: rewrite the text of an existing notice update on the PUBLIC status page (overwrites the previous text; the old text is not kept). Sorry: PATCH /v1/pages/{page_id}/notices/{notice_id}/updates/{update_id}.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"notice_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The notice id."
},
"update_id": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
],
"description": "The update id."
},
"content": {
"type": "string",
"minLength": 1,
"maxLength": 10000,
"description": "The new text."
}
},
"required": [
"page_id",
"confirm",
"notice_id",
"update_id",
"content"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴sorryapp_create_subscriber(page_id, confirm, email, phone_number, component_ids)
WRITE: add ONE subscriber (an email address and/or a phone number) to a status page. From then on that person is emailed/texted about notices published on the page, and Sorry may send them a confirmation. Add only people who asked to be notified. No bulk import. Sorry: POST /v1/pages/{page_id}/subscribers.
Input Schema
{
"type": "object",
"properties": {
"page_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "The status page id, e.g. 12ab34cd (from sorryapp_list_pages)."
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved this public status change or subscriber addition and any requested notification."
},
"email": {
"description": "The subscriber's email address.",
"type": "string",
"maxLength": 254,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone_number": {
"description": "Phone number with the international country code, e.g. +441234567890.",
"type": "string",
"pattern": "^\\+[0-9 ()-]{6,20}$"
},
"component_ids": {
"description": "Subscribe to only these components (default: all components).",
"maxItems": 100,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 64
},
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
]
}
}
},
"required": [
"page_id",
"confirm"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence