Checks_GetCheckResult
const url = 'https://dev-api.qualiastudios.dev/v1/accounts/example/checks/example/results/example';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://dev-api.qualiastudios.dev/v1/accounts/example/checks/example/results/example \ --header 'X-API-Key: <X-API-Key>'Gets one result: the newest stored for the pair at the robot’s current model config (a dataset’s own key is ListCheckResults’), NOT_RUN when there is none; reading queues nothing.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”The account id.
The check id.
The result id.
Responses
Section titled “ Responses ”OK
What a check stored for one episode beyond the issues it raised. Only the
reach check stores results: one per episode and robot. {result} is
<episode uuid>-<robot uuid>, both canonical lowercase UUIDs joined by a
hyphen (73 characters), so a client can build the name itself. Computed
only when a RunCheck on checks/reach asks for it: a read never queues
one, and neither does a change of the dataset’s target robot or of its
reach_settings. A result belongs to a reach key (Reach.key: the robot’s
config_digest, the solver, the base it was keyed with and the walk it was
computed with); a
change of any of them leaves the old rows under their own key, and the new
key reads NOT_RUN until someone runs the check. Two datasets that ask the
same question share the result.
Served by qds-api (reach results are written by the reach op, pyroki).
object
Accounts/{account}/checks/{check}/results/{result}
The episode, named under its upload: accounts/{account}/datasets/{upload}/episodes/{episode}.
Pending, succeeded, failed or not run.
Why it failed.
When it was computed.
The reach check’s.
object
Accounts/{account}/robots/{robot}
The robot model config it was solved against (RobotModel.config_digest).
Every stretch the robot cannot follow, in time order.
One stretch the robot cannot follow.
object
Which hand.
Start, seconds from the start of the recording.
How long.
Worst position miss, metres.
Worst rotation miss, radians.
Measured causes and excess over the unchanged reached tolerances.
object
Existing solver-specific position threshold, metres.
Existing rotation threshold, radians.
Worst measured miss beyond that position threshold; zero for rotation-only.
Worst measured miss beyond that rotation threshold.
Measured limiting joints observed during the stretch.
A finite active joint bound whose outward differential reduces target error. This is local constraint evidence, not proof that every IK branch fails.
object
Actual URDF joint and the link it turns.
Actual URDF child link.
“lower” or “upper”.
Measured position in radians (metres for prismatic).
The active URDF limit, in the same native joint unit.
Decrease of tolerance-normalized squared error per native joint unit in the direction beyond this bound. Positive, measured from actual FK.
Largest proved beyond-chain excess observed during the stretch.
object
Target distance from the shoulder, metres.
Conservative chain radius, metres.
Target distance minus radius minus the existing position tolerance.
Rows with residual solver misses and no measured bound/length cause.
Unavailable solver rows; they do not supply a fabricated physical miss.
The longest stretch, seconds; 1 s or more raises out_of_reach.
The reach key the result belongs to: the robot’s config, the solver, the base it was keyed with and the walk it was computed with (see ReachStatus.current_key). A list for a dataset returns that dataset’s current key, also for a pair not run yet (NOT_RUN), except when nothing in its scope has been solved under that key yet: then it returns the key of the dataset’s last finished run (ReachStatus.last_finished_run) where that run stored results, so a key here that differs from current_key is the last solve under settings since changed. GetCheckResult, an account-wide list, or a read made while fleet is unreachable, returns the key of the newest stored result (empty for a pair nobody ran).
Metadata for reading the separate bounded joint trace.
object
Current reach key this trace belongs to.
Pipeline run that owns the separate reach_trace artifact.
Original input rows; samples retain their source index.
Number of original input rows between retained solver frames.
Source take’s frames per second.
Solver order is exactly Robot.joints.actuated_names (URDF order). Revolute values are radians; prismatic values are metres.
Home hand midpoint in metres, in the fixed robot base frame.
Digest of the fixed-base placement settings.
Where the source hand poses were recorded.
Calibration digest already applied to TCP channels, empty at root.
Zero on legacy traces; one carries optional measured diagnostics.
Serialized optional diagnostic bytes in the bounded artifact, used alongside frame/joint counts for conservative batch read budgets.
Exact midpoint of the first simultaneous posed source row. Walk 5 uses this single placement anchor even when display samples omit it.
Optional measured collision coverage, findings and conservative bounds.
object
Missing geometry or home/jaw input never establishes collision-free output.
object
Checked_configured_pairs, partial, or unavailable.
Original source rows.
Valid rows evaluated against all available configured pairs.
Concrete missing geometry, explicit home or row-jaw inputs.
Exact pairs excluded because they touch at explicitly configured home.
A configured capsule pair, named exactly as its URDF links.
object
First link in the configured pair.
Second link in the configured pair.
Every collision stretch, measured before trace decimation.
One positive-duration stretch of measured capsule penetration.
object
Grippers_collide, hits_body, arms_collide, or uncategorized links_collide.
Start on the take’s unchanged timeline, seconds.
Duration on the take’s unchanged timeline, seconds.
Links that met first in this stretch.
object
First link in the configured pair.
Second link in the configured pair.
Most negative signed capsule clearance, metres.
Number of stretches in this category. The other fields describe its longest.
Conservative shoulder bounds, where provable from the configured model.
A conservative outer sphere derived from the configured URDF chain/tool.
object
Configured arm side.
Actual first independent arm joint.
Parent link containing the shoulder origin.
Three metres in that parent link’s frame.
Sum of downstream translation lengths and tool offset; finite prismatic excursion is included. Inside this sphere does not establish reachability.
Only a base-fixed anchor can prove global beyond-chain reach.
Complete source-row intervals without simultaneous required-hand poses. These contain no reach or collision measurement, regardless of trace sampling.
A gap in the original take’s pose coverage, independent of sampled postures.
object
First original input row, zero based.
Consecutive missing-pose rows in this interval.
Start on the original take’s clock, derived from its FPS.
Length on that clock; the end is exclusive.
Example
{ "state": "STATE_UNSPECIFIED", "reach": { "stretches": [ { "side": "SIDE_UNSPECIFIED" } ], "trace": { "poseSource": "POSES_AT_UNSPECIFIED" }, "diagnostics": { "armBounds": [ { "side": "SIDE_UNSPECIFIED" } ] } }}default
Section titled “default ”Default error response
The Status type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by gRPC. Each Status message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the API Design Guide.
object
The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
A list of messages that carry the error details. There is a common set of message types for APIs to use.
Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
object
The type of the serialized message.
Example generated
{ "code": 1, "message": "example", "details": [ { "@type": "example" } ]}