↔️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.
Source token
Destination token
Source token input amount
Slippage in BPS
GET /v1/quote HTTP/1.1
Host: api.fluxbeam.xyz
Accept: */*
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
100
{PAYER_WALLET_ADDRESS}
true
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
}
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.
If no pool is provided a quote will be generated.
100
{PAYER_WALLET_ADDRESS}
true
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
}
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