Contact Us

    If you still have questions or prefer to get help directly from an agent, please submit a request.
    We’ll get back to you as soon as possible.

    Please fill out the contact form below and we will reply as soon as possible.

    • Digital Matter Site
    • Contact Us

    GraphQL API Rate Limits and Query Cost

    The mechanism by which requests into the Telematics Guru GraphQL API endpoint are rate limited

    Written by Jake Tannenbaum

    Updated at July 31st, 2026

      Contact Us

      If you still have questions or prefer to get help directly from an agent, please submit a request.
      We’ll get back to you as soon as possible.

      Contact Support
      • Home
      • Telematics Guru
      • Integration

      Table of Contents

      GraphQL API Rate Limits and Query Cost Current Limits GraphQL Paging How GraphQL Cost Works Cost Response Headers What Usually Drives Cost Up Examples of Field Weightings Example: Lightweight Query Example: Adding Filters and Counts Example: Nested Data Increases Cost Faster Example: Heavier Nested Telemetry Example: Tag Data Can Become Expensive Quickly How Query Cost Limits and Rate Limits Work Together Summary Next Steps

      GraphQL API Rate Limits and Query Cost

      This article explains the GraphQL query cost limits and REST API rate limits for Telematics Guru. 
       

      Current Limits

      The REST API limit is 100,000 requests per hour, per user. Where there is no user context, the limit is 100,000 requests per hour, per source IP address.
       

      For GraphQL, a single query can have a maximum cost of 4000, and each organisation has a budget of 15,000 GraphQL cost units per 15 minutes.
       

      GraphQL Paging

      GraphQL paging is applied per request. The default page size is 100 items, and the maximum page size is 500 items.
       

      How GraphQL Cost Works

      GraphQL cost is based on the fields, filters, sorting, and nested data included in a query. The schema assigns weights to many fields and arguments, and those weights contribute to the total query cost.
       

      Where a field has no specific cost defined, the default cost is 1.
       

      Cost Response Headers

      Every GraphQL response includes headers that show the cost of the query you just ran and how much of your organisation's budget remains. You can use these to monitor your usage and design your integration to stay within the limits.
       

      x-graphql-cost-charged is the cost of the query that was just executed.

      x-graphql-cost-limit is the organisation's total cost budget for the current window.

      x-graphql-cost-organisationid is the organisation the cost was charged against.

      x-graphql-cost-remaining is the cost budget remaining in the current window.

      x-graphql-cost-reset-seconds is the number of seconds until the budget window resets.
       

      For example, a response with x-graphql-cost-charged: 102, x-graphql-cost-limit: 15000, x-graphql-cost-remaining: 14898, and x-graphql-cost-reset-seconds: 900 means the query cost 102 units, leaving 14,898 units available until the window resets in 900 seconds.
       

      What Usually Drives Cost Up

      Page size increases cost because more returned items means the field selection is repeated across more records.

      Nesting increases cost because each returned item can include more related objects and more weighted fields.

      Field selection increases cost because some fields are weighted more heavily than others.

      Filtering can help reduce cost by reducing the result set, although filter operations can also carry their own weight.

      Ordering is also weighted in the schema, but it is usually not the main reason a query becomes expensive.
       

      Examples of Field Weightings

      The schema includes examples of both light and heavy fields. The weightings and example costs below are current as of 7 July 2026 and may change as the schema evolves.
       

      assets, events, and other top-level connection fields are weighted at 10.

      where and order arguments are commonly weighted at 10.

      totalCount on connection types is weighted at 10.

      Asset.lastLatitude and Asset.lastLongitude are weighted at 1.

      DeviceData.dateTimeUtc, DeviceData.latitude, and DeviceData.longitude are weighted at 1.

      EventLog.telemetry is weighted at 10.

      TelemetryModel.latitude and TelemetryModel.longitude are weighted at 10.

      String filter operations such as contains, startsWith, and endsWith are weighted at 20.

      Several TagData fields such as batteryVoltage, dateTimeUtc, gwLatitude, and gwLongitude are weighted at 10.
       

      Example: Lightweight Query

      A small asset query that requests a limited number of records and only low-cost fields will usually stay well under the limit.

      query {
        assets(organisationId: 123, first: 10) {
          nodes {
            assetId
            name
            lastLatitude
            lastLongitude
          }
        }
      }

      This stays relatively light because the page size is small and the selected location fields are weighted at 1 each.

      Approximate cost: 51. The assets field costs 10, plus 4 per returned asset (four fields at 1 each) multiplied by the page size of 10, plus 1 for nodes.
       

      Example: Adding Filters and Counts

      This query is more expensive because it adds a filter and requests the total count as well as the result set.

      query {
        assets(
          organisationId: 123
          first: 10
          where: { name: { contains: "truck" } }
        ) {
          totalCount
          nodes {
            assetId
            name
            lastLatitude
            lastLongitude
          }
        }
      }

      In this case, the top-level query, the where argument, the contains operation, and totalCount all add cost before the returned fields are even considered.

      Approximate cost: 91. The assets field costs 10, where adds 10, contains adds 20, totalCount adds 10, plus 4 per returned asset multiplied by the page size of 10, plus 1 for nodes.
       

      Example: Nested Data Increases Cost Faster

      Nesting is one of the quickest ways to increase cost because the selected child fields are repeated for every returned record.

      query {
        assets(organisationId: 123, first: 10) {
          nodes {
            assetId
            name
            lastTripData {
              dateTimeUtc
              latitude
              longitude
            }
          }
        }
      }

      This query is still manageable at a small page size, but it is heavier than the basic asset query because each asset can now return additional weighted fields from lastTripData.

      Approximate cost: 71. Each returned asset now costs 6 (two asset fields, the lastTripData object, and its three nested fields at 1 each), multiplied by the page size of 10, plus 10 for assets and 1 for nodes.
       

      Example: Heavier Nested Telemetry

      The events query below is a stronger example of how a nested field can increase cost more quickly.

      query {
        events(
          organisationId: 123
          startDateUtc: "2026-06-01T00:00:00Z"
          endDateUtc: "2026-06-02T00:00:00Z"
          first: 10
        ) {
          nodes {
            eventId
            eventDateUtc
            telemetry {
              latitude
              longitude
            }
          }
        }
      }

      This is heavier because EventLog.telemetry is weighted at 10, and the nested telemetry latitude and longitude fields are also weighted at 10 each.

      Approximate cost: 331. Each returned event costs 32 (eventId and eventDateUtc at 1 each, plus telemetry, latitude, and longitude at 10 each), multiplied by the page size of 10, plus 10 for events and 1 for nodes. Note that omitting first would apply the default page size of 100, which pushes this same query past 3200, and increasing the page size beyond that would exceed the 4000 limit.
       

      Example: Tag Data Can Become Expensive Quickly

      Queries that include tag data can also add cost quickly when several weighted fields are selected together.

      query {
        assets(organisationId: 123, first: 10) {
          nodes {
            assetId
            taggedAsset {
              lastDateTimeUtc
              lastTagData {
                batteryVoltage
                dateTimeUtc
                gwLatitude
                gwLongitude
                temperatureCelsius
              }
            }
          }
        }
      }

      This is more expensive than a simple asset query because several of the selected tag fields carry explicit weights, and they are nested under each returned asset.

      Approximate cost: 561. Each returned asset costs 55 (lastDateTimeUtc, batteryVoltage, dateTimeUtc, gwLatitude, and gwLongitude at 10 each, temperatureCelsius at 2, and 3 for the remaining fields and objects), multiplied by the page size of 10, plus 10 for assets and 1 for nodes. At the default page size of 100 this query would exceed the 4000 per-query limit, so always set an explicit page size on tag data queries.
       

      How Query Cost Limits and Rate Limits Work Together

      A single GraphQL query is limited to a maximum cost of 4000. In addition, each organisation has a rolling budget of 15,000 GraphQL cost units per 15 minutes.
       

      This means that even if individual queries stay under the per-query limit, running many high-cost queries in a short period can exhaust the organisation's cost budget. If the budget is exceeded, further GraphQL requests will be limited until the window resets. Use the x-graphql-cost-remaining and x-graphql-cost-reset-seconds headers to track your remaining budget, and keep queries lean by selecting only the fields you need.
       

      Summary

      REST API limit is 100,000 requests per hour, per user.

      Where there is no user context, the limit is 100,000 requests per hour, per IP address.

      GraphQL default page size is 100 items.

      GraphQL maximum page size is 500 items.

      GraphQL maximum cost is 4000 per query.

      Each organisation has a budget of 15,000 GraphQL cost units per 15 minutes.

      Every GraphQL response includes x-graphql-cost headers showing the cost charged, the budget remaining, and when the window resets.

      Page size, nesting, and field selection are the main factors that increase cost.

      Filtering can help reduce returned data, but filters can also add cost.

      Ordering contributes cost in the schema, but it is usually not the main cost driver.
       

      Next Steps

      Build your first GraphQL query by visiting GraphQL API for Telematics Guru 

      api throttling rate control

      Was this article helpful?

      Yes
      No
      Give feedback about this article

      Related Articles

      • Rate Limiting in the Device Manager API
      • GraphQL API for Telematics Guru

      Subscribe to Partner News

      Subscribe to our mailing list to receive Digital Matter news, product and tehnical updates, and more.

      Subscribe

      Copyright © Digital Matter . All Rights Reserved.

      Privacy Contact Support

      Knowledge Base Software powered by Helpjuice

      DM Logo
      Expand