Gasless consensus version: without signature → PublishVersion typed data; with signed body → relayed ProjectRegistry.publishVersionBySig
const url = 'https://testnet-rpc.necter.network/v1/developers/projects/example/versions/1/publish';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"typed_data":{"domain":{},"types":{},"primaryType":"example","message":{}},"signature":"example","permit":{"domain":{},"types":{},"primaryType":"example","message":{}},"permit_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/example/versions/1/publish \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "typed_data": { "domain": {}, "types": {}, "primaryType": "example", "message": {} }, "signature": "example", "permit": { "domain": {}, "types": {}, "primaryType": "example", "message": {} }, "permit_signature": "example" }'Only for a submitted version that changes the consensus tier (scheduling/listing-only versions are active
immediately and need no chain transaction). EIP-712 PublishVersion(address developer,bytes32 projectId, uint32 version,bytes32 consensusHash,bytes32 manifestHash,uint256 nonce,uint256 deadline), domain
Necter ProjectRegistry. The indexer applies VersionPublished.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Body
Section titled “Request Body”object
object
object
object
object
Example generated
{ "typed_data": { "domain": {}, "types": {}, "primaryType": "example", "message": {} }, "signature": "example", "permit": { "domain": {}, "types": {}, "primaryType": "example", "message": {} }, "permit_signature": "example"}Responses
Section titled “Responses”Payload to sign
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
{ "action": "bond"}Submitted
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"}not_found
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"}unavailable, no_validators, faucet_empty
object
Stable machine code
object
Example generated
{ "error": "example", "message": "example", "details": {}, "request_id": "example"}