Endpoint reference

POST /api/v1/wallet/payment-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 / requiredSigned 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
operationIdstring (uuid)
required
statestring
required
Canonical base64url encoding of 32 random bytes retained by the initiating app.
idstring (uuid)
optional
JSON schema
{
  "type": "object",
  "properties": {
    "operationId": {
      "$ref": "#/components/schemas/ResourceId"
    },
    "state": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}$",
      "description": "Canonical base64url encoding of 32 random bytes retained by the initiating app."
    },
    "id": {
      "$ref": "#/components/schemas/ResourceId"
    }
  },
  "required": [
    "operationId",
    "state"
  ],
  "additionalProperties": false
}

Response 201

FieldTypeDetails
versionstring
required

Values: ["center-wallet-payment-review-v1"]

idstring (uuid)
required
statestring
required
Canonical base64url encoding of 32 random bytes retained by the initiating app.
issuerstring (uri)
required
accountIdstring
required
Authority chain and lowercase owner address; the authority chain is independent of a transaction's destination chain.
appobject
required
Fields
FieldTypeDetails
originstring (uri)
required
callbackUristring (uri)
required
grantIdstring (uuid)
required
grantIncarnationvalue
required
Positive uint256 as an exact decimal string.
planIdstring (uuid)
required
planCommitmentstring
required
operationIdstring (uuid)
required
operationCommitmentstring
required
operationHashstring
required
stepIndexesarray
required
operationobject
required
Unpacked EntryPoint v0.7 operation. RPC integers are hexadecimal quantities; reviewed policy amounts use decimal strings. No v0.8 or EIP-7702 extensions.
Fields
FieldTypeDetails
senderstring
required
noncestring
required
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
factorystring
optional
factoryDatastring
optional
callDatastring
required
callGasLimitstring
required
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
verificationGasLimitstring
required
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
preVerificationGasstring
required
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
maxFeePerGasstring
required
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
maxPriorityFeePerGasstring
required
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
paymasterstring
optional
paymasterVerificationGasLimitstring
optional
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
paymasterPostOpGasLimitstring
optional
Canonical lowercase hexadecimal RPC quantity, with no leading zeros.
paymasterDatastring
optional
signaturestring
required
Public preparations and reads always omit submitted account signature bytes.

Values: ["0x"]

chainIdinteger
required

Values: [8453]

entryPointstring
required
safe7579string
required
paymentobject
required
Fields
FieldTypeDetails
kindstring
required

Values: ["v6-usdc-pay"]

chainIdinteger
required

Values: [8453]

accountstring
required
tokenstring
required
terminalstring
required
projectIdstring
required
uint256 as a lossless decimal string
amountvalue
required
Positive uint256 as an exact decimal string.
beneficiarystring
required
minimumReturnedTokensstring
required
uint256 as a lossless decimal string
memostring
required
metadatastring
required
stepIndexesarray
required
approvalStepIndexesarray
required
paymentStepIndexinteger
required
resetAllowanceboolean
required
signingobject
required
Fields
FieldTypeDetails
digeststring
required
signedDatastring
required
validAfterstring
required
uint256 as a lossless decimal string
validUntilstring
required
uint256 as a lossless decimal string
createdAtMsinteger
required
expiresAtMsinteger
required
statusstring
required

Values: ["pending","approved","cancelled"]

approvedAtMsone of
required
cancelledAtMsone of
required
operationStatestring
required
JSON schema
{
  "type": "object",
  "properties": {
    "version": {
      "type": "string",
      "const": "center-wallet-payment-review-v1"
    },
    "id": {
      "$ref": "#/components/schemas/ResourceId"
    },
    "state": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{43}$",
      "description": "Canonical base64url encoding of 32 random bytes retained by the initiating app."
    },
    "issuer": {
      "type": "string",
      "format": "uri"
    },
    "accountId": {
      "$ref": "#/components/schemas/AccountId"
    },
    "app": {
      "type": "object",
      "properties": {
        "origin": {
          "type": "string",
          "format": "uri"
        },
        "callbackUri": {
          "type": "string",
          "format": "uri"
        },
        "grantId": {
          "$ref": "#/components/schemas/ResourceId"
        },
        "grantIncarnation": {
          "$ref": "#/components/schemas/PositiveUint256"
        }
      },
      "required": [
        "origin",
        "callbackUri",
        "grantId",
        "grantIncarnation"
      ],
      "additionalProperties": false
    },
    "planId": {
      "$ref": "#/components/schemas/ResourceId"
    },
    "planCommitment": {
      "$ref": "#/components/schemas/Hash"
    },
    "operationId": {
      "$ref": "#/components/schemas/ResourceId"
    },
    "operationCommitment": {
      "$ref": "#/components/schemas/Hash"
    },
    "operationHash": {
      "$ref": "#/components/schemas/Hash"
    },
    "stepIndexes": {
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 31
      },
      "minItems": 1,
      "maxItems": 3,
      "uniqueItems": true
    },
    "operation": {
      "$ref": "#/components/schemas/UserOperationV07"
    },
    "chainId": {
      "type": "integer",
      "const": 8453
    },
    "entryPoint": {
      "$ref": "#/components/schemas/Address"
    },
    "safe7579": {
      "$ref": "#/components/schemas/Address"
    },
    "payment": {
      "type": "object",
      "properties": {
        "kind": {
          "const": "v6-usdc-pay",
          "type": "string"
        },
        "chainId": {
          "const": 8453,
          "type": "integer"
        },
        "account": {
          "$ref": "#/components/schemas/Address"
        },
        "token": {
          "$ref": "#/components/schemas/Address"
        },
        "terminal": {
          "$ref": "#/components/schemas/Address"
        },
        "projectId": {
          "$ref": "#/components/schemas/Uint256"
        },
        "amount": {
          "$ref": "#/components/schemas/PositiveUint256"
        },
        "beneficiary": {
          "$ref": "#/components/schemas/Address"
        },
        "minimumReturnedTokens": {
          "$ref": "#/components/schemas/Uint256"
        },
        "memo": {
          "type": "string",
          "maxLength": 32768
        },
        "metadata": {
          "$ref": "#/components/schemas/HexBytes"
        },
        "stepIndexes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 31
          },
          "minItems": 1,
          "maxItems": 3,
          "uniqueItems": true
        },
        "approvalStepIndexes": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 31
          },
          "minItems": 0,
          "maxItems": 2,
          "uniqueItems": true
        },
        "paymentStepIndex": {
          "type": "integer",
          "minimum": 0,
          "maximum": 31
        },
        "resetAllowance": {
          "type": "boolean"
        }
      },
      "required": [
        "kind",
        "chainId",
        "account",
        "token",
        "terminal",
        "projectId",
        "amount",
        "beneficiary",
        "minimumReturnedTokens",
        "memo",
        "metadata",
        "stepIndexes",
        "approvalStepIndexes",
        "paymentStepIndex",
        "resetAllowance"
      ],
      "additionalProperties": false
    },
    "signing": {
      "type": "object",
      "properties": {
        "digest": {
          "$ref": "#/components/schemas/Hash"
        },
        "signedData": {
          "$ref": "#/components/schemas/HexBytes"
        },
        "validAfter": {
          "$ref": "#/components/schemas/Uint256"
        },
        "validUntil": {
          "$ref": "#/components/schemas/Uint256"
        }
      },
      "required": [
        "digest",
        "signedData",
        "validAfter",
        "validUntil"
      ],
      "additionalProperties": false
    },
    "createdAtMs": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "expiresAtMs": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "approved",
        "cancelled"
      ]
    },
    "approvedAtMs": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "cancelledAtMs": {
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        {
          "type": "null"
        }
      ]
    },
    "operationState": {
      "type": "string"
    }
  },
  "required": [
    "version",
    "id",
    "state",
    "issuer",
    "accountId",
    "app",
    "planId",
    "planCommitment",
    "operationId",
    "operationCommitment",
    "operationHash",
    "stepIndexes",
    "operation",
    "chainId",
    "entryPoint",
    "safe7579",
    "payment",
    "signing",
    "createdAtMs",
    "expiresAtMs",
    "status",
    "approvedAtMs",
    "cancelledAtMs",
    "operationState"
  ],
  "additionalProperties": false
}