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

# Withdraw

> Withdraw some or all supplied USDC from Aave V3 to the same wallet.



## OpenAPI

````yaml /openapi.yaml post /v1/wallets/{walletId}/yield/withdrawals
openapi: 3.0.3
info:
  title: Para REST API
  version: '1.0'
  description: Server-to-server wallet creation and signing over HTTP
servers:
  - url: https://api.beta.getpara.com
    description: Beta
  - url: https://api.getpara.com
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /v1/wallets/{walletId}/yield/withdrawals:
    post:
      tags:
        - Yield
      summary: Withdraw
      description: Withdraw some or all supplied USDC from Aave V3 to the same wallet.
      operationId: createYieldWithdrawal
      parameters:
        - $ref: '#/components/parameters/WalletId'
        - $ref: '#/components/parameters/RequestId'
        - name: Idempotency-Key
          in: header
          required: true
          description: >-
            Required durable key scoped to your API partner across yield
            operations. Reuse the same key and normalized request to retrieve or
            explicitly retry its operation. A different wallet, chain, action or
            amount returns 409. Unlike generic POST idempotency, this key is
            retained with the operation rather than expiring after 24 hours.
          schema:
            type: string
            minLength: 1
            maxLength: 256
            pattern: ^[\x21-\x7e]+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/YieldWithdrawalRequest'
      responses:
        '200':
          description: Existing terminal or paused operation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/YieldOperation'
        '202':
          description: Operation accepted or still processing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/YieldOperation'
          headers:
            Location:
              description: Relative URL for polling this operation.
              schema:
                type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: >-
            Wallet not ready, execution lock busy, or conflicting idempotency
            key. YIELD_DISABLED means Para has temporarily disabled new
            execution or paused deposits; reads and cancellation of eligible
            unsigned work remain available.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  parameters:
    WalletId:
      name: walletId
      in: path
      required: true
      description: Wallet UUID. A malformed or inaccessible wallet ID returns `404`.
      schema:
        type: string
        format: uuid
        example: 0a1b2c3d-4e5f-6789-abcd-ef0123456789
    RequestId:
      name: X-Request-Id
      in: header
      required: false
      description: UUID for request tracing. Para returns one if omitted.
      schema:
        type: string
        format: uuid
  schemas:
    YieldWithdrawalRequest:
      type: object
      properties:
        chainId:
          oneOf:
            - type: integer
              enum:
                - 1
                - 8453
                - 11155111
            - type: string
              enum:
                - '1'
                - '8453'
                - '11155111'
          description: >-
            Native USDC on Ethereum mainnet (1) or Base mainnet (8453), or Aave
            test USDC on Sepolia (11155111). Base uses native USDC, not USDbC.
            Mainnet chain IDs use real funds regardless of API environment.
        amount:
          oneOf:
            - type: string
              pattern: ^(0|[1-9]\d*)(\.\d{1,6})?$
              maxLength: 85
              description: >-
                Positive USDC amount in decimal units, not base units. At most
                six decimal places; zero is rejected.
              example: '10'
            - type: string
              enum:
                - all
      required:
        - chainId
        - amount
      additionalProperties: false
    YieldOperation:
      type: object
      properties:
        id:
          type: string
          format: uuid
        walletId:
          type: string
          format: uuid
        chainId:
          type: integer
          enum:
            - 1
            - 8453
            - 11155111
        source:
          type: string
          enum:
            - aave-v3
        action:
          type: string
          enum:
            - deposit
            - withdraw
        amount:
          type: string
          description: Normalized decimal USDC amount, or all for withdrawals.
          example: '10.0'
        status:
          type: string
          enum:
            - pending
            - submitted
            - confirmed
            - failed
            - requires_action
            - cancelled
          description: >-
            pending work automatically retries recognized temporary RPC failures
            before signing and waits for another yield operation on the same
            wallet. submitted can mean signed and durably stored even when RPC
            acceptance is uncertain. confirmed requires two confirmations of the
            canonical block; this is not finality. failed means an on-chain
            revert or NONCE_CONSUMED; it does not guarantee that no funds moved.
            requires_action needs an explicit retry after correcting the issue.
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/YieldTransaction'
        error:
          type: object
          properties:
            code:
              type: string
              description: >
                AAVE_SUPPLY_CAP_EXCEEDED means the deposit would exceed the Aave
                market supply cap.

                The operation is requires_action and no deposit was signed.
                Retry the same request

                after capacity is available, or cancel its unsigned work. A
                confirmed token approval remains.

                NONCE_CONSUMED means the saved nonce was consumed in a finalized
                block without a receipt

                for the original hash. Check the position and transaction
                history before creating a new request.
            message:
              type: string
              nullable: true
            reviewId:
              type: string
              description: Existing policy review identifier when approval is required.
          required:
            - code
            - message
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - walletId
        - chainId
        - source
        - action
        - amount
        - status
        - transactions
        - createdAt
        - updatedAt
    Error:
      type: object
      required:
        - code
        - message
      properties:
        code:
          type: string
          description: Machine-readable error code for programmatic handling
          example: INVALID_REQUEST
        message:
          type: string
          description: Human-readable error message
        transactionId:
          type: string
          format: uuid
          description: >-
            Persisted transaction record id. Present only when a broadcast
            request failed after a history row was created.
        failureStage:
          type: string
          enum:
            - mpc_sign
            - signature_apply
            - signer_verify
            - broadcast
            - monitor_timeout
          description: >-
            Which stage of the broadcast lifecycle failed. Present on persisted
            broadcast failures.
        failureCode:
          type: string
          description: >-
            Machine-readable failure reason from the underlying broadcast helper
            (e.g. `INSUFFICIENT_NATIVE_BALANCE`, `EXECUTION_FAILED`). Present on
            broadcast-stage failures.
        signedTransaction:
          type: string
          description: >-
            Signed transaction bytes. Present on broadcast failures that happen
            after signing completed.
      additionalProperties: true
      description: >
        All error responses include `code` and `message` fields. Some errors
        include extra fields (e.g. `walletId` on 409 Conflict).

        Broadcast failures that occur after a persisted transaction row is
        created include `transactionId`,

        `failureStage`, and (on broadcast-stage failures) `failureCode`, and
        also set the `x-transaction-id`

        response header. If signing completed before the failure,
        `signedTransaction` is included so callers

        can inspect or retry the already-signed bytes.


        Common error codes: `INVALID_REQUEST`, `UNAUTHORIZED`, `FORBIDDEN`,
        `NOT_FOUND`, `CONFLICT`, `WALLET_ALREADY_EXISTS`,
        `WALLET_ALREADY_CLAIMED`, `RATE_LIMITED`, `INTERNAL_ERROR`.
    YieldTransaction:
      type: object
      properties:
        phase:
          type: string
          enum:
            - approval
            - action
        hash:
          type: string
        nonce:
          type: integer
          minimum: 0
        transactionId:
          type: string
          format: uuid
          description: Corresponding transaction history record; intentKind is yield.
        status:
          type: string
          enum:
            - signed
            - submitted
            - confirmed
            - reverted
            - failed
          description: >-
            failed means the saved nonce was consumed in a finalized block
            without a receipt for this hash. The original signed bytes cannot
            execute again; check the position and transaction history before
            creating a new request.
        blockNumber:
          type: integer
        blockHash:
          type: string
      required:
        - phase
        - hash
        - nonce
        - transactionId
        - status
  responses:
    BadRequest:
      description: Invalid request body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: INVALID_REQUEST
            message: type must be one of EVM, SOLANA, COSMOS, STELLAR, SUI
    Unauthorized:
      description: API key not provided
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: UNAUTHORIZED
            message: secret api key not provided
    Forbidden:
      description: Invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: FORBIDDEN
            message: invalid secret api key
    NotFound:
      description: Wallet not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: NOT_FOUND
            message: wallet not found
    TooManyRequests:
      description: Rate limit exceeded
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds until the rate limit window resets
          example: 60
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: RATE_LIMITED
            message: Rate limit exceeded, try again shortly.
    ServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: INTERNAL_ERROR
            message: Internal Server Error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your partner secret key (server-side only)
      x-default: sk_your_secret_key_here

````