Uptimia

The Uptimia API v2 Endpoint Map

12 min read Updated Sep 10, 2026

Everything you can do in the control panel has a route under /api/v2/. The groups below give each resource's base path, its extra actions and the paths whose names differ from the label on screen, and each group links to the hosted reference, which carries the parameter-by-parameter detail. If you have not made a first call yet, start with Getting Started with the Uptimia API.

Before You Start

  • An API key, created at Settings → API Keys. Only the Owner and Admin roles can open that tab.
  • The base URL for your account. For accounts on www.uptimia.com it is https://www.uptimia.com; the API Documentation card inside a key's editor shows yours.
  • Every request carries Authorization: Bearer <your key>. Requests are JSON in and JSON out.
  • Keys carry the role and monitor-group scope of the seat that minted them. POST /api/v2/auth/token mints one from credentials. 401 and 403 arrive in two different envelopes. Getting Started with the Uptimia API covers all three.
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://www.uptimia.com/api/v2/uptime

Where the Full Reference Lives

The v2 reference is at https://www.uptimia.com/developers. It renders the live /api/v2/openapi.json spec with Redoc: 188 paths and 277 operations, grouped in a sidebar by resource. https://www.uptimia.com/api redirects to https://developers.uptimia.com/api, and the View API Documentation link on a key's editor page points at https://developers.uptimia.com, so both land on the older site, which still publishes the v1 (legacy) reference.

The API key editor's API Documentation card, showing the masked key, the account's API base URL and the copy-ready curl call that every v2 request follows.

The spec behind it is also served raw, and the older site is still online:

Address What it is
https://www.uptimia.com/api/v2/openapi.json The live OpenAPI 3 spec, generated from the running code. Feed it to your own client generator
https://developers.uptimia.com The v1 (legacy) reference, still published and still where /api and the control panel's link land

The hosted v2 reference at /developers: the Getting started section beside a sidebar that groups every endpoint by resource (Uptime, SSL, Domain, Speed, Transaction and the rest), so you can jump straight to a monitor family.

Two URLs that older documentation pointed at no longer resolve. https://www.uptimia.com/api/v2/ returns 404, because the version prefix has no index page, and /api/v2/keys returns 404 as well, because API keys live at /api/v2/api-keys.

Monitor Paths by Family

Each monitor family is its own resource with its own base path, and that path is not always the word you see in the control panel.

Family (on-screen) Base path Type key in logs and incidents
Uptime /api/v2/uptime uptime
Transaction /api/v2/transaction transaction
API /api/v2/api-monitor api
Heartbeat /api/v2/heartbeat heartbeat
Server /api/v2/server server
Speed /api/v2/speed fpl
Real User /api/v2/rum rum
SSL /api/v2/ssl ssl
Domain /api/v2/domain domain
DNS /api/v2/dns dns
Virus /api/v2/virus virus
Blacklist /api/v2/blacklist blacklist

Eleven of the twelve families answer the same five calls: GET the base path to list, POST it to create, then GET, PATCH and DELETE on /{id}. Server is the exception. Its list is GET /api/v2/server/list, and a GET on the bare path answers 405 (see Path Quirks). Four families also accept PUT on /{id} as an alias of PATCH: API, Heartbeat, DNS and Blacklist.

Families also carry their own actions:

Path Purpose
POST /api/v2/heartbeat/{id}/regenerate-token Issue a new ping token; the old URL stops working
POST /api/v2/heartbeat/{id}/test-ping Send a ping on the monitor's behalf
POST /api/v2/heartbeat/cron-preview Validate a cron expression and list its next runs
POST /api/v2/api-monitor/test · /{id}/test Run an unsaved chain, or re-run a saved one
POST /api/v2/transaction/{id}/test · /test-all Queue an immediate test run
POST /api/v2/dns/{id}/recheck · /blacklist/{id}/recheck Pull the next sweep forward
POST /api/v2/dns/{id}/changes/{changeId}/ack · /dynamic Accept a record change into the baseline, or mark the record as dynamic
GET /api/v2/rum/{id}/snippet · POST /{id}/check-code Fetch the tracking script, then verify it is installed
GET /api/v2/rum/{id}/data/{summary|pages|js-errors|geographic|browsers|devices|os} The RUM analytics breakdowns
GET /api/v2/speed/{id}/{vitals|averages|components|dead-elements|pagespeed} The Speed detail-page datasets
GET /api/v2/domain/zone-lookup Resolve a hostname to its registrable zone before creating a monitor
POST /api/v2/server/{id}/rotate-key Rotate a server agent's key

Three actions work across families, with the family key in the path: POST /api/v2/monitors/{type}/{id}/pause, /resume and /copy. Bulk creation is POST /api/v2/monitors/bulk, with POST /api/v2/monitors/bulk/preview to dry-run the list first.

Reading History: Logs, Incidents, Timelines and Charts

The first two readers are account-wide; the rest are per-monitor.

Path Purpose
GET /api/v2/logs Check results across ten families: uptime, speed, transaction, SSL, domain, virus, server, API, DNS and blacklist. Filter by date, monitor, status and probe location. RUM check logs never appear here; read them at /api/v2/rum/{id}/logs. Heartbeat pings come back only when the monitor filter names heartbeat monitors and nothing else
GET /api/v2/logs/{type}/{id} One check result in full
GET /api/v2/incidents/active · /history Open incidents, and closed ones
GET /api/v2/incidents/{type}/{id} One incident. DELETE on the same path removes it
GET /api/v2/{family}/{id}/logs · /logs/{logId} That monitor's own check log. RUM has the list but no per-record path. On API, Blacklist and DNS the per-record segment is the check's timestamp, /logs/{time}. Heartbeat and Server have neither; see the note under the table
GET /api/v2/{family}/{id}/incidents That monitor's incidents
GET /api/v2/{family}/{id}/timeline Up/down segments for the status bar. Every family except API, Heartbeat, DNS and Blacklist, which expose /summary instead
GET /api/v2/{family}/{id}/charts/{availability|response-time|load-time|steps} Chart series, per family
GET /api/v2/{family}/{id}/summary The detail-page header figures (API, Heartbeat, DNS and Blacklist)

Two families are exceptions. Heartbeat's check history is GET /api/v2/heartbeat/{id}/pings, and Server's reader is GET /api/v2/server/{id}/data, the time-series metric samples the agent has sent. Neither family has a /logs route.

File exports live beside the JSON readers, two of them at GET /api/v2/logs/export/csv and GET /api/v2/incidents/export/csv. Per record, they are /export/pdf and /export/html under both /logs/{type}/{id} and /incidents/{type}/{id}, and POST /api/v2/logs/{type}/{id}/public-link and POST /api/v2/incidents/{type}/{id}/public-link mint a no-login share URL. Exporting Your Data covers the formats and what each one contains.

Your plan's readable window sets how far back a range can reach. On Uptime, Speed and Virus, a date_start earlier than that floor is silently raised to it rather than refused. Omitting the range does not get you everything either. GET /api/v2/uptime/logs falls back to the floor itself. Every other clamped endpoint falls back to its own default window, one of 24 hours, 7, 14, 30 or 90 days by route, and that default is raised to the floor only if the floor is more recent. The other families pass the range through unchanged, so they answer an older window as asked, as far back as their stored history reaches. See Data and Log Retention.

Publishing: Status Pages, Threads, Updates and Subscribers

Path Purpose
GET, POST /api/v2/status-pages List and create pages
GET, PATCH, DELETE /api/v2/status-pages/{id} One page
GET, PATCH /api/v2/status-pages/{id}/settings Presentation settings for that page
GET, POST /api/v2/status-pages/threads Incident threads; is_resolved=0 or 1 filters the list
GET /api/v2/status-pages/threads/lookup Find the existing thread for a monitor or incident before opening a second one
GET, PATCH, DELETE /api/v2/status-pages/threads/{id} One thread with its updates
POST /api/v2/status-pages/threads/{threadId}/updates Post an update, advancing the thread's status
PATCH, DELETE /api/v2/status-pages/updates/{id} Edit or remove one update
GET /api/v2/status-pages/{id}/subscribers · DELETE /{subscriberId} The email subscriber list
GET /api/v2/status-pages/notify-reach How many confirmed subscribers an update would reach

Reporting: Scheduled Reports, Sends, Exports and Public Links

GET and POST /api/v2/reports list and create scheduled reports, and GET, PATCH and DELETE /api/v2/reports/{id} handle one. Send one immediately with POST /api/v2/reports/{id}/send. GET /api/v2/reports/{id}/export/{pdf|html|csv} downloads it, POST /api/v2/reports/{id}/public-link renders a shareable page, and POST /api/v2/reports/custom builds and delivers a one-off report without saving a schedule. GET /api/v2/reports/branding-themes lists the themes a report can use.

Maintenance Windows

Path Purpose
GET, POST /api/v2/maintenance List windows and create one. horizon_days sets how many days of occurrences the list expands, clamped to 1–31 (default 14)
GET, PATCH, DELETE /api/v2/maintenance/{id} One window
POST /api/v2/maintenance/preview Expand a draft into its next occurrences without saving it
GET /api/v2/maintenance/monitors The monitors that can be put into a window
DELETE /api/v2/maintenance/expired Remove every past one-time window in one call

preview always answers 200, so read data.valid rather than the status code. Automating Maintenance from Your Pipeline covers driving these from a deploy pipeline, including the ordering that avoids a false alert.

Alerting: Contacts, Integrations, Escalation Policies and Alert Groups

Path Purpose
GET, POST /api/v2/contacts · GET, PATCH, DELETE /{id} The address book
GET /api/v2/contacts/types The channel types this account can create, including its own integrations
GET /api/v2/contacts/selected/{monitorId}/{type} Every contact with an is_selected flag, already expanded through teams and seats: the answer to "who gets alerted when this monitor goes down"
POST /api/v2/contacts/{id}/request-confirmation · /confirm Send an SMS confirmation code, then verify it
GET, POST /api/v2/integrations · GET, PATCH, DELETE /{id} Integration profiles
POST /api/v2/integrations/{id}/test Send a test notification
GET, POST /api/v2/integrations/webhooks · GET, PATCH, DELETE /{id} Outbound webhooks, on their own sub-path
GET, POST /api/v2/escalation-policies · GET, PATCH, DELETE /{id} Escalation ladders. See Escalation Policies for the step limits
GET /api/v2/alert-groups/active · GET /{id} Open alert groups and one group in detail
POST /api/v2/alert-groups/{id}/ack · /unack Acknowledge and un-acknowledge
GET, PATCH /api/v2/alerting-settings The seven account-wide grouping and acknowledgment settings

Reusable Configuration

Path Purpose
GET, POST /api/v2/groups · PATCH, DELETE /{id} Monitor groups: the ids the monitor endpoints' groups field expects
GET, POST /api/v2/monitor-templates · PATCH, DELETE /{id} Saved monitor setups. See Monitor Templates
POST /api/v2/monitor-templates/{id}/used Record that a template was used to create a monitor
GET /api/v2/locations The probe catalog, grouped by region
GET, POST /api/v2/location-profiles · PATCH, DELETE /{id} Saved probe sets. See Location Profiles
POST /api/v2/location-profiles/{id}/apply Write a profile's probes into a list of monitors
GET, POST /api/v2/branding · GET, PATCH, DELETE /{id} Branding themes, plus /{id}/duplicate and /{id}/logo

Creating a monitor from a template is a client-side merge. Take the template's settings, overlay the new name and address, POST it to that family's create path, then call /{id}/used.

apply returns 200 even when every monitor failed, so read data.results[].ok per entry. If a profile ends up with fewer than 6 probes, every entry fails with too_few_locations and nothing is written.

Account: Users, Roles, Teams and Settings

Path Purpose
GET, POST /api/v2/users · GET, PATCH, DELETE /{id} The seat roster and its lifecycle
POST /api/v2/users/{id}/resend-invite · GET /{id}/invite-link Re-send or fetch a pending activation link
POST /api/v2/users/{id}/reset-2fa Clear a locked-out member's second factor
PATCH /api/v2/users/me The account owner's own alerting preferences
GET /api/v2/roles The role and capability matrix, the same permissions the server enforces on every call
GET, POST /api/v2/teams · GET, PATCH, DELETE /{id} Teams as alert recipients
GET /api/v2/team/audit Recent access changes
GET /api/v2/activity-log · /stats · /export The full account activity log
GET, PATCH /api/v2/settings/profile · GET /api/v2/settings/timezones Profile and time zone list
GET, POST /api/v2/api-keys · GET, PATCH, DELETE /{id} Manage keys over the API
GET /api/v2/subscription/{plans|current|usage|quote} Plan and usage figures
GET /api/v2/billing/{info|history|vat} · GET /invoice/{id}/pdf Billing records
GET /api/v2/search Cross-resource search
GET /api/v2/dashboard/{summary|availability|response-times|monitors} The dashboard's own datasets

The hosted reference leaves out the account-management and control-panel-internal groups, so the paths above are the record for those. Server monitors, API keys, the activity log, dashboard, search, bulk creation, subscription, billing, payments and the account-security half of Settings are all live and callable, and none of them appear in the reference sidebar.

Path Quirks That Cause a 404

You would guess The path is
/api/v2/api /api/v2/api-monitor (singular and hyphenated)
/api/v2/keys /api/v2/api-keys
/api/v2/server for the list /api/v2/server/list. A GET on /api/v2/server answers 405, because that path is POST-only
/api/v2/heartbeat/{id}/logs /api/v2/heartbeat/{id}/pings
/api/v2/alert-groups as a collection There is none. Use /api/v2/alert-groups/active
/api/v2/fpl for Speed monitors The resource path is /api/v2/speed. Everywhere else the key is fpl: the type segment of log, incident, pause and resume paths, the type field of POST /api/v2/monitors/bulk, the monitors[fpl][] filters and the maintenance by_type flags. The incident readers, the exports and the /api/v2/dashboard/bulk/* actions also accept speed. Log paths, pause and resume do not

Pagination differs by endpoint. Monitor lists take limit and offset, GET /api/v2/logs takes page and limit (default 20), and GET /api/v2/monitor-templates takes neither, returning a bare {"data": [...]} with no metadata envelope to read a total from. /api/v2/uptime/logs still exists alongside /api/v2/logs; new code should use the latter.

Rate Limits: What Is Throttled

Uptimia sets no global per-key request quota, and ordinary monitor reads and writes are not counted against one. Seven named actions carry their own limits. The first five each start real work; the last two are credential actions:

Action Limit Counted per Response when exceeded
POST /api/v2/auth/token 20 per 15 minutes Client IP 429 too_many_attempts
POST /api/v2/api-monitor/test and /{id}/test 10 per minute Account 429 rate_limited
POST /api/v2/blacklist/{id}/recheck 10 per minute Account 429 rate_limited
POST /api/v2/dns/{id}/recheck 10 per minute Account 429 rate_limited
POST /api/v2/contacts/{id}/request-confirmation (SMS) 1 per minute and 5 per hour, per phone number Account and number 429 too_many_requests
POST /api/v2/settings/password 5 per 15 minutes Seat 429 too_many_requests
POST /api/v2/settings/resend-verification 3 per hour User 429 too_many_requests

Uptimia writes check results on the monitor's own schedule, so polling a log endpoint faster than the monitor checks returns the same rows.

Telling a 404 Apart From a 405

Uptimia renders routing-level 404s and 405s as HTML error pages, because the request never reaches a controller. A 404 raised inside a controller, for a record that is not yours, comes back as ordinary JSON. A client that calls response.json() unconditionally will throw on a typo in a path, so branch on the status code first.

Status Body What it means
404 {"status":"error","code":"monitor_not_found","message":"..."} The path is real, but the record does not exist or does not belong to your account. The code names the resource: monitor_not_found, incident_not_found, contact_not_found, log_not_found and so on. A bare not_found is the exception, so branch on the status code, not the string
404 HTML No such route. A typo in the path, or a path from an older version
405 HTML The path exists under another method

Probing a path from the terminal tells you which you hit:

curl -s -o /dev/null -w '%{http_code}\n' https://www.uptimia.com/api/v2/api-keys

401 means the route exists and needs authentication, 404 means it does not exist, and 405 means it exists with a different method. Error envelopes for 401, 403 and 400 are in Getting Started with the Uptimia API.

Related Articles

Was this article helpful?