# Uptizm API > Uptizm is an uptime, incident and status-page service. This REST API lets a team API key manage monitors, custom metrics, incidents, status pages, maintenance windows, notification channels, on-call schedules and escalation policies. Base URL `https://api.uptizm.com/v1`; authenticate with `Authorization: Bearer upz_...`. Every endpoint names the ability a key needs (`x-required-ability`). Read the quickstart first: it links the guide that owns each topic. ## Guides - [Uptizm API quickstart](https://uptizm.com/docs/quickstart.md) - [Authentication](https://uptizm.com/docs/authentication.md) - [Create monitors](https://uptizm.com/docs/create-monitors.md) - [Errors](https://uptizm.com/docs/errors.md) - [Rate limits](https://uptizm.com/docs/rate-limits.md) - [Pagination](https://uptizm.com/docs/pagination.md) - [Idempotency](https://uptizm.com/docs/idempotency.md) - [Anonymous workspaces for agents](https://uptizm.com/docs/anonymous-workspaces.md) ## Reference - [API reference](https://uptizm.com/docs/api.md): Every resource and its endpoint count. - [OpenAPI spec](https://uptizm.com/docs/openapi.json): The OpenAPI 3.1 document for every endpoint below. - [Everything in one file](https://uptizm.com/llms-full.txt): The guides and every endpoint page inline. ## Resources - [Keys API](https://uptizm.com/docs/api/keys.md): 2 endpoints. - [Monitors API](https://uptizm.com/docs/api/monitors.md): 19 endpoints. - [Metrics API](https://uptizm.com/docs/api/metrics.md): 10 endpoints. - [Incidents API](https://uptizm.com/docs/api/incidents.md): 16 endpoints. - [Dashboard API](https://uptizm.com/docs/api/dashboard.md): 4 endpoints. - [Status pages API](https://uptizm.com/docs/api/status-pages.md): 16 endpoints. - [Maintenance API](https://uptizm.com/docs/api/maintenance.md): 5 endpoints. - [Channels API](https://uptizm.com/docs/api/channels.md): 6 endpoints. - [On-call API](https://uptizm.com/docs/api/on-call.md): 11 endpoints. - [Escalation API](https://uptizm.com/docs/api/escalation.md): 8 endpoints. - [Team API](https://uptizm.com/docs/api/team.md): 6 endpoints. ## Keys - [POST /claim-code](https://uptizm.com/docs/post-claim-code.md): Get a claim url for an anonymous workspace. Requires `claim:create`. - [GET /me](https://uptizm.com/docs/get-me.md): Describe the calling key. Requires `self`. ## Monitors - [POST /monitors/analyze](https://uptizm.com/docs/post-monitors-analyze.md): Start an AI analysis of a URL. Requires `monitors:write`. - [GET /monitors/analyze/{run}](https://uptizm.com/docs/get-monitors-analyze-run.md): Poll an AI analysis run. Requires `monitors:read`. - [GET /monitors](https://uptizm.com/docs/get-monitors.md): List monitors. Requires `monitors:read`. - [POST /monitors](https://uptizm.com/docs/post-monitors.md): Create a monitor. Requires `monitors:write`. - [GET /monitors/{monitor}](https://uptizm.com/docs/get-monitors-monitor.md): Get a monitor. Requires `monitors:read`. - [PUT /monitors/{monitor}](https://uptizm.com/docs/put-monitors-monitor.md): Update a monitor. Requires `monitors:write`. - [DELETE /monitors/{monitor}](https://uptizm.com/docs/delete-monitors-monitor.md): Delete a monitor. Requires `monitors:write`. - [POST /monitors/{monitor}/pause](https://uptizm.com/docs/post-monitors-monitor-pause.md): Pause a monitor. Requires `monitors:write`. - [POST /monitors/{monitor}/resume](https://uptizm.com/docs/post-monitors-monitor-resume.md): Resume a monitor. Requires `monitors:write`. - [POST /monitors/{monitor}/test](https://uptizm.com/docs/post-monitors-monitor-test.md): Run a check now. Requires `monitors:write`. - [GET /monitors/{monitor}/checks](https://uptizm.com/docs/get-monitors-monitor-checks.md): List a monitor's checks. Requires `monitors:read`. - [GET /monitors/{monitor}/checks/{check}](https://uptizm.com/docs/get-monitors-monitor-checks-check.md): Get one check. Requires `monitors:read`. - [GET /monitors/{monitor}/content](https://uptizm.com/docs/get-monitors-monitor-content.md): List archived content versions. Requires `monitors:read`. - [GET /monitors/{monitor}/content/candidates](https://uptizm.com/docs/get-monitors-monitor-content-candidates.md): List metric candidates. Requires `monitors:read`. - [GET /monitors/{monitor}/content/{contentHash}](https://uptizm.com/docs/get-monitors-monitor-content-contenthash.md): Download an archived version. Requires `monitors:read`. - [GET /monitors/{monitor}/uptime](https://uptizm.com/docs/get-monitors-monitor-uptime.md): Get uptime over a range. Requires `monitors:read`. - [GET /monitors/{monitor}/response-times](https://uptizm.com/docs/get-monitors-monitor-response-times.md): Get response times over a range. Requires `monitors:read`. - [GET /monitors/{monitor}/anomalies](https://uptizm.com/docs/get-monitors-monitor-anomalies.md): List anomalies. Requires `monitors:read`. - [GET /monitors/{monitor}/status-history](https://uptizm.com/docs/get-monitors-monitor-status-history.md): Get the 90-day status history. Requires `monitors:read`. ## Metrics - [GET /monitors/{monitor}/metrics](https://uptizm.com/docs/get-monitors-monitor-metrics.md): List a monitor's metrics. Requires `metrics:read`. - [POST /monitors/{monitor}/metrics](https://uptizm.com/docs/post-monitors-monitor-metrics.md): Create a metric. Requires `metrics:write`. - [POST /monitors/{monitor}/metrics/preview](https://uptizm.com/docs/post-monitors-monitor-metrics-preview.md): Preview a metric rule. Requires `metrics:write`. - [POST /monitors/{monitor}/metrics/discover](https://uptizm.com/docs/post-monitors-monitor-metrics-discover.md): Discover metrics with AI. Requires `metrics:write`. - [PATCH /monitors/{monitor}/metrics/reorder](https://uptizm.com/docs/patch-monitors-monitor-metrics-reorder.md): Reorder metrics. Requires `metrics:write`. - [PUT /monitors/{monitor}/metrics/{metric}](https://uptizm.com/docs/put-monitors-monitor-metrics-metric.md): Update a metric. Requires `metrics:write`. - [DELETE /monitors/{monitor}/metrics/{metric}](https://uptizm.com/docs/delete-monitors-monitor-metrics-metric.md): Delete a metric. Requires `metrics:write`. - [GET /monitors/{monitor}/metrics/series](https://uptizm.com/docs/get-monitors-monitor-metrics-series.md): Get recent samples of every metric. Requires `metrics:read`. - [GET /monitors/{monitor}/metrics/{metric}/series](https://uptizm.com/docs/get-monitors-monitor-metrics-metric-series.md): Get a metric series. Requires `metrics:read`. - [GET /monitors/{monitor}/metrics/{metric}/readings](https://uptizm.com/docs/get-monitors-monitor-metrics-metric-readings.md): List a metric's readings. Requires `metrics:read`. ## Incidents - [GET /incidents](https://uptizm.com/docs/get-incidents.md): List incidents. Requires `incidents:read`. - [POST /incidents](https://uptizm.com/docs/post-incidents.md): Open an incident. Requires `incidents:write`. - [GET /incidents/digest](https://uptizm.com/docs/get-incidents-digest.md): Get the weekly digest. Requires `incidents:read`. - [GET /incidents/{incident}](https://uptizm.com/docs/get-incidents-incident.md): Get an incident. Requires `incidents:read`. - [POST /incidents/{incident}/resolve](https://uptizm.com/docs/post-incidents-incident-resolve.md): Resolve an incident. Requires `incidents:write`. - [POST /incidents/{incident}/acknowledge](https://uptizm.com/docs/post-incidents-incident-acknowledge.md): Acknowledge an incident. Requires `incidents:write`. - [POST /incidents/{incident}/reopen](https://uptizm.com/docs/post-incidents-incident-reopen.md): Reopen an incident. Requires `incidents:write`. - [POST /incidents/{incident}/assign](https://uptizm.com/docs/post-incidents-incident-assign.md): Assign an incident. Requires `incidents:write`. - [POST /incidents/{incident}/postmortem](https://uptizm.com/docs/post-incidents-incident-postmortem.md): Save a postmortem. Requires `incidents:write`. - [POST /incidents/{incident}/updates](https://uptizm.com/docs/post-incidents-incident-updates.md): Post an incident update. Requires `incidents:write`. - [GET /incidents/{incident}/analysis](https://uptizm.com/docs/get-incidents-incident-analysis.md): Get the AI root-cause analysis. Requires `incidents:read`. - [POST /incidents/{incident}/analysis/feedback](https://uptizm.com/docs/post-incidents-incident-analysis-feedback.md): Rate the AI analysis. Requires `incidents:write`. - [POST /incidents/{incident}/draft-update](https://uptizm.com/docs/post-incidents-incident-draft-update.md): Draft a status update with AI. Requires `incidents:write`. - [POST /incidents/{incident}/draft-postmortem](https://uptizm.com/docs/post-incidents-incident-draft-postmortem.md): Draft a postmortem with AI. Requires `incidents:write`. - [POST /ai-suggestions/{suggestion}/accept](https://uptizm.com/docs/post-ai-suggestions-suggestion-accept.md): Accept an AI suggestion. Requires `incidents:write`. - [POST /ai-suggestions/{suggestion}/dismiss](https://uptizm.com/docs/post-ai-suggestions-suggestion-dismiss.md): Dismiss an AI suggestion. Requires `incidents:write`. ## Dashboard - [GET /dashboard/stats](https://uptizm.com/docs/get-dashboard-stats.md): Get team statistics. Requires `stats:read`. - [GET /dashboard/active-incidents](https://uptizm.com/docs/get-dashboard-active-incidents.md): List active incidents. Requires `stats:read`. - [GET /dashboard/monitors-snapshot](https://uptizm.com/docs/get-dashboard-monitors-snapshot.md): List the worst monitors. Requires `stats:read`. - [GET /dashboard/ai-inbox](https://uptizm.com/docs/get-dashboard-ai-inbox.md): List pending AI suggestions. Requires `stats:read`. ## Status pages - [GET /status-pages](https://uptizm.com/docs/get-status-pages.md): List status pages. Requires `status_pages:read`. - [POST /status-pages](https://uptizm.com/docs/post-status-pages.md): Create a status page. Requires `status_pages:write`. - [GET /status-pages/{statusPage}](https://uptizm.com/docs/get-status-pages-statuspage.md): Get a status page. Requires `status_pages:read`. - [PUT /status-pages/{statusPage}](https://uptizm.com/docs/put-status-pages-statuspage.md): Update a status page. Requires `status_pages:write`. - [DELETE /status-pages/{statusPage}](https://uptizm.com/docs/delete-status-pages-statuspage.md): Delete a status page. Requires `status_pages:write`. - [PATCH /status-pages/{statusPage}/monitors/reorder](https://uptizm.com/docs/patch-status-pages-statuspage-monitors-reorder.md): Reorder a page's monitors. Requires `status_pages:write`. - [POST /status-pages/{statusPage}/monitors](https://uptizm.com/docs/post-status-pages-statuspage-monitors.md): Attach a monitor to a page. Requires `status_pages:write`. - [DELETE /status-pages/{statusPage}/monitors/{monitor}](https://uptizm.com/docs/delete-status-pages-statuspage-monitors-monitor.md): Detach a monitor from a page. Requires `status_pages:write`. - [POST /status-pages/{statusPage}/logo](https://uptizm.com/docs/post-status-pages-statuspage-logo.md): Upload a page logo. Requires `status_pages:write`. - [DELETE /status-pages/{statusPage}/logo](https://uptizm.com/docs/delete-status-pages-statuspage-logo.md): Remove the page logo. Requires `status_pages:write`. - [POST /status-pages/{statusPage}/dark-logo](https://uptizm.com/docs/post-status-pages-statuspage-dark-logo.md): Upload a dark-mode logo. Requires `status_pages:write`. - [DELETE /status-pages/{statusPage}/dark-logo](https://uptizm.com/docs/delete-status-pages-statuspage-dark-logo.md): Remove the dark-mode logo. Requires `status_pages:write`. - [POST /status-pages/{statusPage}/preview](https://uptizm.com/docs/post-status-pages-statuspage-preview.md): Re-render the page preview. Requires `status_pages:write`. - [GET /status-pages/{statusPage}/subscribers](https://uptizm.com/docs/get-status-pages-statuspage-subscribers.md): List page subscribers. Requires `status_pages:read`. - [POST /status-pages/{statusPage}/subscribers](https://uptizm.com/docs/post-status-pages-statuspage-subscribers.md): Add a page subscriber. Requires `status_pages:write`. - [DELETE /status-pages/{statusPage}/subscribers/{subscriber}](https://uptizm.com/docs/delete-status-pages-statuspage-subscribers-subscriber.md): Remove a page subscriber. Requires `status_pages:write`. ## Maintenance - [GET /scheduled-maintenances](https://uptizm.com/docs/get-scheduled-maintenances.md): List maintenance windows. Requires `maintenance:read`. - [POST /scheduled-maintenances](https://uptizm.com/docs/post-scheduled-maintenances.md): Plan a maintenance window. Requires `maintenance:write`. - [GET /scheduled-maintenances/{maintenance}](https://uptizm.com/docs/get-scheduled-maintenances-maintenance.md): Get a maintenance window. Requires `maintenance:read`. - [PUT /scheduled-maintenances/{maintenance}](https://uptizm.com/docs/put-scheduled-maintenances-maintenance.md): Update a maintenance window. Requires `maintenance:write`. - [DELETE /scheduled-maintenances/{maintenance}](https://uptizm.com/docs/delete-scheduled-maintenances-maintenance.md): Delete a maintenance window. Requires `maintenance:write`. ## Channels - [GET /notification-channels](https://uptizm.com/docs/get-notification-channels.md): List notification channels. Requires `channels:read`. - [POST /notification-channels](https://uptizm.com/docs/post-notification-channels.md): Create a notification channel. Requires `channels:write`. - [GET /notification-channels/{channel}](https://uptizm.com/docs/get-notification-channels-channel.md): Get a notification channel. Requires `channels:read`. - [PUT /notification-channels/{channel}](https://uptizm.com/docs/put-notification-channels-channel.md): Update a notification channel. Requires `channels:write`. - [DELETE /notification-channels/{channel}](https://uptizm.com/docs/delete-notification-channels-channel.md): Delete a notification channel. Requires `channels:write`. - [POST /notification-channels/{channel}/test](https://uptizm.com/docs/post-notification-channels-channel-test.md): Send a test notification. Requires `channels:write`. ## On-call - [GET /on-call/current](https://uptizm.com/docs/get-on-call-current.md): Get who is on call. Requires `oncall:read`. - [GET /on-call/schedules](https://uptizm.com/docs/get-on-call-schedules.md): List on-call schedules. Requires `oncall:read`. - [POST /on-call/schedules](https://uptizm.com/docs/post-on-call-schedules.md): Create an on-call schedule. Requires `oncall:write`. - [GET /on-call/schedules/{schedule}](https://uptizm.com/docs/get-on-call-schedules-schedule.md): Get an on-call schedule. Requires `oncall:read`. - [PUT /on-call/schedules/{schedule}](https://uptizm.com/docs/put-on-call-schedules-schedule.md): Update an on-call schedule. Requires `oncall:write`. - [DELETE /on-call/schedules/{schedule}](https://uptizm.com/docs/delete-on-call-schedules-schedule.md): Delete an on-call schedule. Requires `oncall:write`. - [POST /on-call/schedules/{schedule}/rotations](https://uptizm.com/docs/post-on-call-schedules-schedule-rotations.md): Add a rotation slot. Requires `oncall:write`. - [PATCH /on-call/schedules/{schedule}/rotations/reorder](https://uptizm.com/docs/patch-on-call-schedules-schedule-rotations-reorder.md): Reorder the rotation. Requires `oncall:write`. - [DELETE /on-call/schedules/{schedule}/rotations/{rotation}](https://uptizm.com/docs/delete-on-call-schedules-schedule-rotations-rotation.md): Remove a rotation slot. Requires `oncall:write`. - [POST /on-call/schedules/{schedule}/overrides](https://uptizm.com/docs/post-on-call-schedules-schedule-overrides.md): Add an override. Requires `oncall:write`. - [DELETE /on-call/schedules/{schedule}/overrides/{override}](https://uptizm.com/docs/delete-on-call-schedules-schedule-overrides-override.md): Remove an override. Requires `oncall:write`. ## Escalation - [GET /escalation-policies](https://uptizm.com/docs/get-escalation-policies.md): List escalation policies. Requires `oncall:read`. - [POST /escalation-policies](https://uptizm.com/docs/post-escalation-policies.md): Create an escalation policy. Requires `oncall:write`. - [GET /escalation-policies/{policy}](https://uptizm.com/docs/get-escalation-policies-policy.md): Get an escalation policy. Requires `oncall:read`. - [PUT /escalation-policies/{policy}](https://uptizm.com/docs/put-escalation-policies-policy.md): Update an escalation policy. Requires `oncall:write`. - [DELETE /escalation-policies/{policy}](https://uptizm.com/docs/delete-escalation-policies-policy.md): Delete an escalation policy. Requires `oncall:write`. - [POST /escalation-policies/{policy}/steps](https://uptizm.com/docs/post-escalation-policies-policy-steps.md): Add an escalation step. Requires `oncall:write`. - [PATCH /escalation-policies/{policy}/steps/reorder](https://uptizm.com/docs/patch-escalation-policies-policy-steps-reorder.md): Reorder escalation steps. Requires `oncall:write`. - [DELETE /escalation-policies/{policy}/steps/{step}](https://uptizm.com/docs/delete-escalation-policies-policy-steps-step.md): Remove an escalation step. Requires `oncall:write`. ## Team - [GET /team/members](https://uptizm.com/docs/get-team-members.md): List team members. Requires `team:read`. - [PUT /team/members/{user}](https://uptizm.com/docs/put-team-members-user.md): Change a member's role. Requires `team:manage`. - [DELETE /team/members/{user}](https://uptizm.com/docs/delete-team-members-user.md): Remove a team member. Requires `team:manage`. - [GET /team/invitations](https://uptizm.com/docs/get-team-invitations.md): List pending invitations. Requires `team:read`. - [POST /team/invitations](https://uptizm.com/docs/post-team-invitations.md): Invite a member. Requires `team:manage`. - [DELETE /team/invitations/{invitation}](https://uptizm.com/docs/delete-team-invitations-invitation.md): Cancel an invitation. Requires `team:manage`. --- # Uptizm API quickstart Uptizm checks that websites and APIs are up, opens incidents when they are not, notifies the right people and publishes status pages. The REST API gives a team API key the same monitors, metrics, incidents, status pages, maintenance windows, notification channels, on-call schedules and escalation policies the app uses. - Base URL: `https://api.uptizm.com/v1` - Format: JSON in and out. Send `Accept: application/json` so errors come back as JSON. - Index of every endpoint: https://uptizm.com/llms.txt - API reference, one Markdown file per resource: https://uptizm.com/docs/api.md - OpenAPI 3.1 spec: https://uptizm.com/docs/openapi.json ## Four steps 1. Create a key in the app, under **Settings, Team, API keys**. [Authentication](https://uptizm.com/docs/authentication.md) covers the presets and the abilities. 2. Call `GET /me` with the key as a bearer token to check it works and what it can do. [Authentication](https://uptizm.com/docs/authentication.md) shows the request. 3. Create a monitor with `POST /monitors`, optionally from an AI proposal. [Create monitors](https://uptizm.com/docs/create-monitors.md) walks through both ways. 4. Read incidents with `GET /incidents`. The [Incidents API](https://uptizm.com/docs/api/incidents.md) lists every call, and [Pagination](https://uptizm.com/docs/pagination.md) explains how to page through the list. More guides: [Errors](https://uptizm.com/docs/errors.md), [Rate limits](https://uptizm.com/docs/rate-limits.md), [Idempotency](https://uptizm.com/docs/idempotency.md) and [Anonymous workspaces for agents](https://uptizm.com/docs/anonymous-workspaces.md). --- # Authentication ## Create a key Keys are created in the app, never through the API: open **Settings, Team, API keys** and create one. A key belongs to one team and acts only on that team. Pick a preset: | Preset | Abilities | |---|---| | Read only | every `:read` ability: monitors, metrics, incidents, status pages, channels, on-call, maintenance, stats, team | | Read and write | read only, plus `monitors:write`, `metrics:write`, `incidents:write`, `maintenance:write` | | Full | read and write, plus `status_pages:write`, `channels:write`, `oncall:write` | `team:manage` (changing members and invitations) is never part of a preset; grant it on its own. The secret (`upz_...`) is shown once, when the key is created. Store it like a password. A key can also carry an expiry date. The number of keys a team may hold depends on its plan. ## Authenticate Send the key as a bearer token on every request: ``` curl https://api.uptizm.com/v1/me \ -H "Authorization: Bearer upz_..." \ -H "Accept: application/json" ``` `GET /me` works with any valid key. It returns the team, its plan and limits, and the key's name, abilities, expiry and kind: the quickest way to check what a key can do. Every endpoint names the ability it needs, in its page and as `x-required-ability` in the spec. A key without it gets a 403 that names the missing ability (see [Errors](https://uptizm.com/docs/errors.md)). --- # Create monitors ## Create a monitor with AI The AI flow probes a URL from several regions and proposes the settings and metrics for it. It runs in the background, so it is three calls. 1. Start the analysis: ``` POST /monitors/analyze {"url": "https://example.com/health"} ``` The answer is 202 with `data.run_id` and `data.status` (`queued`). A 409 means another analysis is already running for the team; wait for it to finish. 2. Poll the run every 2.5 seconds, for up to about 150 seconds: ``` GET /monitors/analyze/{run_id} ``` `data.status` moves through `queued` and `analyzing` to `completed` or `failed`. On `failed`, `data.reason` says why. A 404 means the run expired or is unknown: start a new analysis rather than polling on. 3. Create the monitor from the result. On `completed`, `data.result.data` holds the proposal: `name`, `url`, a `suggestion` object with the monitor settings, and `suggested_metrics`. Send `name`, `url`, `"type": "http"` and every key of `suggestion`, plus the suggested metrics you want to keep as `metrics`: ``` POST /monitors Idempotency-Key: 2f1d6c3e-create-example-health {"name": "...", "url": "...", "type": "http", "method": "get", "check_interval_sec": 300, "timeout_sec": 10, "regions": ["eu-central"], "metrics": []} ``` The answer is 201 with the monitor, and its first check is queued. The `Idempotency-Key` header is explained in [Idempotency](https://uptizm.com/docs/idempotency.md). Without AI, skip steps 1 and 2 and send `POST /monitors` with the fields listed on its page. Analyses count against the plan's AI setup allowance. ## Update a monitor `PUT /monitors/{monitor}` changes only the fields you send. A key never receives the probe's secrets: `request_headers` and `request_body` are left out of every monitor it reads, the `url` comes back without any `user:password@` part, and `auth_config` shows only its `type`. So when you read a monitor and send it back, drop `auth_config` (and any field you did not change): the stored credentials stay as they are. Send `auth_config` with the secret again only to replace it; a body that carries `"auth_config": {"type": "bearer"}` without its `token` answers 422. Sending back the `url` exactly as you read it keeps the stored credentials too. --- # Errors The statuses the API returns, and the body each one carries. | Status | Meaning | Body | |---|---|---| | 401 | Missing, malformed, expired or revoked key | `{"message": "Unauthenticated."}` | | 403 | The key lacks the ability, or the action is not allowed for the team or plan | `{"message": "...", "required_ability": "monitors:write"}` (`required_ability` only on an ability refusal) | | 404 | Not found, or it belongs to another team | `{"message": "..."}` | | 409 | Conflict, such as an analysis already running | `{"message": "..."}` | | 422 | Validation failed | `{"message": "...", "errors": {"field": ["..."]}}` | | 429 | Rate limited | `{"message": "..."}` with a `Retry-After` header | Fix the request on a 4xx other than 429; retrying unchanged gives the same answer. --- # Rate limits Limits are per key: 120 reads (`GET`) and 30 writes (every other verb) per minute. On a 429, wait the `Retry-After` seconds. Some endpoints carry their own tighter limit as well: `POST /monitors/analyze` allows 6 a minute per caller and 12 a minute per team. --- # Pagination Most lists are cursor-paginated. Pass `per_page` (1 to 200, default 25; incidents stop at 100) and, for the next page, `cursor` set to the previous answer's `meta.next_cursor`. `meta.next_cursor` is null on the last page. A few lists (notification channels, on-call schedules, archived content) are page-numbered instead: follow `links.next`. --- # Idempotency A `POST` made with a key accepts an `Idempotency-Key` header: any unique string per logical request, for example a UUID. Retrying with the same key and the same body within 24 hours replays the stored answer instead of running the request again, so a timeout never creates a second monitor. Replayed answers are 2xx, 400, 404 and 422. The same key with a different body answers 422; a retry while the first request is still running answers 409. Use a new key for every new request. --- # Anonymous workspaces for agents An agent can start monitoring before its human has an account. 1. The human gets a temporary key from the Uptizm website. The website calls the public `POST /anonymous-keys` endpoint behind a bot check, so an agent cannot call it directly. The answer carries the key (`secret`), its `expires_at`, a `claim_url`, `claim_expires_at` and `docs_url`. 2. The agent uses the key like any other. It may read and write monitors and metrics, read incidents and stats, and request a claim url. An unclaimed workspace is limited to one monitor, created manually: no AI setup and no status pages. 3. To keep the work, the human opens the claim url while signed in to Uptizm and the workspace becomes a permanent team. `POST /claim-code` returns a fresh `claim_url` (any earlier one stops working); the agent should hand it to the human. The temporary key lives 72 hours unless the workspace is claimed. The workspace can be claimed for 10 days after it was created. --- # Get a claim url for an anonymous workspace `POST /claim-code` Replaces the calling anonymous key's claim code and returns `claim_url` plus `claim_expires_at`. Hand the url to a human: opening it while signed in makes the temporary workspace a permanent team. Only anonymous keys carry `claim:create`. Any earlier claim url stops working. - URL: `https://api.uptizm.com/v1/claim-code` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `claim:create` - Tag: Keys - operationId: `v1.claim-code.store` ## Response 200 Content type: `application/json`. - `data` (object, required) - `claim_url` (string, required) - `claim_expires_at` (string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 409: Conflict - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Describe the calling key `GET /me` Returns the key's team, the team's plan and limits, and the key itself (name, abilities, expiry, kind). Any valid key may call it, whatever abilities it carries; use it to check a key works and what it can do. - URL: `https://api.uptizm.com/v1/me` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `self` (any valid key) - Tag: Keys - operationId: `v1.me` ## Response 200 Content type: `application/json`. - `data` (object, required) - `team` (object, required) - `id` (string, required) - `name` (string, required) - `plan` (string, one of `"anonymous"`, `"free"`, `"starter"`, `"pro"`, `"enterprise"`, required) - `limits` (object, required) - `key` (object or null, required) - `name` (string, required) - `abilities` (string, required) - `expires_at` (string or null, required) - `kind` (string, one of `"team"`, `"anonymous"`, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Start an AI analysis of a URL `POST /monitors/analyze` Probes the URL from several regions and queues an AI analysis that proposes monitor settings and metrics. Answers 202 with `data.run_id` and the run state; poll `GET /monitors/analyze/{run}` until `status` is `completed` or `failed`. A second analysis while one is running for the team answers 409. Counts against the plan's AI setup allowance; an unclaimed anonymous workspace has none. - URL: `https://api.uptizm.com/v1/monitors/analyze` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `v1.monitors.analyze` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `url` (string, uri, max length 2048, required) - `region` (MonitorRegion: string, one of `"us-east"`, `"us-west"`, `"eu-west"`, `"eu-central"`, `"ap"`): A region a check is probed from. - `intent` (string or null, max length 500): What the operator wants from this monitor, in their own words. - `auth_config` (object or null) - `type` (HttpAuthType: string, one of `"none"`, `"basic"`, `"bearer"`, `"api_key"`): Authentication scheme applied to outbound monitor check requests. - `username` (string or null, max length 255) - `password` (string or null, max length 255) - `token` (string or null, max length 2048) - `key` (string or null, max length 2048) - `header` (string or null, max length 255) ## Response 202 Content type: `application/json`. - `data` (object, required) - `run_id` (string, required) - `status` (any, required) - `step` (any, required) - `steps` (any, required) - `probe` (any, required) - `probes` (any, required) - `reason` (any, required) - `result` (any, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 409: Conflict - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Poll an AI analysis run `GET /monitors/analyze/{run}` Returns the run state: `status` is `queued`, `analyzing`, `completed` or `failed`. On `completed`, `result.data` holds the proposed monitor (`name`, `url`, `suggestion` settings, `suggested_metrics`); on `failed`, `reason` says why. Poll every 2.5 seconds for up to about 150 seconds. A 404 means the run expired or belongs to another team: start a new analysis. - URL: `https://api.uptizm.com/v1/monitors/analyze/{run}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.analyze.run` ## Parameters - `run` (path, string, required) ## Response 200 Content type: `application/json`. - `data` (object, required) - `run_id` (string, required) - `status` (any, required) - `step` (any, required) - `steps` (any, required) - `probe` (any, required) - `probes` (any, required) - `reason` (any, required) - `result` (any, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: An error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List monitors `GET /monitors` The team's monitors, newest first, cursor-paginated. Filter by `status`. Monitors read through a key never include `request_headers` or `request_body`, and credentials are stripped from `url`. - URL: `https://api.uptizm.com/v1/monitors` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `monitors.index` ## Parameters - `status` (query, string) - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. - `total` (number, required) - `counts` (array, max items 2, required) - `avg_response_ms` (integer or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Create a monitor `POST /monitors` Creates a monitor, plus any `metrics` sent with it in the same write, and queues its first check. Send an `Idempotency-Key` so a retry cannot create it twice. The plan caps the monitor count and the shortest `check_interval_sec`. - URL: `https://api.uptizm.com/v1/monitors` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `monitors.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `name` (string, max length 200, required) - `url` (string, uri, max length 2048, required) - `type` (MonitorType: string, one of `"http"`, required): Supported check protocol for a monitor. - `method` (HttpMethod: string, one of `"get"`, `"post"`, `"head"`, required): HTTP verb used when issuing a monitor check request. - `check_interval_sec` (integer, min 30, max 86400, required) - `timeout_sec` (integer, min 1, max 30, required) - `regions` (array of MonitorRegion: string, one of `"us-east"`, `"us-west"`, `"eu-west"`, `"eu-central"`, `"ap"`, required) - `expected_status_code` (integer or null, min 100, max 599) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`): How much authority the AI has for a given monitor or workspace. - `anomaly_detection` (boolean): Absent means the model default (true). - `response_anomaly_sensitivity` (AnomalySensitivity: string, one of `"low"`, `"medium"`, `"high"`): How far from its baseline a metric has to move before the sweep reports it. - `ai_auto_updates` (boolean): Whether AI may publish incident updates to the public status page for this monitor. - `escalation_policy_id` (string or null, uuid): The team's escalation policy that pages for this monitor's incidents. - `request_headers` (array of string or null) - `request_body` (string or null) - `slo_target` (number or null, min 0, max 100) - `tags` (array of string or null) - `show_on_status_page` (boolean) - `follow_redirects` (boolean): Whether a 3xx is the answer or a step on the way to it. - `only_show_if_degraded` (boolean) - `alert_on_down` (boolean) - `alert_on_recover` (boolean) - `ssl_tracking` (boolean) - `ssl_alert_threshold_days` (integer or null, min 1, max 365) - `maintenance_tolerance_sec` (integer, one of `"0"`, `"60"`, `"120"`, `"180"`, `"300"`, `"600"`, `"900"`): Maintenance tolerance in seconds; omit it for the default of 0. - `metrics` (array of object, max items 40): Metrics to create together with the monitor, in the same write. - `group_name` (string or null, max length 80) - `label` (string, max length 120, required) - `type` (MetricType: string, one of `"numeric"`, `"status"`, `"string"`, required): Classification of a custom monitor metric. - `source` (MetricSource: string, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"` or null) - `extraction_path` (string or null, max length 500) - `unit` (MetricUnit: string, one of `"bytes_auto"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"`, `"duration_auto"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"percent"`, `"ratio"`, `"count"`, `"count_short"`, `"custom"` or null) - `threshold_direction` (ThresholdDirection: string, one of `"high_bad"`, `"low_bad"` or null) - `warn_bound` (number or null) - `critical_bound` (number or null) - `display_order` (integer or null, min 0) - `anomaly_enabled` (boolean) - `anomaly_direction` (MetricAnomalyDirection: string, one of `"high_bad"`, `"low_bad"`, `"both"`): Which side of a baseline counts as an anomaly: `high_bad`, `low_bad` or `both`. - `anomaly_kind` (MetricKind: string, one of `"gauge"`, `"counter"`, `"count_per_period"`): What a numeric metric's readings measure, which decides how the sweep reads them. - `anomaly_sensitivity` (AnomalySensitivity: string, one of `"low"`, `"medium"`, `"high"`): How far from its baseline a metric has to move before the sweep reports it. - `ok_values` (array of string, min length 1, max length 120, max items 50) - `warn_values` (array of string, min length 1, max length 120, max items 50) - `critical_values` (array of string, min length 1, max length 120, max items 50) - `unmatched_band` (MetricBand: string, one of `"ok"`, `"warn"`, `"critical"` or null) - `key` (string, max length 40, required) - `auth_config` (object or null) - `type` (HttpAuthType: string, one of `"none"`, `"basic"`, `"bearer"`, `"api_key"`): Authentication scheme applied to outbound monitor check requests. - `username` (string or null, max length 255) - `password` (string or null, max length 255) - `token` (string or null, max length 2048) - `key` (string or null, max length 2048) - `header` (string or null, max length 255) - `assertion_rules` (array of string or null, max items 20) - `incident_threshold` (integer, min 1, max 10): How many consecutive failed checks open an incident, from 1 to 10. - `degraded_after_ms` (integer or null, min 100, max 30000): Null is "off" in both engines. - `description` (string or null, max length 1000): Context the AI reads as unverified and source-labelled, never a probe input. - `description_source` (DescriptionSource: string, one of `"ai_draft"`, `"user"` or null) - `site_kind` (SiteKind: string, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"` or null) - `intent` (string or null, max length 500): What the operator says matters about this monitor, in their own words. ## Response 201 Content type: `application/json`. - `data` (MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get a monitor `GET /monitors/{monitor}` One monitor of the team. A monitor of another team answers 404. Credentials are masked as in the list. - URL: `https://api.uptizm.com/v1/monitors/{monitor}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `monitors.show` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update a monitor `PUT /monitors/{monitor}` Replaces the monitor's settings with the validated body. The same plan limits as on create apply. - URL: `https://api.uptizm.com/v1/monitors/{monitor}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `monitors.update` ## Parameters - `monitor` (path, string, required): The monitor ID ## Request body Content type: `application/json`. - `name` (string, max length 200) - `url` (string, uri, max length 2048) - `type` (MonitorType: string, one of `"http"`): Supported check protocol for a monitor. - `method` (HttpMethod: string, one of `"get"`, `"post"`, `"head"`): HTTP verb used when issuing a monitor check request. - `check_interval_sec` (integer, min 30, max 86400) - `timeout_sec` (integer, min 1, max 30) - `regions` (array of MonitorRegion: string, one of `"us-east"`, `"us-west"`, `"eu-west"`, `"eu-central"`, `"ap"`) - `expected_status_code` (integer or null, min 100, max 599) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean) - `escalation_policy_id` (string or null, uuid) - `request_headers` (array of string or null) - `request_body` (string or null) - `slo_target` (number or null, min 0, max 100) - `tags` (array of string or null) - `show_on_status_page` (boolean) - `follow_redirects` (boolean) - `only_show_if_degraded` (boolean) - `alert_on_down` (boolean) - `alert_on_recover` (boolean) - `ssl_tracking` (boolean) - `anomaly_detection` (boolean) - `response_anomaly_sensitivity` (AnomalySensitivity: string, one of `"low"`, `"medium"`, `"high"`): How far from its baseline a metric has to move before the sweep reports it. - `ssl_alert_threshold_days` (integer or null, min 1, max 365) - `maintenance_tolerance_sec` (integer, one of `"0"`, `"60"`, `"120"`, `"180"`, `"300"`, `"600"`, `"900"`) - `auth_config` (object or null) - `type` (HttpAuthType: string, one of `"none"`, `"basic"`, `"bearer"`, `"api_key"`): Authentication scheme applied to outbound monitor check requests. - `username` (string or null, max length 255) - `password` (string or null, max length 255) - `token` (string or null, max length 2048) - `key` (string or null, max length 2048) - `header` (string or null, max length 255) - `assertion_rules` (array of string or null, max items 20) - `incident_threshold` (integer, min 1, max 10) - `degraded_after_ms` (integer or null, min 100, max 30000) - `description` (string or null, max length 1000) - `site_kind` (SiteKind: string, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"` or null) - `intent` (string or null, max length 500) - `description_source` (DescriptionSource: string, one of `"ai_draft"`, `"user"` or null) ## Response 200 Content type: `application/json`. - `data` (MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete a monitor `DELETE /monitors/{monitor}` Deletes the monitor and stops its checks. - URL: `https://api.uptizm.com/v1/monitors/{monitor}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `monitors.destroy` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Pause a monitor `POST /monitors/{monitor}/pause` Stops scheduling checks for the monitor until it is resumed. A paused monitor keeps its history. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/pause` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `v1.monitors.pause` ## Parameters - `monitor` (path, string, required): The monitor ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Resume a monitor `POST /monitors/{monitor}/resume` Schedules checks for a paused monitor again, starting with the next tick. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/resume` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `v1.monitors.resume` ## Parameters - `monitor` (path, string, required): The monitor ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Run a check now `POST /monitors/{monitor}/test` Fires an immediate one-off probe across the monitor's regions, outside its schedule. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/test` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:write` - Tag: Monitors - operationId: `v1.monitors.test` ## Parameters - `monitor` (path, string, required): The monitor ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 202 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List a monitor's checks `GET /monitors/{monitor}/checks` The monitor's recent check readings, newest first, cursor-paginated. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/checks` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.checks.index` ## Parameters - `monitor` (path, string, required): The monitor ID - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of MonitorCheckResource, required) - `id` (string, required) - `region` (string, required) - `status` (string, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, required) - `status_code` (integer or null, required) - `response_ms` (integer or null, required) - `timing_dns_ms` (integer, required) - `timing_connect_ms` (integer, required) - `timing_tls_ms` (integer, required) - `timing_ttfb_ms` (integer, required) - `timing_download_ms` (integer, required) - `checked_at` (string, date-time, required) - `error_message` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get one check `GET /monitors/{monitor}/checks/{check}` A single check reading of the monitor. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/checks/{check}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.checks.show` ## Parameters - `monitor` (path, string, required): The monitor ID - `check` (path, string, required): The check ID ## Response 200 Content type: `application/json`. - `data` (MonitorCheckResource, required) - `id` (string, required) - `region` (string, required) - `status` (string, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, required) - `status_code` (integer or null, required) - `response_ms` (integer or null, required) - `timing_dns_ms` (integer, required) - `timing_connect_ms` (integer, required) - `timing_tls_ms` (integer, required) - `timing_ttfb_ms` (integer, required) - `timing_download_ms` (integer, required) - `checked_at` (string, date-time, required) - `error_message` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List archived content versions `GET /monitors/{monitor}/content` The archived versions of the monitor's response body, most recently seen first, page-numbered. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/content` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.content.index` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (array of MonitorContentVersionResource, required) - `content_hash` (string, required) - `byte_size` (integer, required): The RAW decoded length, not the size of the gzipped blob on disk. - `content_type` (string or null, required) - `truncated` (boolean, required) - `first_seen_at` (string, required) - `last_seen_at` (string, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `current_page` (integer, min 1, required) - `from` (integer or null, min 1, required) - `last_page` (integer, min 1, required) - `links` (array of object, required): Generated paginator links. - `url` (string or null, required) - `label` (string, required) - `active` (boolean, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `to` (integer or null, min 1, required): Number of the last item in the slice. - `total` (integer, min 0, required): Total number of items being paginated. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List metric candidates `GET /monitors/{monitor}/content/candidates` The values found in the monitor's newest archived body that a metric could extract, with the rule that extracts each. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/content/candidates` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.content.candidates` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Download an archived version `GET /monitors/{monitor}/content/{contentHash}` Downloads one archived body, addressed by its sha256 content hash, with its original bytes. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/content/{contentHash}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.content.show` ## Parameters - `monitor` (path, string, required): The monitor ID - `contentHash` (path, string, required): The sha256 content hash of the archived version: 64 lowercase hex characters. ## Response 200 Content type: `text/plain; charset=utf-8`. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get uptime over a range `GET /monitors/{monitor}/uptime` Totals of up, down and degraded readings and the uptime ratio for the requested range. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/uptime` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.uptime` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get response times over a range `GET /monitors/{monitor}/response-times` Response times bucketed over the requested range, for charting. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/response-times` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.response-times` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (array of object, required): The response-time buckets of the requested range, for charting. - `id` (null, required) - `region` (null, required) - `status` (string, one of `"down"`, `"degraded"`, `"maintenance"`, `"up"`, required) - `status_code` (null, required) - `response_ms` (integer, required) - `timing_dns_ms` (null, required) - `timing_connect_ms` (null, required) - `timing_tls_ms` (null, required) - `timing_ttfb_ms` (null, required) - `timing_download_ms` (null, required) - `checked_at` (string, date-time, required) - `error_message` (null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List anomalies `GET /monitors/{monitor}/anomalies` The monitor's anomaly episodes inside the requested range, newest first. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/anomalies` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.anomalies` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (array of string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get the 90-day status history `GET /monitors/{monitor}/status-history` Status-only daily buckets for the last 90 days. Takes no range. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/status-history` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `monitors:read` - Tag: Monitors - operationId: `v1.monitors.status-history` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (array of object, required) - `checked_at` (string, date-time, required) - `status` (string, one of `"down"`, `"degraded"`, `"maintenance"`, `"up"`, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List a monitor's metrics `GET /monitors/{monitor}/metrics` The custom metrics defined on the monitor, in display order. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:read` - Tag: Metrics - operationId: `v1.monitors.metrics.index` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (array of MonitorMetricResource, required) - `id` (string, required) - `monitor_id` (string, required) - `group_name` (string or null, required) - `label` (string, required) - `key` (string, required) - `type` (string, one of `"numeric"`, `"status"`, `"string"`, required) - `source` (string or null, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"`, `null`, required) - `extraction_path` (string or null, required) - `unit` (string or null, one of `"bytes_auto"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"`, `"duration_auto"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"percent"`, `"ratio"`, `"count"`, `"count_short"`, `"custom"`, `null`, required) - `threshold_direction` (string or null, one of `"high_bad"`, `"low_bad"`, `null`, required) - `warn_bound` (number or null, required) - `critical_bound` (number or null, required) - `ok_values` (array of any, required): The string values that band as ok for a string metric. - `warn_values` (array of any, required) - `critical_values` (array of any, required) - `unmatched_band` (string or null, one of `"ok"`, `"warn"`, `"critical"`, `null`, required) - `anomaly_enabled` (boolean, required) - `anomaly_direction` (string, one of `"high_bad"`, `"low_bad"`, `"both"`, required) - `anomaly_kind` (string, one of `"gauge"`, `"counter"`, `"count_per_period"`, required) - `anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `display_order` (integer, required) - `latest` (object or null) - `recorded_at` (string or null, required) - `numeric_value` (number or null, required) - `string_value` (string, required) - `status_value` (string or null, required) - `band` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Create a metric `POST /monitors/{monitor}/metrics` Defines a custom metric that extracts a value from every check response of the monitor (JSONPath, regex, XPath, a header or the status code), with optional thresholds. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:write` - Tag: Metrics - operationId: `v1.monitors.metrics.store` ## Parameters - `monitor` (path, string, required): The monitor ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `group_name` (string or null, max length 80) - `label` (string, max length 120, required) - `type` (MetricType: string, one of `"numeric"`, `"status"`, `"string"`, required): Classification of a custom monitor metric. - `source` (MetricSource: string, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"` or null) - `extraction_path` (string or null, max length 500) - `unit` (MetricUnit: string, one of `"bytes_auto"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"`, `"duration_auto"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"percent"`, `"ratio"`, `"count"`, `"count_short"`, `"custom"` or null) - `threshold_direction` (ThresholdDirection: string, one of `"high_bad"`, `"low_bad"` or null) - `warn_bound` (number or null) - `critical_bound` (number or null) - `display_order` (integer or null, min 0) - `anomaly_enabled` (boolean) - `anomaly_direction` (MetricAnomalyDirection: string, one of `"high_bad"`, `"low_bad"`, `"both"`): Which side of a baseline counts as an anomaly: `high_bad`, `low_bad` or `both`. - `anomaly_kind` (MetricKind: string, one of `"gauge"`, `"counter"`, `"count_per_period"`): What a numeric metric's readings measure, which decides how the sweep reads them. - `anomaly_sensitivity` (AnomalySensitivity: string, one of `"low"`, `"medium"`, `"high"`): How far from its baseline a metric has to move before the sweep reports it. - `ok_values` (array of string, min length 1, max length 120, max items 50) - `warn_values` (array of string, min length 1, max length 120, max items 50) - `critical_values` (array of string, min length 1, max length 120, max items 50) - `unmatched_band` (MetricBand: string, one of `"ok"`, `"warn"`, `"critical"` or null) - `key` (string, max length 40, required) ## Response 201 Content type: `application/json`. - `data` (MonitorMetricResource, required) - `id` (string, required) - `monitor_id` (string, required) - `group_name` (string or null, required) - `label` (string, required) - `key` (string, required) - `type` (string, one of `"numeric"`, `"status"`, `"string"`, required) - `source` (string or null, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"`, `null`, required) - `extraction_path` (string or null, required) - `unit` (string or null, one of `"bytes_auto"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"`, `"duration_auto"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"percent"`, `"ratio"`, `"count"`, `"count_short"`, `"custom"`, `null`, required) - `threshold_direction` (string or null, one of `"high_bad"`, `"low_bad"`, `null`, required) - `warn_bound` (number or null, required) - `critical_bound` (number or null, required) - `ok_values` (array of any, required): The string values that band as ok for a string metric. - `warn_values` (array of any, required) - `critical_values` (array of any, required) - `unmatched_band` (string or null, one of `"ok"`, `"warn"`, `"critical"`, `null`, required) - `anomaly_enabled` (boolean, required) - `anomaly_direction` (string, one of `"high_bad"`, `"low_bad"`, `"both"`, required) - `anomaly_kind` (string, one of `"gauge"`, `"counter"`, `"count_per_period"`, required) - `anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `display_order` (integer, required) - `latest` (object or null) - `recorded_at` (string or null, required) - `numeric_value` (number or null, required) - `string_value` (string, required) - `status_value` (string or null, required) - `band` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Preview a metric rule `POST /monitors/{monitor}/metrics/preview` Runs a draft extraction rule against the monitor's newest archived response and returns the extracted value and the threshold band it would land in. Stores nothing. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/preview` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:write` - Tag: Metrics - operationId: `v1.monitors.metrics.preview` ## Parameters - `monitor` (path, string, required): The monitor ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `source` (MetricSource: string, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"`, required): Extraction strategy used to pull a metric value out of a check response. - `extraction_path` (string or null, max length 500) - `type` (MetricType: string, one of `"numeric"`, `"status"`, `"string"`, required): Classification of a custom monitor metric. - `sample_body` (string or null) - `sample_headers` (array of string or null) - `sample_status_code` (integer or null) - `threshold_direction` (ThresholdDirection: string, one of `"high_bad"`, `"low_bad"` or null) - `warn_bound` (number or null) - `critical_bound` (number or null) - `ok_values` (array of string, min length 1, max length 120, max items 50) - `warn_values` (array of string, min length 1, max length 120, max items 50) - `critical_values` (array of string, min length 1, max length 120, max items 50) - `unmatched_band` (MetricBand: string, one of `"ok"`, `"warn"`, `"critical"` or null) ## Response 200 Content type: `application/json`. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Discover metrics with AI `POST /monitors/{monitor}/metrics/discover` Proposes metrics worth adding, read from the monitor's newest archived content. Stores nothing; create the ones you want with `POST /monitors/{monitor}/metrics`. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/discover` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:write` - Tag: Metrics - operationId: `v1.monitors.metrics.discover` ## Parameters - `monitor` (path, string, required): The monitor ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (object, required) - `suggested_metrics` (array, max items 2 or array, max items 2 or array of string, max items 0, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Reorder metrics `PATCH /monitors/{monitor}/metrics/reorder` Sets `display_order` for a set of the monitor's metrics. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/reorder` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:write` - Tag: Metrics - operationId: `v1.monitors.metrics.reorder` ## Parameters - `monitor` (path, string, required): The monitor ID ## Request body Content type: `application/json`. - `order` (array of object, required) - `id` (string, required) - `display_order` (integer, min 0, required) ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update a metric `PUT /monitors/{monitor}/metrics/{metric}` Edits one metric definition; only the fields sent change. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/{metric}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:write` - Tag: Metrics - operationId: `v1.monitors.metrics.update` ## Parameters - `monitor` (path, string, required): The monitor ID - `metric` (path, string, required): The metric ID ## Request body Content type: `application/json`. - `group_name` (string or null, max length 80) - `label` (string, max length 120) - `type` (MetricType: string, one of `"numeric"`, `"status"`, `"string"`): Classification of a custom monitor metric. - `source` (MetricSource: string, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"` or null) - `extraction_path` (string or null, max length 500) - `unit` (MetricUnit: string, one of `"bytes_auto"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"`, `"duration_auto"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"percent"`, `"ratio"`, `"count"`, `"count_short"`, `"custom"` or null) - `threshold_direction` (ThresholdDirection: string, one of `"high_bad"`, `"low_bad"` or null) - `warn_bound` (number or null) - `critical_bound` (number or null) - `display_order` (integer or null, min 0) - `anomaly_enabled` (boolean) - `anomaly_direction` (MetricAnomalyDirection: string, one of `"high_bad"`, `"low_bad"`, `"both"`): Which side of a baseline counts as an anomaly: `high_bad`, `low_bad` or `both`. - `anomaly_kind` (MetricKind: string, one of `"gauge"`, `"counter"`, `"count_per_period"`): What a numeric metric's readings measure, which decides how the sweep reads them. - `anomaly_sensitivity` (AnomalySensitivity: string, one of `"low"`, `"medium"`, `"high"`): How far from its baseline a metric has to move before the sweep reports it. - `ok_values` (array of string, min length 1, max length 120, max items 50) - `warn_values` (array of string, min length 1, max length 120, max items 50) - `critical_values` (array of string, min length 1, max length 120, max items 50) - `unmatched_band` (MetricBand: string, one of `"ok"`, `"warn"`, `"critical"` or null) - `key` (string, max length 40) ## Response 200 Content type: `application/json`. - `data` (MonitorMetricResource, required) - `id` (string, required) - `monitor_id` (string, required) - `group_name` (string or null, required) - `label` (string, required) - `key` (string, required) - `type` (string, one of `"numeric"`, `"status"`, `"string"`, required) - `source` (string or null, one of `"json_path"`, `"regex"`, `"xpath"`, `"header"`, `"http_status"`, `null`, required) - `extraction_path` (string or null, required) - `unit` (string or null, one of `"bytes_auto"`, `"byte"`, `"kilobyte"`, `"megabyte"`, `"gigabyte"`, `"terabyte"`, `"duration_auto"`, `"millisecond"`, `"second"`, `"minute"`, `"hour"`, `"percent"`, `"ratio"`, `"count"`, `"count_short"`, `"custom"`, `null`, required) - `threshold_direction` (string or null, one of `"high_bad"`, `"low_bad"`, `null`, required) - `warn_bound` (number or null, required) - `critical_bound` (number or null, required) - `ok_values` (array of any, required): The string values that band as ok for a string metric. - `warn_values` (array of any, required) - `critical_values` (array of any, required) - `unmatched_band` (string or null, one of `"ok"`, `"warn"`, `"critical"`, `null`, required) - `anomaly_enabled` (boolean, required) - `anomaly_direction` (string, one of `"high_bad"`, `"low_bad"`, `"both"`, required) - `anomaly_kind` (string, one of `"gauge"`, `"counter"`, `"count_per_period"`, required) - `anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `display_order` (integer, required) - `latest` (object or null) - `recorded_at` (string or null, required) - `numeric_value` (number or null, required) - `string_value` (string, required) - `status_value` (string or null, required) - `band` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete a metric `DELETE /monitors/{monitor}/metrics/{metric}` Deletes the metric and its readings. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/{metric}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:write` - Tag: Metrics - operationId: `v1.monitors.metrics.destroy` ## Parameters - `monitor` (path, string, required): The monitor ID - `metric` (path, string, required): The metric ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get recent samples of every metric `GET /monitors/{monitor}/metrics/series` The most recent samples of every metric on the monitor in one response. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/series` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:read` - Tag: Metrics - operationId: `v1.monitors.metrics.batch_series` ## Parameters - `monitor` (path, string, required): The monitor ID ## Response 200 Content type: `application/json`. - `data` (string, required) - `meta` (object, required) - `range` (string, required) - `limit` (any, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get a metric series `GET /monitors/{monitor}/metrics/{metric}/series` One metric's readings over the requested window, oldest first, for charting. Beyond 24 hours a numeric metric comes back as bucket averages. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/{metric}/series` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:read` - Tag: Metrics - operationId: `v1.monitors.metrics.series` ## Parameters - `monitor` (path, string, required): The monitor ID - `metric` (path, string, required): The metric ID ## Response 200 Content type: `application/json`. - `data` (array of object, required) - `recorded_at` (string, required) - `numeric_value` (number or null, required) - `string_value` (string or null, required) - `status_value` (string or null, required) - `band` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List a metric's readings `GET /monitors/{monitor}/metrics/{metric}/readings` One metric's readings, newest first, cursor-paginated. - URL: `https://api.uptizm.com/v1/monitors/{monitor}/metrics/{metric}/readings` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `metrics:read` - Tag: Metrics - operationId: `v1.monitors.metrics.readings` ## Parameters - `monitor` (path, string, required): The monitor ID - `metric` (path, string, required): The metric ID - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of MonitorMetricValueResource, required) - `id` (string, required) - `recorded_at` (string, required) - `numeric_value` (number or null, required) - `string_value` (string or null, required) - `status_value` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `band` (string or null, one of `"ok"`, `"warn"`, `"critical"`, `null`, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List incidents `GET /incidents` The team's incidents, newest first, cursor-paginated (at most 100 per page). - URL: `https://api.uptizm.com/v1/incidents` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:read` - Tag: Incidents - operationId: `v1.incidents.index` ## Parameters - `monitor_id` (query, string): Filter by the affected monitor, matching either the denormalized primary hint or the full affected-component pivot. - `lifecycle` (query, string) - `ai_owned` (query, boolean) - `q` (query, string): Free-text search over the incident title. - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of IncidentResource, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. - `open_total` (integer, required) - `critical_total` (integer, required) - `ai_total` (integer, required) - `resolved_total` (integer, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Open an incident `POST /incidents` Opens a manual incident for one of the team's monitors. - URL: `https://api.uptizm.com/v1/incidents` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `monitor_id` (string, uuid, required) - `severity` (IncidentSeverity: string, one of `"critical"`, `"warn"`, `"info"`, required): Severity tier assigned to an incident for routing and tone styling. - `title` (string, max length 200, required) - `message` (string or null, max length 2000) - `notify` (boolean): Whether to announce the open to the affected pages' confirmed subscribers. - `impact` (IncidentImpact: string, one of `"none"`, `"minor"`, `"major"`, `"critical"` or null) ## Response 200 Content type: `application/json`. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get the weekly digest `GET /incidents/digest` The latest stored weekly incident digest of the team. - URL: `https://api.uptizm.com/v1/incidents/digest` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:read` - Tag: Incidents - operationId: `v1.incidents.digest` ## Response 200 Content type: `application/json`. - `data` (object, required) - `week_start` (string, required) - `week_end` (string, required) - `uptime_percent` (number, required) - `incident_count` (integer, required) - `confidence` (string, one of `"high"`, `"medium"`, `"low"`, required) - `summary` (string, required) - `highlights` (array of any, required) - `stripped_citations` (array of any, required) - `generated_at` (string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: An error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get an incident `GET /incidents/{incident}` One incident with its timeline. Updates posted through a key show the author as "API key: ". - URL: `https://api.uptizm.com/v1/incidents/{incident}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:read` - Tag: Incidents - operationId: `v1.incidents.show` ## Parameters - `incident` (path, string, required): The incident ID ## Response 200 Content type: `application/json`. - `data` (IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object, required): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null, required): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Resolve an incident `POST /incidents/{incident}/resolve` Resolves an active incident, whatever the monitor's live health. - URL: `https://api.uptizm.com/v1/incidents/{incident}/resolve` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.resolve` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `message` (string or null, max length 2000) ## Response 200 Content type: `application/json`. - `data` (IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object, required): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null, required): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Acknowledge an incident `POST /incidents/{incident}/acknowledge` Acknowledges a newly detected incident and moves it to investigating. - URL: `https://api.uptizm.com/v1/incidents/{incident}/acknowledge` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.acknowledge` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `message` (string or null, max length 2000) ## Response 200 Content type: `application/json`. - `data` (IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object, required): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null, required): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Reopen an incident `POST /incidents/{incident}/reopen` Reopens a resolved incident and returns it to investigating. - URL: `https://api.uptizm.com/v1/incidents/{incident}/reopen` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.reopen` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `message` (string or null, max length 2000) ## Response 200 Content type: `application/json`. - `data` (IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object, required): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null, required): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Assign an incident `POST /incidents/{incident}/assign` Hands the incident to a member of the team, or clears the assignment when `assignee_id` is null. A non-member is a 422. - URL: `https://api.uptizm.com/v1/incidents/{incident}/assign` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.assign` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `assignee_id` (string or null, one of `""`, `null`) ## Response 200 Content type: `application/json`. - `data` (IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object, required): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null, required): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Save a postmortem `POST /incidents/{incident}/postmortem` Stores the incident's postmortem body; with `publish` set it also appears on the public status page. - URL: `https://api.uptizm.com/v1/incidents/{incident}/postmortem` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.postmortem` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `body` (string, max length 20000, required) - `publish` (boolean) ## Response 200 Content type: `application/json`. - `data` (IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object, required): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null, required): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Post an incident update `POST /incidents/{incident}/updates` Appends an update to the incident's timeline, optionally without changing its status. - URL: `https://api.uptizm.com/v1/incidents/{incident}/updates` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.updates.store` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `message` (string, max length 2000, required) - `is_public` (boolean) - `status` (IncidentStatus: string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"` or null) ## Response 201 Content type: `application/json`. - `data` (IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get the AI root-cause analysis `GET /incidents/{incident}/analysis` The AI summary of the incident's likely root cause. - URL: `https://api.uptizm.com/v1/incidents/{incident}/analysis` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:read` - Tag: Incidents - operationId: `v1.incidents.analysis` ## Parameters - `incident` (path, string, required): The incident ID - `refresh` (query, boolean) ## Response 200 Content type: `application/json`. - `data` (object, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Rate the AI analysis `POST /incidents/{incident}/analysis/feedback` Records a rating of the stored analysis. - URL: `https://api.uptizm.com/v1/incidents/{incident}/analysis/feedback` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.analysis.feedback` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `analysis_id` (string, required) - `helpful` (boolean, required) ## Response 200 Content type: `application/json`. - `data` (object, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Draft a status update with AI `POST /incidents/{incident}/draft-update` Drafts the next public status update for the incident. Stores nothing and spends AI budget. - URL: `https://api.uptizm.com/v1/incidents/{incident}/draft-update` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.draft.update` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (object, required) - `draft` (string or null, required) - `degrade_reason` (string or null, one of `"budget_exhausted"`, `"output_untrusted"`, `"service_unreachable"`, `null`, required) - `nothing_to_say` (boolean, required): A THIRD outcome, and not a degrade: nothing failed, there is simply nothing a customer could be told. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Draft a postmortem with AI `POST /incidents/{incident}/draft-postmortem` Drafts the postmortem of a resolved incident. Stores nothing and spends AI budget. - URL: `https://api.uptizm.com/v1/incidents/{incident}/draft-postmortem` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.incidents.draft.postmortem` ## Parameters - `incident` (path, string, required): The incident ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (object, required) - `draft` (string or null, required) - `degrade_reason` (string or null, one of `"budget_exhausted"`, `"output_untrusted"`, `"service_unreachable"`, `null`, required) - `nothing_to_say` (boolean, required): A THIRD outcome, and not a degrade: nothing failed, there is simply nothing a customer could be told. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Accept an AI suggestion `POST /ai-suggestions/{suggestion}/accept` Turns a pending AI suggestion into an incident and returns the incident id. - URL: `https://api.uptizm.com/v1/ai-suggestions/{suggestion}/accept` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.ai-suggestions.accept` ## Parameters - `suggestion` (path, string, required): Primary key of the suggestion to accept. - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Dismiss an AI suggestion `POST /ai-suggestions/{suggestion}/dismiss` Dismisses a pending AI suggestion so it leaves the inbox. - URL: `https://api.uptizm.com/v1/ai-suggestions/{suggestion}/dismiss` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `incidents:write` - Tag: Incidents - operationId: `v1.ai-suggestions.dismiss` ## Parameters - `suggestion` (path, string, required): Primary key of the suggestion to dismiss. - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (object, required) - `status` (string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get team statistics `GET /dashboard/stats` Monitor counts by status, average response time, open incidents and the rolling 24 hour uptime with its change against the previous 24 hours. - URL: `https://api.uptizm.com/v1/dashboard/stats` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `stats:read` - Tag: Dashboard - operationId: `v1.dashboard.stats` ## Response 200 Content type: `application/json`. - `data` (object, required) - `monitors_up` (integer, required) - `monitors_down` (integer, required) - `monitors_degraded` (integer, required) - `monitors_maintenance` (integer, required) - `monitors_paused` (integer, min 0, required) - `monitors_pending` (integer, min 0, required) - `monitors_total` (integer, min 0, required) - `avg_response_ms` (integer or null, required) - `open_incidents` (integer, min 0, required) - `uptime_24h` (number or null, required) - `uptime_24h_delta` (number or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List active incidents `GET /dashboard/active-incidents` The team's unresolved incidents, newest first. - URL: `https://api.uptizm.com/v1/dashboard/active-incidents` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `stats:read` - Tag: Dashboard - operationId: `v1.dashboard.active-incidents` ## Response 200 Content type: `application/json`. - `data` (array of IncidentResource and object, required) - `id` (string, required) - `team_id` (string, required) - `title` (string, required) - `title_key` (string or null, required): The translation key of the incident title, sent beside `title`. - `title_params` (array of any, required) - `lifecycle` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `severity` (string, one of `"critical"`, `"warn"`, `"info"`, required) - `impact` (string, one of `"none"`, `"minor"`, `"major"`, `"critical"`, required) - `signal_source` (string, one of `"user_threshold"`, `"ai_anomaly"`, `"manual"`, required) - `ai_owned` (boolean, required) - `primary_monitor_id` (string or null, required) - `trigger_metric_key` (string or null, required) - `started_at` (string, required) - `resolved_at` (string or null, required) - `postmortem_body` (string or null, required) - `postmortem_published_at` (string or null, required) - `assignee` (object): The responder the incident is assigned to, or null when it is unassigned. - `id` (string, required) - `name` (string, required) - `ai_investigation` (object or null): The AI investigation report for the incident, or null when there is none to show. - `verdict` (string or null, required) - `summary` (string or null, required) - `evidence_for` (string or array of string, max items 0, required) - `evidence_against` (string or array of string, max items 0, required) - `used_confirmation` (boolean, required) - `confirmation_region` (string, required) - `model` (string, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `component_status_at_start` (string or null, required) - `component_status_current` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required): Read from the monitor, not the pivot. - `updates` (array of IncidentUpdateResource, required) - `id` (string, required) - `incident_id` (string, required) - `actor` (string, required) - `author` (string or null, required) - `status` (string, one of `"detected"`, `"investigating"`, `"identified"`, `"monitoring"`, `"mitigated"`, `"resolved"`, required) - `message` (string, required) - `is_public` (boolean, required) - `autonomous` (boolean, required) - `display_at` (string, required) - `created_at` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List the worst monitors `GET /dashboard/monitors-snapshot` The team's monitors in the worst state, worst first, capped. - URL: `https://api.uptizm.com/v1/dashboard/monitors-snapshot` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `stats:read` - Tag: Dashboard - operationId: `v1.dashboard.monitors-snapshot` ## Response 200 Content type: `application/json`. - `data` (array of MonitorResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `url` (string or null, required) - `type` (string, required) - `method` (string, one of `"get"`, `"post"`, `"head"`, required) - `status` (string, required) - `paused_by_plan` (boolean, required): Why a paused monitor is paused: true when the plan stopped it, so the client offers an upgrade; false for a pause the customer chose. - `paused_for_downtime` (boolean, required): True when a month of nothing but `down` readings paused a Free monitor. - `last_status` (string or null, one of `"up"`, `"down"`, `"degraded"`, `"paused"`, `"maintenance"`, `null`, required) - `check_interval_sec` (integer, required) - `effective_check_interval_sec` (integer, required): What the loop actually spends, which is the stored value clamped up to the plan's floor. - `timeout_sec` (integer, required) - `regions` (array of any, required) - `expected_status_code` (integer, required) - `request_headers` (array of any): Both emitted so the edit form can prefill what the operator configured. - `request_body` (string or null) - `ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `effective_ai_mode` (AiMode: string, one of `"off"`, `"suggest"`, `"auto"`, required): How much authority the AI has for a given monitor or workspace. - `ai_auto_updates` (boolean, required): Read back by the monitor form's own switch. - `auth_config` (array of any or null, required) - `slo_target` (number or null, required) - `escalation_policy_id` (string or null, required): The pinned paging ladder, or null to fall back to the team default. - `uptime_24h` (string, required): Measured uptime over the trailing 24h, attached by the show action only (null in list/edit responses and while a monitor has no checks yet, which the client renders as "no data"). - `slo_down_minutes_7d` (string, required) - `slo_observed_minutes_7d` (string, required) - `slo_gap_minutes_7d` (string, required) - `slo_measured_minutes_7d` (string, required) - `slo_down_minutes_30d` (string, required) - `slo_observed_minutes_30d` (string, required) - `slo_gap_minutes_30d` (string, required) - `slo_measured_minutes_30d` (string, required) - `tags` (array of any, required) - `show_on_status_page` (boolean, required) - `only_show_if_degraded` (boolean, required) - `follow_redirects` (boolean, required) - `alert_on_down` (boolean, required) - `alert_on_recover` (boolean, required) - `ssl_tracking` (boolean, required) - `anomaly_detection` (boolean, required) - `response_anomaly_sensitivity` (string, one of `"low"`, `"medium"`, `"high"`, required) - `ssl_expires_at` (string or null, required) - `ssl_last_checked_at` (string or null, required) - `ssl_last_error` (string or null, required) - `ssl_alert_threshold_days` (integer, required) - `is_group` (boolean, required) - `parent_id` (string or null, required) - `last_checked_at` (string or null, required) - `last_response_ms` (integer or null, required) - `last_probe_error` (string or null, required): Set when the EDGE refused to run a probe, which is a configuration problem on this monitor rather than an outage of its target. - `last_probe_error_at` (string or null, required) - `next_check_at` (string or null, required) - `consecutive_fails` (integer, required) - `incident_threshold` (integer, required) - `assertion_rules` (array of any or null, required): Null for both means off: no rules asserted, no degraded threshold. - `degraded_after_ms` (integer or null, required) - `maintenance_tolerance_sec` (integer, required) - `description` (string or null, required) - `description_source` (string or null, one of `"ai_draft"`, `"user"`, `null`, required) - `site_kind` (string or null, one of `"ecommerce"`, `"saas"`, `"api"`, `"content"`, `"corporate"`, `"other"`, `null`, required) - `intent` (string or null, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List pending AI suggestions `GET /dashboard/ai-inbox` The newest pending AI suggestions, with `meta.total` counting all of them. - URL: `https://api.uptizm.com/v1/dashboard/ai-inbox` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `stats:read` - Tag: Dashboard - operationId: `v1.dashboard.ai-inbox` ## Response 200 Content type: `application/json`. - `data` (array of string, required) - `meta` (object, required) - `total` (integer, min 0, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List status pages `GET /status-pages` The team's status pages, newest first, cursor-paginated. - URL: `https://api.uptizm.com/v1/status-pages` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:read` - Tag: Status pages - operationId: `status-pages.index` ## Parameters - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of StatusPageResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Create a status page `POST /status-pages` Creates a public status page. The plan caps the count; an unclaimed anonymous workspace can create none. - URL: `https://api.uptizm.com/v1/status-pages` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `status-pages.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `name` (string, max length 200, required) - `slug` (string, max length 100, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`): How the page is addressed: `path` (the default) or `subdomain`. - `custom_domain` (string or null, max length 255) - `brand_color` (string or null, max length 7): Strictly #rrggbb: the client never sends an alpha channel. - `logo_text` (string or null, max length 8) - `description` (string or null, max length 500) - `locale` (string or null, one of `"en"`, `"tr"`, `null`): The language this page publishes in: its own copy, its banner label and its incident titles. - `default_theme` (StatusPageTheme: string, one of `"system"`, `"light"`, `"dark"`): Colour scheme a public status page opens in before the visitor chooses one. - `logo_alignment` (LogoAlignment: string, one of `"left"`, `"center"`): Where the brand logo sits in a public status page's header. - `is_public` (boolean) - `subscriptions_enabled` (boolean) ## Response 201 Content type: `application/json`. - `data` (StatusPageResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get a status page `GET /status-pages/{statusPage}` One status page with its components (attached monitors). - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:read` - Tag: Status pages - operationId: `status-pages.show` ## Parameters - `statusPage` (path, string, required): The status page ID ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update a status page `PUT /status-pages/{statusPage}` Updates the page's settings. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `status-pages.update` ## Parameters - `statusPage` (path, string, required): The status page ID ## Request body Content type: `application/json`. - `name` (string, max length 200) - `slug` (string, max length 100) - `domain_mode` (string, one of `"path"`, `"subdomain"`) - `custom_domain` (string or null, max length 255) - `brand_color` (string or null, max length 7) - `logo_text` (string or null, max length 8) - `description` (string or null, max length 500) - `locale` (string or null, one of `"en"`, `"tr"`, `null`) - `default_theme` (StatusPageTheme: string, one of `"system"`, `"light"`, `"dark"`): Colour scheme a public status page opens in before the visitor chooses one. - `logo_alignment` (LogoAlignment: string, one of `"left"`, `"center"`): Where the brand logo sits in a public status page's header. - `is_public` (boolean) - `subscriptions_enabled` (boolean) ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete a status page `DELETE /status-pages/{statusPage}` Deletes the page. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `status-pages.destroy` ## Parameters - `statusPage` (path, string, required): The status page ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Reorder a page's monitors `PATCH /status-pages/{statusPage}/monitors/reorder` Sets `display_order` for the monitors attached to the page. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/monitors/reorder` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.monitors.reorder` ## Parameters - `statusPage` (path, string, required): The status page ID ## Request body Content type: `application/json`. - `order` (array of object, required) - `id` (string, required) - `display_order` (integer, min 0, required) ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Attach a monitor to a page `POST /status-pages/{statusPage}/monitors` Adds one of the team's monitors to the page, or updates its display fields when it is already attached. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/monitors` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.monitors.attach` ## Parameters - `statusPage` (path, string, required): The status page ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `monitor_id` (string, required) - `display_order` (integer, min 0) - `custom_label` (string or null, max length 255) ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Detach a monitor from a page `DELETE /status-pages/{statusPage}/monitors/{monitor}` Removes a monitor from the page. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/monitors/{monitor}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.monitors.detach` ## Parameters - `statusPage` (path, string, required): The status page ID - `monitor` (path, string, required): The monitor ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Upload a page logo `POST /status-pages/{statusPage}/logo` Replaces the page's logo with the uploaded image (multipart). - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/logo` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.logo.store` ## Parameters - `statusPage` (path, string, required): The status page ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `multipart/form-data`. - `logo` (string, binary, required): Maximum file size: 512 kilobytes. ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove the page logo `DELETE /status-pages/{statusPage}/logo` Removes the logo; the page falls back to its initials. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/logo` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.logo.destroy` ## Parameters - `statusPage` (path, string, required): The status page ID ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Upload a dark-mode logo `POST /status-pages/{statusPage}/dark-logo` Replaces the page's dark-mode logo with the uploaded image (multipart). - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/dark-logo` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.dark-logo.store` ## Parameters - `statusPage` (path, string, required): The status page ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `multipart/form-data`. - `logo` (string, binary, required): Maximum file size: 512 kilobytes. ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove the dark-mode logo `DELETE /status-pages/{statusPage}/dark-logo` Removes the dark-mode logo and leaves the light one. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/dark-logo` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.dark-logo.destroy` ## Parameters - `statusPage` (path, string, required): The status page ID ## Response 200 Content type: `application/json`. - `data` (StatusPageResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `slug` (string, required) - `domain_mode` (string, one of `"path"`, `"subdomain"`, `"custom"`, required): How the page is addressed, as a string: `path` or `subdomain`. - `custom_domain` (string or null, required) - `brand_color` (string, required) - `logo_url` (string or null, required): A signed URL for the logo image. - `dark_logo_url` (string or null, required): A signed URL for the dark logo image; null means there is no dark logo. - `logo_text` (string or null, required) - `default_theme` (string, one of `"system"`, `"light"`, `"dark"`, required): The theme the page shows by default. - `logo_alignment` (string, one of `"left"`, `"center"`, required) - `description` (string or null, required) - `locale` (string or null, required): The language the public page publishes in, null for the deployment default. - `public_url` (string or null, required): The URL the page is actually served at, resolved from the route itself. - `is_public` (boolean, required) - `subscriptions_enabled` (boolean, required) - `monitors` (array of string, required) - `preview_image_url` (string or null): The URL of the page preview image. - `preview_rendered_at` (string or null, required) - `preview_render_status` (string or null, one of `"rendering"`, `"completed"`, `"failed"`, `null`, required): Null means never rendered. - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Re-render the page preview `POST /status-pages/{statusPage}/preview` Queues a new render of the page's preview image. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/preview` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.preview` ## Parameters - `statusPage` (path, string, required): The status page ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 202 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List page subscribers `GET /status-pages/{statusPage}/subscribers` The page's subscribers, newest first. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/subscribers` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:read` - Tag: Status pages - operationId: `v1.status-pages.subscribers.index` ## Parameters - `statusPage` (path, string, required): The status page ID ## Response 200 Content type: `application/json`. - `data` (array of StatusPageSubscriberResource, required) - `id` (string, required) - `email` (string, required) - `subscribed_at` (string or null, required) - `confirmed` (boolean, required) - `newsletter_opt_in` (boolean, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Add a page subscriber `POST /status-pages/{statusPage}/subscribers` Adds a subscriber by email. They receive a confirmation mail and get updates only after confirming. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/subscribers` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.subscribers.store` ## Parameters - `statusPage` (path, string, required): The status page ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `email` (string, email, max length 254, required) ## Response 200 Content type: `application/json`. - `data` (StatusPageSubscriberResource, required) - `id` (string, required) - `email` (string, required) - `subscribed_at` (string or null, required) - `confirmed` (boolean, required) - `newsletter_opt_in` (boolean, required) ## Response 201 Content type: `application/json`. - `data` (StatusPageSubscriberResource, required) - `id` (string, required) - `email` (string, required) - `subscribed_at` (string or null, required) - `confirmed` (boolean, required) - `newsletter_opt_in` (boolean, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove a page subscriber `DELETE /status-pages/{statusPage}/subscribers/{subscriber}` Removes a subscriber from the page. - URL: `https://api.uptizm.com/v1/status-pages/{statusPage}/subscribers/{subscriber}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `status_pages:write` - Tag: Status pages - operationId: `v1.status-pages.subscribers.destroy` ## Parameters - `statusPage` (path, string, required): The status page ID - `subscriber` (path, string, required): The subscriber ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List maintenance windows `GET /scheduled-maintenances` The team's maintenance windows, newest window first, cursor-paginated. - URL: `https://api.uptizm.com/v1/scheduled-maintenances` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `maintenance:read` - Tag: Maintenance - operationId: `scheduled-maintenances.index` ## Parameters - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of ScheduledMaintenanceResource, required) - `id` (string, required) - `team_id` (string, required) - `status_page_id` (string, required) - `title` (string, required) - `description` (string or null, required) - `suppress_alerts` (boolean, required) - `starts_at` (string, required) - `ends_at` (string, required) - `announced_at` (string or null, required) - `monitors` (array of object) - `monitor_id` (string, required) - `name` (string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Plan a maintenance window `POST /scheduled-maintenances` Plans a window on a status page and announces it to the page's confirmed subscribers. While a window is open, incidents on its monitors are held back. - URL: `https://api.uptizm.com/v1/scheduled-maintenances` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `maintenance:write` - Tag: Maintenance - operationId: `scheduled-maintenances.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `status_page_id` (string, uuid, required) - `title` (string, max length 200, required) - `description` (string or null, max length 2000) - `suppress_alerts` (boolean) - `starts_at` (string, date-time, required) - `ends_at` (string, date-time, required) - `monitor_ids` (array of string, uuid) ## Response 201 Content type: `application/json`. - `data` (ScheduledMaintenanceResource and object, required) - `id` (string, required) - `team_id` (string, required) - `status_page_id` (string, required) - `title` (string, required) - `description` (string or null, required) - `suppress_alerts` (boolean, required) - `starts_at` (string, required) - `ends_at` (string, required) - `announced_at` (string or null, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get a maintenance window `GET /scheduled-maintenances/{maintenance}` One window with its affected components. - URL: `https://api.uptizm.com/v1/scheduled-maintenances/{maintenance}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `maintenance:read` - Tag: Maintenance - operationId: `scheduled-maintenances.show` ## Parameters - `maintenance` (path, string, required): The maintenance ID ## Response 200 Content type: `application/json`. - `data` (ScheduledMaintenanceResource and object, required) - `id` (string, required) - `team_id` (string, required) - `status_page_id` (string, required) - `title` (string, required) - `description` (string or null, required) - `suppress_alerts` (boolean, required) - `starts_at` (string, required) - `ends_at` (string, required) - `announced_at` (string or null, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update a maintenance window `PUT /scheduled-maintenances/{maintenance}` Updates the window. - URL: `https://api.uptizm.com/v1/scheduled-maintenances/{maintenance}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `maintenance:write` - Tag: Maintenance - operationId: `scheduled-maintenances.update` ## Parameters - `maintenance` (path, string, required): The maintenance ID ## Request body Content type: `application/json`. - `status_page_id` (string, uuid) - `title` (string, max length 200) - `description` (string or null, max length 2000) - `suppress_alerts` (boolean) - `starts_at` (string, date-time) - `ends_at` (string, date-time) - `monitor_ids` (array of string, uuid) ## Response 200 Content type: `application/json`. - `data` (ScheduledMaintenanceResource and object, required) - `id` (string, required) - `team_id` (string, required) - `status_page_id` (string, required) - `title` (string, required) - `description` (string or null, required) - `suppress_alerts` (boolean, required) - `starts_at` (string, required) - `ends_at` (string, required) - `announced_at` (string or null, required) - `monitors` (array of object, required) - `monitor_id` (string, required) - `name` (string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete a maintenance window `DELETE /scheduled-maintenances/{maintenance}` Deletes the window. - URL: `https://api.uptizm.com/v1/scheduled-maintenances/{maintenance}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `maintenance:write` - Tag: Maintenance - operationId: `scheduled-maintenances.destroy` ## Parameters - `maintenance` (path, string, required): The maintenance ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List notification channels `GET /notification-channels` The team's notification channels, newest first, page-numbered. - URL: `https://api.uptizm.com/v1/notification-channels` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `channels:read` - Tag: Channels - operationId: `v1.notification-channels.index` ## Response 200 Content type: `application/json`. - `data` (array of NotificationChannelResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `channel_type` (string, one of `"slack"`, `"webhook"`, `"pagerduty"`, `"teams"`, required) - `is_enabled` (boolean, required) - `severity` (string, one of `"all"`, `"critical"`, required) - `credentials` (object or object or object or object, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `current_page` (integer, min 1, required) - `from` (integer or null, min 1, required) - `last_page` (integer, min 1, required) - `links` (array of object, required): Generated paginator links. - `url` (string or null, required) - `label` (string, required) - `active` (boolean, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `to` (integer or null, min 1, required): Number of the last item in the slice. - `total` (integer, min 0, required): Total number of items being paginated. - `push_provisioned` (boolean, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Create a notification channel `POST /notification-channels` Creates a channel alerts are delivered through. - URL: `https://api.uptizm.com/v1/notification-channels` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `channels:write` - Tag: Channels - operationId: `v1.notification-channels.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `name` (string, max length 200, required) - `channel_type` (NotificationChannelType: string, one of `"slack"`, `"webhook"`, `"pagerduty"`, `"teams"`, required): The delivery driver a notification channel sends through. - `credentials` (object, required) - `token` (string or null, max length 255) - `channel` (string or null, max length 200) - `url` (string or null, max length 2048) - `secret` (string or null, max length 255) - `routing_key` (string or null, max length 64) - `is_enabled` (boolean) - `severity` (NotificationChannelSeverity: string, one of `"all"`, `"critical"`): Which incidents a channel fires for: all of them or only critical ones. ## Response 201 Content type: `application/json`. - `data` (NotificationChannelResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `channel_type` (string, one of `"slack"`, `"webhook"`, `"pagerduty"`, `"teams"`, required) - `is_enabled` (boolean, required) - `severity` (string, one of `"all"`, `"critical"`, required) - `credentials` (object or object or object or object, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get a notification channel `GET /notification-channels/{channel}` One channel of the team. - URL: `https://api.uptizm.com/v1/notification-channels/{channel}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `channels:read` - Tag: Channels - operationId: `v1.notification-channels.show` ## Parameters - `channel` (path, string, required): The channel ID ## Response 200 Content type: `application/json`. - `data` (NotificationChannelResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `channel_type` (string, one of `"slack"`, `"webhook"`, `"pagerduty"`, `"teams"`, required) - `is_enabled` (boolean, required) - `severity` (string, one of `"all"`, `"critical"`, required) - `credentials` (object or object or object or object, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update a notification channel `PUT /notification-channels/{channel}` Updates the channel. - URL: `https://api.uptizm.com/v1/notification-channels/{channel}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `channels:write` - Tag: Channels - operationId: `v1.notification-channels.update` ## Parameters - `channel` (path, string, required): The channel ID ## Request body Content type: `application/json`. - `name` (string, max length 200) - `channel_type` (NotificationChannelType: string, one of `"slack"`, `"webhook"`, `"pagerduty"`, `"teams"`): The delivery driver a notification channel sends through. - `credentials` (object) - `token` (string or null, max length 255) - `channel` (string or null, max length 200) - `routing_key` (string or null, max length 64) - `url` (string or null, max length 2048) - `secret` (string or null, max length 255) - `is_enabled` (boolean) - `severity` (NotificationChannelSeverity: string, one of `"all"`, `"critical"`): Which incidents a channel fires for: all of them or only critical ones. ## Response 200 Content type: `application/json`. - `data` (NotificationChannelResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `channel_type` (string, one of `"slack"`, `"webhook"`, `"pagerduty"`, `"teams"`, required) - `is_enabled` (boolean, required) - `severity` (string, one of `"all"`, `"critical"`, required) - `credentials` (object or object or object or object, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete a notification channel `DELETE /notification-channels/{channel}` Deletes the channel. - URL: `https://api.uptizm.com/v1/notification-channels/{channel}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `channels:write` - Tag: Channels - operationId: `v1.notification-channels.destroy` ## Parameters - `channel` (path, string, required): The channel ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Send a test notification `POST /notification-channels/{channel}/test` Sends a test message through the channel and reports whether it was delivered. - URL: `https://api.uptizm.com/v1/notification-channels/{channel}/test` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `channels:write` - Tag: Channels - operationId: `v1.notification-channels.test` ## Parameters - `channel` (path, string, required): The channel ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Response 200 Content type: `application/json`. - `data` (object, required) - `delivered` (boolean, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. - 502: Bad Gateway Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get who is on call `GET /on-call/current` Resolves who is on call right now. - URL: `https://api.uptizm.com/v1/on-call/current` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:read` - Tag: On-call - operationId: `v1.on-call.current` ## Parameters - `schedule_id` (query, string) ## Response 200 Content type: `application/json`. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List on-call schedules `GET /on-call/schedules` The team's schedules, newest first, page-numbered. - URL: `https://api.uptizm.com/v1/on-call/schedules` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:read` - Tag: On-call - operationId: `v1.on-call.schedules.index` ## Response 200 Content type: `application/json`. - `data` (array of OnCallScheduleResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `timezone` (string, required) - `rotations` (array of string, required) - `overrides` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `current_page` (integer, min 1, required) - `from` (integer or null, min 1, required) - `last_page` (integer, min 1, required) - `links` (array of object, required): Generated paginator links. - `url` (string or null, required) - `label` (string, required) - `active` (boolean, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `to` (integer or null, min 1, required): Number of the last item in the slice. - `total` (integer, min 0, required): Total number of items being paginated. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Create an on-call schedule `POST /on-call/schedules` Creates a schedule. - URL: `https://api.uptizm.com/v1/on-call/schedules` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `name` (string, max length 200, required) - `timezone` (string or null, max length 64) ## Response 201 Content type: `application/json`. - `data` (OnCallScheduleResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `timezone` (string, required) - `rotations` (array of string) - `overrides` (array of string) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get an on-call schedule `GET /on-call/schedules/{schedule}` One schedule with its rotation and overrides. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:read` - Tag: On-call - operationId: `v1.on-call.schedules.show` ## Parameters - `schedule` (path, string, required): The schedule ID ## Response 200 Content type: `application/json`. - `data` (OnCallScheduleResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `timezone` (string, required) - `rotations` (array of string, required) - `overrides` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update an on-call schedule `PUT /on-call/schedules/{schedule}` Updates the schedule. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.update` ## Parameters - `schedule` (path, string, required): The schedule ID ## Request body Content type: `application/json`. - `name` (string, max length 200) - `timezone` (string or null, max length 64) ## Response 200 Content type: `application/json`. - `data` (OnCallScheduleResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `timezone` (string, required) - `rotations` (array of string) - `overrides` (array of string) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete an on-call schedule `DELETE /on-call/schedules/{schedule}` Deletes the schedule. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.destroy` ## Parameters - `schedule` (path, string, required): The schedule ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Add a rotation slot `POST /on-call/schedules/{schedule}/rotations` Adds a responder slot to the schedule's rotation. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}/rotations` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.rotations.store` ## Parameters - `schedule` (path, string, required): The schedule ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `user_id` (string, uuid, required) - `position` (integer, min 0, required) - `shift_hours` (integer or null, min 1, max 8760) ## Response 201 Content type: `application/json`. - `data` (OnCallScheduleResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `timezone` (string, required) - `rotations` (array of string, required) - `overrides` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Reorder the rotation `PATCH /on-call/schedules/{schedule}/rotations/reorder` Sets `position` for the schedule's rotation slots. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}/rotations/reorder` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.rotations.reorder` ## Parameters - `schedule` (path, string, required): The schedule ID ## Request body Content type: `application/json`. - `order` (array of object, required) - `id` (string, required) - `position` (integer, min 0, required) ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove a rotation slot `DELETE /on-call/schedules/{schedule}/rotations/{rotation}` Removes a responder slot from the rotation. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}/rotations/{rotation}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.rotations.destroy` ## Parameters - `schedule` (path, string, required): The schedule ID - `rotation` (path, string, required): The rotation ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Add an override `POST /on-call/schedules/{schedule}/overrides` Adds a temporary responder override to the schedule. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}/overrides` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.overrides.store` ## Parameters - `schedule` (path, string, required): The schedule ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `user_id` (string, uuid, required) - `starts_at` (string, date-time, required) - `ends_at` (string, date-time, required) ## Response 201 Content type: `application/json`. - `data` (OnCallScheduleResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `timezone` (string, required) - `rotations` (array of string, required) - `overrides` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove an override `DELETE /on-call/schedules/{schedule}/overrides/{override}` Removes a temporary override. - URL: `https://api.uptizm.com/v1/on-call/schedules/{schedule}/overrides/{override}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: On-call - operationId: `v1.on-call.schedules.overrides.destroy` ## Parameters - `schedule` (path, string, required): The schedule ID - `override` (path, string, required): The override ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List escalation policies `GET /escalation-policies` The team's escalation policies, newest first, cursor-paginated. - URL: `https://api.uptizm.com/v1/escalation-policies` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:read` - Tag: Escalation - operationId: `v1.escalation-policies.index` ## Parameters - `per_page` (query, integer, min 1, max 200): Page size, clamped to 1 and the endpoint's maximum (200 on most lists). - `cursor` (query, string): The `meta.next_cursor` of the previous page. ## Response 200 Content type: `application/json`. - `data` (array of EscalationPolicyResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `repeat_last_step` (boolean, required): Emitted on every read, list included: the editor seeds both switches from the roster it already holds, so gating these behind the detail response would make an edit form open with the flags off and then silently save them off. - `is_default` (boolean, required) - `steps` (array of string) - `created_at` (string or null, required) - `updated_at` (string or null, required) - `links` (object, required) - `first` (string or null, required) - `last` (string or null, required) - `prev` (string or null, required) - `next` (string or null, required) - `meta` (object, required) - `path` (string or null, required): Base path for paginator generated URLs. - `per_page` (integer, min 0, required): Number of items shown per page. - `next_cursor` (string or null, required): The "cursor" that points to the next set of items. - `prev_cursor` (string or null, required): The "cursor" that points to the previous set of items. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Create an escalation policy `POST /escalation-policies` Creates a policy. - URL: `https://api.uptizm.com/v1/escalation-policies` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: Escalation - operationId: `v1.escalation-policies.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `name` (string, max length 200, required) - `repeat_last_step` (boolean): Both are optional and both default to false in the schema, so a client that predates them (or simply omits them) creates exactly the policy it created before. - `is_default` (boolean) ## Response 201 Content type: `application/json`. - `data` (EscalationPolicyResource, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `repeat_last_step` (boolean, required): Emitted on every read, list included: the editor seeds both switches from the roster it already holds, so gating these behind the detail response would make an edit form open with the flags off and then silently save them off. - `is_default` (boolean, required) - `steps` (array of string) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Get an escalation policy `GET /escalation-policies/{policy}` One policy with its ordered steps. - URL: `https://api.uptizm.com/v1/escalation-policies/{policy}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:read` - Tag: Escalation - operationId: `v1.escalation-policies.show` ## Parameters - `policy` (path, string, required): The policy ID ## Response 200 Content type: `application/json`. - `data` (EscalationPolicyResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `repeat_last_step` (boolean, required): Emitted on every read, list included: the editor seeds both switches from the roster it already holds, so gating these behind the detail response would make an edit form open with the flags off and then silently save them off. - `is_default` (boolean, required) - `steps` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Update an escalation policy `PUT /escalation-policies/{policy}` Updates the policy. - URL: `https://api.uptizm.com/v1/escalation-policies/{policy}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: Escalation - operationId: `v1.escalation-policies.update` ## Parameters - `policy` (path, string, required): The policy ID ## Request body Content type: `application/json`. - `name` (string, max length 200) - `repeat_last_step` (boolean): Omitting either leaves it as it was: this is a PATCH-shaped update, so an editor that only renames a policy must not silently clear its paging flags. - `is_default` (boolean) ## Response 200 Content type: `application/json`. - `data` (EscalationPolicyResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `repeat_last_step` (boolean, required): Emitted on every read, list included: the editor seeds both switches from the roster it already holds, so gating these behind the detail response would make an edit form open with the flags off and then silently save them off. - `is_default` (boolean, required) - `steps` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Delete an escalation policy `DELETE /escalation-policies/{policy}` Deletes the policy. - URL: `https://api.uptizm.com/v1/escalation-policies/{policy}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: Escalation - operationId: `v1.escalation-policies.destroy` ## Parameters - `policy` (path, string, required): The policy ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Add an escalation step `POST /escalation-policies/{policy}/steps` Adds a step to the policy's paging chain. - URL: `https://api.uptizm.com/v1/escalation-policies/{policy}/steps` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: Escalation - operationId: `v1.escalation-policies.steps.store` ## Parameters - `policy` (path, string, required): The policy ID - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `position` (integer, min 0, required) - `delay_minutes` (integer, min 0, required) - `target_type` (EscalationTargetType: string, one of `"on_call"`, `"user"`, required): Who an escalation step pages: the on-call responder (`on_call`) or a user (`user`). - `target_id` (string or null, uuid) ## Response 201 Content type: `application/json`. - `data` (EscalationPolicyResource and object, required) - `id` (string, required) - `team_id` (string, required) - `name` (string, required) - `repeat_last_step` (boolean, required): Emitted on every read, list included: the editor seeds both switches from the roster it already holds, so gating these behind the detail response would make an edit form open with the flags off and then silently save them off. - `is_default` (boolean, required) - `steps` (array of string, required) - `created_at` (string or null, required) - `updated_at` (string or null, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Reorder escalation steps `PATCH /escalation-policies/{policy}/steps/reorder` Sets `position` for the policy's steps. - URL: `https://api.uptizm.com/v1/escalation-policies/{policy}/steps/reorder` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: Escalation - operationId: `v1.escalation-policies.steps.reorder` ## Parameters - `policy` (path, string, required): The policy ID ## Request body Content type: `application/json`. - `order` (array of object, required) - `id` (string, required) - `position` (integer, min 0, required) ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove an escalation step `DELETE /escalation-policies/{policy}/steps/{step}` Removes a step from the policy. - URL: `https://api.uptizm.com/v1/escalation-policies/{policy}/steps/{step}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `oncall:write` - Tag: Escalation - operationId: `v1.escalation-policies.steps.destroy` ## Parameters - `policy` (path, string, required): The policy ID - `step` (path, string, required): The step ID ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 404: Not found - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List team members `GET /team/members` The members of the key's team with their roles. - URL: `https://api.uptizm.com/v1/team/members` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `team:read` - Tag: Team - operationId: `v1.team.members.index` ## Response 200 Content type: `application/json`. - `data` (array of TeamMemberResource, required) - `id` (string, required) - `name` (string, required) - `email` (string or null, required) - `role` (string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Change a member's role `PUT /team/members/{user}` Changes a member's role. A key can never grant `admin`. - URL: `https://api.uptizm.com/v1/team/members/{user}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `team:manage` - Tag: Team - operationId: `v1.team.members.update` ## Parameters - `user` (path, string, required) ## Request body Content type: `application/json`. - `role` (string, one of `"admin"`, `"editor"`, `"member"`, required) ## Response 200 Content type: `application/json`. - `data` (TeamMemberResource, required) - `id` (string, required) - `name` (string, required) - `email` (string or null, required) - `role` (string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Remove a team member `DELETE /team/members/{user}` Removes a member from the team. - URL: `https://api.uptizm.com/v1/team/members/{user}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `team:manage` - Tag: Team - operationId: `v1.team.members.destroy` ## Parameters - `user` (path, string, required) ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # List pending invitations `GET /team/invitations` The team's pending invitations. - URL: `https://api.uptizm.com/v1/team/invitations` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `team:read` - Tag: Team - operationId: `v1.team.invitations.index` ## Response 200 Content type: `application/json`. - `data` (array of string, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Invite a member `POST /team/invitations` Invites an email address to the team. A key can never invite with role `admin`. - URL: `https://api.uptizm.com/v1/team/invitations` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `team:manage` - Tag: Team - operationId: `v1.team.invitations.store` ## Parameters - `Idempotency-Key` (header, string): Any unique string per logical request. ## Request body Content type: `application/json`. - `email` (string, email, max length 255, required) - `role` (string, one of `"admin"`, `"editor"`, `"member"`, required) ## Response 201 Content type: `application/json`. - `data` (JsonResource, required) ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 422: Validation error - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md --- # Cancel an invitation `DELETE /team/invitations/{invitation}` Cancels a pending invitation. - URL: `https://api.uptizm.com/v1/team/invitations/{invitation}` - Auth: `Authorization: Bearer upz_...` - Required ability (`x-required-ability`): `team:manage` - Tag: Team - operationId: `v1.team.invitations.destroy` ## Parameters - `invitation` (path, string, required) ## Response 204 No body. ## Errors - 401: Unauthenticated - 403: The key lacks the ability this endpoint requires (`required_ability` names it), or the action is not allowed for the team. - 429: Rate limited. Each key may make 120 reads (GET) and 30 writes per minute; wait for `Retry-After` seconds. Error bodies: https://uptizm.com/docs/errors.md. Rate limits: https://uptizm.com/docs/rate-limits.md. Idempotency: https://uptizm.com/docs/idempotency.md