Create Status Page Component
Adds a monitor, a third-party provider or a manually maintained component to a status page.
POST /api/status-pages/{id}/components
Access
Organization admin and editor. A customer-scoped user or API token only reaches pages of a customer in its scope; a page without a customer (customerId: null) answers it with 403 (forbidden). A page of another organization answers 404 (statusPageNotFound). Path ids take the numeric id or the publicId. The change is written to the organization's audit log.
Request Body
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
sourceKind | string | Yes | - | monitor (state comes from a monitor), dependency (state comes from a third-party provider we monitor) or manual (you set the state). |
monitorType | string | With monitor | - | http, dns, icmp, smtp, ssh, tcp, ftp or imap_pop. Not allowed with manual. |
monitorId | number | With monitor | - | Numeric monitor id. Page with a customer: a monitor of that customer. Page without a customer: any monitor of your organization. Not allowed with manual. |
dependencySlug | string | With dependency | - | Slug of an active provider from GET /api/public/dependencies. Not allowed with the other kinds. |
manualStatus | string | No | operational | manual only: operational, degraded, partial_outage, major_outage or maintenance. |
name | string | With manual | monitor or provider name | Display name (1-120 chars). |
description | string|null | No | null | Max 1000 chars. |
groupId | number|string|null | No | null | Id or publicId of a group of this page. |
sort | number | No | after the last component | Position, 0-100000. |
showUptime | boolean | No | true | Show the availability bar of this component. |
A monitor can be a component of the same page only once. hiddenMonitors never hides an explicit component. When a monitor is deleted, its components disappear from every status page automatically.
A dependency component shows the overall status we publish for that provider on our public dependency monitoring: operational, degraded, partial_outage, major_outage, maintenance, or unknown while we cannot see the provider (shown as a warning, but not counted in the page's overall state). An open incident linked to the component raises its state. A provider can be a component of the same page only once; there is no availability bar. When the provider's status changes, subscribers of the page (or of this component) are notified like for a monitor incident. No monitor and no customer are needed.
Example (cURL)
BASE_URL="https://uptimeify.io"
TOKEN="<your-api-token>"
curl -X POST "$BASE_URL/api/status-pages/1/components" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sourceKind": "monitor",
"monitorType": "http",
"monitorId": 101,
"groupId": 3
}'A manual component:
curl -X POST "$BASE_URL/api/status-pages/1/components" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sourceKind": "manual",
"name": "Payment provider",
"description": "Card payments at checkout"
}'A third-party provider:
curl -X POST "$BASE_URL/api/status-pages/1/components" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sourceKind": "dependency",
"dependencySlug": "stripe"
}'Response
201 Created with the new component:
{
"id": 7,
"publicId": "0b6f3c1e-8d2a-4f5b-9c7e-1a2b3c4d5e6f",
"statusPageId": 1,
"groupId": 3,
"sort": 0,
"name": "Main Site",
"description": null,
"showUptime": true,
"sourceKind": "monitor",
"monitorType": "http",
"monitorId": 101,
"manualStatus": null,
"dependencySlug": null,
"createdAt": "2026-10-27T09:00:00.000Z",
"updatedAt": "2026-10-27T09:00:00.000Z"
}Common errors
400 Bad Request(invalidRequestBody) when a required field is missing or a field does not fitsourceKind(for examplemanualStatuson a monitor component);data.issuesnames the field400 Bad Request(statusPageComponentMonitorCustomerMismatch) when the monitor belongs to another customer than the status page400 Bad Request(invalidIdentifier) when an id in the path is neither a number nor a UUID401 Unauthorizedwhen you are not logged in403 Forbidden(forbidden) when your role may not do this, or for a customer-scoped caller on a page without a customer or of another customer403 Forbidden(statusPagesModuleDisabled) when the status pages module is not activated404 Not Found(statusPageNotFound) when the status page does not exist or belongs to another organization404 Not Found(monitorNotFound) when the monitor does not exist or belongs to another organization404 Not Found(providerNotFound) whendependencySlugis not an active provider404 Not Found(statusPageComponentGroupNotFound) whengroupIdis not a group of this page409 Conflict(statusPageComponentMonitorConflict) when the monitor already is a component of this page409 Conflict(statusPageComponentDependencyConflict) when the provider already is a component of this page409 Conflict(statusPageLimitReached, withdata.max) when the page already has 100 components