Skip to main content

Limits

All TagoSQL limits are plan-tiered. Enterprise plans and TagoDeploy instances can have custom values; the tables below show the standard tiers.

Plan limits

LimitFreeStarterScale
Stored queries31550
Versions kept per query1525
Parameters per query31050
Max joined tables1 (no JOINs)35
Result row cap1001,00010,000
Fleet devices per query1050100
Fleet time window7 days30 days90 days
Query timeout5s15s30s

Your profile's effective values are available on the profile limits endpoint (GET /profile/{id}/limits) under the sql group.

The two fleet rows govern multi-device queries (device_data_by_tag): how many devices one request may target, and how far back its mandatory time bound may reach. A tag filter matching more devices than the cap fails with a 400 telling you to narrow the tags or paginate with after_device.

The row cap

The row cap bounds how many rows a single execution can return. It never silently truncates a result. Instead:

  • A query whose written LIMIT exceeds the cap is rejected when you store it: LIMIT exceeds the plan row cap (100). Lower it and paginate with OFFSET.
  • A query with no LIMIT whose result turns out larger than the cap fails with Result exceeds the 100-row limit. Add LIMIT (and OFFSET to paginate). The rows that execution consumed still count against your data output, so fix the query rather than retrying it.
  • A LIMIT at or below the cap behaves normally, and OFFSET is not capped.

For paging through large result sets, prefer a parameter cursor over a deep OFFSET: a deep offset makes the database scan and discard all skipped rows on every page.

Rate limits

Per-profile requests-per-minute caps:

Applies toFreeStarterScale
Reading queries, versions, and the table catalog60100500
Creating, editing, and deleting queries3075150
Fresh executions (cache miss, test mode)3060120
Cached reads3006001,200

Over-limit requests return 429 with a Retry-After header. Each stored query can additionally set its own rate_limit_rpm; see Executing Queries.

Data output usage

TagoSQL executions are metered against your profile's data output allocation, the same allocation regular data reads use:

  • Every execution that hits the database (a cache miss or a test-mode run) records the returned rows as output usage and is blocked when the monthly output allocation is exhausted.
  • Cache hits are free: a served-from-cache result consumes no output.
  • A row-cap error still counts the rows the database consumed (see The row cap).