Errors and limits
Status codes
Section titled “Status codes”| gRPC | HTTP | Cause | What to do |
|---|---|---|---|
INVALID_ARGUMENT |
400 |
A malformed expression, an out-of-range limit, an option not supported by this RPC, a resume token that does not match the request, or an ambiguous workspace name without organization. The message says which. |
Fix the request. |
UNAUTHENTICATED |
401 |
An authorization header that is present but malformed, invalid or expired. |
Refresh the token. |
PERMISSION_DENIED |
403 |
No read access to the workspace, or it does not exist. Anonymous callers get this for any non-public workspace. | Check the workspace and your credentials. |
NOT_FOUND |
404 |
A named project, run, experiment or environment does not exist. | Fix the name. |
UNIMPLEMENTED |
501 |
An RPC or option that is declared but not served. | Use a documented alternative. |
INTERNAL |
500 |
An unexpected server error. | Retry with backoff. |
UNAVAILABLE |
503 |
A dependency is temporarily unavailable. | Retry with backoff. |
CANCELLED |
504 |
The request exceeded the server’s timeout (15 seconds by default). | Narrow the request or page smaller, then retry. |
REST error bodies are plain text. Every Query API RPC is read-only, so any request can be retried safely; the Python
SDK retries UNAVAILABLE and INTERNAL up to four times with exponential backoff starting at 100 ms.
Paging limits
Section titled “Paging limits”| RPCs | Parameter | Default | Maximum |
|---|---|---|---|
ListProjects, ListRuns, ListExperiments, ListDirectories, ListRLEnvironments |
limit |
50 | 1,000 |
RunsFilter (in across-runs requests) |
limit |
server default | 100 |
ListSpans |
limit |
50 | 1,000 (and limit + offset ≤ 1,000 across several runs) |
ListTraceSpans |
limit |
1,000 | 10,000 |
| Discovery and attribute RPCs | limit |
50–100 | 10,000 |
ListSeriesSummaries |
limit (series per run) |
100 | 10,000 |
ListFloatSeries |
maxPointsPerPage |
1,000,000 | 10,000,000 |
ListFloatSeriesBuckets, ListFloatSeriesTimestampBuckets, ListRLEnvironmentFloatSeriesBuckets |
bucketsCount |
1,000 | 5,000 |
maxBucketsPerPage |
1,000,000 | 1,000,000 | |
ListHistogramSeries |
maxPointsPerPage |
1,000 | 10,000 |
ListScatterSeries |
maxDataPointsPerPage |
100,000 | 1,000,000 |
GetSpanPayload |
maxDataLength (bytes) |
1 MiB | 16 MiB |
Request limits
Section titled “Request limits”| Item | Limit |
|---|---|
Runs in ListMetricDefinitions / BrowseMetricDefinitions |
1,000 |
Runs in the RL …AcrossRuns discovery RPCs |
1–100 |
Environments in RL metric discovery and ListRLEnvironmentFloatSeriesBuckets |
1,000 |
Runs in ListSpans |
10 |
Span ids in GetSpanPayload |
1–100 |
Label keys in ListSeriesLabelValues |
10 |
| Request message size | 4 MiB |
| Request timeout | 15 seconds |
AggregateRLEnvironmentSeries additionally rejects requests that would produce more output points or series than
the server is configured to allow; narrow the range, request buckets or filter environments.
Timeouts are defaults; a self-hosted deployment may configure them differently.