Skip to content

Submit a binding record. Self-authenticating (owner EIP-191 + node ed25519).

POST
/v1/devices/bind
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" }'
Media typeapplication/json
object
message
required
string
binding_hash
required
string
/^0x[0-9a-f]{64}$/
owner
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
node_id
required
string
/^ndsr-[0-9a-f]{16}$/
public_key
required
string
/^0x[0-9a-f]{64}$/
issued_at
required
integer
nonce
required
string
/^[0-9a-f]{32}$/
owner_signature
required
string
/^0x[0-9a-f]{130}$/
node_signature
required
string
/^0x[0-9a-f]{128}$/

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"
}

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
/^ndsr-[0-9a-f]{16}$/
public_key
required
string
/^0x[0-9a-f]{64}$/
owner
One of:

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
binding_hash
One of:
string
/^0x[0-9a-f]{64}$/
label
string | null
group_id
string | null
class
string
Allowed values: phone tablet laptop desktop server
platform
string
Allowed values: android ios macos windows linux
os_version
string
arch
string
engine
string
Allowed values: native pulley64 pulley32
miner_version
string
ndsr_version
string
status
required
string
Allowed values: online idle offline faulty banned
status_reason
string | null
last_seen_at
integer
connected_since
One of:
integer
hardware
object
cpu_model
string
cpu_cores
integer
cpu_threads
integer
ram_mb
integer
storage_free_mb
integer
gpu
One of:
null
network
string
Allowed values: wifi ethernet cellular none
battery
boolean
os
string
arch
string
benchmark
One of:
object
suite
required
string
ran_at
required
integer
engine
required
string
Allowed values: native pulley64 pulley32
cases
required
Array<object>
object
name
required
string
receipt_hash
required
string
/^0x[0-9a-f]{64}$/
gas_used
required
integer
elapsed_us
required
integer
mgas_per_s
required
Array<integer>
score
required
integer
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"
}
Retry-After
integer