OpenBots Unified API

Base URL: https://openbots.pages.dev/api/v1 · OpenAI-compatible for bots, ROS2-native for robots. One key, one bill.

Auth

curl https://openbots.pages.dev/api/v1/bots/run \
  -H "x-api-key: ob_..." \
  -H "Content-Type: application/json"

POST /bots/run — Run any digital bot/skill

POST /api/v1/bots/run
{
  "model": "customer-support-v2",           // slug or "openbots/auto"
  "input": { "ticket": "refund request #42" },
  "provider": { "sort": "price|latency|throughput", "max_price": 5 },
  "stream": false
}
// Response
{
  "id": "task_abc",
  "status": "success",
  "provider": "openbots-nitro",
  "latency_ms": 142,
  "cost_cents": 3,
  "output": { "action": "refund", "draft": "..." }
}

POST /robots/task — Dispatch physical task

POST /api/v1/robots/task
{
  "robot": "unitree-g1",                    // or "unitree-go2", "ur5e"
  "skill": "palletizing-ur",                // optional skill to run on robot
  "task": "palletize 20 boxes in bay 3",
  "provider": { "sort": "latency" },
  "location": "warehouse-eu-01"
}

GET /listings?type=PHYSICAL_RENTAL&q=g1

GET /api/v1/listings?type=DIGITAL_BOT
GET /api/v1/listings?category=Humanoid
GET /api/v1/rankings

POST /credits/topup

POST /api/v1/credits/topup
{ "amount_cents": 10000 }  // $100 → fee 550 cents, you pay $105.50

Routing & Fallback

Default: deprioritize providers with outage in last 30s, pick lowest-cost among stable weighted by inverse-square of price, rest as fallbacks. Failed calls not billed.

{
  "provider": {
    "sort": "price|throughput|latency",
    "only": ["openbots-nitro"],
    "max_price": 10,  // cents per 1k
    "allow_fallbacks": true
  },
  "models": ["customer-support-v2", "sales-outreach-bot"] // fallback chain
}

Fees

OpenAPI

Full spec at /api/health and in repo openapi.yaml. Clone marketplace with npx openbots (coming).