↔️Swap API

The FluxBeam Swap API allows developers and users to retrieve swap quotes and pre-built transactions to speed up integration.

Quote

The quote API will return the expected output amount and slippage amount based on the provided input amount & token mints.

Currently, the API only returns pools on FluxBeam DEX.

Get a quote for a token swap

get
Query parameters
inputMintstringRequired

Source token

outputMintstringRequired

Destination token

amountintegerRequired

Source token input amount

slippageBpsintegerOptional

Slippage in BPS

Responses
200
Returns a swap quote
application/json
get
GET /v1/quote HTTP/1.1
Host: api.fluxbeam.xyz
Accept: */*
200

Returns a swap quote

{
  "quote": {
    "amountIn": 1000000,
    "inputMint": "So11111111111111111111111111111111111111112",
    "minimumOut": 9820,
    "outAmount": 10000,
    "outputMint": "FLUXBmPhT3Fd1EDVFdg46YREqHBeNypn1h4EbnTzWERX",
    "pool": "GeNc51GBjhXiYruWrx6VPh6xMNeTjYb5hUBpFJi9cW27",
    "program": "FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X"
  }
}

Example

const inMint = "So11111111111111111111111111111111111111112"
const outMint = "FLUXBmPhT3Fd1EDVFdg46YREqHBeNypn1h4EbnTzWERX"
const amount = "1000000000"
const slippageBPS = "50"

const uri = `https://api.fluxbeam.xyz/v1/quote?inputMint=${inMint}&outputMint=${outMint}&amount=${amount}&slippageBps=${slippageBPS}`

const quote = await (await fetch(uri)).json()

Swap Transaction

The Transaction endpoint returns a pre-built transaction that is ready to be signed by the payer wallet based on the quote provided.

The swap transaction includes the following instructions:

  • Priority Fee Price & Units

  • Input & Output associated token account creation

  • Wrap & Unwrap of SOL accounts

Returns the swap transaction for the provided quote

post
Body
priorityFeeLamportsintegerOptionalExample: 100
userPublicKeystringOptionalExample: {PAYER_WALLET_ADDRESS}
wrapAndUnwrapSolbooleanOptionalExample: true
Responses
200
Returns a swap quote
application/json
post
POST /v1/swap/transaction HTTP/1.1
Host: api.fluxbeam.xyz
Content-Type: application/json
Accept: */*
Content-Length: 386

{
  "priorityFeeLamports": 100,
  "quote": {
    "amountIn": 1000000,
    "inputMint": "So11111111111111111111111111111111111111112",
    "minimumOut": 9820,
    "outAmount": 10000,
    "outputMint": "FLUXBmPhT3Fd1EDVFdg46YREqHBeNypn1h4EbnTzWERX",
    "pool": "GeNc51GBjhXiYruWrx6VPh6xMNeTjYb5hUBpFJi9cW27",
    "program": "FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X"
  },
  "userPublicKey": "{PAYER_WALLET_ADDRESS}",
  "wrapAndUnwrapSol": true
}
200

Returns a swap quote

{
  "transaction": "text"
}

Example

import { Connection, Keypair, VersionedTransaction } from '@solana/web3.js';

const uri = `https://api.fluxbeam.xyz/v1/swap/transaction`

const resp = await(await fetch(uri, {
    method: "POST",
    headers: {"Content-Type": "application/json"},
    body: JSON.strinfgify({
        //
    })
})).json()

//Decode the transaction from base64
const swapTransactionBuf = Buffer.from(resp.transaction, 'base64');
const transaction = VersionedTransaction.deserialize(swapTransactionBuf);

console.log("Transaction",transaction);

//Sign the transaction with the payer wallet
transaction.sign([wallet.payer]);

//Execute the transaction
const client= new Connection('{RPC_URL}');
const sig = client.sendRawTransaction(transaction.serialize(), {maxRetries: 3, skipPreflight: true})

console.log("Transaction Signature:", sig)

Swap Instruction

The instruction endpoint will return the FluxBeam swap instruction for a given quote. The instruction should be included within a transaction that handles the priority fee & associated token account calls.

Returns a swap instruction for the provided quote

post

If no pool is provided a quote will be generated.

Body
priorityFeeLamportsintegerOptionalExample: 100
userPublicKeystringOptionalExample: {PAYER_WALLET_ADDRESS}
wrapAndUnwrapSolbooleanOptionalExample: true
Responses
200
Returns a swap instruction to be added to transaction
application/json
post
POST /v1/swap/instruction HTTP/1.1
Host: api.fluxbeam.xyz
Content-Type: application/json
Accept: */*
Content-Length: 386

{
  "priorityFeeLamports": 100,
  "quote": {
    "amountIn": 1000000,
    "inputMint": "So11111111111111111111111111111111111111112",
    "minimumOut": 9820,
    "outAmount": 10000,
    "outputMint": "FLUXBmPhT3Fd1EDVFdg46YREqHBeNypn1h4EbnTzWERX",
    "pool": "GeNc51GBjhXiYruWrx6VPh6xMNeTjYb5hUBpFJi9cW27",
    "program": "FLUXubRmkEi2q6K3Y9kBPg9248ggaZVsoSFhtJHSrm1X"
  },
  "userPublicKey": "{PAYER_WALLET_ADDRESS}",
  "wrapAndUnwrapSol": true
}
200

Returns a swap instruction to be added to transaction

{
  "instruction": {
    "accounts": "text",
    "data": [
      1
    ],
    "programId": "text"
  }
}

Example

import { Connection, Keypair, Transaction} from '@solana/web3.js';

const uri = `https://api.fluxbeam.xyz/v1/instruction`

const resp = await(await fetch(uri, {
    method: "POST",
    headers: {"Content-Type": "application/json"},
    body: JSON.strinfgify({
        quote, //Response from /quote
        userPublicKey: "{PAYER_WALLET_ADDRESS}",
        priorityFeeLamports: 100,
        wrapAndUnwrapSol: true
    })
})).json()


//Decode the instruction
const ix = new TransactionInstruction({
    programId: new PublicKey(instruction.programId),
    keys: instruction.accounts.map((key) => ({
      pubkey: new PublicKey(key.Pubkey),
      isSigner: key.IsSigner,
      isWritable: key.IsWritable,
    })),
    data: Buffer.from(instruction.data, "base64"),


//Create new transaction
const transaction = new Transaction();

//Add pre-swap instructions
// transaction.add(ataIx)

//Add swap instruction
transaction.add(ix)

//Add post-swap instructions
// transaction.add(wSolClose)

console.log("Transaction",transaction);

//Sign the transaction with the payer wallet
transaction.sign([wallet.payer]);

//Execute the transaction
const client= new Connection('{RPC_URL}');
const sig = client.sendRawTransaction(transaction.serialize(), {maxRetries: 3, skipPreflight: true})

console.log("Transaction Signature:", sig)

Last updated