POST /api/v1/smart-accounts/session-reviews
Parameters
| Name | Location | Details |
|---|---|---|
X-Juicebox-Account | header / required | Enrolled account identity, including authority chain and lowercase owner address. Enrollment derives this identity before the account exists. |
X-Juicebox-Signer | header / required | Owner wallet or authorized bot address that signed this request. |
X-Juicebox-Issued-At | header / required | Unix seconds, sent as 1–13 decimal digits without leading zeros; at most 30 seconds ahead of server time. |
X-Juicebox-Expires-At | header / required | Unix seconds, sent as 1–13 decimal digits without leading zeros; in the future and within 300 seconds of issuedAt. |
X-Juicebox-Nonce | header / required | Fresh random 32-byte lowercase nonce. A consumed nonce cannot be retried. |
X-Juicebox-Signature | header / required | EIP-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-Grant | header / optional | Authorized bot grant ID. Required for a bot; omit for the owner, signing grantId as the empty string. |
Idempotency-Key | header / optional | Signed 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
| Field | Type | Details | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
bindingId | string required | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
grantId | string required | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
generation | value required | Positive uint256 as an exact decimal string. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nonce | value required | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
validAfter | integer required | Start at or after server time, within the next 86400 seconds. The complete chosen duration must fit the active bot grant's expiry. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
durationDays | integer required | Values: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
maximumCalls | value required | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
gasBudget | object 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
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
allocations | array required | Fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
actions | array required | FieldsOption 1
Option 2
Option 3
|
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
| Field | Type | Details | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
status | string required | Values: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
policy | object required | Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
policyHash | string required | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
walletStateHash | string required | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
manifestRevision | string required | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
evidence | object required | Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ownerApproval | object required | Fields
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
activationRequirements | array required | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
warnings | array 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
}