> ## Documentation Index
> Fetch the complete documentation index at: https://sequence-0fb8d9e6-6256-forte-config.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Unreal Currency Swaps

> Documentation for Unreal SDK overview for the Sequence infrastructure stack for web3 gaming.

Swapping between different ERC20/native token currencies on a given Chain is made easy by Sequence's Smart Swap API.

Please make sure that your token pair has enough liquidity on a supported exchange such as UniSwap.
Checkout this guide on [how to add liquidity on UniSwap.](https://support.uniswap.org/hc/en-us/articles/7423194619661-How-to-add-liquidity-to-Uniswap-v3)

## Get Swap Price

Query the swap price for a given token pair.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-6256-forte-config/UyC2WO2yyskLI4IH/images/unreal/get_swap_price.png?fit=max&auto=format&n=UyC2WO2yyskLI4IH&q=85&s=5e13037a0025e212e84de793cbf89989" width="2074" height="1104" data-path="images/unreal/get_swap_price.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqSwapPrice> OnApiSuccess = [this, OnSuccess](const FSeqSwapPrice& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapPrice(SequenceSdk::GetChainId(), WalletAddress, SellCurrency, BuyCurrency, BuyAmount, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Swap Prices

Query swap prices for the token your user wants to receive.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-6256-forte-config/UyC2WO2yyskLI4IH/images/unreal/get_swap_prices.png?fit=max&auto=format&n=UyC2WO2yyskLI4IH&q=85&s=f0824b043fd63e6ac1357ae150ba4ee0" width="2074" height="1104" data-path="images/unreal/get_swap_prices.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<TArray<FSeqSwapPrice>> OnApiSuccess = [this, OnSuccess](const TArray<FSeqSwapPrice>& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapPrices(SequenceSdk::GetChainId(), WalletAddress, BuyCurrency, BuyAmount, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Swap Quote

After checking the swap price, get your approval and transaction data needed to build your transaction.
Make sure you only define `Sell Amount` or `Buy Amount` and not both.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-6256-forte-config/UyC2WO2yyskLI4IH/images/unreal/get_swap_quote.png?fit=max&auto=format&n=UyC2WO2yyskLI4IH&q=85&s=c9be9069b929466a30c688f413b731ac" width="2182" height="1224" data-path="images/unreal/get_swap_quote.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqSwapQuote> OnApiSuccess = [this, OnSuccess](const FSeqSwapQuote& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapQuote(SequenceSdk::GetChainId(), WalletAddress, BuyCurrency, SellCurrency, BuyAmount, SellAmount, IncludeApprove, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Supported Swap Chains

Returns the list of chains supported for swapping.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-6256-forte-config/tge64D2darLRe0Us/images/unreal/supported_swap_chains.png?fit=max&auto=format&n=tge64D2darLRe0Us&q=85&s=360fc4da994196c50e20a4002fd478ef" width="1726" height="930" data-path="images/unreal/supported_swap_chains.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqGetLifiChainsResponse> OnApiSuccess = [this, OnSuccess](const FSeqGetLifiChainsResponse& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSupportedSwapChains(OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Supported Swap Tokens

Returns the list of tokens supported for swapping.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-6256-forte-config/tge64D2darLRe0Us/images/unreal/supported_swap_tokens.png?fit=max&auto=format&n=tge64D2darLRe0Us&q=85&s=7fe6e0bf5dc51ec75c3d51cc4d7b642c" width="1726" height="930" data-path="images/unreal/supported_swap_tokens.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqGetLifiTokensResponse> OnApiSuccess = [this, OnSuccess](const FSeqGetLifiTokensResponse& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSupportedSwapTokens(Args, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>
