OpenBot
← All products
OpenBot API

Policy endpoints for agents and orchestrators.

Roll out a robot policy with a single REST call. Curate a dataset from a Slack command. Trigger a sim-to-real gap report from your CI. Async, idempotent, agent-ready.

OpenAPI 3.1
typed spec
Python · TS
SDKs
5
agent frameworks
rollout.sh
# REST
curl https://api.openbot.ai/v1/bench/rollouts \
  -H "Authorization: Bearer ob_live_..." \
  -d '{
    "policy": "openvla-7b",
    "embodiment": "franka_panda",
    "task": "kitchen_handover",
    "rollouts": 200,
    "webhook": "https://my.app/openbot"
  }'

# {
#   "id": "run_8c91a4",
#   "status": "queued",
#   "result_url": "https://api.openbot.ai/v1/runs/run_8c91a4"
# }

# Python SDK
from openbot import Client
ob = Client()                              # reads OPENBOT_API_KEY
run = ob.bench.rollout(
    policy="openvla-7b",
    embodiment="franka_panda",
    task="kitchen_handover",
    rollouts=200,
)
print(run.wait().task_success)             # 0.73
Capabilities

A single surface for Bench, Data, and Synth.

One API design for the whole loop — evaluation, data curation, synthesis, reports, and workspace automation.

  1. 01

    One call per real task

    POST a rollout config. Get a job ID. Stream status or receive a webhook. No queue management, no GPU scheduling, no orchestration glue — just the result.

  2. 02

    Async, idempotent jobs

    Every rollout has a stable ID. Retries don't double-bill. Long-running tasks resume across deploys, and status is always queryable.

  3. 03

    Tool-use schemas built in

    Drop-in JSON schemas for OpenAI function-calling, Anthropic tool_use, LangChain, and AutoGen. Your agent drives Bench, Data, and Synth natively through the same surface.

  4. 04

    Bridges where you already work

    Adapters for Isaac Lab, LeRobot, ROS 2, and a small reference Python agent you drop next to your existing robot stack. No rip-and-replace.

  5. 05

    Per-key quotas and scopes

    Scope a key to a single product (Bench-only, Synth-only) or a single org workspace. Per-key rate limits, expiration, and full audit log out of the box.

  6. 06

    Signed URLs, no data on disk

    Uploads land in R2 via short-lived signed URLs. Results are downloadable the same way. Your weights and footage never sit in plaintext on a shared server.

Developer experience

Three ways to call. One surface.

REST for curl scripts, Python SDK for notebooks, TypeScript SDK for dashboards. Same endpoints, same types, same async behavior.

rollout.python
from openbot import Client

ob = Client()                       # reads OPENBOT_API_KEY

run = ob.bench.rollout(
    policy="openvla-7b",
    embodiment="franka_panda",
    task="kitchen_handover",
    rollouts=200,
    webhook="https://my.app/openbot",
)

result = run.wait()
print(result.task_success)          # 0.73
Async by design

POST once. Get called when it's done.

No polling loops. No long-lived connections. Your agent or CI posts a config, goes back to work, and gets a webhook when the result is ready.

Your app
POST /v1/bench/rollouts
OpenBot
Queue & execute
Webhook
POST result to your URL
Your app
Act on result
Example webhook payload
{
  "event": "bench.rollout.completed",
  "run_id": "run_8c91a4",
  "status": "success",
  "result": {
    "task_success": 0.73,
    "sim_to_real_gap": -0.29,
    "intervention_rate": 0.14
  },
  "report_url": "https://api.openbot.ai/v1/runs/run_8c91a4/report"
}
Compatibility

Wired into the tools you already use.

Languages & SDKs
PythonTypeScriptRESTOpenAPI 3.1
Agent frameworks
OpenAI function-callingAnthropic tool_useLangChainAutoGenLetta
Robot stacks
Isaac LabLeRobotROS 2MoveIt 2Custom Python agent

Wire your robot to your agent.

Read the OpenAPI spec and SDK design today. Request early access for a live key.