> ## 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 credit actions

> Compose individual credit operations (supply, withdraw, borrow, repay, swap, transfer)
into a single atomic Safe transaction.

The Credit Account must already be created via `/v2/credit/create_account`.



## OpenAPI

````yaml /v2/combined_spec.json post /v2/credit/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/credit/bundle:
    post:
      tags:
        - Credit
      summary: Execute multiple credit actions
      description: >-
        Compose individual credit operations (supply, withdraw, borrow, repay,
        swap, transfer)

        into a single atomic Safe transaction.


        The Credit Account must already be created via
        `/v2/credit/create_account`.
      operationId: v2_credit_bundle
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditBundleRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditBundleResponse'
        '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.credit.credit_bundle(owner="<value>", chain=models.CreditBundleRequestChain.HYPEREVM, actions=[
                    models.CreditUserOperation(
                        body=models.EarnTransferFromEOAParams(
                            token="<value>",
                            amount="709.93",
                            permit2_signature="<value>",
                            permit2_nonce=210517,
                            permit2_deadline=120606,
                        ),
                    ),
                ], 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.credit.creditBundle({
                owner: "<value>",
                chain: "hyperevm",
                actions: [
                  {
                    body: {
                      actionType: "V2_TRANSFER_FROM_EOA",
                      token: "<value>",
                      amount: "709.93",
                      permit2Signature: "<value>",
                      permit2Nonce: 210517,
                      permit2Deadline: 120606,
                    },
                  },
                ],
                gasSponsorship: false,
              });

              console.log(result);
            }

            run();
components:
  schemas:
    CreditBundleRequest:
      properties:
        owner:
          type: string
          title: Owner
          description: The owner's wallet address that controls the Credit Account.
        chain:
          type: string
          enum:
            - arbitrum
            - base
            - bsc
            - ethereum
            - hyperevm
            - tempo
          title: Chain
          description: Target blockchain network where the bundled actions will execute.
        actions:
          items:
            $ref: '#/components/schemas/CreditUserOperation'
          type: array
          maxItems: 20
          minItems: 1
          title: Actions
          description: List of actions to bundle. Actions are executed in order.
        gas_sponsorship:
          type: boolean
          title: Gas Sponsorship
          description: If true, returns EIP-712 typed data for gas-sponsored execution.
          default: false
      type: object
      required:
        - owner
        - chain
        - actions
      title: CreditBundleRequest
      description: >-
        Request to execute multiple credit actions in a single atomic
        transaction.
    CreditBundleResponse:
      properties:
        transaction:
          anyOf:
            - $ref: '#/components/schemas/UnsignedTransaction'
            - type: 'null'
          description: >-
            Unsigned transaction for direct execution by the owner. Present when
            gas_sponsorship=false.
          example:
            chainId: '0x2105'
            data: 0x6a761202000000000000000000000000...
            from: '0xc98949522db2eE403d6c75E91DDEe875a824bB10'
            gas: '0xdbba0'
            maxFeePerGas: '0x3b9aca00'
            maxPriorityFeePerGas: '0x5f5e100'
            nonce: '0x2e'
            to: '0xaB5801a7D398351b8bE11C439e05C5B3259aeC9B'
            value: '0x0'
        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.
          example: 3
      type: object
      required:
        - actions_count
      title: CreditBundleResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    CreditUserOperation:
      properties:
        body:
          oneOf:
            - $ref: '#/components/schemas/EarnSwapParams'
            - $ref: '#/components/schemas/EarnTransferFromEOAParams'
            - $ref: '#/components/schemas/EarnTransferToEOAParams'
            - $ref: '#/components/schemas/CreditSupplyParams'
            - $ref: '#/components/schemas/CreditWithdrawParams'
            - $ref: '#/components/schemas/CreditBorrowParams'
            - $ref: '#/components/schemas/CreditRepayParams'
            - $ref: '#/components/schemas/CreditEnableCollateralParams'
            - $ref: '#/components/schemas/CreditTransferToAddressParams'
          discriminator:
            propertyName: action_type
            mapping:
              CREDIT_BORROW:
                $ref: '#/components/schemas/CreditBorrowParams'
              CREDIT_ENABLE_COLLATERAL:
                $ref: '#/components/schemas/CreditEnableCollateralParams'
              CREDIT_REPAY:
                $ref: '#/components/schemas/CreditRepayParams'
              CREDIT_SUPPLY:
                $ref: '#/components/schemas/CreditSupplyParams'
              CREDIT_TRANSFER_TO_ADDRESS:
                $ref: '#/components/schemas/CreditTransferToAddressParams'
              CREDIT_WITHDRAW:
                $ref: '#/components/schemas/CreditWithdrawParams'
              V2_SWAP:
                $ref: '#/components/schemas/EarnSwapParams'
              V2_TRANSFER_FROM_EOA:
                $ref: '#/components/schemas/EarnTransferFromEOAParams'
              V2_TRANSFER_TO_EOA:
                $ref: '#/components/schemas/EarnTransferToEOAParams'
      type: object
      required:
        - body
      title: CreditUserOperation
      description: A single operation in a credit 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.
    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.
    CreditSupplyParams:
      properties:
        action_type:
          type: string
          const: CREDIT_SUPPLY
          title: Action Type
          default: CREDIT_SUPPLY
        token:
          type: string
          title: Token
          description: Collateral token to supply.
          examples:
            - USDC
            - WETH
            - '0xA0b86a33E6441ccF30EE5DdEF1E9b652C91ac1c8'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: Amount in token units to supply.
        protocol:
          $ref: '#/components/schemas/CreditProtocol'
          description: Lending protocol to use. Defaults to Aave.
          default: AAVE
        collateral_vault:
          anyOf:
            - type: string
            - type: 'null'
          title: Collateral Vault
          description: >-
            Euler only: the EVK collateral vault to supply into. Required when
            protocol=EULER.
        sub_account_id:
          type: integer
          maximum: 255
          minimum: 0
          title: Sub Account Id
          description: >-
            Euler only: EVC sub-account (0–255) to isolate this position. Each
            sub-account is an independent Euler position with its own
            collateral, borrow controller, and health. Defaults to 0. Ignored
            for Aave/Morpho.
          default: 0
        market_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Market Id
          description: >-
            Morpho only: the bytes32 market id (from /v2/credit/morpho_markets).
            Required when protocol=MORPHO.
      type: object
      required:
        - token
        - amount
      title: CreditSupplyParams
      description: Supply collateral to Aave via Credit Account.
    CreditWithdrawParams:
      properties:
        action_type:
          type: string
          const: CREDIT_WITHDRAW
          title: Action Type
          default: CREDIT_WITHDRAW
        token:
          type: string
          title: Token
          description: Collateral token to withdraw.
          examples:
            - USDC
            - WETH
            - '0xA0b86a33E6441ccF30EE5DdEF1E9b652C91ac1c8'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: Amount in token units to withdraw.
        protocol:
          $ref: '#/components/schemas/CreditProtocol'
          description: Lending protocol to use. Defaults to Aave.
          default: AAVE
        collateral_vault:
          anyOf:
            - type: string
            - type: 'null'
          title: Collateral Vault
          description: >-
            Euler only: the EVK collateral vault to withdraw from. Required when
            protocol=EULER.
        sub_account_id:
          type: integer
          maximum: 255
          minimum: 0
          title: Sub Account Id
          description: >-
            Euler only: EVC sub-account (0–255) holding the collateral to
            withdraw. Each sub-account is an independent Euler position with its
            own collateral, borrow controller, and health. Defaults to 0.
            Ignored for Aave/Morpho.
          default: 0
        market_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Market Id
          description: >-
            Morpho only: the bytes32 market id (from /v2/credit/morpho_markets).
            Required when protocol=MORPHO.
      type: object
      required:
        - token
        - amount
      title: CreditWithdrawParams
      description: Withdraw collateral from Aave via Credit Account.
    CreditBorrowParams:
      properties:
        action_type:
          type: string
          const: CREDIT_BORROW
          title: Action Type
          default: CREDIT_BORROW
        token:
          type: string
          title: Token
          description: Token to borrow from Aave.
          examples:
            - USDC
            - WETH
            - '0xA0b86a33E6441ccF30EE5DdEF1E9b652C91ac1c8'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: Amount in token units to borrow.
        interest_rate_mode:
          $ref: '#/components/schemas/InterestRateMode'
          description: 'Interest rate mode: STABLE or VARIABLE.'
          default: variable
        fee:
          anyOf:
            - $ref: '#/components/schemas/CreditFee'
            - type: 'null'
          description: Optional fee on the borrowed amount.
        protocol:
          $ref: '#/components/schemas/CreditProtocol'
          description: Lending protocol to use. Defaults to Aave.
          default: AAVE
        borrow_vault:
          anyOf:
            - type: string
            - type: 'null'
          title: Borrow Vault
          description: >-
            Euler only: the EVK vault to borrow from. Required when
            protocol=EULER.
        sub_account_id:
          type: integer
          maximum: 255
          minimum: 0
          title: Sub Account Id
          description: >-
            Euler only: EVC sub-account (0–255) to borrow against. Each
            sub-account is an independent Euler position with its own
            collateral, borrow controller, and health. Defaults to 0. Ignored
            for Aave/Morpho.
          default: 0
        market_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Market Id
          description: >-
            Morpho only: the bytes32 market id (from /v2/credit/morpho_markets).
            Required when protocol=MORPHO.
      type: object
      required:
        - token
        - amount
      title: CreditBorrowParams
      description: Borrow from Aave via Credit Account.
    CreditRepayParams:
      properties:
        action_type:
          type: string
          const: CREDIT_REPAY
          title: Action Type
          default: CREDIT_REPAY
        token:
          type: string
          title: Token
          description: Token to repay.
          examples:
            - USDC
            - WETH
            - '0xA0b86a33E6441ccF30EE5DdEF1E9b652C91ac1c8'
        amount:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Amount
          description: Amount in token units to repay.
        interest_rate_mode:
          $ref: '#/components/schemas/InterestRateMode'
          description: 'Interest rate mode: STABLE or VARIABLE.'
          default: variable
        protocol:
          $ref: '#/components/schemas/CreditProtocol'
          description: Lending protocol to use. Defaults to Aave.
          default: AAVE
        borrow_vault:
          anyOf:
            - type: string
            - type: 'null'
          title: Borrow Vault
          description: >-
            Euler only: the EVK vault the debt is owed to. Required when
            protocol=EULER.
        sub_account_id:
          type: integer
          maximum: 255
          minimum: 0
          title: Sub Account Id
          description: >-
            Euler only: EVC sub-account (0–255) holding the debt to repay. Each
            sub-account is an independent Euler position with its own
            collateral, borrow controller, and health. Defaults to 0. Ignored
            for Aave/Morpho.
          default: 0
        market_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Market Id
          description: >-
            Morpho only: the bytes32 market id (from /v2/credit/morpho_markets).
            Required when protocol=MORPHO.
      type: object
      required:
        - token
        - amount
      title: CreditRepayParams
      description: Repay debt to Aave via Credit Account.
    CreditEnableCollateralParams:
      properties:
        action_type:
          type: string
          const: CREDIT_ENABLE_COLLATERAL
          title: Action Type
          default: CREDIT_ENABLE_COLLATERAL
        token:
          type: string
          title: Token
          description: >-
            The underlying reserve token to enable as collateral (e.g. USDC, not
            aUSDC).
          examples:
            - USDC
            - WETH
            - '0xA0b86a33E6441ccF30EE5DdEF1E9b652C91ac1c8'
        protocol:
          $ref: '#/components/schemas/CreditProtocol'
          description: Lending protocol to use. Defaults to Aave.
          default: AAVE
        collateral_vault:
          anyOf:
            - type: string
            - type: 'null'
          title: Collateral Vault
          description: >-
            Euler only: the EVK collateral vault to enable. Required when
            protocol=EULER.
        sub_account_id:
          type: integer
          maximum: 255
          minimum: 0
          title: Sub Account Id
          description: >-
            Euler only: EVC sub-account (0–255) to enable the collateral for.
            Each sub-account is an independent Euler position with its own
            collateral, borrow controller, and health. Defaults to 0. Ignored
            for Aave/Morpho.
          default: 0
      type: object
      required:
        - token
      title: CreditEnableCollateralParams
      description: >-
        Enable a reserve asset as collateral in Aave via Credit Account.


        Required after receiving aTokens via direct ERC-20 transfer (not via
        Pool.supply()),

        since Aave V3 does not auto-enable collateral for transferred aTokens.
    CreditTransferToAddressParams:
      properties:
        action_type:
          type: string
          const: CREDIT_TRANSFER_TO_ADDRESS
          title: Action Type
          default: CREDIT_TRANSFER_TO_ADDRESS
        token:
          type: string
          title: Token
          description: The ERC20 token to transfer from the Credit 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: CreditTransferToAddressParams
      description: |-
        Transfer tokens from Credit Account to an arbitrary address.

        Requires all debt positions to be fully repaid (totalDebtBase == 0)
        before the transfer is allowed.
    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.
    CreditProtocol:
      type: string
      enum:
        - AAVE
        - EULER
        - MORPHO
      title: CreditProtocol
      description: >-
        Which lending protocol a credit action targets.


        ``AAVE`` is the default so existing callers (which never send a
        ``protocol``

        field) keep hitting the unchanged Aave code path. ``MORPHO`` identifies
        Morpho

        Blue lending markets by their bytes32 ``market_id``. ``EULER``
        identifies Euler

        V2 markets by their EVK ``collateral_vault`` + ``borrow_vault``
        addresses and

        supports isolated per-sub-account positions (``sub_account_id``). All
        three

        support the loop/unloop leverage endpoints.
    InterestRateMode:
      type: string
      enum:
        - stable
        - variable
      title: InterestRateMode
      description: |-
        On AAVE there are 2 different interest modes.

        A stable (but typically higher rate), or a variable rate.
    CreditFee:
      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
          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 borrow amount), or
            'FIXED' for a fixed token amount (e.g., 0.1 means 0.1 tokens).
          default: PERCENTAGE
          examples:
            - PERCENTAGE
            - FIXED
      additionalProperties: false
      type: object
      required:
        - recipient
        - amount
      title: CreditFee
      description: >-
        Fee configuration for credit-product actions.


        Same shape as `Fee`, but narrows `denomination` to the values supported
        by

        credit borrows. PERFORMANCE is not supported because realized-profit
        fees

        are not meaningful for debt positions.
    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).

````