Submit a signed version-1 manifest; returns the ProjectRegistry.register transaction to send
const url = 'https://testnet-rpc.necter.network/v1/developers/projects';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"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"}'};
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/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.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
(normative rules there)
object
Lowercase EVM address
object
object
object
object
object
Lowercase EVM address
Lowercase EVM address
Token base units
Token base units
object
Token base units
object
object
object
object
object
Responses
Section titled “Responses”Submitted
object
object
Lowercase EVM address
object
Lowercase EVM address
Token base units
Token base units
object
object
object
object
object
Lowercase EVM address
Lowercase EVM address
Token base units
Token base units
object
Token base units
object
object
object
object
object
Lowercase EVM address
object
object
object
Token base units
Token base units
Change in active miners vs previous period, signed bp
object
object
Lowercase EVM address
Token base units
Token base units
Token base units
object
Token base units
object
object
Lowercase EVM address
Token base units
Token base units
Token base units
Token base units
object
Lowercase EVM address
Token base units
Typed data the owner signs (eth_signTypedData_v4); then POST it back as SignedGasless
object
object
object
object
object
object
Lowercase EVM address
Token base units
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)
object
Stable machine code
object
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}Authenticated but not allowed (forbidden, not_owner, not_enrolled, not_verified, scope_missing)
object
Stable machine code
object
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}conflict, duplicate, already_exists, invalid_state
object
Stable machine code
object
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}Semantically invalid (invalid_manifest, invalid_binding, invalid_evidence, incompatible, insufficient_collateral)
object
Stable machine code
object
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}