repos
Repos (kind = dataset | model | robot) — create, read, update, delete, search
GET /v1/repos
List / search repos
Lists repos visible to the caller (public + own/org private). q matches slug and description (case-insensitive substring, v0); tag may repeat and every given tag must match.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
q | query | string | Search text (matches slug and description). |
kind | query | RepoKind | |
owner | query | Handle | Filter by owner handle (username or org slug). |
tag | query | array of Tag | Filter by tag; repeatable (AND semantics). |
visibility | query | Visibility | |
sort | query | string | Sort key, always descending (newest first). |
robot | query | string | UI-API: |
interface_fingerprint | query | string | K2: only robot repos whose card's CURRENT |
facets | query | string | UIV2-thumbs — |
limit | query | integer | Page size. |
cursor | query | string | Opaque cursor from the previous page's |
Responses
POST /v1/repos
Create a repo
Creates a dataset, model or robot repo. owner defaults to the caller's username; pass an org slug to create under an org the caller belongs to. Visibility defaults to private.
Request body
| Field | Type | Description |
|---|---|---|
kind | RepoKind | |
slug | Slug | |
owner | Handle | null | Owner handle; defaults to the caller's username. |
visibility | Visibility | |
description | string | null | |
tags | array of Tag |
Responses
GET /v1/repos/{owner}/{repo}
Get a repo
Full repo detail including the kind-specific meta block (dataset_meta | model_meta | robot_card) when set.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
owner | path | Handle | Repo owner handle (username or org slug). |
repo | path | Slug | Repo slug. |
Responses
PATCH /v1/repos/{owner}/{repo}
Update a repo
Updates description, tags and/or visibility. Slug rename is not supported in v0. Requires write access to the repo.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
owner | path | Handle | Repo owner handle (username or org slug). |
repo | path | Slug | Repo slug. |
Request body
| Field | Type | Description |
|---|---|---|
visibility | Visibility | null | |
description | string | null | |
tags | array of Tag | null |
Responses
DELETE /v1/repos/{owner}/{repo}
Delete a repo
Deletes the repo and unlinks its files (content-addressed blobs are garbage-collected later). Requires write access. A repo referenced by training-run or rollout history cannot be deleted (409) — cost and provenance rows must survive. Archive/hide (retire a repo from listings without destroying history) is the v1+ escape hatch for that case.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
owner | path | Handle | Repo owner handle (username or org slug). |
repo | path | Slug | Repo slug. |
Responses
Schemas (33)
The schemas these operations reach before any other tag’s do. A type that links elsewhere is rendered on that tag’s page.
RepoKind
Handle
Owner handle — a username or org slug (shared namespace).
Tag
Visibility
RepoPage
| Field | Type | Description |
|---|---|---|
items | array of Repo | |
next_cursor | string | null | |
facets | RepoFacets | null | UIV2-thumbs — present only when |
RepoCreate
| Field | Type | Description |
|---|---|---|
kind | RepoKind | |
slug | Slug | |
owner | Handle | null | Owner handle; defaults to the caller's username. |
visibility | Visibility | |
description | string | null | |
tags | array of Tag |
Repo
| Field | Type | Description |
|---|---|---|
id | Id | |
kind | RepoKind | |
owner | RepoOwner | |
slug | Slug | |
full_name | string |
|
visibility | Visibility | |
description | string | null | |
tags | array of Tag | |
dataset_meta | DatasetMeta | null | Present only when kind is |
model_meta | ModelMeta | null | Present only when kind is |
robot_card | RobotCard | null | Present only when kind is |
file_summary | RepoFileSummary | |
policy_count | integer | null | UIV2-thumbs — on a |
created_at | string (date-time) | |
updated_at | string (date-time) |
RepoUpdate
All fields optional; omitted fields are unchanged.
| Field | Type | Description |
|---|---|---|
visibility | Visibility | null | |
description | string | null | |
tags | array of Tag | null |
RepoFacets
UIV2-thumbs — counts over the caller's visible repos of the requested kind (and owner, when given); q, tag, visibility and robot are not applied, so the counts hold still while a filter changes.
| Field | Type | Description |
|---|---|---|
total | integer | Every visible repo in the counted set (the "All" row). |
tags | array of RepoFacetBucket | One bucket per tag carried by at least one repo of the set, count descending then tag ascending; at most 100 (a rail does not print more). A repo counts once per tag. |
RepoOwner
DatasetMeta
| Field | Type | Description |
|---|---|---|
episode_count | integer | |
fps | number | null | |
robot_type | string | null | Free-form robot type label (e.g. |
total_frames | integer | |
updated_at | string (date-time) |
ModelMeta
| Field | Type | Description |
|---|---|---|
policy_type | string | Policy family (e.g. |
base_model | string | null | Base model reference when finetuned. |
source_run_id | string | null | Training run ( |
control_class | ControlClass | null | Which layer the policy belongs to (M15). Null means undeclared — such a model cannot become an endpoint until it says. |
robot | string | null | UI-API: |
embodiment_fingerprint | string | null | UI-API: the embodiment-interface fingerprint recorded in the policy's manifest (M17b stamps it): the |
embodiment_check | EmbodimentCheck | null | UI-API: |
updated_at | string (date-time) |
RobotCard
| Field | Type | Description |
|---|---|---|
dof | integer | |
actuators | array of Actuator | |
mass_kg | number | null | |
limits | map of JointLimits | null | Map of joint name → limits. |
mjcf_path | FilePath | null | Repo-relative path of the MJCF file inside this repo. |
description_md | string | null | Markdown notes rendered on the robot page. |
interface | EmbodimentInterface | null | The embodiment interface (M17): the robot-side declaration every training, sim-gate and deploy path reads. Null on a card that only describes the hardware. |
interface_fingerprint | string | null | sha256 of the canonical |
validation | RobotValidationRecord | null | UI2: the last validation report stored with the card, as the publisher sent it. Null when none was sent. |
thumbnail_paths | RobotThumbnailPaths | null | UIV2-thumbs: the robot's still, one per theme, as repo files — fetch them through the repo's raw route (presigned on request). Null when the publisher rendered none (no GL on its machine, or |
updated_at | string (date-time) |
RepoFileSummary
UI2: what the repo holds, computed on read (one grouped query per page): how many files, their bytes, and how many of their blobs the hub has hashed itself (M3 verified). A repo page prints 26 · 30,882,681 B and "digests all verified by the hub" from this instead of walking the tree.
| Field | Type | Description |
|---|---|---|
count | integer | |
total_bytes | integer | |
verified_count | integer | Files whose blob is |
RepoFacetBucket
| Field | Type | Description |
|---|---|---|
value | string | The tag; |
count | integer |
ControlClass
Which layer of the robot stack a model belongs to (M15, docs/ARCHITECTURE.md "Inference placement"). reflex — a 50 Hz+ stabilisation / locomotion policy that must run on the robot and is never served over a network by this hub (createEndpoint on one is 409); skill — a VLA / skill policy emitting action chunks at 1–10 Hz, servable as an endpoint; planner — a task-level model at ~1 Hz, servable as an endpoint. The importer and the runner set reflex for every Lucen legged policy and for stub_ppo.
EmbodimentCheck
How a policy's recorded embodiment fingerprint compares with a robot's current interface fingerprint — the device driver's vocabulary (M17d), where mismatch is its embodiment_mismatch refusal. match — the same interface; mismatch — the robot's interface changed since the policy was built, or the policy was built for another one; policy_unstamped — the policy records no fingerprint; robot_undeclared — the robot card declares no interface.
Actuator
One actuator group; extra vendor-specific fields allowed.
| Field | Type | Description |
|---|---|---|
name | string | |
model | string | null | |
count | integer | null |
JointLimits
Per-joint limits; units are SI (rad, rad/s, N·m).
| Field | Type | Description |
|---|---|---|
lower | number | null | |
upper | number | null | |
velocity | number | null | |
effort | number | null |
FilePath
Repo-relative file path with / separators. No leading /, no . or .. segments (server-enforced).
EmbodimentInterface
What a robot IS to a policy, declared once: the canonical joint order (the policy's index space), base type, default pose, how the joints are driven, what an action means, the control rate, which proprioception the real robot has, named parts, end effectors, cameras, what a person or planner commands, and the safe-stop behaviour. None of it is carried by a URDF/MJCF, and a wrong value of any of it fails silently at deploy time. Poses, actuator groups, parts and per-joint scales may only name joints in joint_order, and no joint may be driven by two actuator groups.
| Field | Type | Description |
|---|---|---|
version | integer | |
base | string | |
joint_order | array of string | Joint names in policy index order. Hashed; never reorder silently. |
default_pose | map of number | null | Joint name → position (rad or m) the robot starts from and offsets are relative to. |
default_keyframe | string | null | Name of the MJCF keyframe holding the default pose, if there is one. |
init_base_height_m | number | null | Floating base only. |
control_rate_hz | number | |
physics_dt_s | number | null | |
actuation | array of EmbodimentActuation | |
action | EmbodimentAction | |
proprioception | array of string | Observation terms the REAL robot can supply ( |
parts | array of EmbodimentPart | |
end_effectors | array of EmbodimentEndEffector | |
feet | array of string | Bodies or sites that touch the ground (legged robots). |
cameras | array of EmbodimentCamera | |
command_space | EmbodimentCommandSpace | |
safety | EmbodimentSafety |
RobotValidationRecord
UI2: the last lucen robot validate report, stored WITH the card by lucen robot publish (or sent by hand on putRobotCard) so a robot page can print 14 pass · 2 warn · 0 fail and each warning without re-running anything. The hub never runs MuJoCo, so a mujoco record is the publisher's claim about the files at checked_at, not a verdict of the hub's: the hub's own static checks still run on every putRobotCard and refuse the card regardless of what the record says. checked_at older than the card's updated_at means the card changed since it was checked.
| Field | Type | Description |
|---|---|---|
engine | string | |
engine_version | string | null |
|
checked_at | string (date-time) | |
checks | array of RobotValidationCheck | |
check_id | string | null | R1: the hosted check ( |
RobotThumbnailPaths
UIV2-thumbs — the robot drawn at its default pose by MuJoCo's own offscreen renderer on the publisher's machine (the hub never runs MuJoCo), 640×480, framed on the robot's geoms, one image per theme: light on the light panel colour with a faint grid, dark on the dark one. A still is the publisher's picture of the files it pushed, like validation is its report.
| Field | Type | Description |
|---|---|---|
light | FilePath | |
dark | FilePath | |
render_key | string | null | sha256 over what the stills were rendered from (the renderer's version, MuJoCo's, every file the MJCF reads and the pose the card declares). |
EmbodimentActuation
| Field | Type | Description |
|---|---|---|
joints | array of string | |
mode | string | |
kp | number | null | |
kd | number | null | |
effort_limit | number | null | |
velocity_limit | number | null | |
armature | number | null | |
friction_loss | number | null | |
delay_ms | number | null |
EmbodimentAction
| Field | Type | Description |
|---|---|---|
semantics | string |
|
scale | number | |
scale_per_joint | map of number | null | Overrides |
clip | number | null |
EmbodimentPart
| Field | Type | Description |
|---|---|---|
name | string | |
kind | string | |
joints | array of string |
EmbodimentEndEffector
| Field | Type | Description |
|---|---|---|
name | string | |
site | string | null | |
body | string | null | |
gripper_joint | string | null | |
in_mjcf | boolean | False for a real tool the model does not contain. |
EmbodimentCamera
| Field | Type | Description |
|---|---|---|
name | string | |
mount | string | null | |
width | integer | null | |
height | integer | null | |
fps | number | null | |
vla_slot | EmbodimentCameraSlot | null | Which image slot of a VLA this camera feeds. |
EmbodimentCommandSpace
| Field | Type | Description |
|---|---|---|
kind | string | The morphology hint generic task templates key on. |
ranges | map of array of number | null | Command name → [lower, upper]. |
EmbodimentSafety
| Field | Type | Description |
|---|---|---|
soft_limit_factor | number | |
max_tilt_rad | number | null | |
safe_stop | string |
RobotValidationCheck
One check. code is stable and machine-readable (mjcf.exists, mjcf.parses, assets.closure, interface.joint_order, interface.base, … — the full list is in docs/API.md); names are the offending joints, files or fields; hint is a one-line fix.
| Field | Type | Description |
|---|---|---|
code | string | |
status | RobotCheckStatus | |
message | string | |
names | array of string | |
hint | string | null | |
loc | array of string | integer | null | Path into the card body the check is about, when there is one. |
data | object | null | Numbers behind the verdict (drift, penetration, counts), per check. |
EmbodimentCameraSlot
RobotCheckStatus
fail blocks putRobotCard (422) and lucen robot publish; warn never blocks; skip means the check could not run and says why (usually because an earlier one failed).