Rayform

API reference

Event streams

Stream a segment's channels and events as Arrow record batches over Arrow Flight.

Rayform is in private preview. APIs, formats and the SDK described here may change before general availability.

For reading time series at volume, such as joint states, IMU, poses and events, use the Arrow Flight endpoint instead of JSON. Data arrives as Arrow record batches that load directly into PyArrow, Polars or pandas without parsing.

Endpoint

FLIGHTgrpc+tls://flight.rayform.world:443

Authenticate with your API key as a bearer token in the call headers.

Tickets

A ticket is a JSON object naming what to stream:

FieldTypeRequiredDescription
segmentstringyesSegment ID
versionstringnoSegment version; defaults to the latest
channelsarrayyesChannels to stream, or ["events"] for interaction events
t0_ns, t1_nsintegernoTime window; defaults to the whole segment
framestringnoOutput convention, as in export options

Reading with PyArrow

Python
import json
import os

import pyarrow.flight as flight

client = flight.FlightClient("grpc+tls://flight.rayform.world:443")
options = flight.FlightCallOptions(headers=[(b"authorization", f"Bearer {os.environ['RAYFORM_API_KEY']}".encode())])

ticket = flight.Ticket(json.dumps({"segment": "seg_4f0a", "channels": ["joints/position", "joints/velocity"]}).encode())
table = client.do_get(ticket, options).read_all()
print(table.schema)
Text
t_ns: int64
joints/position: fixed_size_list<item: float>[7]
joints/velocity: fixed_size_list<item: float>[7]

Reading with the SDK

The SDK wraps the same calls:

Python
seg = client.segments.get("seg_4f0a")
joints = seg.channel("joints/position")          # pyarrow.Table
events = seg.events()                             # pyarrow.Table, time-ordered

Event schema

ColumnTypeDescription
t_nsint64Event time on the session clock
typestringEvent type, for example grasp
entitieslist of stringEntity IDs involved
t_start_ns, t_end_nsint64Span of the interaction
confidencefloat32Detector confidence, from 0 to 1

Last updated October 18, 2026