Base URL
All requests go to:What you can run
There’s no infrastructure to manage. Every resource runs on Kite’s infrastructure and delivers standard artifacts: LeRobot datasets and policies, and MuJoCo scenes.1
Augmentations
Point Kite at a LeRobot dataset, describe a visual change in plain language, and get back new episodes with the robot’s motion preserved. See Augmentations.
2
Training runs
Point Kite at a LeRobot dataset, pick your policies and a GPU tier, and get back trained checkpoints. See Training runs.
3
Twins (private beta)
Point Kite at one episode of a LeRobot dataset and get back an interactable MuJoCo scene of the room, in one verified download. See Twins.
4
RL runs
Describe a behavior for a robot as a task spec and get back a policy trained in simulation: ONNX, the MuJoCo scene it trained in, clips, and a verdict from measured checks. See RL runs.
Asynchronous by design
Runs are asynchronous. Creating one returns immediately with anid; you then poll it as it progresses through processing → succeeded, or register a webhook and skip polling. failed and canceled are the other terminal states.
Every resource shares that status vocabulary, and GET /v1/operations/:id reports it uniformly for any id — so one polling loop handles them all.
A completed augmentation gives you a standard LeRobot dataset: Parquet tables for states and actions plus MP4 camera video. A completed training run gives you a standard LeRobot policy checkpoint. Neither is a proprietary format.
Conventions
Every endpoint has its own page under API reference: parameters, request body, response fields, and errors, generated from the OpenAPI document the API publishes at
https://api.kiteml.com/v1/openapi.json.- JSON everywhere. Requests and responses are
application/jsonunless noted. - Resource ids are prefixed — an augmentation is
aug_…, a training run istrn_…, a twin istwin_…, an RL run isrlr_…, an API key iskey_…— so they’re easy to recognize in logs. - Timestamps are ISO 8601 in UTC (e.g.
2026-07-21T09:14:00Z). - Idempotency is supported on run creation via an
Idempotency-Keyheader — see Augmentations and Training runs. - Lists are cursor-paginated — pass the response’s
next_cursorback asafter, and stop whenhas_moreis false. There is no offset paging. - Versions are dated. Send
Kite-Version: 2026-09-27to pin the contract your code was written against, the way Anthropic’santhropic-versionand Stripe’sStripe-Versionwork. Every response carries the version that served it. A breaking change ships under a new date, so code pinned to an older date keeps working; a request without the header gets the first version. An unknown date returns400with codeunsupported_version.