OriginMind
OmindOS Developers

DEVELOPER DOCUMENTATION

OmindOS API

Connect robot models, parameters, planning and navigation to your application.

Local servicehttp://127.0.0.1:8085

HTTP · JSON · Ubuntu

01 / CONNECT

Quick start

The quick-start example below applies to the manipulation workbench.

Check your installed software version first. Keep the workbench process running; the graphical interface is optional. The default service address is http://127.0.0.1:8085.

Local interfaces

These HTTP/JSON endpoints are provided by the installed client software. They do not require an account or API key by default. They do not cover remote access, cross-origin websites or authentication for a public service.

Starting the service
ProductVersionRun from the installed program directory
OmindOS Navigation0.2.0-preview.8./omindos workbench
OmindOS Manipulation0.3.1./OmindOS-Workbench --no-browser

Use Content-Type: application/json for POST requests. Both programs use port 8085 by default. Run them separately, or pass --port 8086 to the manipulation program and update your client URL.

cURL
curl --fail-with-body http://127.0.0.1:8085/v1/workbench-state
Python
import json
from urllib.request import urlopen

with urlopen("http://127.0.0.1:8085/v1/workbench-state",
             timeout=10) as response:
    state = json.load(response)
print(state)

API REFERENCE

Find an endpoint

All 17 endpoints · Expand an endpoint to read its description.

02 / NAVIGATION

Navigation profiles

Register robot parameters, preserve versions and retrieve a profile by ID. Identical submissions return the same ID; changed parameters create a new version. Registration does not enable physical motors.

POST/v1/robot-profilesRegister robot parameters

Body: complete robot profile; success returns HTTP 201 and profile_id

GET/v1/robot-profiles/{profile_id}Retrieve a parameter version

Retrieve a saved version using the complete profile ID

Profile request body
FieldMeaning
robot_idRobot identifier
kinematics.urdf_xmlURDF XML text
dynamics.jointsMotor and transmission parameters keyed by joint name; use a complete profile exported from the workbench

Export robot-parameters.json from the workbench first. Do not fill unknown motor calibration parameters with estimated values. Replace PROFILE_ID below with the complete profile_id returned by POST.

cURL
curl --fail-with-body \
  -X POST http://127.0.0.1:8085/v1/robot-profiles \
  -H 'Content-Type: application/json' \
  --data-binary @robot-parameters.json

curl --fail-with-body \
  http://127.0.0.1:8085/v1/robot-profiles/PROFILE_ID

The success response includes profile_id, robot_id and joint_names. runtime_applied and hardware_validated are false: the profile is stored, not applied to a physical controller.

03 / MANIPULATION

Manipulation

For OmindOS Manipulation 0.3.1: model queries, dual-arm and waist planning, and geometric navigation for differential or omnidirectional bases. The supplied RM75 models use left_tool0 and right_tool0 as TCP frames. Use the mapping returned by the selected model.

GET/v1/workbench-stateRead workbench state

Read active configuration and software stop state

GET/v1/workbench-modelsList robot models

List models available in this installation

GET/v1/workbench-model/{id}Read a model and poses

Read profile, mapping and poses; id: b / 6fb / 6f

GET/v1/workbench-active-profileRead the active profile

Read the applied workbench profile

POST/v1/workbench-active-profileUpdate the active profile

Body: complete profile; validate, apply and invalidate previous motion results

GET/v1/planning-configRead planning configuration

Read reference mapping; use model-supplied mapping for actual CAD

POST/v1/planning-startStart a planning task

Submit joint or dual-TCP planning; return task state

GET/v1/planning-task/{task_id}Read planning results

Read planning status, error and successful result

POST/v1/planning-cancelCancel a planning task

Body: {"task_id":"ACTUAL_TASK_ID"}

GET/v1/navigation-configRead navigation configuration

Read supported drive types and default navigation configuration

POST/v1/navigation-startStart a navigation task

Submit navigation, optionally followed by planning after parking

GET/v1/navigation-task/{task_id}Read navigation progress

Read task and navigation state; also renew the client connection

POST/v1/navigation-cancelCancel a navigation task

Body: {"task_id":"ACTUAL_TASK_ID"}

POST/v1/robot-modelCompute model and forward kinematics

urdf_xml (required), positions, base_pose; compute model and forward kinematics

POST/v1/workbench-stopSoftware stop and reset

{"engaged":true} stops; reset also requires expected_epoch

Planning requests: fields and units
Planning request fields
FieldMeaning
profileComplete model profile; available from the model endpoint
modejoint: joint path; object: coordinated dual-TCP translation and rotation
start / targetJoint names mapped to angles in radians; provide target for joint mode
mappingModel-specific arm, waist and TCP mapping
translation_m[x, y, z] translation in metres for object mode
rotation_degXYZ Euler angles in degrees for object mode; this field uses degrees
base_pose / obstaclesFixed base pose and world-frame box obstacles

For joint planning, the base, gripper and non-body joints remain fixed. Each object translation component is limited to ±0.25 m; each rotation_deg component to ±45°.

Navigation requests: maps and planning after parking
Navigation request fields
FieldMeaning
profile, start, goalRequired: complete profile, starting joint positions and base goal
goal / base_posex_m, y_m, yaw_rad; metres and radians
configRead the complete default from navigation-config before editing; drive_type is differential or omnidirectional
config.mapsize_m, origin_m, resolution_m; row-major occupancy data, with integer 0 as free space. Omitting data creates an empty simulation map
mapping / obstaclesModel mapping and shared environment obstacles
manipulation.translation_mOptional [x, y, z]; starts coordinated dual-TCP planning after parking is confirmed

Navigation pose comes from geometric simulation. A real map still requires site calibration. Planning output is not a control trajectory ready to send to motors.

04 / EXAMPLES

Examples

Read manipulation workbench state

This Python example uses only the standard library. It reads state, the model catalog and navigation configuration without changing workbench parameters.

Python
import json
from urllib.request import urlopen

base_url = "http://127.0.0.1:8085"
for endpoint in ("/v1/workbench-state", "/v1/workbench-models",
                 "/v1/navigation-config"):
    with urlopen(base_url + endpoint, timeout=10) as response:
        print(endpoint, json.load(response))

Register a navigation profile

Prepare robot-parameters.json exported from the workbench before running this example. The profile is stored in the running program’s data directory.

Python
import json
from pathlib import Path
from urllib.request import Request, urlopen

payload = Path("robot-parameters.json").read_bytes()
request = Request(
    "http://127.0.0.1:8085/v1/robot-profiles",
    data=payload,
    headers={"Content-Type": "application/json"},
    method="POST",
)
with urlopen(request, timeout=10) as response:
    result = json.load(response)
print(result["profile_id"])

Submit a prepared planning request

Prepare planning-request.json using the fields above and the current model’s profile and mapping. Poll using the returned task_id; HTTP success does not mean planning is complete.

cURL
curl --fail-with-body \
  -X POST http://127.0.0.1:8085/v1/planning-start \
  -H 'Content-Type: application/json' \
  --data-binary @planning-request.json

curl --fail-with-body \
  http://127.0.0.1:8085/v1/planning-task/TASK_ID

05 / TASK STATES

States and errors

Planning: running → succeeded / failed / canceled. A successful submission only creates the task. Continue querying its state.

Navigation: planning, navigating, aligning, parking. Navigation-only success ends at parked. A task with follow-up manipulation enters manipulation_planning and finishes at succeeded.

Keep polling navigation tasks

Query the task every 0.1–0.5 seconds. A gap longer than 3 seconds stops the task. For navigation-only success, result is null: read navigation. Do not continue using a partial path after failure or cancellation.

Common HTTP statuses
HTTPAction
400Invalid request; inspect error. Asynchronous validation may also return status=failed
403Local same-origin check failed; use a local client and 127.0.0.1
404Requested profile, model or task is missing; check the full ID
413Invalid body size or transfer encoding; profile request limit: 2 MiB
415Incorrect POST content type; set Content-Type: application/json
423Software stop, task exclusion or state interlock; read current state and do not automatically retry motion

Stop and reset

Send {"engaged":true} to /v1/workbench-stop to engage the software stop. Before resetting, read the current motion_epoch and pass that integer as expected_epoch with engaged: false. Reset does not resume a task. A software stop is not a hardware emergency stop.

06 / COMPATIBILITY

Versions and scope

Version compatibility
Documentation versionDocumented scopeRuntime
Navigation 0.2.0-preview.8Robot profile registration and retrieval; preview release, physical hardware not validatedUbuntu 22.04 / 24.04 x86_64; installed workbench and Docker Engine
Manipulation 0.3.1Local kinematics, path planning, conservative sampled collision checking and geometric navigation simulationUbuntu 22.04 / 24.04 x86_64; installed workbench, no separate ROS or Docker

The manipulation version covers the documented local software functions. Hardware drivers, dynamics, force control, continuous collision checking and payload collision checking are outside its validated scope. The navigation profile API does not imply that a quadruped has been calibrated.

Confirm the software version, robot model, parameters and task environment before integration.

Discuss integration

Documentation updated: 2026-10-10