Skip to content

Rate Limits

The RealityConnect API rate-limits requests per organization using a token bucket per route family. This page covers the buckets, the headers every rate-limited response carries, and what to do on 429 Too Many Requests.


Each bucket has a capacity (maximum tokens, i.e. burst size) and a refill rate (tokens added per second, i.e. sustained throughput). A request consumes one token; when the bucket is empty, the request is rejected with 429.

BucketCapacityRefill rateCovers
assets100010/sRealityAssets, asset types, asset categories, business object create/read/list/delete
twin100010/sTwin space, POIs, zones, drafts
platform100010/sSite, data node, data bundle, plugins
plan100010/sReality plan space, model assets
library100010/sAsset library models and tags
embed1002/sEmbed session issuance
users100010/sUsers, groups, roles, invitations
sitefiles100010/sSite files

Rate limiting is per organization: all OAuth applications and users acting on behalf of the same organization share one bucket per family.

Every rate-limited response, successful or not, carries these headers:

HeaderMeaning
X-RateLimit-LimitThe bucket’s capacity
X-RateLimit-RemainingTokens left in the bucket
X-RateLimit-ResetSeconds until the bucket is full again
X-RateLimit-Policy{capacity};w={window}, where window (seconds) is capacity / refillRate

On 429 Too Many Requests only, the response also carries Retry-After (seconds until at least one token is available) and this body:

{
"statusCode": 429,
"message": "Too Many Requests",
"error": "rate_limited"
}

Back off using Retry-After rather than a fixed delay or immediate retry: retrying immediately against an empty bucket only produces another 429. For sustained high-volume workloads, pace requests to stay under the bucket’s refill rate rather than bursting to capacity and waiting out the reset.

  • See the API reference for the exact operations under each bucket.