Public REST API v1
Integrate JetForge bonding curve markets into your app, trading bot, or aggregator. Fetch live market data, get real-time quotes, and prepare unsigned Solana transactions. No API key or authentication required.
Returns the API status, current Solana slot, on-chain program ID, and network (devnet / mainnet). Use this to verify connectivity before making trade calls.
curl https://jetforge.io/api/v1/health{
"status": "ok",
"version": "1.0.0",
"network": "mainnet",
"programId": "7rXDkm484DDp2YoPkLBBLtGMzuwrxysFGUgPUc4EpDmk",
"slot": 312847651,
"docs": "https://jetforge.io/docs/api"
}List all active (non-graduated) JetForge markets with live on-chain bonding curve state — price, reserves, and graduation progress. Suitable for building market screeners or aggregator feeds.
curl "https://jetforge.io/api/v1/markets?limit=5&sort=trending"{
"markets": [
{
"marketId": "EKpQ...cjm",
"name": "WIF",
"baseSymbol": "WIF",
"quoteSymbol": "SOL",
"baseMint": "EKpQ...cjm",
"bondingCurveAddress": "7xQ1...pda",
"creator": "9xDe...xyz",
"decimals": 6,
"price": 0.00000003,
"priceSOL": 0.00000003,
"virtualSolReserves": "30000000000",
"virtualTokenReserves": "1073000191000000",
"realSolReserves": "1294200000",
"realTokenReserves": "42731050000000",
"graduated": false,
"progress": 1.5,
"imageUrl": "https://...",
"createdAt": "2026-05-24T10:00:00Z"
}
],
"count": 1,
"network": "mainnet"
}Get a real-time trade quote directly from the on-chain bonding curve state. Returns expected output, fee, price impact, and minimum output after slippage. No transaction is sent.
# Buy quote: 0.1 SOL (100,000,000 lamports)
curl "https://jetforge.io/api/v1/quote?mint=EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm&side=buy&amount=100000000"
# Sell quote: 1,000 tokens (1,000,000,000 base units at 6 decimals)
curl "https://jetforge.io/api/v1/quote?mint=EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm&side=sell&amount=1000000000"{
"quote": {
"marketId": "EKpQ...cjm",
"bondingCurveAddress": "7xQ1...pda",
"side": "buy",
"inputAmount": "100000000",
"inputAmountHuman": "0.100000 SOL",
"outputAmount": "3464437480000",
"outputAmountHuman": "3,464,437.48 tokens",
"price": 0.000000029,
"priceImpactPct": 0.655,
"estimatedFeeLamports": "1000000",
"minimumOutput": "3354163955600",
"slippageBps": 300,
"curveState": {
"virtualSolReserves": "30000000000",
"virtualTokenReserves": "1073000191000000",
"realSolReserves": "1294200000",
"realTokenReserves": "42731050000000"
}
}
}Build a fully-formed, unsigned Solana transaction for a buy or sell on the JetForge bonding curve. The server constructs the instruction, sets the fee payer and recent blockhash, then returns the transaction as base64. You sign it with your own wallet and broadcast it — JetForge never touches your private key.
curl -X POST https://jetforge.io/api/v1/trade/prepare \
-H "Content-Type: application/json" \
-d '{
"mint": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm",
"side": "buy",
"amount": "100000000",
"walletPublicKey": "YOUR_WALLET_PUBLIC_KEY",
"slippageBps": 300
}'{
"transaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADe...base64==",
"message": "Sign and broadcast this transaction to buy on JetForge",
"quote": {
"marketId": "EKpQ...cjm",
"side": "buy",
"inputAmount": "100000000",
"outputAmount": "3464437480000",
"fee": "1000000",
"minimumOutput": "3354163955600",
"slippageBps": 300,
"blockhash": "8ZyJ...",
"lastValidBlockHeight": 312847751
},
"instructions": {
"description": "Sign with your wallet and sendRawTransaction",
"code": [
"const tx = Transaction.from(Buffer.from(response.transaction, 'base64'));",
"const signed = await wallet.signTransaction(tx);",
"const sig = await connection.sendRawTransaction(signed.serialize());",
"await connection.confirmTransaction(sig, 'confirmed');"
]
}
}Get the SOL balance and all SPL token positions for any Solana wallet. Optionally filter to specific mints. Useful for building portfolio views or checking a bot wallet's holdings before trading.
# All positions
curl "https://jetforge.io/api/v1/wallet/YOUR_WALLET_ADDRESS"
# Filter to specific tokens
curl "https://jetforge.io/api/v1/wallet/YOUR_WALLET_ADDRESS?mints=EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm"{
"wallet": "9xDe...xyz",
"solBalance": "2450000000",
"solBalanceSOL": 2.45,
"tokenCount": 2,
"tokens": [
{
"mint": "EKpQ...cjm",
"balance": "3464437480000",
"balanceUi": 3464437.48,
"decimals": 6,
"ataAddress": "4rT2...ata"
}
]
}SDK Example
Full buy flow in TypeScript — get a quote, prepare the unsigned transaction, sign with your wallet, and broadcast.
import { Connection, Transaction } from "@solana/web3.js";
import { useWallet } from "@solana/wallet-adapter-react";
const BASE = "https://jetforge.io/api/v1";
const connection = new Connection("https://api.mainnet-beta.solana.com");
// 1. Get a buy quote
const quote = await fetch(
`${BASE}/quote?mint=${MINT}&side=buy&amount=100000000`
).then(r => r.json());
console.log("You will receive:", quote.quote.outputAmountHuman);
console.log("Price impact:", quote.quote.priceImpactPct + "%");
// 2. Build the unsigned transaction
const { transaction: txBase64 } = await fetch(`${BASE}/trade/prepare`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
mint: MINT,
side: "buy",
amount: "100000000",
walletPublicKey: wallet.publicKey.toBase58(),
slippageBps: 300,
}),
}).then(r => r.json());
// 3. Sign and broadcast (using Solana wallet adapter)
const { signTransaction } = useWallet();
const tx = Transaction.from(Buffer.from(txBase64, "base64"));
const signed = await signTransaction(tx);
const sig = await connection.sendRawTransaction(signed.serialize());
await connection.confirmTransaction(sig, "confirmed");
console.log("TX:", sig);Error Responses
{ "error": "Human-readable error message" }