BotanaryBotanary

Delegations

Scoped, revocable session-key delegations - the authority surface. Build, enable, revoke. There is no per-delegation freeze; freeze the whole account instead.

List all delegations (with spent-to-date)

GET
/delegations

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Query Parameters

status?string

Filter by delegation status.

Value in"active" | "frozen" | "expired" | "revoked"
accountId?string

Scope the list to this specific account of the caller's (must belong to the authenticated signer - a foreign or unknown id is rejected, never silently ignored). Omitted defaults to the signer's lowest-visible-index account.

Response Body

application/json

application/json

application/json

curl -X GET "https://api.app.botanary.xyz/delegations"
[
  {
    "id": "d1",
    "permissionId": "0x1111111111111111111111111111111111111111111111111111111111111111",
    "name": "Uniswap",
    "kind": "dApp",
    "icon": "arrow-left-right",
    "delegateeAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
    "chain": "Arbitrum",
    "chainId": 42161,
    "status": "active",
    "humanSummary": "This dApp can spend up to 100 USDC in total, and may call 0x3593564c() on Universal Router and approve() on Permit2, max 50 per action, limited to 10 actions. Expires on 2026-08-03.",
    "policySet": {
      "budgets": [
        {
          "token": {
            "symbol": "USDC",
            "chainId": 42161
          },
          "amount": 100
        }
      ],
      "perActionMax": {
        "token": {
          "symbol": "USDC",
          "chainId": 42161
        },
        "amount": 50
      },
      "maxActions": 10,
      "recipientAllowlist": [],
      "allowedActions": [
        {
          "name": "Universal Router",
          "target": "0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af",
          "selectors": [
            "0x3593564c"
          ]
        },
        {
          "name": "Permit2",
          "target": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
          "selectors": [
            "0x095ea7b3"
          ]
        }
      ],
      "expiresAt": "2026-08-03T00:00:00Z",
      "freezeGated": false
    },
    "spentToDate": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161
        },
        "limit": 100,
        "spent": 42.5,
        "remaining": 57.5,
        "expiresAt": "2026-08-03T00:00:00Z"
      }
    ]
  }
]
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}

Enable a delegation from a signed enable op

POST
/delegations

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://api.app.botanary.xyz/delegations" \  -H "Content-Type: application/json" \  -d '{    "userOp": {      "sender": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",      "nonce": "0",      "callData": "0x",      "callGasLimit": "200000",      "verificationGasLimit": "150000",      "preVerificationGas": "50000",      "maxFeePerGas": "1000000000",      "maxPriorityFeePerGas": "1000000000",      "signature": "0x",      "entryPoint": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",      "chainId": 42161    },    "userOpHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",    "intentType": "send"  }'
{
  "id": "d1",
  "permissionId": "0x1111111111111111111111111111111111111111111111111111111111111111",
  "name": "Uniswap",
  "kind": "dApp",
  "icon": "arrow-left-right",
  "delegateeAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "chain": "Arbitrum",
  "chainId": 42161,
  "status": "active",
  "humanSummary": "This dApp can spend up to 100 USDC in total, and may call 0x3593564c() on Universal Router and approve() on Permit2, max 50 per action, limited to 10 actions. Expires on 2026-08-03.",
  "policySet": {
    "budgets": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161
        },
        "amount": 100
      }
    ],
    "perActionMax": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161
      },
      "amount": 50
    },
    "maxActions": 10,
    "recipientAllowlist": [],
    "allowedActions": [
      {
        "name": "Universal Router",
        "target": "0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af",
        "selectors": [
          "0x3593564c"
        ]
      },
      {
        "name": "Permit2",
        "target": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
        "selectors": [
          "0x095ea7b3"
        ]
      }
    ],
    "expiresAt": "2026-08-03T00:00:00Z",
    "freezeGated": false
  },
  "spentToDate": [
    {
      "token": {
        "symbol": "USDC",
        "chainId": 42161
      },
      "limit": 100,
      "spent": 42.5,
      "remaining": 57.5,
      "expiresAt": "2026-08-03T00:00:00Z"
    }
  ]
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "per_action_exceeded"
  }
}

Build a delegation or mandate (policy set + plain-language summary + enable op) WITHOUT executing

POST
/delegations/build

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

curl -X POST "https://api.app.botanary.xyz/delegations/build" \  -H "Content-Type: application/json" \  -d '{    "name": "Aave auto-repay",    "kind": "dApp",    "delegateeAddress": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",    "chainId": 8453,    "budgets": [      {        "token": {          "symbol": "USDC"        },        "amount": 50      }    ]  }'
{
  "policySet": {
    "budgets": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      }
    ],
    "perActionMax": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "maxActions": 10,
    "recipientAllowlist": [
      {
        "name": "Universal Router",
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
        "chainId": 8453
      }
    ],
    "allowedActions": [
      {
        "target": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
        "name": "Universal Router",
        "selectors": [
          "0x3593564c"
        ]
      }
    ],
    "expiresAt": "2019-08-24T14:15:22Z",
    "freezeGated": true
  },
  "humanSummary": "This automation can spend up to 500 USDC in total, and may call 0x573ade81() on Aave v3 Pool, max 250 per action. Expires on 2026-10-01.",
  "enableUserOp": {
    "sender": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "nonce": "0",
    "factory": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "factoryData": "0x",
    "callData": "0x",
    "callGasLimit": "200000",
    "verificationGasLimit": "150000",
    "preVerificationGas": "50000",
    "maxFeePerGas": "1000000000",
    "maxPriorityFeePerGas": "1000000000",
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "paymasterVerificationGasLimit": "string",
    "paymasterPostOpGasLimit": "string",
    "paymasterData": "0x",
    "signature": "0x",
    "entryPoint": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "chainId": 42161
  },
  "userOpHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
  "simulation": {
    "id": "string",
    "intentType": "send",
    "willSucceed": true,
    "declineReason": "cap_exceeded",
    "amountIn": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "amountOut": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "rate": 1.08,
    "route": "USDC → EURC via Uniswap v3",
    "slippageBps": 30,
    "fees": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      }
    ],
    "gas": {
      "method": "sponsored",
      "cost": {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      },
      "sponsored": true
    },
    "warnings": [
      "string"
    ],
    "expiresAt": "2019-08-24T14:15:22Z"
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "per_action_exceeded"
  }
}

Get one delegation

GET
/delegations/{delegationId}

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Path Parameters

delegationId*string

Response Body

application/json

application/json

application/json

curl -X GET "https://api.app.botanary.xyz/delegations/d1"
{
  "id": "d1",
  "permissionId": "0x1111111111111111111111111111111111111111111111111111111111111111",
  "name": "Uniswap",
  "kind": "dApp",
  "icon": "arrow-left-right",
  "delegateeAddress": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
  "chain": "Arbitrum",
  "chainId": 42161,
  "status": "active",
  "humanSummary": "This dApp can spend up to 100 USDC in total, and may call 0x3593564c() on Universal Router and approve() on Permit2, max 50 per action, limited to 10 actions. Expires on 2026-08-03.",
  "policySet": {
    "budgets": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161
        },
        "amount": 100
      }
    ],
    "perActionMax": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161
      },
      "amount": 50
    },
    "maxActions": 10,
    "recipientAllowlist": [],
    "allowedActions": [
      {
        "name": "Universal Router",
        "target": "0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af",
        "selectors": [
          "0x3593564c"
        ]
      },
      {
        "name": "Permit2",
        "target": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
        "selectors": [
          "0x095ea7b3"
        ]
      }
    ],
    "expiresAt": "2026-08-03T00:00:00Z",
    "freezeGated": false
  },
  "spentToDate": [
    {
      "token": {
        "symbol": "USDC",
        "chainId": 42161
      },
      "limit": 100,
      "spent": 42.5,
      "remaining": 57.5,
      "expiresAt": "2026-08-03T00:00:00Z"
    }
  ]
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}

Build a bounded delegated action (the binding-boundary demonstration)

POST
/delegations/{delegationId}/actions

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Path Parameters

delegationId*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

curl -X POST "https://api.app.botanary.xyz/delegations/d1/actions" \  -H "Content-Type: application/json" \  -d '{    "recipient": "string",    "amount": 0  }'
{
  "intentType": "send",
  "userOp": {
    "sender": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "nonce": "0",
    "factory": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "factoryData": "0x",
    "callData": "0x",
    "callGasLimit": "200000",
    "verificationGasLimit": "150000",
    "preVerificationGas": "50000",
    "maxFeePerGas": "1000000000",
    "maxPriorityFeePerGas": "1000000000",
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "paymasterVerificationGasLimit": "string",
    "paymasterPostOpGasLimit": "string",
    "paymasterData": "0x",
    "signature": "0x",
    "entryPoint": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "chainId": 42161
  },
  "userOpHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
  "humanSummary": "string",
  "simulation": {
    "id": "string",
    "intentType": "send",
    "willSucceed": true,
    "declineReason": "cap_exceeded",
    "amountIn": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "amountOut": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "rate": 1.08,
    "route": "USDC → EURC via Uniswap v3",
    "slippageBps": 30,
    "fees": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      }
    ],
    "gas": {
      "method": "sponsored",
      "cost": {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      },
      "sponsored": true
    },
    "warnings": [
      "string"
    ],
    "expiresAt": "2019-08-24T14:15:22Z"
  },
  "riskReducing": true,
  "instant": true,
  "gasless": true,
  "gasPermit": {
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "tokenName": "USD Coin",
    "tokenVersion": "2",
    "kernelVersion": "0.3.3",
    "permitAmount": "212142",
    "permitNonce": "2",
    "permitDeadline": "string",
    "permitDigest": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
    "signaturePrefix": "0x",
    "estimatedFee": 0.031296
  },
  "usdtApproval": {
    "token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "amount": "string",
    "calls": [
      {
        "to": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
        "data": "0x",
        "value": "string"
      }
    ]
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}

Freeze a single delegation (DOES NOT EXIST - always 400)

POST
/delegations/{delegationId}/freeze

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Path Parameters

delegationId*string

Response Body

application/json

application/json

application/json

curl -X POST "https://api.app.botanary.xyz/delegations/d1/freeze"
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}

Unfreeze a single delegation (DOES NOT EXIST - always 400)

POST
/delegations/{delegationId}/unfreeze

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Path Parameters

delegationId*string

Response Body

application/json

application/json

application/json

curl -X POST "https://api.app.botanary.xyz/delegations/d1/unfreeze"
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}

Build the revoke op for a delegation (kill-switch - instant, permanent)

POST
/delegations/{delegationId}/revoke

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Path Parameters

delegationId*string

Response Body

application/json

application/json

application/json

curl -X POST "https://api.app.botanary.xyz/delegations/d1/revoke"
{
  "intentType": "send",
  "userOp": {
    "sender": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "nonce": "0",
    "factory": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "factoryData": "0x",
    "callData": "0x",
    "callGasLimit": "200000",
    "verificationGasLimit": "150000",
    "preVerificationGas": "50000",
    "maxFeePerGas": "1000000000",
    "maxPriorityFeePerGas": "1000000000",
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "paymasterVerificationGasLimit": "string",
    "paymasterPostOpGasLimit": "string",
    "paymasterData": "0x",
    "signature": "0x",
    "entryPoint": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "chainId": 42161
  },
  "userOpHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
  "humanSummary": "string",
  "simulation": {
    "id": "string",
    "intentType": "send",
    "willSucceed": true,
    "declineReason": "cap_exceeded",
    "amountIn": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "amountOut": {
      "token": {
        "symbol": "USDC",
        "chainId": 42161,
        "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
      },
      "amount": 50
    },
    "rate": 1.08,
    "route": "USDC → EURC via Uniswap v3",
    "slippageBps": 30,
    "fees": [
      {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      }
    ],
    "gas": {
      "method": "sponsored",
      "cost": {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      },
      "sponsored": true
    },
    "warnings": [
      "string"
    ],
    "expiresAt": "2019-08-24T14:15:22Z"
  },
  "riskReducing": true,
  "instant": true,
  "gasless": true,
  "gasPermit": {
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "tokenName": "USD Coin",
    "tokenVersion": "2",
    "kernelVersion": "0.3.3",
    "permitAmount": "212142",
    "permitNonce": "2",
    "permitDeadline": "string",
    "permitDigest": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
    "signaturePrefix": "0x",
    "estimatedFee": 0.031296
  },
  "usdtApproval": {
    "token": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "paymaster": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
    "amount": "string",
    "calls": [
      {
        "to": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
        "data": "0x",
        "value": "string"
      }
    ]
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}

List immutable policy snapshots for a delegation

GET
/delegations/{delegationId}/policy-snapshots

Authorization

sessionToken
AuthorizationBearer <token>

Botanary session token from POST /auth/session. Not a key - a revocable session bearer.

In: header

Path Parameters

delegationId*string

Response Body

application/json

application/json

application/json

curl -X GET "https://api.app.botanary.xyz/delegations/d1/policy-snapshots"
[
  {
    "id": "string",
    "delegationId": "d2",
    "permissionId": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
    "policySet": {
      "budgets": [
        {
          "token": {
            "symbol": "USDC",
            "chainId": 42161,
            "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
          },
          "amount": 50
        }
      ],
      "perActionMax": {
        "token": {
          "symbol": "USDC",
          "chainId": 42161,
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0"
        },
        "amount": 50
      },
      "maxActions": 10,
      "recipientAllowlist": [
        {
          "name": "Universal Router",
          "address": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
          "chainId": 8453
        }
      ],
      "allowedActions": [
        {
          "target": "0x8f2A9c4419aD77b0392bC41D8123aa77c0Fe41D0",
          "name": "Universal Router",
          "selectors": [
            "0x3593564c"
          ]
        }
      ],
      "expiresAt": "2019-08-24T14:15:22Z",
      "freezeGated": true
    },
    "humanSummary": "string",
    "capturedAt": "2019-08-24T14:15:22Z",
    "enableTxHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b"
  }
]
{
  "error": {
    "code": "unauthorized",
    "message": "Session token missing or expired."
  }
}
{
  "error": {
    "code": "out_of_scope",
    "message": "This action exceeds the per-action cap.",
    "declineReason": "cap_exceeded",
    "details": {},
    "requestId": "string"
  }
}