Endpoint reference

POST /api/v1/smart-accounts/bindings

Parameters

NameLocationDetails
X-Juicebox-Accountheader / requiredEnrolled account identity, including authority chain and lowercase owner address. Enrollment derives this identity before the account exists.
X-Juicebox-Signerheader / requiredOwner wallet or authorized bot address that signed this request.
X-Juicebox-Issued-Atheader / requiredUnix seconds, sent as 1–13 decimal digits without leading zeros; at most 30 seconds ahead of server time.
X-Juicebox-Expires-Atheader / requiredUnix seconds, sent as 1–13 decimal digits without leading zeros; in the future and within 300 seconds of issuedAt.
X-Juicebox-Nonceheader / requiredFresh random 32-byte lowercase nonce. A consumed nonce cannot be retried.
X-Juicebox-Signatureheader / requiredEIP-712 CenterRequest signature over every signed field. Contract-owner signatures may vary in length. This is a computed request proof, not a reusable API key.
X-Juicebox-Grantheader / optionalAuthorized bot grant ID. Required for a bot; omit for the owner, signing grantId as the empty string.
Idempotency-Keyheader / optionalSigned retry identity. Required on plan creation and transaction submission. Preserve exact method, target, Content-Type, and body bytes; use a fresh request nonce and signature.

Request body

FieldTypeDetails
manifestIdstring
required
addressstring
required
noncevalue
required
expiresAtinteger
required
Future Unix seconds no more than 900 seconds after server time.
stateHashstring
required
signaturestring
required
Exactly the current threshold of concatenated 65-byte EOA owner signatures, sorted by ascending owner address. Only direct EIP-712 signatures with v=27 or v=28 are accepted.
JSON schema
{
  "type": "object",
  "properties": {
    "manifestId": {
      "type": "string"
    },
    "address": {
      "$ref": "#/components/schemas/Address"
    },
    "nonce": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Hash"
        },
        {
          "not": {
            "const": "0x0000000000000000000000000000000000000000000000000000000000000000"
          }
        }
      ]
    },
    "expiresAt": {
      "$ref": "#/components/schemas/UnixSeconds",
      "description": "Future Unix seconds no more than 900 seconds after server time."
    },
    "stateHash": {
      "$ref": "#/components/schemas/Hash"
    },
    "signature": {
      "type": "string",
      "pattern": "^0x(?:[0-9a-fA-F]{130}){1,16}$",
      "description": "Exactly the current threshold of concatenated 65-byte EOA owner signatures, sorted by ascending owner address. Only direct EIP-712 signatures with v=27 or v=28 are accepted."
    }
  },
  "required": [
    "manifestId",
    "address",
    "nonce",
    "expiresAt",
    "stateHash",
    "signature"
  ],
  "additionalProperties": false
}

Response 201

FieldTypeDetails
idstring
required
ownerAccountIdstring
required
Authority chain and lowercase owner address; the authority chain is independent of a transaction's destination chain.
ownerAddressstring
required
walletobject
required
Fields
FieldTypeDetails
chainIdinteger
required
addressstring
required
manifestIdstring
required
authorizationone of
required
stateobject
required
Fields
FieldTypeDetails
chainIdinteger
required
addressstring
required
manifestIdstring
required
manifestRevisionstring
required
ownersarray
required
Fields

string

thresholdinteger
required
safeNoncestring
required
uint256 as a lossless decimal string
stateHashstring
required
evidenceobject
required
Fields
FieldTypeDetails
chainIdinteger
required

Values: [1,10,8453,42161,84532,421614,11155111,11155420]

blockNumberstring
required
uint256 as a lossless decimal string
blockHashstring
required
timestampstring
required
uint256 as a lossless decimal string
sourcestring
required

Values: ["onchain"]

codeHashesarray
required
Fields
FieldTypeDetails
addressstring
required
runtimeCodeHashstring
required
modulesone of
required
moduleConfigurationVerifiedboolean
required
executionVerifiedboolean
required

Values: [false]

ownerProfileobject
optional
Fields
FieldTypeDetails
versionstring
required

Values: ["center-passkey-v1"]

signerobject
required
devicesarray
optional
recoveryOwnerobject
required
JSON schema
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/components/schemas/Hash"
    },
    "ownerAccountId": {
      "$ref": "#/components/schemas/AccountId"
    },
    "ownerAddress": {
      "$ref": "#/components/schemas/Address"
    },
    "wallet": {
      "type": "object",
      "properties": {
        "chainId": {
          "type": "integer",
          "minimum": 1,
          "maximum": 9007199254740991
        },
        "address": {
          "$ref": "#/components/schemas/Address"
        }
      },
      "required": [
        "chainId",
        "address"
      ],
      "additionalProperties": false
    },
    "manifestId": {
      "type": "string"
    },
    "authorization": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "digest": {
              "$ref": "#/components/schemas/Hash"
            },
            "nonce": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Hash"
                },
                {
                  "not": {
                    "const": "0x0000000000000000000000000000000000000000000000000000000000000000"
                  }
                }
              ]
            },
            "expiresAt": {
              "$ref": "#/components/schemas/UnixSeconds"
            },
            "method": {
              "type": "string",
              "enum": [
                "safe-current-owner-threshold",
                "center-wallet-passkey-creation-v1"
              ]
            }
          },
          "required": [
            "digest",
            "nonce",
            "expiresAt",
            "method"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "digest": {
              "$ref": "#/components/schemas/Hash"
            },
            "nonce": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Hash"
                },
                {
                  "not": {
                    "const": "0x0000000000000000000000000000000000000000000000000000000000000000"
                  }
                }
              ]
            },
            "expiresAt": {
              "$ref": "#/components/schemas/UnixSeconds"
            },
            "method": {
              "type": "string",
              "enum": [
                "safe-current-owner-threshold-and-api-grant",
                "safe-passkey-owner-threshold-and-api-grant"
              ]
            },
            "setup": {
              "type": "object",
              "properties": {
                "manifestRevision": {
                  "$ref": "#/components/schemas/Hash"
                },
                "initializerHash": {
                  "$ref": "#/components/schemas/Hash"
                },
                "issuedAt": {
                  "$ref": "#/components/schemas/UnixSeconds"
                },
                "grantId": {
                  "type": "string",
                  "format": "uuid",
                  "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
                },
                "botAddress": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Address"
                    },
                    {
                      "not": {
                        "enum": [
                          "0x0000000000000000000000000000000000000000",
                          "0x0000000000000000000000000000000000000001"
                        ]
                      }
                    }
                  ]
                },
                "scopes": {
                  "type": "array",
                  "const": [
                    "read",
                    "plan",
                    "relay"
                  ]
                },
                "grantExpiresAt": {
                  "$ref": "#/components/schemas/UnixSeconds"
                },
                "label": {
                  "type": "string",
                  "pattern": "^[^\\u0000-\\u001f\\u007f]*$",
                  "x-maxUtf8Bytes": 120
                }
              },
              "required": [
                "manifestRevision",
                "initializerHash",
                "issuedAt",
                "grantId",
                "botAddress",
                "scopes",
                "grantExpiresAt",
                "label"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "digest",
            "nonce",
            "expiresAt",
            "method",
            "setup"
          ],
          "additionalProperties": false
        }
      ]
    },
    "state": {
      "$ref": "#/components/schemas/SmartAccountState"
    }
  },
  "required": [
    "id",
    "ownerAccountId",
    "ownerAddress",
    "wallet",
    "manifestId",
    "authorization",
    "state"
  ],
  "additionalProperties": false
}