> ## Documentation Index
> Fetch the complete documentation index at: https://docs.compasslabs.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Execute multiple earn actions

> Combine multiple actions into a single atomic transaction.

Bundle swaps and venue deposits/withdrawals into one transaction executed through the Earn Account. This saves gas compared to executing actions separately and ensures all actions succeed or fail together.

**Example:** Swap AUSD to USDC, then deposit USDC into a vault - all in one transaction.

**Fees:** Manage actions (deposits/withdrawals) support optional fee configuration, same as the standalone manage endpoint.

**Gas sponsorship:** Set `gas_sponsorship=true` to receive EIP-712 typed data. Owner signs the typed data, then submit to [/gas_sponsorship/prepare](https://docs.compasslabs.ai/v2/api-reference/gas-sponsorship/prepare-gas-sponsored-transaction).



## OpenAPI

````yaml /v2/combined_spec.json post /v2/earn/bundle
openapi: 3.1.0
info:
  title: Compass API
  description: Compass Labs DeFi API
  version: 0.0.1
servers:
  - url: https://api.compasslabs.ai
    description: Production server
security:
  - ApiKeyAuth: []
paths:
  /v2/earn/bundle:
    post:
      tags:
        - Earn
      summary: Execute multiple earn actions
      description: >-
        Combine multiple actions into a single atomic transaction.


        Bundle swaps and venue deposits/withdrawals into one transaction
        executed through the Earn Account. This saves gas compared to executing
        actions separately and ensures all actions succeed or fail together.


        **Example:** Swap AUSD to USDC, then deposit USDC into a vault - all in
        one transaction.


        **Fees:** Manage actions (deposits/withdrawals) support optional fee
        configuration, same as the standalone manage endpoint.


        **Gas sponsorship:** Set `gas_sponsorship=true` to receive EIP-712 typed
        data. Owner signs the typed data, then submit to
        [/gas_sponsorship/prepare](https://docs.compasslabs.ai/v2/api-reference/gas-sponsorship/prepare-gas-sponsored-transaction).
      operationId: v2_earn_bundle
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/V2BundleRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V2BundleResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      x-codeSamples:
        - lang: python
          label: Python (SDK)
          source: |-
            from compass_api_sdk import CompassAPI, models


            with CompassAPI(
                api_key_auth="<YOUR_API_KEY_HERE>",
            ) as compass_api:

                res = compass_api.earn.earn_bundle(owner="0x06A9aF046187895AcFc7258450B15397CAc67400", chain=models.Chain.ETHEREUM, actions=[
                    {
                        "body": {
                            "action_type": "V2_TRANSFER_FROM_EOA",
                            "token": "USDC",
                            "amount": "100",
                            "permit2_signature": "0x...",
                            "permit2_nonce": 1706000000,
                            "permit2_deadline": 1706001800,
                        },
                    },
                    {
                        "body": {
                            "action_type": "V2_SWAP",
                            "token_in": "USDC",
                            "token_out": "AUSD",
                            "amount_in": "100",
                            "slippage": "0.5",
                        },
                    },
                    {
                        "body": {
                            "action_type": "V2_MANAGE",
                            "venue": {
                                "type": "VAULT",
                                "vault_address": "0x1B4cd53a1A8e5F50aB6320EF34E5fB4D3df7B6f6",
                            },
                            "action": models.EarnManageParamsAction.DEPOSIT,
                            "amount": "100",
                        },
                    },
                ], gas_sponsorship=False)

                # Handle response
                print(res)
        - lang: typescript
          label: Typescript (SDK)
          source: |-
            import { CompassApiSDK } from "@compass-labs/api-sdk";

            const compassApiSDK = new CompassApiSDK({
              apiKeyAuth: "<YOUR_API_KEY_HERE>",
            });

            async function run() {
              const result = await compassApiSDK.earn.earnBundle({
                owner: "0x06A9aF046187895AcFc7258450B15397CAc67400",
                chain: "ethereum",
                actions: [
                  {
                    body: {
                      actionType: "V2_TRANSFER_FROM_EOA",
                      token: "USDC",
                      amount: "100",
                      permit2Signature: "0x...",
                      permit2Nonce: 1706000000,
                      permit2Deadline: 1706001800,
                    },
                  },
                  {
                    body: {
                      actionType: "V2_SWAP",
                      tokenIn: "USDC",
                      tokenOut: "AUSD",
                      amountIn: "100",
                      slippage: "0.5",
                    },
                  },
                  {
                    body: {
                      actionType: "V2_MANAGE",
                      venue: {
                        type: "VAULT",
                        vaultAddress: "0x1B4cd53a1A8e5F50aB6320EF34E5fB4D3df7B6f6",
                      },
                      action: "DEPOSIT",
                      amount: "100",
                    },
                  },
                ],
                gasSponsorship: false,
              });

              console.log(result);
            }

            run();
components:
  schemas:
    V2BundleRequest:
      properties:
        owner:
          type: string
          title: Owner
          description: The owner's wallet address that controls the Earn Account.
          default: '0x06A9aF046187895AcFc7258450B15397CAc67400'
          examples:
            - '0x06A9aF046187895AcFc7258450B15397CAc67400'
        chain:
          $ref: '#/components/schemas/Chain'
          description: Target blockchain network where the bundled actions will execute.
          default: ethereum
          examples:
            - ethereum
        actions:
          items:
            $ref: '#/components/schemas/V2UserOperation'
          type: array
          minItems: 1
          title: Actions
          description: List of actions to bundle. Actions are executed in order.
          default:
            - body:
                action_type: V2_TRANSFER_FROM_EOA
                amount: '100'
                permit2_deadline: 1706001800
                permit2_nonce: 1706000000
                permit2_signature: 0x...
                token: USDC
            - body:
                action_type: V2_SWAP
                amount_in: '100'
                slippage: '0.5'
                token_in: USDC
                token_out: AUSD
            - body:
                action: DEPOSIT
                action_type: V2_MANAGE
                amount: '100'
                venue:
                  type: VAULT
                  vault_address: '0x1B4cd53a1A8e5F50aB6320EF34E5fB4D3df7B6f6'
          examples:
            - - body:
                  action_type: V2_TRANSFER_FROM_EOA
                  amount: '100'
                  permit2_deadline: 1706001800
                  permit2_nonce: 1706000000
                  permit2_signature: 0x...
                  token: USDC
              - body:
                  action_type: V2_SWAP
                  amount_in: '100'
                  slippage: '0.5'
                  token_in: USDC
                  token_out: AUSD
              - body:
                  action: DEPOSIT
                  action_type: V2_MANAGE
                  amount: '100'
                  venue:
                    type: VAULT
                    vault_address: '0x1B4cd53a1A8e5F50aB6320EF34E5fB4D3df7B6f6'
        gas_sponsorship:
          type: boolean
          title: Gas Sponsorship
          description: >-
            If true, returns EIP-712 typed data for gas sponsorship. The owner
            must sign this data and submit to /gas_sponsorship/prepare.
          default: false
          examples:
            - false
      type: object
      required:
        - owner
        - chain
        - actions
      title: V2BundleRequest
      description: >-
        Request to execute multiple earn actions in a single atomic transaction.


        ## Supported Action Types


        - **V2_TRANSFER_FROM_EOA**: Transfer tokens from the owner's EOA to the
        product account
          using Permit2. Requires a signed Permit2 message.
        - **V2_TRANSFER_TO_EOA**: Transfer tokens from the product account back
        to the owner's EOA.
          No signature required (product account owns the tokens).
        - **V2_TRANSFER_TO_ADDRESS**: Transfer ERC20 tokens from the product
        account to any
          specified recipient address. No signature required (product account owns the tokens).
        - **V2_SWAP**: Swap tokens within the product account using 1inch
        aggregator.

        - **V2_MANAGE**: Deposit or withdraw from DeFi venues (Aave, Morpho,
        Vaults, etc.)


        ## Using V2_TRANSFER_FROM_EOA (Deposit to Product Account)


        To include a transfer from EOA in your bundle, follow these steps:


        1. **One-time setup**: Approve Permit2 to spend the token by calling
           `POST /v2/gas_sponsorship/approve_transfer` and executing the returned transaction.

        2. **Get Permit2 signature**: Call `POST /v2/earn/transfer` with:
           - `action`: "DEPOSIT"
           - `gas_sponsorship`: true
           - `spender`: omit this field (defaults to product account address for bundle use)

           This returns EIP-712 typed data. Sign it with the owner's wallet.

        3. **Include in bundle**: Add a V2_TRANSFER_FROM_EOA action with the
        signature
           and nonce/deadline from the typed data.

        The bundle will atomically: pull tokens from EOA → execute subsequent
        actions.


        ## Using V2_TRANSFER_TO_EOA (Withdraw to EOA)


        To transfer tokens from the product account back to the owner's EOA,
        simply add

        a V2_TRANSFER_TO_EOA action to your bundle. No signature is required
        since

        the product account already owns the tokens.


        Specify the exact token amount to transfer.
      default:
        owner: '0x06A9aF046187895AcFc7258450B15397CAc67400'
        chain: ethereum
        actions:
          - body:
              action_type: V2_TRANSFER_FROM_EOA
              amount: '100'
              permit2_deadline: 1706001800
              permit2_nonce: 1706000000
              permit2_signature: 0x...
              token: USDC
          - body:
              action_type: V2_SWAP
              amount_in: '100'
              slippage: '0.5'
              token_in: USDC
              token_out: AUSD
          - body:
              action: DEPOSIT
              action_type: V2_MANAGE
              amount: '100'
              venue:
                type: VAULT
                vault_address: '0x1B4cd53a1A8e5F50aB6320EF34E5fB4D3df7B6f6'
        gas_sponsorship: false
    V2BundleResponse:
      properties:
        transaction:
          anyOf:
            - $ref: '#/components/schemas/UnsignedTransaction'
            - type: 'null'
          description: >-
            Unsigned transaction for direct execution by the owner. Present when
            gas_sponsorship=false.
        eip_712:
          anyOf:
            - $ref: '#/components/schemas/BatchedSafeOperationsResponse-Output'
            - type: 'null'
          description: >-
            EIP-712 typed data for gas-sponsored execution. Present when
            gas_sponsorship=true. Owner must sign and submit to
            /gas_sponsorship/prepare.
        actions_count:
          type: integer
          title: Actions Count
          description: Number of individual transactions bundled in this execution.
      type: object
      required:
        - actions_count
      title: V2BundleResponse
      example:
        actions_count: 3
        transaction:
          chainId: '0x2105'
          data: >-
            0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020
          from: '0x4A83b4413CF41C3244027e1590E35a0F48403F0c'
          gas: '0xf4240'
          maxFeePerGas: '0x59682f00'
          maxPriorityFeePerGas: '0x3b9aca00'
          nonce: '0x5'
          to: '0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1'
          value: '0x0'
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    Chain:
      type: string
      enum:
        - base
        - ethereum
        - arbitrum
        - hyperevm
        - tempo
        - bsc
      title: Chain
      description: The chain to use.
    V2UserOperation:
      properties:
        body:
          oneOf:
            - $ref: '#/components/schemas/EarnSwapParams'
            - $ref: '#/components/schemas/EarnManageParams'
            - $ref: '#/components/schemas/EarnTransferFromEOAParams'
            - $ref: '#/components/schemas/EarnTransferToEOAParams'
            - $ref: '#/components/schemas/EarnTransferToAddressParams'
          discriminator:
            propertyName: action_type
            mapping:
              V2_MANAGE:
                $ref: '#/components/schemas/EarnManageParams'
              V2_SWAP:
                $ref: '#/components/schemas/EarnSwapParams'
              V2_TRANSFER_FROM_EOA:
                $ref: '#/components/schemas/EarnTransferFromEOAParams'
              V2_TRANSFER_TO_ADDRESS:
                $ref: '#/components/schemas/EarnTransferToAddressParams'
              V2_TRANSFER_TO_EOA:
                $ref: '#/components/schemas/EarnTransferToEOAParams'
      type: object
      required:
        - body
      title: V2UserOperation
      description: A single operation in a V2 bundle.
    UnsignedTransaction:
      properties:
        chainId:
          type: string
          title: Chainid
          description: The chain id of the transaction
        data:
          type: string
          title: Data
          description: The data of the transaction
        from:
          type: string
          title: From
          description: The sender of the transaction
        gas:
          anyOf:
            - type: string
            - type: 'null'
          title: Gas
          description: The gas of the transaction
        to:
          type: string
          title: To
          description: The recipient of the transaction
        value:
          type: string
          title: Value
          description: The value of the transaction
        nonce:
          type: string
          title: Nonce
          description: The nonce of the address
        maxFeePerGas:
          type: string
          title: Maxfeepergas
          description: The max fee per gas of the transaction
        maxPriorityFeePerGas:
          type: string
          title: Maxpriorityfeepergas
          description: The max priority fee per gas of the transaction
      type: object
      required:
        - chainId
        - data
        - from
        - gas
        - to
        - value
        - nonce
        - maxFeePerGas
        - maxPriorityFeePerGas
      title: UnsignedTransaction
      example:
        chainId: '0x2105'
        data: >-
          0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d
        from: '0x4A83b4413CF41C3244027e1590E35a0F48403F0c'
        gas: '0x7a120'
        maxFeePerGas: '0x59682f00'
        maxPriorityFeePerGas: '0x3b9aca00'
        nonce: '0x5'
        to: '0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67'
        value: '0x0'
    BatchedSafeOperationsResponse-Output:
      properties:
        domain:
          $ref: >-
            #/components/schemas/compass__api_backend__v2__models__safe__transact__response__batched_safe_operations__EIP712Domain
          description: EIP-712 domain separator
        types:
          $ref: >-
            #/components/schemas/compass__api_backend__v2__models__safe__transact__response__batched_safe_operations__EIP712Types
          description: EIP-712 type definitions
        primaryType:
          type: string
          const: SafeTx
          title: Primarytype
          description: Primary type for the structured data
        message:
          $ref: '#/components/schemas/SafeTxMessage'
          description: Safe transaction message data
      type: object
      required:
        - domain
        - types
        - primaryType
        - message
      title: BatchedSafeOperationsResponse
      description: Response containing EIP-712 typed data for Safe transaction signing.
      example:
        domain:
          chainId: 8453
          verifyingContract: '0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1'
        message:
          baseGas: '0'
          data: >-
            0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020
          gasPrice: '0'
          gasToken: '0x0000000000000000000000000000000000000000'
          nonce: '7'
          operation: 1
          refundReceiver: '0x0000000000000000000000000000000000000000'
          safeTxGas: '0'
          to: '0x93C23AAE4793C14D6DF35D2A2A2234204e1559dA'
          value: '0'
        primaryType: SafeTx
        types:
          EIP712Domain:
            - name: chainId
              type: uint256
            - name: verifyingContract
              type: address
          SafeTx:
            - name: to
              type: address
            - name: value
              type: uint256
            - name: data
              type: bytes
            - name: operation
              type: uint8
            - name: safeTxGas
              type: uint256
            - name: baseGas
              type: uint256
            - name: gasPrice
              type: uint256
            - name: gasToken
              type: address
            - name: refundReceiver
              type: address
            - name: nonce
              type: uint256
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    EarnSwapParams:
      properties:
        action_type:
          type: string
          const: V2_SWAP
          title: Action Type
          description: Action type identifier for swap operations.
          default: V2_SWAP
        token_in:
          type: string
          title: Token
          description: >-
            Token to sell (input). Provide a token symbol from a limited set
            (e.g., 'USDC') or any token address.
          examples:
            - USDC
            - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        token_out:
          type: string
          title: Token
          description: >-
            Token to buy (output). Provide a token symbol from a limited set
            (e.g., 'USDT') or any token address.
          examples:
            - USDT
            - '0xdAC17F958D2ee523a2206206994597C13D831ec7'
        amount_in:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount In
          description: Human-readable amount of `token_in` to swap (token units, not wei).
          examples:
            - 1.5
        slippage:
          anyOf:
            - type: number
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Slippage
          description: Maximum slippage tolerance as a percentage (e.g., 0.5 = 0.5%).
          default: '0.5'
          examples:
            - 0.5
      type: object
      required:
        - token_in
        - token_out
        - amount_in
      title: EarnSwapParams
      description: |-
        Parameters for swap operations (without context like owner/chain).

        Used by multicall/bundle endpoint to specify swap actions.
    EarnManageParams:
      properties:
        action_type:
          type: string
          const: V2_MANAGE
          title: Action Type
          description: Action type identifier for manage operations.
          default: V2_MANAGE
        venue:
          oneOf:
            - $ref: '#/components/schemas/VaultVenue'
            - $ref: '#/components/schemas/AaveVenue'
            - $ref: '#/components/schemas/PendlePTVenue'
          title: Venue
          description: The earn venue.
          discriminator:
            propertyName: type
            mapping:
              AAVE:
                $ref: '#/components/schemas/AaveVenue'
              PENDLE_PT:
                $ref: '#/components/schemas/PendlePTVenue'
              VAULT:
                $ref: '#/components/schemas/VaultVenue'
        action:
          type: string
          enum:
            - DEPOSIT
            - WITHDRAW
          title: Action
          description: >-
            Whether you are depositing into or withdrawing from the given Earn
            `venue`.
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: >-
            Amount of the underlying asset to act on (deposit or withdraw). For
            VAULT, this is the vault's underlying token; for AAVE, this is the
            Aave reserve asset; for PENDLE_PT, this is the amount of `token` to
            spend (DEPOSIT) or PT to sell (WITHDRAW). Provide as a decimal in
            token units (not wei); must be > 0.
          examples:
            - 0.1
            - 1
            - 100.001
        fee:
          anyOf:
            - $ref: '#/components/schemas/Fee'
            - type: 'null'
          description: >-
            Optional fee configuration. If provided, a fee will be applied to
            the transaction amount and sent to the specified recipient address.
            The fee can be specified as a percentage of the transaction amount,
            as a fixed token amount, or as a percentage of realized profit
            (PERFORMANCE).
      type: object
      required:
        - venue
        - action
        - amount
      title: EarnManageParams
      description: >-
        Parameters for earn manage operations (deposit/withdraw to
        vault/Aave/Pendle PT).


        Used by multicall/bundle endpoint to specify manage actions.
        EarnManageRequest

        inherits from this class.
    EarnTransferFromEOAParams:
      properties:
        action_type:
          type: string
          const: V2_TRANSFER_FROM_EOA
          title: Action Type
          description: Action type identifier for EOA-to-Earn-Account transfer operations.
          default: V2_TRANSFER_FROM_EOA
        token:
          type: string
          title: Token
          description: The token to transfer from EOA to Earn Account.
          examples:
            - USDC
            - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: The amount of tokens to transfer (in token units, not wei).
          examples:
            - 100
            - 1.5
        permit2_signature:
          type: string
          title: Permit2 Signature
          description: >-
            The EOA owner's signature of the Permit2 PermitTransferFrom typed
            data. Obtain this by calling /v2/earn/transfer with action=DEPOSIT
            and gas_sponsorship=True, then signing the returned EIP-712 data
            with the owner's wallet.
          examples:
            - 0x...
        permit2_nonce:
          type: integer
          minimum: 0
          title: Permit2 Nonce
          description: >-
            The nonce used in the Permit2 signature (from the signed typed
            data).
          examples:
            - 1706000000
        permit2_deadline:
          type: integer
          minimum: 0
          title: Permit2 Deadline
          description: >-
            The deadline timestamp used in the Permit2 signature (from the
            signed typed data).
          examples:
            - 1706001800
      type: object
      required:
        - token
        - amount
        - permit2_signature
        - permit2_nonce
        - permit2_deadline
      title: EarnTransferFromEOAParams
      description: >-
        Parameters for transferring tokens from EOA to Earn Account via Permit2.


        Used by multicall/bundle endpoint to pull tokens from the owner's EOA

        into their Earn Account (Safe) as part of an atomic bundle transaction.


        The owner must have:

        1. Previously approved Permit2 for the token (one-time setup via
        /gas_sponsorship/approve_transfer)

        2. Signed a Permit2 message with spender = Earn Account address


        The signature is obtained by first calling /v2/earn/transfer with
        action=DEPOSIT

        and gas_sponsorship=True, then signing the returned EIP-712 typed data.
    EarnTransferToEOAParams:
      properties:
        action_type:
          type: string
          const: V2_TRANSFER_TO_EOA
          title: Action Type
          description: Action type identifier for Earn-Account-to-EOA transfer operations.
          default: V2_TRANSFER_TO_EOA
        token:
          type: string
          title: Token
          description: The token to transfer from Earn Account to EOA.
          examples:
            - USDC
            - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: The amount of tokens to transfer (in token units, not wei).
          examples:
            - 100
            - 1.5
      type: object
      required:
        - token
        - amount
      title: EarnTransferToEOAParams
      description: >-
        Parameters for transferring tokens from Earn Account to EOA
        (withdrawal).


        Used by multicall/bundle endpoint to send tokens from the Earn Account
        (Safe) back

        to the owner's EOA as part of an atomic bundle transaction.


        No signature is required for this action since the Safe already owns the
        tokens and

        is executing the transfer as part of its own transaction.
    EarnTransferToAddressParams:
      properties:
        action_type:
          type: string
          const: V2_TRANSFER_TO_ADDRESS
          title: Action Type
          description: >-
            Action type identifier for product-account-to-arbitrary-address
            transfer operations.
          default: V2_TRANSFER_TO_ADDRESS
        token:
          type: string
          title: Token
          description: The ERC20 token to transfer from the product account.
          examples:
            - USDC
            - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: The amount of tokens to transfer (in token units, not wei).
          examples:
            - 100
            - 1.5
        recipient:
          type: string
          title: Recipient
          description: The destination address to receive the tokens.
      type: object
      required:
        - token
        - amount
        - recipient
      title: EarnTransferToAddressParams
      description: >-
        Parameters for transferring tokens from product account to an arbitrary
        address.


        Used by multicall/bundle endpoint to send ERC20 tokens from the product
        account

        to any specified recipient address as part of an atomic bundle
        transaction.


        No signature is required for this action since the product account
        already owns

        the tokens and is executing the transfer as part of its own transaction.
    compass__api_backend__v2__models__safe__transact__response__batched_safe_operations__EIP712Domain:
      properties:
        chainId:
          type: integer
          title: Chainid
          description: Chain ID
        verifyingContract:
          type: string
          title: Verifyingcontract
          description: Address of the Product Account
      type: object
      required:
        - chainId
        - verifyingContract
      title: EIP712Domain
      description: The EIP-712 domain separator.
    compass__api_backend__v2__models__safe__transact__response__batched_safe_operations__EIP712Types:
      properties:
        EIP712Domain:
          items:
            $ref: '#/components/schemas/EIP712DomainField'
          type: array
          title: Eip712Domain
          description: EIP712Domain type definition
        SafeTx:
          items:
            $ref: '#/components/schemas/SafeTxField'
          type: array
          title: Safetx
          description: SafeTx type definition
      type: object
      required:
        - EIP712Domain
        - SafeTx
      title: EIP712Types
      description: The type definitions for EIP-712 structured data.
    SafeTxMessage:
      properties:
        to:
          type: string
          title: To
          description: Destination address
        value:
          type: string
          title: Value
          description: Value in wei as a string
        data:
          type: string
          title: Data
          description: Transaction data as hex string
        operation:
          $ref: '#/components/schemas/OperationType'
          description: Operation type (0=Call, 1=DelegateCall)
        safeTxGas:
          type: string
          title: Safetxgas
          description: Gas for the transaction
        baseGas:
          type: string
          title: Basegas
          description: Base gas costs
        gasPrice:
          type: string
          title: Gasprice
          description: Gas price
        gasToken:
          type: string
          title: Gastoken
          description: Token address for gas payment
        refundReceiver:
          type: string
          title: Refundreceiver
          description: Address to receive gas refund
        nonce:
          type: string
          title: Nonce
          description: Transaction nonce
      type: object
      required:
        - to
        - value
        - data
        - operation
        - safeTxGas
        - baseGas
        - gasPrice
        - gasToken
        - refundReceiver
        - nonce
      title: SafeTxMessage
      description: The message data for the transaction.
    VaultVenue:
      properties:
        type:
          type: string
          const: VAULT
          title: Type
          description: The venue type discriminator.
          examples:
            - VAULT
            - AAVE
            - PENDLE_PT
        vault_address:
          type: string
          title: Vault Address
          description: The vault address you are interacting with for this action.
          examples:
            - '0xBEEF01735c132Ada46AA9aA4c54623cAA92A64CB'
      additionalProperties: false
      type: object
      required:
        - type
        - vault_address
      title: VaultVenue
    AaveVenue:
      properties:
        type:
          type: string
          const: AAVE
          title: Type
          description: The venue type discriminator.
          examples:
            - VAULT
            - AAVE
            - PENDLE_PT
        token:
          type: string
          title: Token
          description: The reserve token for the Aave pool you are interacting with.
          examples:
            - USDC
            - '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
      additionalProperties: false
      type: object
      required:
        - type
        - token
      title: AaveVenue
    PendlePTVenue:
      properties:
        type:
          type: string
          const: PENDLE_PT
          title: Type
          description: The venue type discriminator.
          examples:
            - VAULT
            - AAVE
            - PENDLE_PT
        market_address:
          type: string
          title: Market Address
          description: The Pendle market address identifying which PT to trade.
          examples:
            - '0x08a152834de126d2ef83d612ff36e4523fd0017f'
        token:
          anyOf:
            - type: string
              title: Token
              description: >-
                A token identifier - either a supported symbol (e.g., USDC,
                WETH) or a valid Ethereum address (0x...)
              examples:
                - USDC
                - WETH
                - '0xA0b86a33E6441ccF30EE5DdEF1E9b652C91ac1c8'
            - type: 'null'
          title: Token
          description: >-
            The token to exchange for PT (only used for DEPOSIT/buy). For
            WITHDRAW/sell, this field must not be provided - withdrawals always
            return the underlying asset to ensure accurate yield fee
            calculation.
          examples:
            - USDC
            - '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'
        max_slippage_percent:
          type: number
          maximum: 10
          minimum: 0
          title: Max Slippage Percent
          description: Maximum slippage allowed in percent (e.g., 1 means 1% slippage).
          default: 1
          examples:
            - 0.5
            - 1
            - 2
      additionalProperties: false
      type: object
      required:
        - type
        - market_address
      title: PendlePTVenue
      description: Venue for Pendle Principal Token (PT) positions.
    Fee:
      properties:
        recipient:
          type: string
          title: Recipient
          description: The wallet address that will receive the fee.
          examples:
            - '0xb8340945eBc917D2Aa0368a5e4E79C849c461511'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: >-
            The fee amount. If `denomination` is 'PERCENTAGE', this is a
            percentage of the transaction amount (e.g., 1.5 for 1.5%). If
            `denomination` is 'FIXED', this is a fixed amount in token units
            (e.g., 0.1 for 0.1 tokens). If `denomination` is 'PERFORMANCE', this
            is a percentage of realized profit calculated using FIFO cost basis
            (e.g., 10 for 10% of profit).
          examples:
            - 1.5
            - 0.1
            - 10
        denomination:
          type: string
          enum:
            - PERCENTAGE
            - FIXED
            - PERFORMANCE
          title: Denomination
          description: >-
            The unit type for the fee amount. Use 'PERCENTAGE' for a
            percentage-based fee (e.g., 1.5 means 1.5% of the transaction
            amount), 'FIXED' for a fixed token amount (e.g., 0.1 means 0.1
            tokens), or 'PERFORMANCE' for a fee based on realized profit using
            FIFO cost basis (e.g., 10 means 10% of profit).
          default: PERCENTAGE
          examples:
            - PERCENTAGE
            - FIXED
            - PERFORMANCE
      additionalProperties: false
      type: object
      required:
        - recipient
        - amount
      title: Fee
    EIP712DomainField:
      properties:
        name:
          type: string
          title: Name
        type:
          type: string
          title: Type
      type: object
      required:
        - name
        - type
      title: EIP712DomainField
      description: A field in the EIP712Domain type definition.
    SafeTxField:
      properties:
        name:
          type: string
          title: Name
        type:
          type: string
          title: Type
      type: object
      required:
        - name
        - type
      title: SafeTxField
      description: A field in the SafeTx type definition.
    OperationType:
      type: integer
      enum:
        - 0
        - 1
      title: OperationType
      description: Safe operation types.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your Compass API Key. Get your key
        [here](https://www.compasslabs.ai/dashboard).

````