Skip to main content

Documentation index for AI agents: llms.txt. Every page here is also served as markdown: add .md to its address, or request it with Accept: text/markdown.

Monitors API

Website and endpoint monitoring CRUD and operations. This page lists all 51 endpoints in the Monitors area of the Visual Sentinel REST API.

Base URL: https://visualsentinel.com. Unless an endpoint says otherwise it accepts an API key or a session cookie, see Authentication. Most error responses use the ErrorResponse shape, see Errors and Rate limits.

Endpoints

List monitors

GET /api/monitors

Get all monitors for the current organization with pagination and filtering.

Parameters

  • page (query, integer, optional): Page number. Results are paginated only when page is sent; otherwise up to 2,000 monitors are returned in one response. Default: 1. Minimum 1.
  • limit (query, integer, optional): Default: 50. Minimum 1, maximum 100.
  • status (query, string, optional): Filter by status. all (or no value) returns every monitor; paused returns paused monitors. One of: all, operational, degraded, down, pending, changed, paused.
  • scope (query, string, optional): Product-level one-tap scope. api includes API and GraphQL; site includes every other monitor type. One of: site, api.
  • type (query, string, optional): Filter by monitor type. One value or a comma-separated list, any case, for example api,graphql. Values: see StoredMonitorType.
  • enabled (query, boolean, optional)
  • search (query, string, optional): Search by name or URL
  • tags (query, string, optional): Comma-separated list of tags
  • sortBy (query, string, optional): One of: createdAt, name, status, uptime. Default: createdAt.
  • sortOrder (query, string, optional): One of: asc, desc. Default: desc.
  • includeSummary (query, boolean, optional): On page 1, include exact fleet-wide status/type counts and average uptime without loading every monitor row. Default: false.

Responses

  • 200: List of monitors. By default (no page query parameter) the response is a bare array of Monitor objects for backward compatibility. When the request sends Accept: application/json AND includes a page query parameter, the response is the data-wrapped paginated envelope shown below. Body: array of Monitor or MonitorListResponse.

Create monitor

POST /api/monitors

Create a website or endpoint monitor. Uptime checks start right away. Use locations for check regions (EU, US, ASIA) and visualEnabled / visualRegion for screenshots.

Request body (required): CreateMonitorRequest.

Responses

  • 200: Monitor created. Body: Monitor.
  • 400: Validation failed. Codes include INVALID_LOCATION, LOCATION_UNSUPPORTED_FOR_TYPE, REGION_UNAVAILABLE, INVALID_API_CONFIG, INVALID_ASSERTION_PATTERN, unsafe_url and domain_not_found.
  • 403: Plan or role restriction: LIMIT_EXCEEDED (monitor or visual slot limit), FEATURE_RESTRICTED, LOCATION_RESTRICTED, VISUAL_VIEWPORT_LIMIT, or an API key without monitors:write.
  • 409: DEPENDENCY_EXISTS: that service is already monitored.
  • 429: Too many monitors created in the last hour.

Bulk delete monitors

DELETE /api/monitors

Delete multiple monitors at once.

Request body (required): object.

FieldTypeRequiredDescription
idsarray of string (uuid)Yes

Responses

  • 200: Monitors deleted. Body: object.
FieldTypeRequiredDescription
messagestringNo
deletedCountintegerNo

Get monitor

GET /api/monitors/{id}

Get detailed information about a specific monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Monitor details. Body: Monitor.
  • 404: Monitor not found.

Update monitor

PUT /api/monitors/{id}

Update a monitor. Every field is optional; send only what changes. Send enabled: false to pause and enabled: true to resume. locations and visualRegion move checks between regions (EU, US, ASIA).

Parameters

  • id (path, string (uuid), required)

Request body (required): UpdateMonitorRequest.

Responses

  • 200: Monitor updated. Body: Monitor.
  • 400: Validation failed. Codes include INVALID_LOCATION, LOCATION_UNSUPPORTED_FOR_TYPE, REGION_UNAVAILABLE, INVALID_API_CONFIG (also: apiConfig that differs from the saved value on a monitor that is not API or GRAPHQL), INVALID_KEYWORD_CONFIG (an unknown field inside keywordConfig, or enabled: true for a keyword check with no words), UNSUPPORTED_FIELD (retryCount, retryDelay, environment, priority or expectedHeaders, which are not stored; fields lists them) and INVALID_ASSERTION_PATTERN.
  • 403: Plan or role restriction, for example LOCATION_RESTRICTED or FEATURE_RESTRICTED.
  • 404: Monitor not found.
  • 409: ASSERTIONS_CHANGED: the stored response checks changed since expectedAssertions was read.

Delete monitor

DELETE /api/monitors/{id}

Delete a monitor. The monitor and its history can be restored for 24 hours via the restore endpoint; after that it is permanently removed.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Monitor deleted.

Trigger manual check

POST /api/monitors/{id}/check

Manually trigger a monitor check and get immediate results.

Parameters

  • id (path, string (uuid), required)

Responses

Get check history

GET /api/monitors/{id}/checks

Get recent check results for a monitor with timing breakdown (DNS, connect, TLS, TTFB). Supports time range filtering and optional response body inclusion for API monitors.

Parameters

  • id (path, string (uuid), required)
  • limit (query, integer, optional): Number of checks to return Default: 50. Minimum 1, maximum 500.
  • timeRange (query, string, optional): Time range to fetch checks for One of: 1h, 6h, 24h, 7d, 30d. Default: 24h.
  • includeBody (query, boolean, optional): Include response body (API monitors only, increases payload size) Default: false.

Responses

  • 200: Check history. Body: object.
  • 404: Monitor not found.
  • 503: Database unavailable.
FieldTypeRequiredDescription
checksarray of objectNo
checks[].idstringNo
checks[].statusstringNoOne of: SUCCESS, FAILURE, TIMEOUT, ERROR.
checks[].statusCodeinteger or nullNo
checks[].responseTimenumber or nullNoTotal response time in ms
checks[].locationstring or nullNoChecker source location for this result.
checks[].errorstring or nullNo
checks[].createdAtstring (date-time)No
checks[].assertionResultsanyNoAPI assertion results if configured
checks[].responseBodystring or nullNoOnly included when includeBody=true
checks[].firstByteTimenumber or nullNoTime to first byte in ms
checks[].dnsTimenumber or nullNoDNS resolution time in ms
checks[].connectTimenumber or nullNoTCP connection time in ms
checks[].tlsTimenumber or nullNoTLS handshake time in ms

Get uptime statistics

GET /api/monitors/{id}/uptime

Get uptime percentage and history for a monitor.

Parameters

  • id (path, string (uuid), required)
  • period (query, string, optional): Preset window. window is accepted as an alias. One of: 1h, 6h, 24h, 7d, 30d, 90d, 365d. Default: 24h.
  • from (query, string, optional): Custom range start (ISO date or date-time). Send with to.
  • to (query, string, optional): Custom range end (ISO date or date-time, a date includes that whole day).

Responses

Get response time metrics

GET /api/monitors/{id}/response-time

Get response time history and statistics.

Parameters

  • id (path, string (uuid), required)
  • period (query, string, optional): One of: 1h, 24h, 7d, 30d. Default: 24h.

Responses

Get DNS records

GET /api/monitors/{id}/dns

Get DNS record details for a monitor's domain.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: DNS records for the monitor's domain.

Get PageSpeed data

GET /api/monitors/{id}/pagespeed

Get cached PageSpeed Insights data for a monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: PageSpeed results. Body: object.
FieldTypeRequiredDescription
metricsobject or nullNoThe last successful result is retained when later tests fail.
metrics.fetchedAtstring (date-time)NoWhen the result was measured.
lastErrorPageSpeedFailureNo

Trigger PageSpeed check

POST /api/monitors/{id}/pagespeed

Trigger a fresh PageSpeed Insights analysis.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: PageSpeed analysis triggered.

Get content snapshots

GET /api/monitors/{id}/snapshots

Get content change detection snapshots for a monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Content snapshots.

Get monitor notification channels

GET /api/monitors/{id}/channels

Get notification channels assigned to a specific monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Assigned notification channels.

Update monitor notification channels

PUT /api/monitors/{id}/channels

Set which notification channels are assigned to a monitor.

Parameters

  • id (path, string (uuid), required)

Request body (required): object.

FieldTypeRequiredDescription
channelIdsarray of string (uuid)No

Responses

  • 200: Channels updated.

Get anomalies

GET /api/monitors/{id}/anomalies

Get detected anomalies for a monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Anomaly data.

Create anomaly

POST /api/monitors/{id}/anomalies

Manually create an anomaly record for a monitor.

Authentication: session cookie only. API keys are refused.

Parameters

  • id (path, string (uuid), required)

Responses

  • 201: Anomaly created.

Update anomaly

PATCH /api/monitors/{id}/anomalies

Update or acknowledge an anomaly.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Anomaly updated.

Get monitor report

GET /api/monitors/{id}/report

Get a comprehensive report for a monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Monitor report data.

Generate monitor report

POST /api/monitors/{id}/report

Trigger generation of a new report for a monitor.

Authentication: session cookie only. API keys are refused.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Report generated.

Update monitor report settings

PUT /api/monitors/{id}/report

Update report generation settings for a monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Report settings updated.

List sub-pages

GET /api/monitors/{id}/sub-pages

Get all sub-pages configured for visual monitoring on this monitor.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: List of sub-pages.

Add sub-page

POST /api/monitors/{id}/sub-pages

Add a new sub-page for visual monitoring.

Parameters

  • id (path, string (uuid), required)

Request body (required): object.

FieldTypeRequiredDescription
pathstringYes
namestringNo

Responses

  • 201: Sub-page added.

Update sub-page

PUT /api/monitors/{id}/sub-pages

Update a sub-page configuration: rename it, turn it on or off, reset its baseline to the newest capture, or accept one of its captures (setBaselineFile) as the baseline. setBaselineFile must name a capture of this sub-page (of the given visualTargetId, or of its desktop target when left out); any other file name returns 400 BASELINE_FILE_NOT_FOUND.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Sub-page updated.
  • 400: Invalid request, or BASELINE_FILE_NOT_FOUND (the file is not a capture of this sub-page).
  • 404: Monitor, sub-page or visual target not found.

Delete sub-page

DELETE /api/monitors/{id}/sub-pages

Remove a sub-page from visual monitoring.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Sub-page deleted.

Get monitor alert settings

GET /api/monitors/alert-settings

Get alert settings for all monitors in the organization.

Responses

  • 200: Monitor alert settings.

Bulk update monitor alerts

PUT /api/monitors/bulk-alerts

Changes alert settings and notification channels on up to 2,000 monitors in one all-or-nothing change. Every monitor and channel must belong to your organization, or nothing changes. Any role except Viewer; API keys need the monitors:write scope. Limited to 30 requests per minute per organization.

Request body (required): BulkUpdateAlertsRequest.

Responses

  • 200: Updated. Body: object.
  • 400: Fails validation (details holds formErrors and fieldErrors)
  • 401: Not signed in, or no valid API key.
  • 403: Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, the API key lacks the monitors:write scope or plan API access, a monitor ID is not in your organization or repeats, or a channel ID is not in your organization.
  • 429: More than 30 requests in a minute to this bulk route for the organization. Header Retry-After: Seconds until the window resets. Header X-RateLimit-Limit. Header X-RateLimit-Remaining. Header X-RateLimit-Reset: ISO time the window resets. Body: MonitorBulkRateLimitError.
FieldTypeRequiredDescription
updatedCountintegerNoMonitors whose alert fields were updated, or the number of IDs sent when updates changed no fields.

Content change detection

POST /api/monitors/content

Check content changes for a URL.

Responses

  • 200: Content check result.

Export monitors

GET /api/monitors/export

Export all monitors data as CSV or JSON.

Parameters

  • format (query, string, optional): One of: csv, json. Default: csv.

Responses

  • 200: Exported monitor data.

Test monitor URL

POST /api/monitors/test

Test a URL before creating a monitor to verify it's reachable.

Request body (required): object.

FieldTypeRequiredDescription
urlstring (uri)Yes

Responses

  • 200: Test result.

Populate favicons

POST /api/monitors/populate-favicons

Fetch and store favicons for all monitors that don't have one.

Responses

  • 200: Favicons populated.

Restore a deleted monitor

POST /api/monitors/{id}/restore

Restore a monitor deleted within the last 24 hours, including its full check and incident history. Returns 410 when the restore window has passed.

Parameters

  • id (path, string (uuid), required)

Responses

  • 200: Monitor restored.
  • 404: Monitor not found or not deleted.
  • 410: Restore window has passed.

List recently deleted monitors

GET /api/monitors/deleted

Monitors deleted within the last 24 hours that can still be restored.

Responses

  • 200: List of restorable monitors.

List service dependencies

GET /api/dependencies

The catalog of third-party services you can monitor as dependencies, each with your workspace's monitor for it when you have one. API keys need the monitors:read scope.

Responses

  • 200: Service catalog with your monitors. Body: ServiceDependencyCatalog.
  • 401: Not signed in, or no valid API key.
  • 403: The key lacks the monitors:read scope, or the plan does not include API access.
  • 500: The catalog could not be loaded.

Get a service's provider status

GET /api/dependencies/{slug}

What the service's provider reports on its own status page right now: overall state, each part (component), open incidents and scheduled maintenance. When the provider publishes no feed we can read, available is false and statusUrl still links to its public status page. API keys need the monitors:read scope.

Parameters

  • slug (path, string, required): Service slug from GET /api/dependencies, e.g. github.

Responses

  • 200: Provider status, or why there is none. Body: ServiceDependencyStatus or ServiceDependencyNoFeed.
  • 401: Not signed in, or no valid API key.
  • 403: The key lacks the monitors:read scope, or the plan does not include API access.
  • 404: Unknown service.
  • 502: The provider's status feed is not answering right now.

Choose the parts a service monitor follows

PATCH /api/dependencies/{slug}

Sets which of the provider's parts (components) your monitor for this service alerts on. An empty list follows everything the provider reports. The monitor must exist (start monitoring the service first) and the provider must publish a status feed. Requires a role that can change monitors; API keys need the monitors:write scope.

Parameters

  • slug (path, string, required): Service slug from GET /api/dependencies, e.g. github.

Request body (required): UpdateServiceDependencyComponentsRequest.

Responses

  • 200: Saved. Body: UpdateServiceDependencyComponentsResponse.
  • 400: Invalid selection, or the service has no status feed to follow parts of.
  • 401: Not signed in, or no valid API key.
  • 403: Your role cannot change monitors, the key lacks the monitors:write scope, or the plan does not include API access.
  • 404: Unknown service, or no monitor for it in this workspace yet.
  • 409: One or more of the parts are no longer listed by the provider.
  • 502: The provider's status feed is not answering right now.

Check region availability

GET /api/monitoring/regions

Whether this workspace can use the Asia Pacific (ASIA) region for uptime locations and visualRegion. Use ASIA only when both apac.available and apacAllowed are true; otherwise monitor create and update with ASIA return 400 REGION_UNAVAILABLE (or 403 LOCATION_RESTRICTED when the plan excludes it). EU and US do not depend on this check. API key scope: monitors:read.

Responses

  • 200: Region availability. Body: object.
  • 403: No organization membership, or an API key without monitors:read.
FieldTypeRequiredDescription
apacobjectYes
apac.availablebooleanYesA healthy Asia Pacific check node is online.
apac.labelstringYesDisplay name of the region.
apacAllowedbooleanYesThis workspace is enabled for Asia Pacific and its plan allows the region.

Resume a monitor's alert email to an unsubscribed address

DELETE /api/monitors/{id}/alert-email-mute

Turns a monitor's alert email back on for an address that used the unsubscribe link of one of its alert emails. Each unsubscribe is listed in emailMutes of GET /api/notification-channels. Other addresses and channels are not affected. Requires the Owner, Admin or Developer role; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.

Request body (required): object.

FieldTypeRequiredDescription
addressstring (email)YesThe address that unsubscribed.

Responses

  • 200: Alert email to the address is on again. Body: object.
  • 400: No address, or a body that is not JSON.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer or Member role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 404: Monitor not found, or the address is not unsubscribed from it.
  • 503: Service temporarily unavailable.
FieldTypeRequiredDescription
resumedconstant trueYes

Mute a monitor's alerts

POST /api/monitors/{id}/mute

Stops this monitor's alerts from going to any notification channel for the chosen duration. Checks keep running, incidents still open and close, alerts still appear in the dashboard, and possible-malware alerts are always sent; a new request replaces the current end time. Requires the Owner, Admin or Developer role; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.

Request body (required): MonitorAlertMuteRequest.

Responses

  • 200: Muted. Body: MonitorAlertMuteResponse.
  • 400: Body is not JSON, or durationMinutes is not 60, 480, 1440 or 10080 (the response then lists allowedDurationMinutes) Body: object.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer or Member role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 404: Monitor not found.
  • 503: Service temporarily unavailable.

Unmute a monitor's alerts

DELETE /api/monitors/{id}/mute

Ends the monitor's alert mute at once. Alerts held back during the mute are not sent afterwards; a problem that is still going alerts again at its next reminder. Succeeds when the monitor is not muted. Requires the Owner, Admin or Developer role; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.

Responses

  • 200: Unmuted (alertsMutedUntil is null) Body: MonitorAlertMuteResponse.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer or Member role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 404: Monitor not found.
  • 503: Service temporarily unavailable.

Match a monitor to your servers

POST /api/monitors/{id}/resolve

Looks up the addresses the monitor's URL points to now (with origin addresses behind Cloudflare when a Cloudflare integration is connected), saves them on the monitor, and records matching servers as suggestions. Dismissed and manual links are never changed; automatic links can be confirmed, moved, or returned to a suggestion when the site's address changed. Takes no body. Any role except Viewer; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.

Responses

  • 200: Lookup done. Body: MonitorServerResolveResponse.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, or the API key lacks the monitors:write scope or plan API access.
  • 404: Monitor not found.

List servers linked to a monitor

GET /api/monitors/{id}/servers

Returns the servers confirmed as hosting this monitor's site, the automatic matches waiting for a decision, and the addresses from the last lookup. Dismissed links are not returned. API keys need the monitors:read scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.

Responses

  • 200: Linked servers and suggestions. Body: MonitorServerListResponse.
  • 401: Not signed in, or no valid API key.
  • 404: Monitor not found.

POST /api/monitors/{id}/servers

Records that the monitor's site runs on this server, as a confirmed manual link. An existing suggested or dismissed link to the same server becomes a confirmed manual link. Any role except Viewer; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.

Request body (required): object.

FieldTypeRequiredDescription
serverIdstring (uuid)YesA server of your organization.

Responses

  • 201: Linked. Body: MonitorServerLink.
  • 400: serverId is missing or not a string.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, or the API key lacks the monitors:write scope or plan API access.
  • 404: Monitor not found, or server not found.

PATCH /api/monitors/{id}/servers/{msId}

confirm makes the link confirmed (source auto); dismiss hides it, and the server is not suggested again for this monitor. Any role except Viewer; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.
  • msId (path, string (uuid), required): ID of the monitor-to-server link (the id of an entry in linked or suggestions from GET /api/monitors/{id}/servers).

Request body (required): object.

FieldTypeRequiredDescription
actionstringYesOne of: confirm, dismiss.

Responses

  • 200: Updated link. Body: MonitorServerLink.
  • 400: action is not "confirm" or "dismiss".
  • 401: Not signed in, or no valid API key.
  • 403: Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, or the API key lacks the monitors:write scope or plan API access.
  • 404: Link not found for this monitor in your organization.

DELETE /api/monitors/{id}/servers/{msId}

Deletes the link. Unlike dismissing, a later lookup can suggest the same server again. Any role except Viewer; API keys need the monitors:write scope.

Parameters

  • id (path, string (uuid), required): Monitor ID.
  • msId (path, string (uuid), required): ID of the monitor-to-server link (the id of an entry in linked or suggestions from GET /api/monitors/{id}/servers).

Responses

  • 200: Removed. Body: object.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, or the API key lacks the monitors:write scope or plan API access.
  • 404: Link not found for this monitor in your organization.
FieldTypeRequiredDescription
successbooleanNoOne of: true.

Delete a batch of monitors

POST /api/monitors/bulk-delete

Deletes up to 2,000 monitors, each through the same rules as DELETE /api/monitors/{id}: checks stop at once and each monitor can be restored for 24 hours. Monitors that cannot be deleted are reported in skipped with the reason, so the request can partly succeed. Requires the Owner or Admin role; API keys need the monitors:write scope. Limited to 30 requests per minute per organization.

Request body (required): object.

FieldTypeRequiredDescription
monitorIdsarray of string (uuid)YesMonitor IDs. Duplicates are collapsed; IDs that are not monitors of your organization are reported in skipped with the reason "Monitor not found." Min items 1, max items 2000.

Responses

  • 200: Processed. unchanged is always empty here. Body: MonitorBulkResult.
  • 400: Body is missing or not JSON, or fails validation. details holds formErrors and fieldErrors.
  • 401: Not signed in, or no valid API key.
  • 403: Developer, Member or Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 429: More than 30 requests in a minute to this bulk route for the organization. Header Retry-After: Seconds until the window resets. Header X-RateLimit-Limit. Header X-RateLimit-Remaining. Header X-RateLimit-Reset: ISO time the window resets. Body: MonitorBulkRateLimitError.

Pause or resume a batch of monitors

PUT /api/monitors/bulk-enabled

Pauses or resumes up to 2,000 monitors, each through PUT /api/monitors/{id}. Resumes run one at a time in the order sent, so when the plan allowance runs out the remaining monitors are reported in skipped with the reason. Monitors already in the requested state are listed in unchanged. Requires the Owner, Admin or Developer role; API keys need the monitors:write scope. Limited to 30 requests per minute per organization.

Request body (required): object.

FieldTypeRequiredDescription
monitorIdsarray of string (uuid)YesMonitor IDs. Duplicates are collapsed; IDs that are not monitors of your organization are reported in skipped with the reason "Monitor not found." Min items 1, max items 2000.
enabledbooleanYesfalse pauses, true resumes.

Responses

  • 200: Processed. Each monitor is reported in exactly one of updated, skipped or unchanged, in the order the IDs were sent. Body: MonitorBulkResult.
  • 400: Body is missing or not JSON, or fails validation. details holds formErrors and fieldErrors.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer or Member role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 429: More than 30 requests in a minute to this bulk route for the organization. Header Retry-After: Seconds until the window resets. Header X-RateLimit-Limit. Header X-RateLimit-Remaining. Header X-RateLimit-Reset: ISO time the window resets. Body: MonitorBulkRateLimitError.

Change settings on a batch of monitors

PUT /api/monitors/bulk-settings

Applies the same settings to up to 2,000 monitors, each through PUT /api/monitors/{id}, so plan limits (check interval floor, regions, visual and certificate features) apply per monitor. A monitor the plan or its type does not allow is reported in skipped with the reason. Requires the Owner, Admin or Developer role; API keys need the monitors:write scope. Limited to 30 requests per minute per organization.

Request body (required): object.

FieldTypeRequiredDescription
monitorIdsarray of string (uuid)YesMonitor IDs. Duplicates are collapsed; IDs that are not monitors of your organization are reported in skipped with the reason "Monitor not found." Min items 1, max items 2000.
settingsMonitorBulkSettingsYes

Responses

  • 200: Processed. unchanged is always empty here. Body: MonitorBulkResult.
  • 400: Body is missing or not JSON, or fails validation. details holds formErrors and fieldErrors.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer or Member role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 429: More than 30 requests in a minute to this bulk route for the organization. Header Retry-After: Seconds until the window resets. Header X-RateLimit-Limit. Header X-RateLimit-Remaining. Header X-RateLimit-Reset: ISO time the window resets. Body: MonitorBulkRateLimitError.

Add tags to a batch of monitors

PUT /api/monitors/bulk-tags

Adds tags to up to 2,000 monitors. Each monitor keeps its existing tags in order with new ones after, without duplicates. A monitor that would end up with more than 20 tags is skipped; one that already has every tag is listed in unchanged. Requires the Owner, Admin or Developer role; API keys need the monitors:write scope. Limited to 30 requests per minute per organization.

Request body (required): object.

FieldTypeRequiredDescription
monitorIdsarray of string (uuid)YesMonitor IDs. Duplicates are collapsed; IDs that are not monitors of your organization are reported in skipped with the reason "Monitor not found." Min items 1, max items 2000.
addarray of stringYesTags to add. Min items 1, max items 20.

Responses

  • 200: Processed. Each monitor is reported in exactly one of updated, skipped or unchanged, in the order the IDs were sent. Body: MonitorBulkResult.
  • 400: Body is missing or not JSON, or fails validation. details holds formErrors and fieldErrors.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer or Member role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 429: More than 30 requests in a minute to this bulk route for the organization. Header Retry-After: Seconds until the window resets. Header X-RateLimit-Limit. Header X-RateLimit-Remaining. Header X-RateLimit-Reset: ISO time the window resets. Body: MonitorBulkRateLimitError.

POST /api/monitors/bulk-link-server

Records up to 2,000 monitors as running on one server, as confirmed manual links. IDs that are not monitors of your organization are ignored without being reported. Any role except Viewer; API keys need the monitors:write scope. Not rate limited.

Request body (required): object.

FieldTypeRequiredDescription
monitorIdsarray of stringYesMin items 1, max items 2000.
serverIdstringYesA server of your organization. Min length 1.

Responses

  • 200: Processed. Body: MonitorBulkLinkServerResponse.
  • 400: Body is missing or not JSON, or fails validation (error is "Invalid request" and details is the list of validation issues) Body: object.
  • 401: Not signed in, or no valid API key.
  • 403: Viewer role, paused seat (code SEAT_PAUSED_BY_PLAN), missing or invalid CSRF token, no membership in the organization, or the API key lacks the monitors:write scope or plan API access.
  • 404: Server not found.

Data models

Request and response shapes these endpoints use: Monitor, MonitorListResponse, CreateMonitorRequest, UpdateMonitorRequest, CheckResult, UptimeResponse, ResponseTimeResponse, PageSpeedFailure, BulkUpdateAlertsRequest, MonitorBulkRateLimitError, ServiceDependencyCatalog, ServiceDependencyStatus, ServiceDependencyNoFeed, UpdateServiceDependencyComponentsRequest, UpdateServiceDependencyComponentsResponse, MonitorAlertMuteRequest, MonitorAlertMuteResponse, MonitorServerResolveResponse, MonitorServerListResponse, MonitorServerLink, MonitorBulkResult, MonitorBulkSettings, MonitorBulkLinkServerResponse.

Generated from the OpenAPI 3.1 specification at https://docs.visualsentinel.com/openapi.json, the same file the interactive reference reads.