Submit a binding record. Self-authenticating (owner EIP-191 + node ed25519).
POST
/v1/devices/bind
const url = 'https://testnet-rpc.necter.network/v1/devices/bind';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"message":"example","binding_hash":"example","owner":"example","node_id":"example","public_key":"example","issued_at":1,"nonce":"example","owner_signature":"example","node_signature":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://testnet-rpc.necter.network/v1/devices/bind \ --header 'Content-Type: application/json' \ --data '{ "message": "example", "binding_hash": "example", "owner": "example", "node_id": "example", "public_key": "example", "issued_at": 1, "nonce": "example", "owner_signature": "example", "node_signature": "example" }'Request Bodyrequired
Section titled “Request Bodyrequired”Media typeapplication/json
object
message
required
string
binding_hash
required
string
owner
required
Lowercase EVM address
string
node_id
required
string
public_key
required
string
issued_at
required
integer
nonce
required
string
owner_signature
required
string
node_signature
required
string
Example generated
{ "message": "example", "binding_hash": "example", "owner": "example", "node_id": "example", "public_key": "example", "issued_at": 1, "nonce": "example", "owner_signature": "example", "node_signature": "example"}Responses
Section titled “Responses”Bound (or same binding already active)
Media typeapplication/json
(owner sees all fields; public view omits hardware details and label)
object
node_id
required
string
public_key
required
string
label
string | null
group_id
string | null
class
string
platform
string
os_version
string
arch
string
engine
string
miner_version
string
ndsr_version
string
status
required
string
status_reason
string | null
last_seen_at
integer
hardware
benchmark
attestation
null
subscriptions
Array<string>
region
string | null
uptime_bp_7d
integer
units_7d
integer
created_at
integer
Example
{ "class": "phone", "platform": "android", "engine": "native", "status": "online", "hardware": { "network": "wifi" }, "benchmark": { "engine": "native" }}Malformed request (bad_request, invalid_field)
Media typeapplication/json
object
error
required
Stable machine code
string
message
required
string
details
object
key
additional properties
any
request_id
required
string
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}conflict, duplicate, already_exists, invalid_state
Media typeapplication/json
object
error
required
Stable machine code
string
message
required
string
details
object
key
additional properties
any
request_id
required
string
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}Semantically invalid (invalid_manifest, invalid_binding, invalid_evidence, incompatible, insufficient_collateral)
Media typeapplication/json
object
error
required
Stable machine code
string
message
required
string
details
object
key
additional properties
any
request_id
required
string
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}rate_limited
Media typeapplication/json
object
error
required
Stable machine code
string
message
required
string
details
object
key
additional properties
any
request_id
required
string
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}Headers
Section titled “Headers”Retry-After
integer