Checks_GetReachStatus
const url = 'https://junction-api.qualiastudios.dev/v1/accounts/example/datasets/example/reachStatus';const options = {method: 'GET', headers: {'X-API-Key': '<X-API-Key>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://junction-api.qualiastudios.dev/v1/accounts/example/datasets/example/reachStatus \ --header 'X-API-Key: <X-API-Key>'Where a dataset’s reach check stands: the settings a RunCheck would use now, the key they make, and the dataset’s runs. A merged dataset pressed before its press was one run holds that press in its uploads, one run each: until it has a run of its own (and a finished one), that press reads as one run, its counts summed, RUNNING while any part runs (REQUESTED while one waits), else FAILED with a failed part’s note, else SUCCEEDED, its operation its first part’s. Runs made before an upload joined this merged dataset are excluded. Writes nothing. NOT_FOUND outside the caller’s workspace.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The account id.
The dataset id.
Responses
Section titled “ Responses ”OK
Where a dataset’s reach check stands (Checks.GetReachStatus): one per dataset, always there. Reading it writes nothing and asks for no run.
Served by qds-api.
object
Accounts/{account}/datasets/{dataset}/reachStatus
The settings a RunCheck on checks/reach would use now, resolved: the
target robot’s solver, and the dataset’s base and heading, else the robot
model’s reach_base, else 0, 0, 0. A dataset has no solver of its own, and
there is no default solver: solver is SOLVER_UNSPECIFIED whenever none
was resolved (no target robot, the robot removed, without a model or in
another workspace, a robot without a solver, or fleet could not be
asked).
object
The IK solver the dataset is solved with: always its target robot’s, and set only on a status read (a run’s resolved settings). A dataset does not pick one: a request that names a solver here (UpdateDataset, CreateDataset) is refused with INVALID_ARGUMENT (“a dataset uses its robot’s solver; change it on the robot’s Solver page”), and a solver stored on a dataset before that is ignored. A robot with no solver cannot be solved on.
Where the takes’ start sits from the relaxed grippers’ midpoint, metres
in the robot’s base frame (x forward, y left, z up): empty or exactly
three numbers, each finite and within 5 m either way. Empty follows the
target robot model’s reach_base, else 0, 0, 0. Stored to 0.1 mm and
applied to both hand paths as one rigid translation from the robot’s home
hand midpoint.
Rotate both paired paths around world up before placing their first-row midpoint at the shared home reference. Radians; finite and within +/- pi. The robot base remains at world (0, 0, 0).
Where the source episode’s hand poses were recorded. Set by qds-api on reads; clients do not set it. TCP runs consume already-resolved TCP channels and never apply calibration again.
Digest of the TCP calibration already applied to the published upload, empty for root poses. Set by qds-api on reads.
The reach key those settings make with the target robot’s current model config. Empty when the dataset has no target robot, the robot cannot be solved against (removed, no model, no solver, in another workspace), a merged dataset’s uploads hold their poses at different frames, or fleet could not be asked.
The newest run of any state; unset until the first press.
object
Accounts/{account}/operations/{operation}: the RunCheck that recorded it.
The key its results are stored under (ReachStatus.current_key).
What it was keyed with, resolved: the solver is PYROKI, DLS or MINK and base_m has three numbers.
object
The IK solver the dataset is solved with: always its target robot’s, and set only on a status read (a run’s resolved settings). A dataset does not pick one: a request that names a solver here (UpdateDataset, CreateDataset) is refused with INVALID_ARGUMENT (“a dataset uses its robot’s solver; change it on the robot’s Solver page”), and a solver stored on a dataset before that is ignored. A robot with no solver cannot be solved on.
Where the takes’ start sits from the relaxed grippers’ midpoint, metres
in the robot’s base frame (x forward, y left, z up): empty or exactly
three numbers, each finite and within 5 m either way. Empty follows the
target robot model’s reach_base, else 0, 0, 0. Stored to 0.1 mm and
applied to both hand paths as one rigid translation from the robot’s home
hand midpoint.
Rotate both paired paths around world up before placing their first-row midpoint at the shared home reference. Radians; finite and within +/- pi. The robot base remains at world (0, 0, 0).
Where the source episode’s hand poses were recorded. Set by qds-api on reads; clients do not set it. TCP runs consume already-resolved TCP channels and never apply calibration again.
Digest of the TCP calibration already applied to the published upload, empty for root poses. Set by qds-api on reads.
Accounts/{account}/robots/{robot}: the target robot it ran on.
When Run solver was pressed.
Where it stands.
The takes it covers (handheld and egocentric episodes that carry hand poses): those of the dataset when it was pressed (or the selection), the ones answered from stored results included.
Takes with a result.
Takes that could not be solved.
Why a run that stands REQUESTED or RUNNING has not moved, or why it was given up, in a sentence a person reads (“waiting for the reach service”, “some takes are not ready yet”, “the robot model changed; run again”). Empty while it is moving.
The newest run that ended (SUCCEEDED, FAILED or CANCELLED); unset until one has.
object
Accounts/{account}/operations/{operation}: the RunCheck that recorded it.
The key its results are stored under (ReachStatus.current_key).
What it was keyed with, resolved: the solver is PYROKI, DLS or MINK and base_m has three numbers.
object
The IK solver the dataset is solved with: always its target robot’s, and set only on a status read (a run’s resolved settings). A dataset does not pick one: a request that names a solver here (UpdateDataset, CreateDataset) is refused with INVALID_ARGUMENT (“a dataset uses its robot’s solver; change it on the robot’s Solver page”), and a solver stored on a dataset before that is ignored. A robot with no solver cannot be solved on.
Where the takes’ start sits from the relaxed grippers’ midpoint, metres
in the robot’s base frame (x forward, y left, z up): empty or exactly
three numbers, each finite and within 5 m either way. Empty follows the
target robot model’s reach_base, else 0, 0, 0. Stored to 0.1 mm and
applied to both hand paths as one rigid translation from the robot’s home
hand midpoint.
Rotate both paired paths around world up before placing their first-row midpoint at the shared home reference. Radians; finite and within +/- pi. The robot base remains at world (0, 0, 0).
Where the source episode’s hand poses were recorded. Set by qds-api on reads; clients do not set it. TCP runs consume already-resolved TCP channels and never apply calibration again.
Digest of the TCP calibration already applied to the published upload, empty for root poses. Set by qds-api on reads.
Accounts/{account}/robots/{robot}: the target robot it ran on.
When Run solver was pressed.
Where it stands.
The takes it covers (handheld and egocentric episodes that carry hand poses): those of the dataset when it was pressed (or the selection), the ones answered from stored results included.
Takes with a result.
Takes that could not be solved.
Why a run that stands REQUESTED or RUNNING has not moved, or why it was given up, in a sentence a person reads (“waiting for the reach service”, “some takes are not ready yet”, “the robot model changed; run again”). Empty while it is moving.
Whether last_run was made under another key than current_key: the target robot, model, placement, pose frame or calibration changed since, and a RunCheck would compute something new. Nothing runs by itself.
Accounts/{account}/robots/{robot}; empty if no target robot is assigned.
Example
{ "settings": { "solver": "SOLVER_UNSPECIFIED", "poseSource": "POSES_AT_UNSPECIFIED" }, "lastRun": { "settings": { "solver": "SOLVER_UNSPECIFIED", "poseSource": "POSES_AT_UNSPECIFIED" }, "state": "STATE_UNSPECIFIED" }, "lastFinishedRun": { "settings": { "solver": "SOLVER_UNSPECIFIED", "poseSource": "POSES_AT_UNSPECIFIED" }, "state": "STATE_UNSPECIFIED" }}default
Section titled “default ”Default error response
A refusal from the API itself.
object
The gRPC code name in upper case, e.g. NOT_FOUND.
Whether the same call may succeed if retried.
Empty, except when a dataset copy or move is refused: then one google.rpc.ErrorInfo with the refusal’s reason code, its domain and, in metadata, the datasets it names.
object
A refusal from the gateway before the call reaches the API, for example 401 bad or missing API key, 403 key lacks the scope or environment closed, 413 body too large.
object
What went wrong.
Example generated
{ "code": "example", "message": "example", "retryable": true, "details": [ {} ]}