Skip to content

Submit a signed version-1 manifest; returns the ProjectRegistry.register transaction to send

POST
/v1/developers/projects
curl --request POST \
--url https://testnet-rpc.necter.network/v1/developers/projects \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "manifest": { "v": 1, "network": "example", "chain_id": 1, "developer": "example", "slug": "example", "version": 1, "previous": "example", "consensus": { "modules": { "worker": "example", "verifier": "example" }, "work": { "class": "deterministic", "verification": "redundant-execution", "execution": "committee", "functions": [ "example" ], "task_source": { "kind": "api" }, "max_gas_limit": 1, "committee": { "size": 1, "backups": 1, "min_size": 1, "selection": "collateral-reputation-sortition-v1", "weight_cap_multiple": 1 }, "round_secs": 1, "lease_secs": 1, "epoch_secs": 3600, "dispute_window_secs": 1 }, "economics": { "reward_token": "example", "vault": "example", "reward_model": "per-unit", "reward_per_unit": "example", "daily_emission": "example", "fee_split_bp": { "miner": 1, "developer": 1, "treasury": 1 }, "max_units_per_epoch": 1, "max_recipients_per_epoch": 1, "min_collateral": "example", "slashing_bp": { "invalid_result": 1, "missed_sla": 1 } } }, "scheduling": { "requirements": { "device_classes": [ "phone" ], "cpu_cores": 1, "ram_mb": 1, "storage_mb": 1, "gpu": "example", "min_benchmark": 1, "engines": [ "native" ], "attestation": [ "example" ] }, "sla": { "max_latency_ms": 1, "min_uptime_bp": 1 }, "public_tasks": true }, "listing": { "name": "example", "tagline": "example", "description": "example", "category": "blockchain", "tags": [ "example" ], "icon": "https://example.com", "banner": "https://example.com", "screenshots": [ "https://example.com" ], "video": "https://example.com", "website": "https://example.com", "docs": "https://example.com", "support": "https://example.com", "features": [ "example" ], "accent_color": "example" } }, "manifest_hash": "example", "consensus_hash": "example", "project_id": "example", "sig_type": "eip191", "signature": "example" }'

Requires an active enrollment and verified developer. After the tx confirms the Hub indexes ProjectRegistered and the project moves to pending_review.

Media typeapplication/json
object
manifest
required

(normative rules there)

object
v
required
integer
Allowed value: 1
network
required
string
chain_id
required
integer
developer
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
slug
required
string
/^[a-z0-9][a-z0-9-]{1,46}[a-z0-9]$/
version
required
integer
>= 1
previous
required
One of:
string
/^0x[0-9a-f]{64}$/
consensus
required
object
modules
required
object
worker
required
string
/^0x[0-9a-f]{64}$/
verifier
required
null
work
required
object
class
required
string
Allowed value: deterministic
verification
required
string
Allowed value: redundant-execution
execution
required
string
Allowed value: committee
functions
required
Array<string>
>= 1 items <= 64 items
task_source
required
One of:
object
kind
required
Allowed value: api
max_gas_limit
required
integer
>= 1 <= 10000000000
committee
required
object
size
required
integer
>= 3 <= 31
backups
required
integer
<= 16
min_size
required
integer
>= 3 <= 31
selection
required
string
Allowed value: collateral-reputation-sortition-v1
weight_cap_multiple
required
integer
>= 1 <= 100
round_secs
required
integer
>= 10 <= 600
lease_secs
required
integer
>= 5 <= 600
epoch_secs
required
integer
Allowed values: 3600 7200 10800 14400 21600 28800 43200 86400
dispute_window_secs
required
integer
>= 3600 <= 604800
economics
required
object
reward_token
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
vault
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
reward_model
required
string
Allowed values: per-unit epoch-pool
reward_per_unit
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
daily_emission
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
fee_split_bp
required
object
miner
required
integer
>= 5000 <= 10000
developer
required
integer
<= 5000
treasury
required
integer
<= 5000
max_units_per_epoch
required
integer
>= 1 <= 1000000000
max_recipients_per_epoch
required
integer
>= 1 <= 10000
min_collateral
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
slashing_bp
required
object
invalid_result
required
integer
<= 5000
missed_sla
required
integer
<= 500
scheduling
required
object
requirements
required
object
device_classes
required
Array<string>
>= 1 items
Allowed values: phone tablet laptop desktop server
cpu_cores
required
integer
ram_mb
required
integer
storage_mb
required
integer
gpu
required
null
min_benchmark
required
integer
engines
required
Array<string>
>= 1 items
Allowed values: native pulley64 pulley32
attestation
required
array
0
sla
required
object
max_latency_ms
required
integer
>= 100 <= 600000
min_uptime_bp
required
integer
<= 10000
public_tasks
required
boolean
listing
required
object
name
required
string
>= 1 characters <= 64 characters
tagline
required
string
<= 120 characters
description
required
string
<= 8000 characters
category
required
string
Allowed values: blockchain depin machine-learning storage compute bandwidth data-sovereignty iot hardware-staking content-delivery
tags
required
Array<string>
<= 8 items
icon
required
string format: uri
banner
required
string | null format: uri
screenshots
required
Array<string>
<= 8 items
video
required
string | null format: uri
website
required
string | null format: uri
docs
required
string | null format: uri
support
required
string | null format: uri
features
required
Array<string>
<= 12 items
accent_color
required
string | null
/^#[0-9A-F]{6}$/
manifest_hash
string
/^0x[0-9a-f]{64}$/
consensus_hash
string
/^0x[0-9a-f]{64}$/
project_id
string
/^0x[0-9a-f]{64}$/
sig_type
required
string
Allowed value: eip191
signature
required
string
/^0x[0-9a-f]{130}$/

Submitted

Media typeapplication/json
object
project
required
object
project_id
required
string
/^0x[0-9a-f]{64}$/
slug
required
string
developer
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
developer_name
string | null
developer_verified
boolean
name
required
string
tagline
string | null
category
required
string
Allowed values: blockchain depin machine-learning storage compute bandwidth data-sovereignty iot hardware-staking content-delivery
tags
Array<string>
icon
required
string format: uri
accent_color
string | null
listing_status
required
string
Allowed values: draft submitted pending_review listed paused underfunded rejected delisted
device_classes
Array<string>
Allowed values: phone tablet laptop desktop server
token
required
object
address
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
symbol
required
string
name
string
decimals
required
integer
<= 36
reward_model
string
Allowed values: per-unit epoch-pool
min_collateral

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
miners
integer
avg_daily_reward_per_miner

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
average_rating_x100
integer | null
review_count
integer
trending
boolean
featured
boolean
listed_at
One of:
integer
version
required
integer
manifest_hash
required
string
/^0x[0-9a-f]{64}$/
consensus_hash
required
string
/^0x[0-9a-f]{64}$/
pending_version
One of:
object
version
required
integer
manifest_hash
required
string
/^0x[0-9a-f]{64}$/
consensus_hash
required
string
/^0x[0-9a-f]{64}$/
tiers_changed
required
Array<string>
Allowed values: consensus scheduling listing
status
required
string
Allowed values: submitted registered pending active superseded rejected
publish_tx
One of:
string
/^0x[0-9a-f]{64}$/
published_at
One of:
integer
effective_epoch
integer | null
submitted_at
required
integer
consensus
required
object
modules
required
object
worker
required
string
/^0x[0-9a-f]{64}$/
verifier
required
null
work
required
object
class
required
string
Allowed value: deterministic
verification
required
string
Allowed value: redundant-execution
execution
required
string
Allowed value: committee
functions
required
Array<string>
>= 1 items <= 64 items
task_source
required
One of:
object
kind
required
Allowed value: api
max_gas_limit
required
integer
>= 1 <= 10000000000
committee
required
object
size
required
integer
>= 3 <= 31
backups
required
integer
<= 16
min_size
required
integer
>= 3 <= 31
selection
required
string
Allowed value: collateral-reputation-sortition-v1
weight_cap_multiple
required
integer
>= 1 <= 100
round_secs
required
integer
>= 10 <= 600
lease_secs
required
integer
>= 5 <= 600
epoch_secs
required
integer
Allowed values: 3600 7200 10800 14400 21600 28800 43200 86400
dispute_window_secs
required
integer
>= 3600 <= 604800
economics
required
object
reward_token
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
vault
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
reward_model
required
string
Allowed values: per-unit epoch-pool
reward_per_unit
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
daily_emission
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
fee_split_bp
required
object
miner
required
integer
>= 5000 <= 10000
developer
required
integer
<= 5000
treasury
required
integer
<= 5000
max_units_per_epoch
required
integer
>= 1 <= 1000000000
max_recipients_per_epoch
required
integer
>= 1 <= 10000
min_collateral
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
slashing_bp
required
object
invalid_result
required
integer
<= 5000
missed_sla
required
integer
<= 500
scheduling
required
object
requirements
required
object
device_classes
required
Array<string>
>= 1 items
Allowed values: phone tablet laptop desktop server
cpu_cores
required
integer
ram_mb
required
integer
storage_mb
required
integer
gpu
required
null
min_benchmark
required
integer
engines
required
Array<string>
>= 1 items
Allowed values: native pulley64 pulley32
attestation
required
array
0
sla
required
object
max_latency_ms
required
integer
>= 100 <= 600000
min_uptime_bp
required
integer
<= 10000
public_tasks
required
boolean
listing
required
object
name
required
string
>= 1 characters <= 64 characters
tagline
required
string
<= 120 characters
description
required
string
<= 8000 characters
category
required
string
Allowed values: blockchain depin machine-learning storage compute bandwidth data-sovereignty iot hardware-staking content-delivery
tags
required
Array<string>
<= 8 items
icon
required
string format: uri
banner
required
string | null format: uri
screenshots
required
Array<string>
<= 8 items
video
required
string | null format: uri
website
required
string | null format: uri
docs
required
string | null format: uri
support
required
string | null format: uri
features
required
Array<string>
<= 12 items
accent_color
required
string | null
/^#[0-9A-F]{6}$/
vault

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
registry_tx
string
/^0x[0-9a-f]{64}$/
review
object
status
string
reason
string | null
conditions
Array<string>
decided_at
integer | null
stats
object
period
string
miners_subscribed
integer
miners_active
integer
devices_by_class
object
key
additional properties
integer
rounds
integer
rounds_finalized
integer
rounds_fallback
integer
units
integer
paid_to_miners

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
avg_daily_reward_per_miner

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
median_finality_ms
integer
uptime_bp
integer
slashes
integer
growth_bp

Change in active miners vs previous period, signed bp

integer
economics
object
token
required
object
address
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
symbol
required
string
name
string
decimals
required
integer
<= 36
reward_model
required
string
Allowed values: per-unit epoch-pool
reward_per_unit
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
daily_emission
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
epoch_secs
integer
epoch_cap
required

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
fee_split_bp
required
object
miner
integer
developer
integer
treasury
integer
min_collateral

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
slashing_bp
object
invalid_result
integer
missed_sla
integer
dispute_window_secs
integer
vault
required
object
address

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
deployed
boolean
config_matches_manifest
boolean
balance

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
reserved

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
runway_epochs
integer
runway_days
integer
total_paid

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
pending_withdrawal

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
created_at
integer
register_tx
required
object
chain_id
required
integer
to
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
data
required
string
/^0x([0-9a-f]{2})*$/
value

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
description
string
register_by_sig

Typed data the owner signs (eth_signTypedData_v4); then POST it back as SignedGasless

object
action
required
string
Allowed values: bond unbond withdraw set_payout register_project publish_version
typed_data
required
object
domain
required
object
key
additional properties
any
types
required
object
key
additional properties
any
primaryType
required
string
message
required
object
key
additional properties
any
permit
One of:
object
domain
required
object
key
additional properties
any
types
required
object
key
additional properties
any
primaryType
required
string
message
required
object
key
additional properties
any
direct_tx
object
chain_id
required
integer
to
required

Lowercase EVM address

string
/^0x[0-9a-f]{40}$/
data
required
string
/^0x([0-9a-f]{2})*$/
value

Token base units

string
/^(0|[1-9][0-9]{0,77})$/
description
string
expires_at
required
integer

Example

{
"project": {
"category": "blockchain",
"listing_status": "draft",
"device_classes": [
"phone"
],
"reward_model": "per-unit",
"pending_version": {
"tiers_changed": [
"consensus"
],
"status": "submitted"
},
"consensus": {
"work": {
"class": "deterministic",
"verification": "redundant-execution",
"execution": "committee",
"task_source": {
"kind": "api"
},
"committee": {
"selection": "collateral-reputation-sortition-v1"
},
"epoch_secs": 3600
},
"economics": {
"reward_model": "per-unit"
}
},
"scheduling": {
"requirements": {
"device_classes": [
"phone"
],
"engines": [
"native"
]
}
},
"listing": {
"category": "blockchain"
},
"economics": {
"reward_model": "per-unit"
}
},
"register_by_sig": {
"action": "bond"
}
}

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

Authenticated but not allowed (forbidden, not_owner, not_enrolled, not_verified, scope_missing)

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