---
title: "Start a withdrawal transaction"
method: POST
path: "/withdraw/start"
tags: ["Execution"]
---

# Start a withdrawal transaction

`POST /withdraw/start`

This is the second and final step in the withdrawal flow. The expected input is the full output of `/withdraw/calculate`. The selected route should be first, or only, route in the `liq.route.routes` array. The response of this endpoint will provide the transaction data and relevant metadata to execute the transaction onchain. 
 > **Note**: if the `approval_data` field is not empty, the user must first approve the token transfer before executing the transaction.

## Request body

- StartRouteInput[]
  - `in` QuoteParams, required
    - `adjusted_amount` string
    - `amount_in` string — Amount of the token to be deposited
    - `bridge_slippage` integer — Slippage taken on bridge action in bps, between 0.5% and 50%
    - `contract_address` string
    - `destination` string
    - `exclude_ambs` integer[] — List of AMB IDs to exclude from the route. See output of /supported for AMB IDs.
    - `exclude_bridges` integer[] — List of bridge IDs to exclude from the route. See output of /supported for bridge IDs.
    - `exclude_dexes` integer[] — List of dex IDs to exclude from the route. See output of /supported for dex IDs.
    - `exclude_liquidity_providers` integer[] — List of liquidity provider IDs to exclude from the route. See output of /supported for liquidity provider IDs.
    - `filter_swap_routes` boolean — If true, any route that contains a destination swap will be filtered out. Reduces chances of a deposit failing due to route unavailability.
    - `form_implementation_id` string
    - `from_address` string
    - `from_amount` string
    - `from_chain_id` integer — Chain ID of the source chain
    - `from_token_address` string — Address of the source token
    - `gas_estimate` ChainGasEstimate
      - `estimated_seconds` integer, required
      - `gas_price_usd` string, required
    - `has_dst_swap` boolean
    - `is_erc20` boolean
    - `is_part_of_multi_vault` boolean — Flag to indicate if the request is part of a multi-vault deposit or withdrawal
    - `is_same_route` boolean
    - `is_x_chain` boolean
    - `max_slippage` integer
    - `method` string
    - `need_insurance` boolean — If true, only returns insurable routes.
    - `output_amount_for_withdraw` string
    - `output_amount_normalized` string
    - `permit2` string
    - `positive_slippage` integer — Swap surplus in bps, between 1% and 100%. See help.superform.xyz for more.
    - `refund_address` string — Address on the destination chain to which the refund should be made, if needed.
    - `retain_4626` boolean — Flag to indicate if the user wants to hold vault shares or not
    - `route_type` 'time' | 'output' | 'gas'
    - `superform_address` string
    - `superform_id` string — Must provide either vault_id or superform_id
    - `superpositions_amount_in` string — Amount of the superposition to be withdrawn
    - `superpositions_chain_id` integer
    - `swap_slippage` integer — Slippage taken on dex action in bps, between 0.5% and 50%
    - `to_chain_id` integer — Chain ID of the destination chain
    - `to_token_address` string — Address of the destination token
    - `transaction_type` string
    - `user_address` string, required
    - `vault_decimals` integer
    - `vault_id` string — Must provide either vault_id or superform_id
    - `vault_token` string
  - `liq` VaultRoute, required
    - `ok` boolean, required
    - `route_error` string
    - `routes` Route[]
      - `bridge` RouteBridge
        - `logo` string, required
        - `name` string, required
      - `bridge_id` integer, required
      - `cross_chain_fee` number, double, required
      - `dex` RouteDex
        - `logo` string, required
        - `name` string, required
      - `erc20_route_approval_target` string
      - `estimate_time` number, double, required
      - `from_address` string, required
      - `from_amount` string, required
      - `from_chain_id` integer, required
      - `from_token` RouteToken, required
        - `address` string, required
        - `chain_id` integer, required
        - `decimals` integer, required
        - `logo_uri` string
        - `name` string, required
        - `symbol` string, required
      - `gas_cost_usd` string, required
      - `has_swap` boolean, required
      - `insurable_route` boolean, required
      - `interim_token` string
      - `interim_token_amount` string
      - `is_erc20` boolean, required
      - `lifi_route_first_step` LifiRouteStep
        - `action` LifiAction, required
          - `fromAddress` string
          - `fromAmount` string, required
          - `fromChainId` integer, required
          - `fromToken` LifiToken, required
            - `address` string, required
            - `chainId` integer, required
            - `coinKey` string, required
            - `decimals` integer, required
            - `logoURI` string
            - `name` string, required
            - `priceUSD` unknown
            - `symbol` string, required
          - `slippage` number, double, required
          - `toAddress` string
          - `toChainId` integer, required
          - `toToken` LifiToken, required
            - `address` string, required
            - `chainId` integer, required
            - `coinKey` string, required
            - `decimals` integer, required
            - `logoURI` string
            - `name` string, required
            - `priceUSD` unknown
            - `symbol` string, required
        - `estimate` LifiEstimate, required
          - `approvalAddress` string, required
          - `executionDuration` number, double, required
          - `feeCosts` LiFiFee[]
            - `amount` string, required
            - `amountUSD` string, required
            - `description` string, required
            - `included` boolean, required
            - `name` string, required
            - `percentage` string, required
            - `token` LifiToken, required
              - …
          - `fromAmount` string, required
          - `fromAmountUSD` string, required
          - `gasCosts` GasCostItem[]
            - `amount` string, required
            - `amountUSD` string, required
            - `estimate` string, required
            - `limit` string, required
            - `price` string, required
            - `token` LifiToken, required
              - …
            - `type` string, required
          - `toAmount` string, required
          - `toAmountMin` string, required
          - `toAmountUSD` string, required
          - `tool` string, required
          - `toolData` LifiEstimateToolDataStruct, required
            - `estimatedGas` integer, required
            - `fromToken` LifiToken, required
              - …
            - `fromTokenAmount` string, required
            - `protocols` array[]
              - …
            - `toToken` LifiToken, required
              - …
            - `toTokenAmount` string, required
        - `id` string, required
        - `includedSteps` Item[], required
          - `action` LifiAction, required
            - `fromAddress` string
            - `fromAmount` string, required
            - `fromChainId` integer, required
            - `fromToken` LifiToken, required
              - …
            - `slippage` number, double, required
            - `toAddress` string
            - `toChainId` integer, required
            - `toToken` LifiToken, required
              - …
          - `estimate` LifiEstimate, required
            - `approvalAddress` string, required
            - `executionDuration` number, double, required
            - `feeCosts` LiFiFee[]
              - …
            - `fromAmount` string, required
            - `fromAmountUSD` string, required
            - `gasCosts` GasCostItem[]
              - …
            - `toAmount` string, required
            - `toAmountMin` string, required
            - `toAmountUSD` string, required
            - `tool` string, required
            - `toolData` LifiEstimateToolDataStruct, required
              - …
          - `id` string, required
          - `tool` string, required
          - `toolDetails` ToolDetailsStruct, required
            - `key` string, required
            - `logoURI` string, required
            - `name` string, required
          - `type` string, required
        - `integrator` string, required
        - `routesRequestId` string, required
        - `tool` string, required
        - `toolDetails` LifiRouteStepToolDetailsStruct, required
          - `key` string, required
          - `logoURI` string, required
          - `name` string, required
        - `type` string, required
      - `route_id` string, byte, required
      - `service` RouteService
        - `logo` string, required
        - `name` string, required
      - `super_position` SuperPositionEstimate
        - `amount` string
        - `symbol` string
        - `usd_value` number, double
      - `to_address` string, required
      - `to_amount` string, required
      - `to_amount_min` string, required
      - `to_amount_usd` string, required
      - `to_chain_id` integer, required
      - `to_token` RouteToken, required
        - `address` string, required
        - `chain_id` integer, required
        - `decimals` integer, required
        - `logo_uri` string
        - `name` string, required
        - `symbol` string, required
    - `vault_id` string, required

## Response `200`

OK

- DepositResponse
  - `$schema` string, uri — A URL to the JSON Schema for this object.
  - `approval_data` WithdrawalApprovalData, required
    - `data` string, required
    - `to` string, required
    - `value` string, required
  - `data` string, required — Data to be sent in the transaction
  - `discount_percent` string, required
  - `discount_usd` string, required — Optional discount applied to some vaults during a promotion.
  - `fees_estimate` PaymentEstimate
    - `bridging_fee` Int, required
    - `dst_amount` Int, required
    - `liq_amount` Int, required
    - `src_amount` Int, required
    - `total_amount` Int, required
  - `method` string, required — Method to be called on the contract. This is for reference only, as method is encoded in the tx data below.
  - `original_fee_usd` string, required
  - `to` string, required — Address to which the deposit should be made
  - `value` string, required — Value to be sent in the transaction
  - `value_usd` string, required — Value to be sent in the transaction in USD

## Other responses

- `default` — Error

---

[API](https://skmtc.net/superform/apis/superform-api.md) · [All operations](https://skmtc.net/superform/apis/superform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/superform/superform-api/revisions/6eb27ced1c96/schema)
