Skip to content

Limits

Rate Limits

To maintain the performance and stability of the API, rate limits are applied to API requests.

Ingestion API

The Ingest API supports a limit of 200kb/s (uncompressed). Throttling is enforced every minute, allowing a maximum of 12,000kb per minute per Plant and Device. If this limit is exceeded, a 429 response code will be returned, accompanied by a "retry-after" HTTP header that specifies the waiting time in seconds before attempting the request again. We recommend a maximum single message size of 200kb.

Telemetry API

The query endpoints are throttled depending on the cost of executed Kusto queries. The cost is evaluated from multiple Kusto metrics (range 1-100%):

  • Duration in percent (180 seconds is 100%)
  • CpuTime in percent (3240 seconds is 100%)
  • ScannedExtentsRatio in percent: 100 * scannedExtentsCount / totalExtentsCount

The CostValue is calculated as follows:

CostValue = DurationPercent * 0.25 + CpuTimePercent * 0.25 + ScannedExtentsRatio * 0.25 + CountOfQueriesPercent * 0.25

The minimum cost for a request is 1, therefore there is a general limit of 50 requests per minute. For public endpoints, the CostValue limit is set at 50 per minute, per user, per endpoint.

The consumed cost of a call is indicated as the x-buhler-insights.costs-consumed HTTP header. If the limit reached, a 429 Too Many Requests response is generated specifying a Retry-After HTTP header that outlines the awaiting duration for the next call.

Default Query Properties

  • Request concurrency: Cores-Per-Node x 10 (On PROD, the value is 160)
  • truncationmaxsize (max size): 64MB
  • truncationmaxrecords (max rows): 500,000
  • FanoutThreadsPercent (max cores per node): 100%
  • FanoutNodesPercent (max nodes): 100%
  • ServerTimeout (max execution time): 1 minute
  • MaxMemoryPerQueryPerNode: 8589699072

Kusto Query Limits

For further information on Kusto query limits, please check this link.