Endpoint reference

POST /api/v1/smart-accounts/session-reviews

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
bindingIdstring
required
grantIdstring
required
generationvalue
required
Positive uint256 as an exact decimal string.
noncevalue
required
validAfterinteger
required
Start at or after server time, within the next 86400 seconds. The complete chosen duration must fit the active bot grant's expiry.
durationDaysinteger
required

Values: [7,30]

maximumCallsvalue
required
gasBudgetobject
optional
Host-reviewed gas-only paymaster on the wallet chain. Per-operation gas must fit totalGasLimit; priority fee must not exceed fee cap; maxGasPerOperation × maxFeePerGas must fit totalSponsoredCostLimit. No account asset charge or new allowance is authorized.
Fields
FieldTypeDetails
paymasterstring
required
maxGasPerOperationvalue
required
maxFeePerGasvalue
required
maxPriorityFeePerGasstring
required
uint128 as a lossless decimal string
totalGasLimitvalue
required
totalSponsoredCostLimitvalue
required
Positive uint256 as an exact decimal string.
maxPaymasterDataLengthinteger
required

Values: [130]

allocationsarray
required
Fields
FieldTypeDetails
idstring
required
totalvalue
required
Positive uint256 as an exact decimal string.
allocationsarray
required
Fields
FieldTypeDetails
idstring
required
chainIdinteger
required
assetstring
required
limitvalue
required
Positive uint256 as an exact decimal string.
actionsarray
required
Fields
Option 1
FieldTypeDetails
kindstring
required

Values: ["v6-project-uri"]

controllerstring
required
projectIdvalue
required
Positive uint256 as an exact decimal string.
Option 2
FieldTypeDetails
kindstring
required

Values: ["erc20-transfer"]

allocationIdstring
required
beneficiarystring
required
perCallLimitvalue
required
Positive uint256 as an exact decimal string.
totalLimitvalue
required
Positive uint256 as an exact decimal string.
Option 3
FieldTypeDetails
kindstring
required

Values: ["v6-pay"]

allocationIdstring
required
beneficiarystring
required
perCallLimitvalue
required
Positive uint256 as an exact decimal string.
totalLimitvalue
required
Positive uint256 as an exact decimal string.
terminalstring
required
projectIdvalue
required
Positive uint256 as an exact decimal string.
minReturnedTokensstring
required
uint256 as a lossless decimal string
JSON schema
{
  "type": "object",
  "properties": {
    "bindingId": {
      "$ref": "#/components/schemas/Hash"
    },
    "grantId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,100}$"
    },
    "generation": {
      "$ref": "#/components/schemas/PositiveUint256"
    },
    "nonce": {
      "allOf": [
        {
          "$ref": "#/components/schemas/Hash"
        },
        {
          "not": {
            "const": "0x0000000000000000000000000000000000000000000000000000000000000000"
          }
        }
      ]
    },
    "validAfter": {
      "$ref": "#/components/schemas/UnixSeconds",
      "description": "Start at or after server time, within the next 86400 seconds. The complete chosen duration must fit the active bot grant's expiry."
    },
    "durationDays": {
      "type": "integer",
      "enum": [
        7,
        30
      ]
    },
    "maximumCalls": {
      "$ref": "#/components/schemas/SessionMaximumCalls"
    },
    "gasBudget": {
      "$ref": "#/components/schemas/SessionGasBudget"
    },
    "allocations": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/SessionAllocationGroup"
      },
      "maxItems": 16
    },
    "actions": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/SessionAction"
      },
      "minItems": 1,
      "maxItems": 16
    }
  },
  "required": [
    "bindingId",
    "grantId",
    "generation",
    "nonce",
    "validAfter",
    "durationDays",
    "maximumCalls",
    "allocations",
    "actions"
  ],
  "additionalProperties": false,
  "description": "Review does not activate authority. The selected grant must be active with read+plan+relay; a bot can review only its own grant. Groups, chain/asset coordinates, allocation IDs and target/selector actions must be unique. Assets require reviewed identities and matching decimals; action caps must fit allocations. URI-only policies can have no asset groups, but executable sessions still require the sponsored gas budget. V6 project URI permission must belong to the smart account."
}

Response 200

FieldTypeDetails
statusstring
required

Values: ["reviewable-not-activated"]

policyobject
required
Fields
FieldTypeDetails
schemaVersioninteger
required

Values: [1]

ownerAccountIdstring
required
Authority chain and lowercase owner address; the authority chain is independent of a transaction's destination chain.
bindingIdstring
required
chainIdinteger
required
walletstring
required
grantIdstring (uuid)
required
sessionKeystring
required
generationvalue
required
Positive uint256 as an exact decimal string.
noncevalue
required
validAfterinteger
required
Unix timestamp in seconds.
validUntilinteger
required
Unix timestamp in seconds.
maximumCallsvalue
required
saltstring
required
restrictToActionsboolean
required

Values: [true]

signingobject
required
Fields
FieldTypeDetails
modestring
required

Values: ["disabled"]

crossChainPermitsboolean
required

Values: [false]

claimPoliciesboolean
required

Values: [false]

wildcardFallbackboolean
required

Values: [false]

gasBudgetobject
optional
Fields
FieldTypeDetails
paymasterstring
required
maxGasPerOperationvalue
required
maxFeePerGasvalue
required
maxPriorityFeePerGasstring
required
uint128 as a lossless decimal string
totalGasLimitvalue
required
totalSponsoredCostLimitvalue
required
Positive uint256 as an exact decimal string.
maxPaymasterDataLengthinteger
required

Values: [130]

paymasterCodeHashstring
required
paymasterReviewIdstring
required
allocationsarray
required
Fields
FieldTypeDetails
idstring
required
assetIdentitystring
required
decimalsinteger
required
totalvalue
required
Positive uint256 as an exact decimal string.
allocationsarray
required
actionsarray
required
Fields

See schema

policyHashstring
required
walletStateHashstring
required
manifestRevisionstring
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"]

ownerApprovalobject
required
Fields
FieldTypeDetails
requiredboolean
required

Values: [true]

signerRolestring
required

Values: ["smart-account-owner-threshold"]

actionstring
required

Values: ["install-or-enable-exact-session-policy"]

noPermanentBotProjectPermissionboolean
required

Values: [true]

activationRequirementsarray
required
warningsarray
required
JSON schema
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "const": "reviewable-not-activated"
    },
    "policy": {
      "$ref": "#/components/schemas/ReviewedSessionPolicy"
    },
    "policyHash": {
      "$ref": "#/components/schemas/Hash"
    },
    "walletStateHash": {
      "$ref": "#/components/schemas/Hash"
    },
    "manifestRevision": {
      "$ref": "#/components/schemas/Hash"
    },
    "evidence": {
      "$ref": "#/components/schemas/BlockEvidence"
    },
    "ownerApproval": {
      "type": "object",
      "properties": {
        "required": {
          "type": "boolean",
          "const": true
        },
        "signerRole": {
          "type": "string",
          "const": "smart-account-owner-threshold"
        },
        "action": {
          "type": "string",
          "const": "install-or-enable-exact-session-policy"
        },
        "noPermanentBotProjectPermission": {
          "type": "boolean",
          "const": true
        }
      },
      "required": [
        "required",
        "signerRole",
        "action",
        "noPermanentBotProjectPermission"
      ],
      "additionalProperties": false
    },
    "activationRequirements": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "warnings": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "status",
    "policy",
    "policyHash",
    "walletStateHash",
    "manifestRevision",
    "evidence",
    "ownerApproval",
    "activationRequirements",
    "warnings"
  ],
  "additionalProperties": false
}