Discover devices
One unauthenticated call tells an agent everything it needs to build a request.
Endpoint
GET https://device-controller.0xbs.org/public/device/{deviceId}Unauthenticated and CORS-open, so agents (and browsers) can call it directly. It returns only non-sensitive data — never the connectorId, API keys, wallet addresses, or password hashes.
Response
{
"device": {
"id": "f7d0d122-…", // public deviceId
"title": "Warehouse HVAC gateway",
"description": "Controls per-room climate on floors 1–8",
"services": [
{
"id": "455e8ec1-…", // serviceId
"title": "Set room temperature",
"description": "Sets the target temperature for a room",
"serviceType": "PAID", // FREE | PAID
"paid": true,
"payoutChain": "BASE", // payout wallet family (BASE | SOLANA)
"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: Call a service.