---
title: "POST /swap"
method: POST
path: "/swap"
---

# POST /swap

`POST /swap`

Returns a transaction that you can use from the quote you get from `/quote`.

## Request body

- SwapRequest
  - `userPublicKey` string, required — The user public key.
  - `wrapAndUnwrapSol` boolean — Default is true. If true, will automatically wrap/unwrap SOL. If false, it will use wSOL token account. Will be ignored if `destinationTokenAccount` is set because the `destinationTokenAccount` may belong to a different user that we have no authority to close.
  - `useSharedAccounts` boolean — Default is true. This enables the usage of shared program accountns. That means no intermediate token accounts or open orders accounts need to be created for the users. But it also means that the likelihood of hot accounts is higher.
  - `feeAccount` string — Fee token account for the output token, it is derived using the seeds = ["referral_ata", referral_account, mint] and the `REFER4ZgmyYx9c6He5XfaTMiGfdLwRnkV4RPp9t9iF3` referral contract (only pass in if you set a `platformFeeBps` in `/quote` and make sure that the feeAccount has been created).
  - `computeUnitPriceMicroLamports` unknown
  - `prioritizationFeeLamports` unknown
  - `asLegacyTransaction` boolean — Default is false. Request a legacy transaction rather than the default versioned transaction, needs to be paired with a quote using asLegacyTransaction otherwise the transaction might be too large.
  - `restrictIntermediateTokens` boolean — Restrict intermediate tokens to a top token set that has stable liquidity. This will help to ease potential high slippage error rate when swapping with minimal impact on pricing.
  - `useTokenLedger` boolean — Default is false. This is useful when the instruction before the swap has a transfer that increases the input token amount. Then, the swap will just use the difference between the token ledger token amount and post token amount.
  - `destinationTokenAccount` string — Public key of the token account that will be used to receive the token out of the swap. If not provided, the user's ATA will be used. If provided, we assume that the token account is already initialized.
  - `dynamicComputeUnitLimit` boolean — When enabled, it will do a swap simulation to get the compute unit used and set it in ComputeBudget's compute unit limit. This will increase latency slightly since there will be one extra RPC call to simulate this. Default is `false`.
  - `skipUserAccountsRpcCalls` boolean — When enabled, it will not do any rpc calls check on user's accounts. Enable it only when you already setup all the accounts needed for the trasaction, like wrapping or unwrapping sol, destination account is already created.
  - `quoteResponse` QuoteResponse, required
    - `inputMint` string, required
    - `inAmount` string, required
    - `outputMint` string, required
    - `outAmount` string, required
    - `otherAmountThreshold` string, required
    - `swapMode` 'ExactIn' | 'ExactOut', required
    - `slippageBps` integer, required
    - `platformFee` PlatformFee
      - `amount` string
      - `feeBps` integer
    - `priceImpactPct` string, required
    - `routePlan` RoutePlanStep[], required
      - `swapInfo` SwapInfo, required
        - `ammKey` string, required
        - `label` string
        - `inputMint` string, required
        - `outputMint` string, required
        - `inAmount` string, required
        - `outAmount` string, required
        - `feeAmount` string, required
        - `feeMint` string, required
      - `percent` integer, required
    - `contextSlot` number
    - `timeTaken` number

## Response `200`

Successful response

- SwapResponse
  - `swapTransaction` string, required
  - `lastValidBlockHeight` number, required
  - `prioritizationFeeLamports` number

## Changes

- **2023-12-27** `194dfbeeaeff` — 2 info
  - added the new optional request property `skipUserAccountsRpcCalls`
  - added the optional property `prioritizationFeeLamports` to the response with the `200` status
- **2023-12-19** `4920fcf26458` — 2 breaking, 1 info
  - the `computeUnitPriceMicroLamports` request property type changed from `integer` to `integer, string`
  - the `prioritizationFeeLamports` request property type changed from `integer` to `integer, string`
  - added the new optional request property `restrictIntermediateTokens`
- **2023-12-11** `07f4d2386dec` — 5 info
  - added the new optional request property `prioritizationFeeLamports`
  - the `asLegacyTransaction` request property default value `false` was added
  - the `useSharedAccounts` request property default value `true` was added
  - the `useTokenLedger` request property default value `false` was added
  - …1 more
- **2023-12-07** `818caf41b884` — 8 breaking, 10 warning, 8 info
  - added the new required request property `quoteResponse/routePlan/items/swapInfo/feeAmount`
  - added the new required request property `quoteResponse/routePlan/items/swapInfo/feeMint`
  - the request property `quoteResponse/routePlan/items/percent` became not nullable
  - the request property `quoteResponse/routePlan/items/percent` became required
  - …22 more

[Change history](https://skmtc.dev/jup-ag/apis/swap-api/changes/swap/post.md)

---

[API](https://skmtc.dev/jup-ag/apis/swap-api.md) · [All operations](https://skmtc.dev/jup-ag/apis/swap-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/jup-ag/swap-api/revisions/194dfbeeaeff/schema)
