Endpoint reference

POST /api/v1/operations/{id}/plans

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.
idpath / requiredstring

["prepare_pay","prepare_cash_out","prepare_payout","prepare_ruleset_change","prepare_launch","prepare_omnichain_launch","prepare_deploy_erc20","prepare_set_project_uri","prepare_borrow","prepare_repay","prepare_bridge_claim","prepare_accounting_sync","prepare_buyback_pool","prepare_buyback_twap","prepare_buyback_hook","prepare_router_terminal","prepare_721_pay","prepare_adjust_tiers","prepare_721_launch","prepare_revnet_deploy","prepare_auto_issue"]

Request body

Option 1
FieldTypeDetails
memostring
optional
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
tokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
amountstring
required
Input asset amount in its smallest units, as an exact integer string.
beneficiarystring
required
slippageBpsinteger
optional
Slippage in basis points, 0–4950. Default 100. Raise it only within what the payer accepts, such as a payFailure's retrySlippageBps.

Default: 100

minReturnedTokensstring
optional
Explicit minimum project tokens for the beneficiary, in 18-decimal base units, replacing beneficiaryTokenCount less slippageBps. To accept 2% below the fill, take the quote's simulatedBeneficiaryTokenCount less 2%. A warning names a figure above the simulated fill. jb_prepare_pay requires it when the default would protect nothing (PAY_MINIMUM_PROTECTS_NOTHING) or sits above the simulated fill (PAY_DEFAULT_MINIMUM_ABOVE_FILL). "0" accepts receiving no project tokens.
metadatastring
optional
skipSplitsboolean
optional
Buyback 1.4 only. Unset means on wherever the project's buyback hook is 1.4 and no metadata is given, as the apps pay: the hook buys from the pool when that beats the payer's share of a mint, and the tokens it buys go to the beneficiary without the reserved split (they already exist, so nothing is issued for them and the split gets none). Minting still pays the split. The default minimum is then the SDK's (prepareUserPay): with a pool quote, the beneficiary's part of the floored quote, which the hook also enforces. Pass false when the payment should honor the project's splits, such as routing fees or revenue into a project. Where it cannot apply (no buyback hook, hook 1.0 or 1.1.1, the caller's own metadata) unset means off, and an explicit true is refused. The quote's skipSplits says which applied and why.
Option 2
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

holderstring
required
cashOutCountstring
required
Project token count in 18-decimal base units.
tokenToReclaimstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
beneficiarystring
required
accountstring
required
slippageBpsinteger
optional
Slippage in basis points, 0–1000. Default 100 (1%).

Default: 100

terminalstring
optional
Option 3
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
tokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
amountstring
required
Payout amount in accounting token decimals, denominated in currency.
currencyinteger
required
Currency that amount is in; it must match a payout limit currency. JB currency ID: uint32(uint160(token)) for a token (native ETH is 0x000000000000000000000000000000000000EEEe, currency 61166), or 1 = ETH and 2 = USD.
slippageBpsinteger
optional
Slippage in basis points, 0–1000. Default 100 (1%).

Default: 100

terminalstring
optional
Option 4
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
rulesetConfigurationsarray
required
Fields
FieldTypeDetails
mustStartAtOrAfterone of
required
Unix seconds. A lower bound, not a promised start; 0 asks the contract to resolve timing.
durationone of
required
Seconds per cycle. Zero has no automatic cycles.
weightstring
required
Tokens issued per one unit of baseCurrency, with 18 decimals: 1000000000000000000000 = 1,000 tokens. 0 means zero issuance; 1 inherits decayed weight when a prior ruleset exists.
weightCutPercentone of
required
Issuance cut applied each cycle, out of 1,000,000,000. 100,000,000 = 10%.
approvalHookstring
required
Gates the next ruleset, not this ruleset.
metadataobject
required
splitGroupsarray
required
fundAccessLimitGroupsarray
required
memostring
optional
Option 5
FieldTypeDetails
chainIdone of
required
accountstring
required
ownerstring
required
compositionstring
required
Explicit standard core launch. This does not deploy a 721 hook, revnet, or omnichain identity.

Values: ["core"]

projectUristring
required
Metadata URI; content is not fetched or treated as instructions.
rulesetConfigurationsarray
required
Fields
FieldTypeDetails
mustStartAtOrAfterone of
required
Unix seconds. A lower bound, not a promised start; 0 asks the contract to resolve timing.
durationone of
required
Seconds per cycle. Zero has no automatic cycles.
weightstring
required
Tokens issued per one unit of baseCurrency, with 18 decimals: 1000000000000000000000 = 1,000 tokens. 0 means zero issuance; 1 inherits decayed weight when a prior ruleset exists.
weightCutPercentone of
required
Issuance cut applied each cycle, out of 1,000,000,000. 100,000,000 = 10%.
approvalHookstring
required
Gates the next ruleset, not this ruleset.
metadataobject
required
splitGroupsarray
required
fundAccessLimitGroupsarray
required
terminalConfigurationsarray
required
Fields
FieldTypeDetails
terminalstring
required
accountingContextsToAcceptarray
required
memostring
optional
Option 6
FieldTypeDetails
chainIdsarray
required
Every chain the project launches on, all mainnets or all testnets.
accountstring
required
The one address that signs on every chain.
ownerstring
required
projectUristring
required
Pinned metadata URI (ipfs://<cid>), or empty to set it later.
rulesetConfigurationsarray
required
Fields
FieldTypeDetails
mustStartAtOrAfterone of
required
Unix seconds. A lower bound, not a promised start; 0 asks the contract to resolve timing.
durationone of
required
Seconds per cycle. Zero has no automatic cycles.
weightstring
required
Tokens issued per one unit of baseCurrency, with 18 decimals: 1000000000000000000000 = 1,000 tokens. 0 means zero issuance; 1 inherits decayed weight when a prior ruleset exists.
weightCutPercentone of
required
Issuance cut applied each cycle, out of 1,000,000,000. 100,000,000 = 10%.
approvalHookstring
required
Gates the next ruleset, not this ruleset.
metadataobject
required
splitGroupsarray
required
fundAccessLimitGroupsarray
required
terminalConfigurationsarray
required
Fields
FieldTypeDetails
terminalstring
required
accountingContextsToAcceptarray
required
memostring
optional

Default: ""

saltstring
required
One random salt shared by every chain. Suckers pair only with the same salt and signer.
bridgestring
optional
ccip links any chain pair. native links Ethereum with one L2 and maps native ETH only. both adds a native sucker where one exists.

Values: ["ccip","native","both"]

Default: "ccip"

deployTiersHookConfigobject
optional
NFT tiers collection. Omitted: an empty collection priced in the first baseCurrency.
Fields
FieldTypeDetails
namestring
required
symbolstring
required
baseUristring
required
tokenUriResolverstring
required
contractUristring
required
tiersConfigobject
required
flagsobject
required
useDataHookForCashOutboolean
optional
Let NFTs cash out for surplus. Needs deployTiersHookConfig.

Default: false

Option 7
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
The address that will sign.
namestring
required
ERC-20 name, such as "Lattice".
symbolstring
required
ERC-20 symbol (ticker), such as "LATT".
saltstring
optional
Zero for a one-off address. A nonzero salt gives a deterministic address from this salt and the signer; use the same salt and signer on every chain to get the same token address.
Option 8
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
The address that will sign.
uristring
required
Metadata URI the user already pinned, as ipfs://<cid> (jb_pin_project_metadata returns one). Not fetched.
Option 9
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

holderstring
required
tokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
collateralCountstring
required
Project tokens to lock as collateral, with 18 decimals: 1000000000000000000 = 1 token. The holder must hold them; the loan burns them and mints them back on repay.
prepaidFeePercentinteger
required
Fee prepaid at borrow time, out of 1,000. Allowed 25 (2.5%) to 500 (50%).
beneficiarystring
required
accountstring
required
slippageBpsinteger
optional
Slippage in basis points, 0–1000. Default 100 (1%).

Default: 100

Option 10
FieldTypeDetails
chainIdone of
required
loanIdstring
required
accountstring
required
maxRepayBorrowAmountstring
required
collateralCountToReturnstring
required
beneficiarystring
required
Option 11
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
suckerstring
required
claimobject
required
Fields
FieldTypeDetails
tokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
leafobject
required
proofarray
required
Option 12
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
suckerstring
required
maxTransportValuestring
required
Maximum native wei attached to the accounting message; gas is additional.
Option 13
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
terminalTokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
feeinteger
required
Static Uniswap V4 pool fee in hundredths of a basis point; 3000 = 0.3%.
tickSpacinginteger
required
twapWindowSecondsinteger
required
The current hook maps registration at 172800 to its 1800-second default; retired 1.1.1 and v1 hooks store 172800 unchanged. Use the TWAP update tool afterward for an explicit 172800-second window on the current hook.
Option 14
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
terminalTokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
twapWindowSecondsinteger
required
Option 15
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
hookstring
required
Option 16
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
terminalstring
required
Option 17
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
tokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
amountstring
required
Fresh payment amount in the token’s smallest units. Use 0 for free tiers or eligible NFT-credit purchases.
beneficiarystring
required
tierIdsarray
required
slippageBpsinteger
optional
Slippage in basis points, 0–4950. Default 100. Raise it only within what the payer accepts, such as a payFailure's retrySlippageBps.

Default: 100

minReturnedTokensstring
optional
Explicit minimum fungible project tokens for the beneficiary, in 18-decimal base units, replacing the quoted count less slippageBps. Needed when the quote warns that the default minimum sits above the simulated fill (a buyback hook beside the NFT hook). NFT delivery is checked either way.
allowOverspendingboolean
optional

Default: false

skipSplitsboolean
optional
Buyback 1.4 only. Unset means on wherever the project's buyback hook is 1.4 and no metadata is given, as the apps pay: the hook buys from the pool when that beats the payer's share of a mint, and the tokens it buys go to the beneficiary without the reserved split (they already exist, so nothing is issued for them and the split gets none). Minting still pays the split. The default minimum is then the SDK's (prepareUserPay): with a pool quote, the beneficiary's part of the floored quote, which the hook also enforces. Pass false when the payment should honor the project's splits, such as routing fees or revenue into a project. Where it cannot apply (no buyback hook, hook 1.0 or 1.1.1, the caller's own metadata) unset means off, and an explicit true is refused. The quote's skipSplits says which applied and why.
Option 18
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
tiersToAddarray
required
Fields
FieldTypeDetails
pricestring
required
Tier price in the tiers currency, with the tiers decimals.
initialSupplyone of
required
votingUnitsone of
required
reserveFrequencyone of
required
reserveBeneficiarystring
required
encodedIpfsUristring
required
categoryone of
required
discountPercentone of
required
Tier price discount, out of 200. 200 = free.
flagsobject
required
splitPercentone of
required
Share of the tier price sent to the tier's splits, out of 1,000,000,000.
splitsarray
required
tierIdsToRemovearray
required
Option 19
FieldTypeDetails
chainIdone of
required
accountstring
required
ownerstring
required
deployTiersHookConfigobject
required
Fields
FieldTypeDetails
namestring
required
symbolstring
required
baseUristring
required
tokenUriResolverstring
required
contractUristring
required
tiersConfigobject
required
flagsobject
required
projectUristring
required
rulesetConfigurationsarray
required
Fields
FieldTypeDetails
mustStartAtOrAfterone of
required
Unix seconds. A lower bound, not a promised start; 0 asks the contract to resolve timing.
durationone of
required
Seconds per cycle. Zero has no automatic cycles.
weightstring
required
Tokens issued per one unit of baseCurrency, with 18 decimals: 1000000000000000000000 = 1,000 tokens. 0 means zero issuance; 1 inherits decayed weight when a prior ruleset exists.
weightCutPercentone of
required
Issuance cut applied each cycle, out of 1,000,000,000. 100,000,000 = 10%.
approvalHookstring
required
Gates the next ruleset, not this ruleset.
metadataobject
required
splitGroupsarray
required
fundAccessLimitGroupsarray
required
terminalConfigurationsarray
required
Fields
FieldTypeDetails
terminalstring
required
accountingContextsToAcceptarray
required
memostring
optional

Default: ""

saltstring
required
Option 20
FieldTypeDetails
chainIdone of
required
accountstring
required
configobject
required
Fields
FieldTypeDetails
descriptionobject
required
baseCurrencyone of
required
Currency that issuance is priced in: 1 = ETH, 2 = USD. Use 1 for ETH, not 61166 (native ETH's accounting currency). A token's own currency, uint32(uint160(token)), applies only when payments come in that token or JBPrices has a feed for it.
operatorstring
required
scopeCashOutsToLocalBalancesboolean
required
false: cash outs count every chain's supply and surplus (through the suckers). true: only this chain's. Recommended: false, which is what revnet.money sends.
stageConfigurationsarray
required
accountingContextsarray
required
Fields
FieldTypeDetails
tokenstring
required
Token address; native ETH is 0x000000000000000000000000000000000000EEEe.
decimalsone of
required
Token decimals. Native ETH uses 18.
currencyone of
required
Usually uint32(uint160(token)); native ETH is 0x000000000000000000000000000000000000EEEe, currency 61166.
chainIdsarray
optional
Every chain the revnet launches on, including chainId. Instead of suckerConfig: the sucker registry fills the bridges to the other chains, salted with config.description.salt, mapping native ETH and USDC when accepted.
bridgestring
optional
With chainIds. Default ccip. ccip links any chain pair. native links Ethereum with one L2 and maps native ETH only. both adds a native sucker where one exists.

Values: ["ccip","native","both"]

suckerConfigobject
optional
Explicit bridges, instead of chainIds. Use { salt, deployerConfigurations: [] } for one chain.
Fields
FieldTypeDetails
saltstring
required
deployerConfigurationsarray
required
tiered721Configobject
optional
Fields
FieldTypeDetails
baseline721HookConfigurationobject
required
saltstring
required
preventOperatorAdjustingTiersboolean
required
preventOperatorUpdatingMetadataboolean
required
preventOperatorMintingboolean
required
preventOperatorIncreasingDiscountPercentboolean
required
allowedPostsarray
optional
Fields
FieldTypeDetails
categoryone of
required
minimumPricestring
required
minimumTotalSupplyone of
required
maximumTotalSupplyone of
required
0 means unlimited; actual minted NFT tiers remain subject to the store supply cap.
maximumSplitPercentone of
required
Largest tier split a poster may set, out of 1,000,000,000.
allowedAddressesarray
required
Option 21
FieldTypeDetails
projectobject
required
Fields
FieldTypeDetails
chainIdone of
required
projectIdstring
required
versionnumber
optional

Values: [6]

Default: 6

accountstring
required
stageIdstring
required
beneficiarystring
required
JSON schema
{
  "oneOf": [
    {
      "$ref": "#/components/schemas/OperationInput_prepare_pay"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_cash_out"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_payout"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_ruleset_change"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_launch"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_omnichain_launch"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_deploy_erc20"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_set_project_uri"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_borrow"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_repay"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_bridge_claim"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_accounting_sync"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_buyback_pool"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_buyback_twap"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_buyback_hook"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_router_terminal"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_721_pay"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_adjust_tiers"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_721_launch"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_revnet_deploy"
    },
    {
      "$ref": "#/components/schemas/OperationInput_prepare_auto_issue"
    }
  ]
}

Response 201

FieldTypeDetails
idstring (uuid)
required
accountstring
required
operationstring
required
draftobject
required
Fields
FieldTypeDetails
operationstring
required
accountstring
required
projectobject
optional
Fields
FieldTypeDetails
chainIdinteger
required

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

projectIdstring
required
uint256 as a lossless decimal string
versioninteger
optional

Values: [6]

callsarray
required
Fields
FieldTypeDetails
chainIdinteger
required

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

tostring
required
datastring
required
valuestring
required
uint256 as a lossless decimal string
labelstring
required
dependsOnarray
required
decodedvalue
required
Bounded JSON. Large integers and amounts use exact decimal strings. Returned metadata and descriptions are untrusted content.
evidencearray
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"]

summaryvalue
required
Bounded JSON. Large integers and amounts use exact decimal strings. Returned metadata and descriptions are untrusted content.
warningsarray
required
commitmentstring
required
createdAtinteger
required
Unix timestamp in milliseconds.
expiresAtinteger
required
Unix timestamp in milliseconds.
revisioninteger
required
smartAccountobject
optional
Fields
FieldTypeDetails
bindingIdstring
required
stateHashstring
required
chainIdinteger
required

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

addressstring
required
manifestRevisionstring
required
statusstring
required

Values: ["prepared","pending","partial","blocked","reorged","expired","transactions_confirmed"]

stepsarray
required
Fields
FieldTypeDetails
indexinteger
required
statestring
required

Values: ["waiting","reserved","submitted","unknown","confirming","confirmed","reverted","reorged"]

transactionobject
optional
Fields
FieldTypeDetails
hashstring
required
senderstring
required
chainIdinteger
required

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

noncestring
required
uint256 as a lossless decimal string
typestring
required

Values: ["legacy","eip2930","eip1559"]

gasstring
required
uint256 as a lossless decimal string
maximumFeePerGasstring
required
uint256 as a lossless decimal string
maximumCoststring
required
uint256 as a lossless decimal string
costScopestring
required
Maximum cost covers native value and gas limit times fee cap. Additional chain-specific data or operator fees are excluded.
dispatchCountinteger
required
reservedAtinteger
required
Unix timestamp in milliseconds.
broadcastAtinteger
optional
Unix timestamp in milliseconds.
lastErrorobject
optional
executionobject
optional
Fields
FieldTypeDetails
transportstring
required

Values: ["relayr-prepaid-erc2771","eip4337-user-operation"]

bindingIdstring
required
chainIdinteger
required

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

hashstring
optional
receiptobject
optional
Fields
FieldTypeDetails
transactionHashstring
required
blockHashstring
required
blockNumberstring
required
uint256 as a lossless decimal string
statusstring
required

Values: ["success","reverted"]

confirmationsinteger
required
canonicalboolean
required
observedAtinteger
required
Unix timestamp in milliseconds.
logsarray
required
logCountinteger
optional
logsHashstring
optional
logsStoredboolean
optional
semanticobject
optional
Fields
FieldTypeDetails
statusstring
required

Values: ["verified","failed","unknown","unmodeled"]

detailsvalue
optional
Bounded JSON. Large integers and amounts use exact decimal strings. Returned metadata and descriptions are untrusted content.
blockedByarray
required
confirmationScopestring
required
JSON schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "account": {
      "$ref": "#/components/schemas/Address"
    },
    "operation": {
      "type": "string"
    },
    "draft": {
      "$ref": "#/components/schemas/PlanDraft"
    },
    "commitment": {
      "$ref": "#/components/schemas/Hash"
    },
    "createdAt": {
      "$ref": "#/components/schemas/UnixMilliseconds"
    },
    "expiresAt": {
      "$ref": "#/components/schemas/UnixMilliseconds"
    },
    "revision": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "smartAccount": {
      "type": "object",
      "properties": {
        "bindingId": {
          "$ref": "#/components/schemas/Hash"
        },
        "stateHash": {
          "$ref": "#/components/schemas/Hash"
        },
        "chainId": {
          "$ref": "#/components/schemas/ChainId"
        },
        "address": {
          "$ref": "#/components/schemas/Address"
        },
        "manifestRevision": {
          "$ref": "#/components/schemas/Hash"
        }
      },
      "required": [
        "bindingId",
        "stateHash",
        "chainId",
        "address",
        "manifestRevision"
      ],
      "additionalProperties": false
    },
    "status": {
      "type": "string",
      "enum": [
        "prepared",
        "pending",
        "partial",
        "blocked",
        "reorged",
        "expired",
        "transactions_confirmed"
      ]
    },
    "steps": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/PlanStep"
      },
      "minItems": 1,
      "maxItems": 32
    },
    "confirmationScope": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "account",
    "operation",
    "draft",
    "commitment",
    "createdAt",
    "expiresAt",
    "revision",
    "status",
    "steps",
    "confirmationScope"
  ],
  "additionalProperties": false
}