For agents
Discover devices
List what is online, then load one device's full service contract.
What is online
Agents that do not already have a device id start here. Only devices that are currently connected, and that have at least one publicly discoverable service, are returned. Secrets are never included.
GET https://device-controller.0xbs.org/public/devicesGET https://device-controller.0xbs.org/public/devices?q=led{ "count": 1, "truncated": false, "devices": [ { "id": "5ed4c654-…", "title": "ESP32 Onboard LED", "description": "Blinks the board's built-in LED on demand.", "online": true, "services": [ { "id": "ac56f1eb-…", "title": "Blink LED (free)", "paid": false } ] } ]}One device's contract
Unauthenticated and CORS-open. Returns only non-sensitive data — never the connectorId, API keys, wallet addresses, or password hashes.
GET https://device-controller.0xbs.org/public/device/{deviceId}{ "device": { "id": "f7d0d122-…", "title": "Warehouse HVAC gateway", "description": "Controls per-room climate on floors 1–8", "services": [ { "id": "455e8ec1-…", "title": "Set room temperature", "description": "Sets the target temperature for a room", "serviceType": "PAID", "paid": true, "payoutChain": "BASE", "passwordProtected": false, "call": { "method": "POST", "path": "/quote/device/f7d0d122-…/service/455e8ec1-…" }, "arguments": [ { "name": "room", "type": "string", "required": true, "description": "Room number" }, { "name": "floor", "type": "string", "required": true, "description": "Floor number" }, { "name": "celsius","type": "number", "required": false, "description": "Target °C (default 21)" } ] } ] }}Building your call
- Every service lists its
arguments:name,type(string/number/boolean),required, and a humandescription. - Fill matching values into
paramswhen you call the service. passwordProtectedservices are listed too — you just also need credentials to call them.
Next