Rate Limiting

Overview

Rate limits are imposed for requests to LogicMonitor’s REST API. Limits are assigned per endpoint and method combination. For example, requests to GET /device/devices may have a different limit than requests to POST /device/devices or requests to GET /device/devices/ID/devicedatasources. Requests that are made in excess of the rate limits will get an HTTP 429 Too Many Requests and a response containing an error. Limits are not per user, and will apply to all requests made for your account.

Important: Default limits are tested for occasional peak usage, and not continuous use of the API at these limits. Continuous use of the API at the rated limits can impact the overall performance of the portal. LogicMonitor gives the highest precedence to the portal availability and performance and, therefore, reserves the right to reduce the API limits from the defaults if portal performance, alerting, and data collection are adversely affected. If your needs exceed these design limits, please work with your customer success manager proactively to discuss possible options.

Rate Limit Information in Response Headers

Information about limits and proximity to limits is returned in the below response headers. This enables you to view the rate limits that will be imposed and adjust scripts as needed to work around them.

Header Description
X-Rate-Limit-Limit Request limit per X-Rate-Limit-Window
X-Rate-Limit-Remaining The number of requests left for the time window
X-Rate-Limit-Window The rolling time window length with the unit of second

Rate Limiting Logic

We recommend basing any logic intended to work around rate limiting on the above headers and their values, as the limits are subject to change. For example, you may introduce logic in your script that, when rate limits have been met, waits 60 seconds before making another request. The following are examples of such logic across various languages.

Python

The following logic can be utilized in a loop using the requests module, and implements a simple timeout if the ‘X-Rate-Limit-Remaining’ header value gets to zero.

if (response.headers['X-Rate-Limit-Remaining'] == 0):
       window = response.headers['X-Rate-Limit-Window']
       time.sleep(float(window))
Python

Ruby

The following logic can be utilized in a loop using the net http library, and implements a simple timeout if the ‘X-Rate-Limit-Remaining’ header value gets to zero.

if resp['X-Rate-Limit-Remaining'].to_i == 0
  sleep resp['X-Rate-Limit-Window'].to_i
  end
Ruby

Groovy

The following logic can be utilized in a loop using the Apache http library, and implements a simple timeout if the ‘X-Rate-Limit-Remaining’ header value gets to zero.

remainingRequestsHeader = response.getHeaders('X-Rate-Limit-Remaining');
windowHeader = response.getHeaders('X-Rate-Limit-Window');
remainingRequests = remainingRequestsHeader[0].getValue();
window = windowHeader[0].getValue();
 
if (remainingRequests.toInteger() == 0){
    Thread.sleep(window.toInteger() * 1000);
    }
Groovy

PowerShell

How you should work around rate limiting with PowerShell depends on how you’re making requests. The Invoke-RestMethod cmdlet throws out response headers unless an exception occurs, and as such we recommend attempting retries when an HTTP 429 is returned if using Invoke-RestMethod. For example, you could make the API request in a try catch loop, and retry if the resulting status is 429, as shown in the following code example.

(Alternately, you can use Invoke-WebRequest cmdlet and add logic based on the rate limiting response headers.)

<# Make request & retry if failed due to rate limiting #>
$Stoploop = $false
 
do {
	try {
		<# Make Request #>
		$response = Invoke-RestMethod -Uri $url -Method $httpVerb -Headers $headers
		<# Print status and body of response #>
		$status = $response.status
		$body = $response.data| ConvertTo-Json -Depth 5
		Write-Host "Status:$status"
		Write-Host "Response:$body"
		$Stoploop = $true
		}
	catch {
		if ($response.status -eq 429){
			Write-Host "Request exceeded rate limit, retrying in 60 seconds..."
			Start-Sleep -Seconds 60
			}
		else {
			Write-Host "Request failed, not as a result of rate limiting"
			$Stoploop = $true
			}
		}
	}
While ($Stoploop -eq $false)
PowerShell

Default Rate Limits

The following tables list default rate limits per endpoint/method request combination.

Alert Rules

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/setting/alert/rules/{id}250/minUpdate alert rule
GET/santaba/rest/setting/alert/rules/{id}500/minGet alert rule by ID
DELETE/santaba/rest/setting/alert/rules/{id}300/minDelete alert rule
PUT/santaba/rest/setting/alert/rules/{id}200/minUpdate alert rule
POST/santaba/rest/setting/alert/rules200/minAdd alert rule
GET/santaba/rest/setting/alert/rules500/minGet alert rule list

Alerts

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/alert/alerts/{id}500/minGet alert
GET/santaba/rest/alert/alerts400/minGet alert list
POST/santaba/rest/alert/alerts/{id}/ack200/minAcknowledge alert by ID
POST/santaba/rest/alert/alerts/{id}/note200/minAdd alert note

API Tokens

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/setting/admins/{adminId}/apitokens200/minAdd API tokens for a user
GET/santaba/rest/setting/admins/{adminId}/apitokens500/minGet API tokens for a user
GET/santaba/rest/setting/admins/apitokens500/minGet a list of API tokens across users

ApiPerfStats

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/apiStats/externalApis500/minGet external api stats info

AppliesToFunctions

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/setting/functions/{id}250/minUpdate applies to function
GET/santaba/rest/setting/functions/{id}500/minGet applies to function
PUT/santaba/rest/setting/functions/{id}200/minUpdate applies to function
POST/santaba/rest/setting/functions200/minAdd applies to function
GET/santaba/rest/setting/function500/minGet applies to function list

Audit Logs

HTTP MethodAPI RequestRate Limit Description
GET/santaba/rest/setting/accesslog500/minGet audit logs

Collector Groups

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/setting/collector/groups200/minAdd collector group
GET/santaba/rest/setting/collector/groups500/minGet collector group list
PATCH/santaba/rest/setting/collector/groups/{id}250/minUpdate collector group
GET/santaba/rest/setting/collector/groups/{id}500/minGet collector group
DELETE/santaba/rest/setting/collector/groups/{id}300/minDelete collector group
PUT/santaba/rest/setting/collector/groups/{id}200/minUpdate collector group

Collectors

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/setting/collector/collectors/{id}500/minGet collector
GET/santaba/rest/setting/collector/collectors500/minGet collector list
PATCH/santaba/rest/setting/collector/collectors/{id}250/minUpdate collector
POST/santaba/rest/setting/collector/collectors200/minAdd collector
PUT/santaba/rest/setting/collector/collectors/{id}200/minUpdate collector
DELETE/santaba/rest/setting/collector/collectors/{id}300/minDelete collector
GET/santaba/rest/setting/collector/collectors/{collectorId}/installers/{osAndArch}500/minGet collector installer
POST/santaba/rest/setting/collector/collectors/{id}/ackdown200/minAcknowledge collector down alert

Collector Versions

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/setting/collector/collectors/versions500/minGet collector version list

ConfigSources

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/setting/configsources/{id}/audit200/minAdd audit version

Dashboard Groups

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/dashboard/groups/{id}250/minUpdate dashboard group
GET/santaba/rest/dashboard/groups/{id}500/minGet dashboard group
DELETE/santaba/rest/dashboard/groups/{id}300/minDelete dashboard group
PUT/santaba/rest/dashboard/groups/{id}200/minUpdate dashboard group
POST/santaba/rest/dashboard/groups200/minAdd dashboard group
GET/santaba/rest/dashboard/groups500/minGet dashboard group list

Dashboards

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/dashboard/dashboards200/minAdd dashboard
GET/santaba/rest/dashboard/dashboards500/minGet dashboard list
GET/santaba/rest/dashboard/dashboards/{id}/widgets500/minGet widget list by DashboardId
PATCH/santaba/rest/dashboard/dashboards/{id}250/minUpdate dashboard
GET/santaba/rest/dashboard/dashboards/{id}500/minGet dashboard
DELETE/santaba/rest/dashboard/dashboards/{id}300/minDelete dashboard
PUT/santaba/rest/dashboard/dashboards/{id}200/minUpdate dashboard

Data

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}/graphs/{graphId}/data500/minGet device instance graph data
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{deviceDsId}/groups/{dsigId}/graphs/{ographId}/data500/minGet device instance group overview graph data
GET/santaba/rest/website/websites/{websiteId}/checkpoints/{checkpointId}/graphs/{graphName}/data500/minGet website graph data
GET/santaba/rest/device/devicedatasourceinstances/{instanceId}/graphs/{graphId}/data500/minGet device instance data
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}/data500/minGet device instance data
GET/santaba/rest/dashboard/widgets/{id}/data500/minGet widget data
GET/santaba/rest/website/websites/{srvId}/checkpoints/{checkId}/data500/minGet data for a website checkpoint

Datasource Instances

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{instanceId}/config500/minGet detailed config information for the instance
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{deviceDsId}/groups500/minGet device datasource instance group list
POST/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances200/minAdd device instance
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances500/minGet device instance list
POST/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{instanceId}/config/configCollection200/minCollect a config for a device
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}/historysdts500/minGet device instance SDT history
PATCH/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}250/minUpdate device instance
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}500/minGet device instance
DELETE/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}300/minDelete a device instance
PUT/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{id}200/minUpdate device instance

Datasources

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/setting/datasources/{dsId}/ograph500/minGet datasource overview graph list
GET/santaba/rest/setting/datasources/{id}/devices500/minGet devices associated with a datasource
GET/santaba/rest/setting/datasources500/minGet datasource list
GET/santaba/rest/setting/datasources/{id}500/minGet datasource by id
GET/santaba/rest/setting/datasources/{id}/updatereasons500/minGet update history for a datasource
POST/santaba/rest/setting/datasources/{id}/audit200/minAdd audit version
DELETE/santaba/rest/setting/datasources/{id}300/minDelete datasource

Debug

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/debug200/minExecute a Collector debug command
GET/santaba/rest/debug/{id}500/minGet the result of a Collector debug command

Device Groups

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/device/groups/{id}/devices500/minGet immediate devices under group
GET/santaba/rest/device/groups/{deviceGroupId}/datasources500/minGet device group datasource list
GET/santaba/rest/aws/externalId500/minGet AWS external id
POST/santaba/rest/device/groups/{gid}/properties200/minAdd device group property
GET/santaba/rest/device/groups/{gid}/properties500/minGet device group properties
PATCH/santaba/rest/device/groups/{id}250/minUpdate device group
GET/santaba/rest/device/groups/{id}1000/minGet device group by ID
DELETE/santaba/rest/device/groups/{id}300/minDelete device group
PUT/santaba/rest/device/groups/{id}200/minUpdate device group
POST/santaba/rest/device/groups200/minAdd device group
GET/santaba/rest/device/groups400/minGet device group list
GET/santaba/rest/device/groups/{id}/historysdts500/minGet SDT history for the group
PATCH/santaba/rest/device/groups/{gid}/properties/{name}250/minUpdate device group property
GET/santaba/rest/device/groups/{gid}/properties/{name}500/minGet device group property by name
DELETE/santaba/rest/device/groups/{gid}/properties/{name}300/minDelete device group property
PUT/santaba/rest/device/groups/{gid}/properties/{name}200/minUpdate device group property
PATCH/santaba/rest/device/groups/{deviceGroupId}/datasources/{id}250/minUpdate device group datasource
GET/santaba/rest/device/groups/{deviceGroupId}/datasources/{id}500/minGet device group datasource
PUT/santaba/rest/device/groups/{deviceGroupId}/datasources/{id}200/minUpdate device group datasource
GET/santaba/rest/device/groups/{id}/sdts500/minGet device group SDTs
GET/santaba/rest/device/groups/{id}/alerts500/minGet device group alerts

Devices

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/device/devices/{deviceId}/devicedatasources500/minGet device datasource list
POST/santaba/rest/device/devices200/minAdd a new device
GET/santaba/rest/device/devices700/minGet device list
GET/santaba/rest/device/devices/{id}/alerts600/minGet alerts
POST/santaba/rest/device/devices/{id}/scheduleAutoDiscovery200/minSchedule active discovery for a device
GET/santaba/rest/device/devices/{id}/historysdts500/minGet SDT history for the device
PATCH/santaba/rest/device/devices/{id}250/minUpdate a device
GET/santaba/rest/device/devices/{id}500/minGet device by ID
DELETE/santaba/rest/device/devices/{id}300/minDelete a device
PUT/santaba/rest/device/devices/{id}200/minUpdate a device
GET/santaba/rest/device/devices/{id}/flows500/minGet netflow flow list
GET/santaba/rest/device/devices/{id}/sdts500/minGet SDTs for a device
GET/santaba/rest/device/devices/{id}/instances500/minGet device instance list
GET/santaba/rest/device/unmonitoreddevices500/minGet unmonitored device list
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{id}/data500/minGet device datasource data
PATCH/santaba/rest/device/devices/{deviceId}/properties/{name}250/minUpdate device property
GET/santaba/rest/device/devices/{deviceId}/properties/{name}500/minGet device property by name
DELETE/santaba/rest/device/devices/{deviceId}/properties/{name}300/minDelete device property
PUT/santaba/rest/device/devices/{deviceId}/properties/{name}200/minUpdate device property
GET/santaba/rest/device/devices/{id}/topTalkersGraph500/minGet top talkers graph
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{id}500/minGet device datasource
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{id}/historysdts500/minGet SDT history for the device dataSource
POST/santaba/rest/device/devices/{deviceId}/properties200/minAdd device property
GET/santaba/rest/device/devices/{deviceId}/properties700/minGet device properties

Escalation Chain

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/setting/alert/chains200/minAdd escalation chain
GET/santaba/rest/setting/alert/chains500/minGet escalation chain list
PATCH/santaba/rest/setting/alert/chains/{id}250/minUpdate escalation chain
GET/santaba/rest/setting/alert/chains/{id}500/minGet escalation chain by id
PUT/santaba/rest/setting/alert/chains/{id}200/minUpdate escalation chain

EventSources

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/setting/eventsources500/minGet eventSource list
POST/santaba/rest/setting/eventsource/{id}/audit200/minAdd audit version

IntegrationAuditLogs

HTTP MethodAPI RequestRate Limit Description
GET/santaba/rest/setting/integrations/auditlogs500/minGet integration audit logs list

Metrics

HTTP methodAPI RequestRate LimitDescription
Get/santaba/rest/metrics/usage500/minGet metrics usage

Netscans

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/setting/netscans200/minAdd a new netscan
GET/santaba/rest/setting/netscans500/minGet netscan list
GET/santaba/rest/setting/netscans/{id}500/minGet netscan by id

Ops Notes

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/setting/opsnotes100/minAdd opsnote
GET/santaba/rest/setting/opsnotes500/minGet opsnote list

PropertySources

HTTP methodAPI RequestRate LimitDescription
POST/santaba/rest/setting/propertyrules/{id}/audit200/minAdd audit version

Recipient Groups

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/setting/recipientgroups/{id}250/minUpdate recipient group
GET/santaba/rest/setting/recipientgroups/{id}500/minGet recipient group by ID
PUT/santaba/rest/setting/recipientgroups/{id}200/minUpdate recipient group
POST/santaba/rest/setting/recipientgroups200/minAdd recipient group
GET/santaba/rest/setting/recipientgroups500/minGet recipient group list

Report

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/report/reports200/minAdd report
GET/santaba/rest/report/reports500/minGet report list
PATCH/santaba/rest/report/reports/{id}250/minUpdate report
GET/santaba/rest/report/reports/{id}500/minGet report by ID
DELETE/santaba/rest/report/reports/{id}300/minDelete report
PUT/santaba/rest/report/reports/{id}200/minUpdate report
POST/santaba/rest/report/reports/{id}/executions200/minRun a report

Report Groups

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/report/groups200/minAdd report group
GET/santaba/rest/report/groups500/minGet report group list
PATCH/santaba/rest/report/groups/{id}250/minUpdate report group
GET/santaba/rest/report/groups/{id}500/minGet report group by ID
DELETE/santaba/rest/report/groups/{id}300/minDelete report group
PUT/santaba/rest/report/groups/{id}200/minUpdate report group

Roles

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/setting/roles/{id}250/minUpdate role
GET/santaba/rest/setting/roles/{id}500/minGet role by ID
DELETE/santaba/rest/setting/roles/{id}300/minDelete role
PUT/santaba/rest/setting/roles/{id}200/minUpdate role
POST/santaba/rest/setting/roles200/minAdd role
GET/santaba/rest/setting/roles500/minGet role list

SDTs

HTTP MethodAPI RequestRate LimitDescription
POST/santaba/rest/sdt/sdts200/minAdd SDT
GET/santaba/rest/sdt/sdts500/minGet SDT list
PATCH/santaba/rest/sdt/sdts/{id}250/minUpdate SDT
GET/santaba/rest/sdt/sdts/{id}500/minGet SDT by ID
DELETE/santaba/rest/sdt/sdts/{id}300/minDelete SDT
PUT/santaba/rest/sdt/sdts/{id}200/minUpdate SDT

Thresholds

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{instanceId}/alertsettings500/minGet a list of alert settings for a device datasource instance
PATCH/santaba/rest/device/groups/{deviceGroupId}/datasources/{dsId}/alertsettings250/minUpdate device group datasource alert setting
GET/santaba/rest/device/groups/{deviceGroupId}/datasources/{dsId}/alertsettings500/minGet device group datasource alert setting
PUT/santaba/rest/device/groups/{deviceGroupId}/datasources/{dsId}/alertsettings200/minUpdate device group datasource alert setting
PATCH/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{instanceId}/alertsettings/{id}250/minUpdate device instance alert setting
PUT/santaba/rest/device/devices/{deviceId}/devicedatasources/{hdsId}/instances/{instanceId}/alertsettings/{id}200/minUpdate device instance alert setting

Users

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/setting/admins/{id}250/minUpdate user
GET/santaba/rest/setting/admins/{id}500/minGet user
DELETE/santaba/rest/setting/admins/{id}300/minDelete user
PUT/santaba/rest/setting/admins/{id}200/minUpdate user
POST/santaba/rest/setting/admins200/minAdd user
GET/santaba/rest/setting/admins500/minGet user list

Website Groups

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/website/groups/{id}250/minUpdate website group
GET/santaba/rest/website/groups/{id}500/minGet website group
DELETE/santaba/rest/website/groups/{id}300/minDelete website group
PUT/santaba/rest/website/groups/{id}200/minUpdate website group
GET/santaba/rest/website/groups/{id}/sdts500/minGet a list of SDTs for a website group
GET/santaba/rest/website/groups/{id}/websites500/minGet a list of websites for a group
POST/santaba/rest/website/groups200/minAdd website group
GET/santaba/rest/website/groups500/minGet website group list

Websites

HTTP MethodAPI RequestRate LimitDescription
GET/santaba/rest/website/websites/{id}/historysdts500/minGet SDT history for the website
PATCH/santaba/rest/website/websites/{id}250/minUpdate website
GET/santaba/rest/website/websites/{id}500/minGet website by id
DELETE/santaba/rest/website/websites/{id}300/minDelete website
PUT/santaba/rest/website/websites/{id}200/minUpdate website
GET/santaba/rest/website/websites/{id}/properties500/minGet a list of properties for a website
GET/santaba/rest/website/websites/{id}/alerts500/minGet alerts for a website
POST/santaba/rest/website/websites200/minAdd website
GET/santaba/rest/website/websites500/minGet website list
GET/santaba/rest/website/websites/{id}/sdts500/minGet a list of SDTs for a website
GET/santaba/rest/website/smcheckpoints500/minGet website checkpoint list
GET/santaba/rest/website/websites/{id}/graphs/{graphName}/data500/minGet website data by graph name

Widgets

HTTP MethodAPI RequestRate LimitDescription
PATCH/santaba/rest/dashboard/widgets/{id}250/minUpdate widget
GET/santaba/rest/dashboard/widgets/{id}500/minGet widget by ID
DELETE/santaba/rest/dashboard/widgets/{id}300/minDelete widget
PUT/santaba/rest/dashboard/widgets/{id}200/minUpdate widget
POST/santaba/rest/dashboard/widgets200/minAdd widget
GET/santaba/rest/dashboard/widgets500/minGet widget list
In This Article