Skip to main content

Check out Port for yourselfย 

Examples

To view and test the integration's mapping against examples of the third-party API responses, use the jq playground in your data sources page. Find the integration in the list of data sources and click on it to open the playground.

Pageโ€‹

Page blueprint (Click to expand)
{
"identifier": "statuspage",
"title": "Status Page",
"description": "A Statuspage for communicating service status and incidents.",
"schema": {
"properties": {
"page_description": {
"type": "string",
"title": "Page Description",
"description": "Description of the page (optional)."
},
"headline": {
"type": "string",
"title": "Headline",
"description": "A short headline for the Statuspage (optional)."
},
"branding": {
"type": "string",
"title": "Branding",
"description": "Branding level of the Statuspage (e.g., 'basic')."
},
"status_indicator": {
"type": "string",
"title": "Status Indicator",
"enum": ["none", "minor", "major", "critical"],
"enumColors": {
"none": "green",
"minor": "yellow",
"major": "orange",
"critical": "red"
},
"description": "The current status of the page."
},
"status_description": {
"type": "string",
"title": "Status Description",
"description": "Description of the current status (optional)."
},
"subdomain": {
"type": "string",
"title": "Subdomain",
"description": "The subdomain used for the Statuspage URL (e.g., 'appcellon')."
},
"domain": {
"type": "string",
"title": "Custom Domain",
"description": "Custom domain name for the Statuspage (optional)."
},
"url": {
"type": "string",
"format": "url",
"title": "Statuspage URL",
"description": "Full URL of the Statuspage (optional)."
},
"allow_page_subscribers": {
"type": "boolean",
"title": "Allow Page Subscribers",
"description": "Whether to allow users to subscribe to page updates."
},
"allow_incident_subscribers": {
"type": "boolean",
"title": "Allow Incident Subscribers",
"description": "Whether to allow users to subscribe to specific incidents."
},
"allow_email_subscribers": {
"type": "boolean",
"title": "Allow Email Subscribers",
"description": "Whether to allow email subscriptions."
},
"allow_sms_subscribers": {
"type": "boolean",
"title": "Allow SMS Subscribers",
"description": "Whether to allow SMS subscriptions."
},
"allow_rss_atom_feeds": {
"type": "boolean",
"title": "Allow RSS/Atom Feeds",
"description": "Whether to allow RSS or Atom feeds."
},
"allow_webhook_subscribers": {
"type": "boolean",
"title": "Allow Webhook Subscribers",
"description": "Whether to allow webhook subscriptions."
},
"time_zone": {
"type": "string",
"title": "Time Zone",
"description": "The time zone used for the Statuspage."
},
"createdAt": {
"type": "string",
"format": "date-time",
"title": "Created At",
"description": "When the Statuspage was created."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"title": "Last Updated At",
"description": "When the Statuspage was last updated."
}
}
},
"calculationProperties": {},
"aggregationProperties": {
"criticalOpenIssues": {
"title": "Services with Degraded Performance",
"type": "number",
"target": "statuspageComponent",
"query": {
"combinator": "and",
"rules": [
{
"property": "status",
"operator": "=",
"value": "degraded_performance"
}
]
},
"calculationSpec": {
"calculationBy": "entities",
"func": "count"
}
}
}
}
Integration configuration (Click to expand)
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: statuspage
selector:
query: "true"
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"statuspage"'
properties:
page_description: .page_description
headline: .headline
branding: .branding
status_indicator: .status_indicator
status_description: .status_description
subdomain: .subdomain
domain: .domain
url: .url
allow_page_subscribers: .allow_page_subscribers
allow_incident_subscribers: .allow_incident_subscribers
allow_email_subscribers: .allow_email_subscribers
allow_sms_subscribers: .allow_sms_subscribers
allow_rss_atom_feeds: .allow_rss_atom_feeds
allow_webhook_subscribers: .allow_webhook_subscribers
time_zone: .time_zone
createdAt: .created_at
updatedAt: .updated_at

Component Groupโ€‹

Component Group blueprint (Click to expand)
{
"identifier": "statuspageComponentGroup",
"title": "Statuspage Component Group",
"description": "A group of related components on a Statuspage.",
"schema": {
"properties": {
"description": {
"type": "string",
"title": "Description",
"description": "Description of the group (optional)."
},
"position": {
"type": "number",
"title": "Position",
"description": "Order of the group on the Statuspage."
},
"createdAt": {
"type": "string",
"format": "date-time",
"title": "Created At",
"description": "When the group was created."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"title": "Last Updated At",
"description": "When the group was last updated."
}
}
},
"calculationProperties": {},
"relations": {
"statuspage": {
"target": "statuspage",
"required": false,
"title": "Status Page",
"many": false
}
}
}
Integration configuration (Click to expand)
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: component_group
selector:
query: "true"
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"statuspageComponentGroup"'
properties:
description: .description
position: .position
createdAt: .created_at
updatedAt: .updated_at
relations:
statuspage: .page_id

Componentโ€‹

Component blueprint (Click to expand)
{
"identifier": "statuspageComponent",
"title": "Statuspage Component",
"icon": "Box",
"description": "A component representing a specific part of a system or service on a Statuspage.",
"schema": {
"properties": {
"description": {
"type": "string",
"title": "Description",
"description": "Description of the component (optional)."
},
"status": {
"type": "string",
"title": "Current Status",
"enum": [
"operational",
"degraded_performance",
"partial_outage",
"major_outage"
],
"enumColors": {
"operational": "green",
"degraded_performance": "yellow",
"partial_outage": "orange",
"major_outage": "red"
},
"description": "The operational status of the component."
},
"position": {
"type": "number",
"title": "Position",
"description": "Order of the component within its group."
},
"showcase": {
"type": "boolean",
"title": "Showcase",
"description": "Whether to display the component prominently."
},
"only_show_if_degraded": {
"type": "boolean",
"title": "Only Show If Degraded",
"description": "Whether to display the component only when degraded."
},
"startDate": {
"type": "string",
"format": "date-time",
"title": "Start Date",
"description": "The date when the component tracking started."
},
"createdAt": {
"type": "string",
"format": "date-time",
"title": "Created At",
"description": "When the component was created."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"title": "Last Updated At",
"description": "When the component was last updated."
}
}
},
"calculationProperties": {},
"relations": {
"componentGroup": {
"target": "statuspageComponentGroup",
"required": false,
"title": "Component Group",
"many": false
},
"statuspage": {
"target": "statuspage",
"required": false,
"title": "Status Page",
"many": false
}
}
}
Integration configuration (Click to expand)
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: component
selector:
query: ".group == false"
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"statuspageComponent"'
properties:
description: .description
position: .position
status: .status
showcase: .showcase
only_show_if_degraded: .only_show_if_degraded
startDate: '.start_date | if . == null then null else (strptime("%Y-%m-%d") | todateiso8601) end'
createdAt: .created_at
updatedAt: .updated_at
relations:
componentGroup: .group_id
statuspage: .page_id

Incidentโ€‹

Incident blueprint (Click to expand)
{
"identifier": "statuspageIncident",
"title": "Statuspage Incident",
"icon": "Alert",
"description": "An incident reported on a Statuspage.",
"schema": {
"properties": {
"status": {
"type": "string",
"title": "Current Status",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved",
"postmortem",
"scheduled",
"in_progress",
"verifying",
"completed"
],
"enumColors": {
"investigating": "blue",
"identified": "orange",
"monitoring": "yellow",
"resolved": "green",
"postmortem": "purple",
"scheduled": "lightGray",
"in_progress": "blue",
"verifying": "yellow",
"completed": "green"
},
"description": "Current status of the incident."
},
"impact": {
"type": "string",
"title": "Impact",
"enum": ["none", "minor", "major", "critical"],
"enumColors": {
"none": "green",
"minor": "yellow",
"major": "orange",
"critical": "red"
},
"description": "The impact level of the incident."
},
"createdAt": {
"type": "string",
"format": "date-time",
"title": "Created At",
"description": "When the incident was first reported."
},
"updatedAt": {
"type": "string",
"format": "date-time",
"title": "Last Updated At",
"description": "When the incident was last updated."
},
"startedAt": {
"type": "string",
"format": "date-time",
"title": "Started At",
"description": "When the incident actually began."
},
"resolvedAt": {
"type": "string",
"format": "date-time",
"title": "Resolved At",
"description": "When the incident was resolved (null if ongoing)."
},
"shortlink": {
"type": "string",
"format": "url",
"title": "Short Link",
"description": "A shortened URL for sharing the incident status page."
},
"postmortemPublishedAt": {
"type": "string",
"format": "date-time",
"title": "Postmortem Published At",
"description": "When the postmortem analysis was published (null if not yet published)."
},
"scheduled_for": {
"type": "string",
"format": "date-time",
"title": "Scheduled For",
"description": "Start time for a scheduled incident (null if not scheduled)."
},
"scheduled_until": {
"type": "string",
"format": "date-time",
"title": "Scheduled Until",
"description": "End time for a scheduled incident (null if not scheduled)."
},
"scheduled_remind_prior": {
"type": "boolean",
"title": "Scheduled Remind Prior",
"description": "Whether to send a reminder before a scheduled incident."
},
"scheduled_reminded_at": {
"type": "string",
"format": "date-time",
"title": "Scheduled Reminded At",
"description": "When the reminder for a scheduled incident was sent (null if not applicable)."
},
"scheduled_auto_in_progress": {
"type": "boolean",
"title": "Scheduled Auto In Progress",
"description": "Whether to automatically transition the incident to 'in progress'."
},
"scheduled_auto_completed": {
"type": "boolean",
"title": "Scheduled Auto Completed",
"description": "Whether to automatically mark the incident as completed."
},
"metadata": {
"type": "object",
"title": "Metadata",
"description": "Custom metadata associated with the incident."
},
"reminder_intervals": {
"type": "string",
"title": "Reminder Intervals",
"description": "Intervals for sending reminders for a scheduled incident (null if not applicable)."
},
"postmortem_body": {
"type": "string",
"format": "markdown",
"title": "Postmortem",
"description": "The content of the postmortem analysis."
},
"postmortem_body_last_updated_at": {
"type": "string",
"format": "date-time",
"title": "Postmortem Last Updated At",
"description": "When the postmortem body was last updated (null if not applicable)."
},
"postmortem_ignored": {
"type": "boolean",
"title": "Postmortem Ignored",
"description": "Whether the postmortem has been ignored."
},
"postmortem_published_at": {
"type": "string",
"format": "date-time",
"title": "Postmortem Published At",
"description": "When the postmortem was published (null if not yet published)."
},
"postmortem_notified_subscribers": {
"type": "boolean",
"title": "Postmortem Notified Subscribers",
"description": "Whether subscribers were notified about the postmortem."
},
"postmortem_notified_twitter": {
"type": "boolean",
"title": "Postmortem Notified Twitter",
"description": "Whether the postmortem was announced on Twitter."
}
}
},
"calculationProperties": {
"category": {
"title": "Category",
"description": "Category of Incident",
"calculation": ".properties | .status as $status | if ($status | IN(\"scheduled\", \"in_progress\", \"verifying\", \"completed\")) then \"maintenance\" else \"incident\" end",
"type": "string",
"colorized": true,
"colors": {
"maintenance": "bronze",
"incident": "red"
}
}
},
"relations": {
"components": {
"target": "statuspageComponent",
"required": false,
"title": "Affected Components",
"many": true
},
"statuspage": {
"target": "statuspage",
"required": false,
"title": "Status Page",
"many": false
}
}
}
Integration configuration (Click to expand)
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: incident
selector:
query: "true"
port:
entity:
mappings:
identifier: .id
title: .name
blueprint: '"statuspageIncident"'
properties:
status: .status
impact: .impact
createdAt: .created_at
updatedAt: .updated_at
startedAt: .started_at
resolvedAt: .resolved_at
shortlink: .shortlink
scheduled_for: .scheduled_for
scheduled_until: .scheduled_until
scheduled_remind_prior: .scheduled_remind_prior
scheduled_reminded_at: .scheduled_reminded_at
impact_override: .impact_override
scheduled_auto_in_progress: .scheduled_auto_in_progress
scheduled_auto_completed: .scheduled_auto_completed
metadata: .metadata
reminder_intervals: .reminder_intervals
postmortem_body: .postmortem_body
postmortem_body_last_updated_at: .postmortem_body_last_updated_at
postmortem_ignored: .postmortem_ignored
postmortem_published_at: .postmortem_published_at
postmortem_notified_subscribers: .postmortem_notified_subscribers
postmortem_notified_twitter: .postmortem_notified_twitter
relations:
components: "[.components[].id]"
statuspage: .page_id

Incident Updateโ€‹

Incident Update blueprint (Click to expand)
{
"identifier": "statuspageIncidentUpdate",
"title": "Statuspage Incident Update",
"icon": "Alert",
"description": "An update to a Statuspage incident.",
"schema": {
"properties": {
"status": {
"type": "string",
"title": "Update Status",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved",
"postmortem",
"scheduled",
"in_progress",
"verifying",
"completed"
],
"enumColors": {
"investigating": "blue",
"identified": "orange",
"monitoring": "yellow",
"resolved": "green",
"postmortem": "purple",
"scheduled": "lightGray",
"in_progress": "blue",
"verifying": "yellow",
"completed": "green"
},
"description": "The status of the incident at the time of the update."
},
"body": {
"type": "string",
"title": "Update",
"description": "The message content of the update."
},
"createdAt": {
"type": "string",
"format": "date-time",
"title": "Created At",
"description": "When the update was created."
},
"displayAt": {
"type": "string",
"format": "date-time",
"title": "Display At",
"description": "When the update was displayed on the Statuspage."
},
"deliverNotifications": {
"type": "boolean",
"title": "Deliver Notifications",
"description": "Whether notifications were sent for this update."
},
"wantsTwitterUpdate": {
"type": "boolean",
"title": "Wants Twitter Update",
"description": "Whether a Twitter update was requested."
},
"tweet_id": {
"type": "string",
"title": "Tweet ID",
"description": "The ID of the tweet associated with this update (if any)."
},
"custom_tweet": {
"type": "string",
"title": "Custom Tweet",
"description": "The custom text used for the tweet (if applicable)."
}
}
},
"calculationProperties": {
"category": {
"title": "Category",
"description": "Category of Incident",
"calculation": ".properties | .status as $status | if ($status | IN(\"scheduled\", \"in_progress\", \"verifying\", \"completed\")) then \"maintenance\" else \"incident\" end",
"type": "string",
"colorized": true,
"colors": {
"maintenance": "bronze",
"incident": "red"
}
}
},
"relations": {
"incident": {
"target": "statuspageIncident",
"required": true,
"title": "Incident",
"many": false
},
"affectedComponents": {
"target": "statuspageComponent",
"required": false,
"title": "Affected Components",
"many": true
}
}
}
Integration configuration (Click to expand)
createMissingRelatedEntities: true
deleteDependentEntities: true
resources:
- kind: incident_update
selector:
query: "true"
port:
entity:
mappings:
identifier: .id
title: .body
blueprint: '"statuspageIncidentUpdate"'
properties:
status: .status
body: .body
createdAt: .created_at
displayAt: .display_at
deliverNotifications: .deliver_notifications
wantsTwitterUpdate: .wants_twitter_update
tweet_id: .tweet_id
custom_tweet: .custom_tweet
relations:
incident: .incident_id
affectedComponents: "[.affected_components[].code]"