POST /api/v1/smart-accounts/onboarding
Request body
| Field | Type | Details | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
owner | value required | |||||||||||||||||||
address | value required | |||||||||||||||||||
manifestId | string required | |||||||||||||||||||
nonce | value required | |||||||||||||||||||
issuedAt | integer required | No more than 30 seconds ahead of server time. | ||||||||||||||||||
expiresAt | integer required | Future Unix seconds, after issuedAt and no more than 300 seconds later. | ||||||||||||||||||
grant | object required | Browser-selected lowercase UUID v4 and distinct browser API key. Scopes must be exactly read, plan, relay in that order; no onchain signing or spending authority.Fields
| ||||||||||||||||||
manifestRevision | string required | |||||||||||||||||||
initializerHash | string required | |||||||||||||||||||
stateHash | string required | |||||||||||||||||||
signature | string required | Current sole owner's signature over the exact returned SetupAccount document. | ||||||||||||||||||
proofSignature | string required | Browser key's CenterSetupProof signature over {setupDigest: challenge.digest}, using the SetupAccount domain. This is not a CenterBotProof signature. |
JSON schema
{
"type": "object",
"properties": {
"owner": {
"allOf": [
{
"$ref": "#/components/schemas/Address"
},
{
"not": {
"enum": [
"0x0000000000000000000000000000000000000000",
"0x0000000000000000000000000000000000000001"
]
}
}
]
},
"address": {
"allOf": [
{
"$ref": "#/components/schemas/Address"
},
{
"not": {
"enum": [
"0x0000000000000000000000000000000000000000",
"0x0000000000000000000000000000000000000001"
]
}
}
]
},
"manifestId": {
"type": "string",
"pattern": "^[a-zA-Z0-9:_-]{1,192}$"
},
"nonce": {
"allOf": [
{
"$ref": "#/components/schemas/Hash"
},
{
"not": {
"const": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
}
]
},
"issuedAt": {
"$ref": "#/components/schemas/UnixSeconds",
"description": "No more than 30 seconds ahead of server time."
},
"expiresAt": {
"$ref": "#/components/schemas/UnixSeconds",
"description": "Future Unix seconds, after issuedAt and no more than 300 seconds later."
},
"grant": {
"$ref": "#/components/schemas/SmartOnboardingGrant"
},
"manifestRevision": {
"$ref": "#/components/schemas/Hash"
},
"initializerHash": {
"$ref": "#/components/schemas/Hash"
},
"stateHash": {
"$ref": "#/components/schemas/Hash"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{128}(?:1[bBcC])$",
"description": "Current sole owner's signature over the exact returned SetupAccount document."
},
"proofSignature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{128}(?:1[bBcC])$",
"description": "Browser key's CenterSetupProof signature over {setupDigest: challenge.digest}, using the SetupAccount domain. This is not a CenterBotProof signature."
}
},
"required": [
"owner",
"address",
"manifestId",
"nonce",
"issuedAt",
"expiresAt",
"grant",
"manifestRevision",
"initializerHash",
"stateHash",
"signature",
"proofSignature"
],
"additionalProperties": false,
"description": "Purpose-signed body; no generic CenterRequest signature is needed. Rechecks canonical state and atomically enrolls the API identity if absent, binds the wallet and creates the exact signed grant. Authorizes no transaction, onchain session or broader API grant."
}Response 201
| Field | Type | Details | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
account | object required | Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
binding | object required | Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grant | object required | Fields
|
JSON schema
{
"type": "object",
"properties": {
"account": {
"$ref": "#/components/schemas/Account"
},
"binding": {
"$ref": "#/components/schemas/SmartAccountBinding"
},
"grant": {
"$ref": "#/components/schemas/BotGrant"
}
},
"required": [
"account",
"binding",
"grant"
],
"additionalProperties": false
}