Skip to main content
These calls read one logs stream of the organization, the way the Logs page reads it. A stream that does not exist answers an empty result. All calls require logs.read, or sys.telemetry.read in the system scope. Each call takes POST with a JSON body, or GET with the same fields in the query string: filters and free_text as the text of a JSON list, and where as the text of a JSON object. Send a query too long for an address as a POST.

What a call matches

A call matches the records of the stream in the window that pass all of these: A filter is an object with field, op, value, and quoted. It names its field as the stream names it. eq, ne, and like are aliases of =, !=, and contains. quoted is true for a value written in quotes: a word, never a number. A JSON field is not filterable here; query it with SQL. expression takes the text of the Logs page: comparisons, MATCH(field, 'text') and MATCH_TEXT(field, 'words'), words to find, a phrase in quotes, AND and OR in any case with AND binding tighter, and brackets. The server reads it into the filters, free_text, and where the page sends, and checks them as above. The text is at most 8 KiB and nests brackets at most 32 deep. A part it cannot read, such as an unclosed bracket or a comparison with nothing, answers 400 and names the part.

List records

Returns the matching records, newest first, with cursor pagination.
Each item holds the fields of a record. _timestamp is in microseconds. A request with a cursor and a different stream, window, limit, or match answers 400.

Count records over time

Counts the matching records in time buckets. A request covers at most 512 buckets from origin_micros to to.
buckets lists the buckets that hold a record, oldest first. errors counts the records at level ERROR, read from level or body_level. split is false when the stream has neither field or the level is masked for the reader; errors is then 0. When the count is not available, the call answers 200 with empty buckets and unavailable: time_budget, busy, or scan_limit, as for the trace count.

Describe a field

Describes the values one field takes in the matching records.
kind is number, time, text, or bool. total counts the matching records and present those with a value. top lists the commonest values, commonest first; top_skipped is true when nearly every value differs and none is listed. range gives the smallest and the largest value as text. A number field adds spread and bars. trend counts the commonest values over the window, and is absent where no value is commoner than the rest.

Errors

Last modified on October 31, 2026