Resolve read plan
Resolve the physical read plan for a topic identity over a time window.
The request body carries the window, the field projection (as field-subtree
addresses), an optional per-subtree representation prefer grammar, and
optionally names the schema and timeline source to use. A malformed
body, or a schema named by both id and checksum, yields a 400.
Authorization is two layers. The caller must first hold topic view
access in the org that owns the topic. Within the org, authorization
is all-or-nothing over the window, through view access to every
in-window partition’s backing file: if the caller cannot view any
part of the requested window, the whole request fails with a 401
(RobotoUnauthorizedException) rather than returning a plan that
silently omits data.
When the body carries a session_id, the read is scoped to the files
recorded in that session (so a shared topic name does not pull data
from unrelated files org-wide), and the caller must additionally hold
session-view access in the org that owns the session; an unknown session
yields a 404 and one the caller cannot view yields a 401.
A file_id limits the read to the topic’s data in that file, a dataset_id to its data in the dataset’s
files, and a device_id to its data in the device’s files (a file belongs to the device it names, or, when it
names none, to the device its dataset names). A named file or dataset must exist (else 404) and the caller must
hold view access to it (else 401). A device is not looked up, so an unknown device yields an empty plan. Every
restriction the body names narrows the read, and restrictions named together intersect. Data a restriction leaves
out does not affect the read: its schemas cause no ambiguity and its files need no access.
With a file, dataset or device named, the body may omit start_time, end_time or both. An omitted bound
defaults to the start or end of the topic’s data within the body’s restrictions, across every timeline source.
When the restrictions select no timestamped data for the topic, or the one given bound lies past the far end of
that data (a start after the data ends, or an end before it begins), the plan has no partitions and a null
window.
A caller pinned to an API version below 2026-10-05 receives on every
partition the extent field that SDK releases pinned to those versions
require. Such an SDK selects rows by the requested window alone, so a plan
is refused for that caller with a 400 (RobotoDeprecatedException)
asking them to upgrade when any partition owns a slice of a shared file, or
when a session narrows any partition’s window below the requested one:
reading it on that version would return rows belonging to another session
or to another partition packed in the same file.
Access control
- Restricted tokens need the API scope
api.everything_else
/v2/topics/id/{topic_id}/read-planAuthorizationBearer token · headerrequiredtopic_idstringrequiredX-Roboto-Org-IdstringX-Roboto-User-Idstringapplication/jsonstart_timeinteger | nullShow propertiesHide properties
integernullend_timeinteger | nullShow propertiesHide properties
integernullfields_includeFieldAddress[] | nullShow propertiesHide properties
FieldAddresspathstring[] | nullShow propertiesHide properties
stringstringnullfield_idstring | nullShow propertiesHide properties
stringnullnullfields_excludeFieldAddress[] | nullShow propertiesHide properties
FieldAddresspathstring[] | nullShow propertiesHide properties
stringstringnullfield_idstring | nullShow propertiesHide properties
stringnullnullpreferRepresentationPreference | nullShow propertiesHide properties
defaultRepresentationSelectorSelects which stored variant of a field to read when several are available.
A selector has three optional criteria — storage_format, content_format, and
transformations — one for each attribute on which stored variants of the same field
can differ (see :py:class:RepresentationRecord). A criterion that is set is a
requirement a variant must meet to be selected; a criterion left None places no
requirement, and any value is acceptable.
A selector never falls back to a variant other than the one it describes. If any criterion is set and no stored variant of a requested field meets every requirement — whether the variants that exist all fall short, or the field has no stored variant at all — the read fails with an error rather than quietly leave out the field. Only under a selector with no criteria set is a field with no stored variant simply absent from the result; such a selector requires nothing, so nothing requested is missing.
Successor to :py:class:roboto.domain.topics.RepresentationSelector,
used by :py:meth:~roboto.domain.topics.Topic.get_data.
Show propertiesHide properties
storage_formatRepresentationStorageFormat | nullShow propertiesHide properties
stringnullcontent_formatstring | nullShow propertiesHide properties
stringnulltransformationsstring[] | nullShow propertiesHide properties
stringstringnulloverridesRepresentationOverride[]Show propertiesHide properties
RepresentationOverridefieldFieldAddressrequiredAddresses a schema field, and the subtree nested under it, by exactly one of two forms.
A path names the field by its path_in_schema components directly (no
string delimiter, so a component may itself contain a .); a field_id
names it opaquely and resolves server-side to the same path. Either form
designates the field and every field nested under it.
Show propertiesHide properties
pathstring[] | nullShow propertiesHide properties
stringstringnullfield_idstring | nullShow propertiesHide properties
stringnullselectorRepresentationSelectorrequiredSelects which stored variant of a field to read when several are available.
A selector has three optional criteria — storage_format, content_format, and
transformations — one for each attribute on which stored variants of the same field
can differ (see :py:class:RepresentationRecord). A criterion that is set is a
requirement a variant must meet to be selected; a criterion left None places no
requirement, and any value is acceptable.
A selector never falls back to a variant other than the one it describes. If any criterion is set and no stored variant of a requested field meets every requirement — whether the variants that exist all fall short, or the field has no stored variant at all — the read fails with an error rather than quietly leave out the field. Only under a selector with no criteria set is a field with no stored variant simply absent from the result; such a selector requires nothing, so nothing requested is missing.
Successor to :py:class:roboto.domain.topics.RepresentationSelector,
used by :py:meth:~roboto.domain.topics.Topic.get_data.
Show propertiesHide properties
storage_formatRepresentationStorageFormat | nullShow propertiesHide properties
RepresentationStorageFormatnullcontent_formatstring | nullShow propertiesHide properties
stringnulltransformationsstring[] | nullShow propertiesHide properties
stringstringnullnullschema_idstring | nullShow propertiesHide properties
stringnullschema_checksumstring | nullShow propertiesHide properties
stringnulltimeline_source_idstring | nullShow propertiesHide properties
stringnulltimeline_source_namestring | nullShow propertiesHide properties
stringnullsession_idstring | nullShow propertiesHide properties
stringnullfile_idstring | nullShow propertiesHide properties
stringnulldataset_idstring | nullShow propertiesHide properties
stringnulldevice_idstring | nullShow propertiesHide properties
stringnullOK
dataobjectrequiredResolves a read of one topic over a time window into the files to fetch and how to interpret them.
Show propertiesHide properties
plan_versionintegertopic_idstringrequiredwindowTimeWindow | nullrequiredShow propertiesHide properties
startintegerrequiredendintegerrequirednullschemaReadPlanSchemaRef | nullShow propertiesHide properties
schema_idstringrequiredchecksumstringrequirednullprojectionReadPlanProjectionrequiredThe output fields the plan resolves rows to.
The projection takes exactly one of two forms: either every field in the
schema (all is true, and the field list is left implicit so the plan
need not enumerate a large schema) or an explicit fields list.
Show propertiesHide properties
allbooleanfieldsReadPlanFieldRef[] | nullShow propertiesHide properties
ReadPlanFieldReffield_idstringrequiredpathstring[]requirednullpartitionsReadPlanPartition[]Show propertiesHide properties
ReadPlanPartitiontopic_part_idstringrequiredtime_offset_nsintegerrequiredwindowTimeWindowrequiredA closed time window in absolute nanoseconds since the Unix epoch; both bounds inclusive.
The same shape serves the window a plan resolves over and the window each partition's rows are selected in.
Show propertiesHide properties
startintegerrequiredendintegerrequiredtimestampReadPlanTimestamprequiredWhere a partition's row timestamps come from.
Timestamps are either read out of a schema field (kind is
"schema_field", and field names which one) or taken from the
storage envelope (message log or publish time), in which case no schema
field is involved and field is None.
Show propertiesHide properties
kindstringrequiredschema_fieldmessage_log_timemessage_publish_timefieldReadPlanFieldRef | nullShow propertiesHide properties
field_idstringrequiredpathstring[]requirednullunitstring | nullShow propertiesHide properties
stringnulldata_rangeany[] | nullShow propertiesHide properties
anynullscan_tasksReadPlanScanTask[]Show propertiesHide properties
ReadPlanScanTasksubtreeReadPlanFieldRef | nullShow propertiesHide properties
field_idstringrequiredpathstring[]requirednullprecedenceintegerrequiredformatRepresentationStorageFormatrequiredSupported storage formats for topic data representations.
Defines the available formats for storing and accessing topic data within the Roboto platform. Each format has different characteristics and use cases.
mcapparquettransformationsstring[]objectReadPlanObjectRefrequiredPoints to the file backing a scan task. A consumer fetches the file's bytes from it.
Show propertiesHide properties
fs_node_idstringrequiredsize_bytesinteger | nullShow propertiesHide properties
integernulltopic_namestring | nullShow propertiesHide properties
stringnullThrown when the conversation context (messages, system prompt, tool results) exceeds the model's context window limit.
The token estimate and the model's context limit are not carried on the exception, so a caller cannot read usage numbers off it.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown when authentication fails
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown if an operation would exceed a user or org level limit.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown if a user is attempting to perform an action unrecognized by the Roboto platform.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown if there is a conflict between a resource you're creating and another existing resource
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown if a resource is missing or expired.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullAn error the platform reported that this SDK release cannot resolve to a specific exception class.
Reported for an element of a :py:class:~roboto.http.BatchResponse whose error names a code this release
defines no class for, or that arrived without a code, without a message, or as text that is not an
error envelope at all. It carries whatever code and message the platform sent, so a caller handling the
failure still learns what went wrong; when no message could be read, the message is the error's raw text.
The error envelope carries no status code, so http_status_code reports the 500 inherited from
:py:class:RobotoDomainException rather than the status the failure actually had.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown by shimmed out APIs which have not yet been implemented
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown when a service is unavailable, such as when it's under heavy load and can't accept new requests. This is expected to be transient and ought to be retried.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown when the service times out while processing a request. This is exepcted to be transient and ought to be retried.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | nullThrown when the server cannot complete the request because the response payload exceeds a storage or transport capacity limit (e.g., Lambda response size). This is NOT expected to be transient and should NOT be retried.
errorobjectShow propertiesHide properties
error_codenumbermessagestringstack_tracestring | null