Skip to content
Thyme Docs

Queries, keys and limits

URLs

URLServes
https://query.atlas.thymelabs.io/subgraphs/<subgraph-id>The production release. Returns 403 until a release is promoted.
https://query.atlas.thymelabs.io/subgraphs/<subgraph-id>/versions/<version-id>That release, promoted or not

Send GraphQL as POST with a JSON body ({"query": "…", "variables": {…}}). Request bodies are limited to 1 MiB. Responses are compressed with zstd, brotli or gzip when the client sends Accept-Encoding.

Keys

KeyPrefixUsed for
Query keyatlas_qk_GraphQL queries
Deployment keyatlas_dk_graph create, graph deploy and artifact uploads

Create and revoke keys on the console's Keys page; they belong to a project. Send a query key as Authorization: Bearer <key> or X-API-Key: <key>. Revoked keys stop working within seconds.

CORS allows any origin, so browsers can call the query URL directly. If you do, restrict the key with a policy.

Key policies

A query key can be limited with a policy, set when you create it or later with Edit key policy. A key without a policy is unrestricted.

RuleLimitEffect
Subgraphsup to 50The key queries only these subgraphs.
Allowed originsup to 20Browser requests must come from one of these origins.
Allowed IPsup to 20 addresses or CIDR rangesRequests must come from one of these addresses.

Origins are written as browsers send them, https://app.example.com or http://localhost:3000, with no path; up to 128 characters each. A leading *. matches any subdomain (https://*.example.com) but not the domain itself. A request from another origin, or with Origin: null, gets 403.

A request without an Origin header is allowed, because server-side clients don't send one. An origin policy therefore stops other websites from using your key in a browser, but it does not make a public key secret: a script can send any Origin or none. The rate limits below bound what such a key can do.

Rate and concurrency limits

ScopeIn flightPer second
Query key16150
Workspace32300

A request over a limit waits up to 1 second for a free slot. If none frees up, it gets 429 with Retry-After: 1. Responses that Graph Node can serve from its cache, such as repeated identical queries at the same block, are faster than the rest.

GraphQL limits

LimitValue
Query timeout30 seconds
firstup to 1000
Query depth100
Query complexity1,100,000

Errors

StatusMeaning
401Missing, invalid or revoked key
403The key's policy denies the request, the key can't access this subgraph or release, the subgraph has no production release, or the release isn't queryable (not ready yet, or indexing failed)
404Unknown path. Query URLs start with /subgraphs/.
429Over a rate or concurrency limit after waiting 1 second; retry after Retry-After
503Temporarily unavailable; retry with backoff

Plan allowances

The free plan includes 100,000 queries per month and 100,000 stored entities. Indexing pauses above the entity allowance. To go beyond them, turn on pay-as-you-go on the console's Usage page and pay by card or from dBank.