Documentation Index
Fetch the complete documentation index at: https://pond.dflow.net/llms.txt
Use this file to discover all available pages before exploring further.
Set up
Imports, env config, and the wallet/connection used across every step.
import "dotenv/config";
import { TOKEN_2022_PROGRAM_ID } from "@solana/spl-token";
import { Connection, PublicKey } from "@solana/web3.js";
const DFLOW_METADATA_API_URL = process.env.DFLOW_METADATA_API_URL ?? "https://dev-prediction-markets-api.dflow.net";
const DFLOW_API_KEY = process.env.DFLOW_API_KEY; // optional; not needed for dev endpoints
const SOLANA_RPC_URL = process.env.SOLANA_RPC_URL ?? "https://api.mainnet-beta.solana.com";
const headers: HeadersInit = {};
if (DFLOW_API_KEY) headers["x-api-key"] = DFLOW_API_KEY;
const connection = new Connection(SOLANA_RPC_URL);
const userWalletAddress = "USER_WALLET_ADDRESS_HERE";
if (userWalletAddress === "USER_WALLET_ADDRESS_HERE") {
throw new Error("Replace USER_WALLET_ADDRESS_HERE with a real Solana wallet address.");
}
const userWallet = new PublicKey(userWalletAddress);
Fetch Wallet Token Accounts
Fetch SPL token accounts for the wallet and keep only non-zero balances.
Outcome tokens are Token-2022 mints.
const tokenAccounts = await connection.getParsedTokenAccountsByOwner(
userWallet,
{ programId: TOKEN_2022_PROGRAM_ID }
);
const userTokens = tokenAccounts.value.map(({ account }) => {
const info = account.data.parsed.info;
return {
mint: info.mint,
rawBalance: info.tokenAmount.amount,
balance: info.tokenAmount.uiAmount,
decimals: info.tokenAmount.decimals,
};
});
const nonZeroBalances = userTokens.filter((token) => token.balance > 0);
Filter for Outcome Mints
Filter the wallet mints down to prediction market outcome tokens using the
Metadata API.
const allMintAddresses = nonZeroBalances.map((token) => token.mint);
const response = await fetch(
`${DFLOW_METADATA_API_URL}/api/v1/filter_outcome_mints`,
{
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({ addresses: allMintAddresses }),
}
);
if (!response.ok) {
throw new Error("Failed to filter outcome mints");
}
const data = await response.json();
const outcomeMints = data.outcomeMints ?? [];
const outcomeTokens = nonZeroBalances.filter((token) =>
outcomeMints.includes(token.mint)
);
Fetch Market Details in Batch
Pull market metadata for those outcome mints so you can label YES/NO and
display event and market context.
const marketsResponse = await fetch(
`${DFLOW_METADATA_API_URL}/api/v1/markets/batch`,
{
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify({ mints: outcomeMints }),
}
);
if (!marketsResponse.ok) {
throw new Error("Failed to fetch markets batch");
}
const marketsData = await marketsResponse.json();
const markets = marketsData.markets ?? [];
const marketsByMint = new Map<string, any>();
markets.forEach((market: any) => {
Object.values(market.accounts ?? {}).forEach((account: any) => {
if (account.yesMint) marketsByMint.set(account.yesMint, market);
if (account.noMint) marketsByMint.set(account.noMint, market);
});
});
Build Position Rows
Map each outcome token to a market, determine YES/NO, and shape the data
for your UI.
const positions = outcomeTokens.map((token) => {
const market = marketsByMint.get(token.mint);
if (!market) {
return {
mint: token.mint,
balance: token.balance,
position: "UNKNOWN",
market: null,
};
}
const accounts = Object.values(market.accounts ?? {});
const isYesToken = accounts.some((account: any) => account.yesMint === token.mint);
const isNoToken = accounts.some((account: any) => account.noMint === token.mint);
return {
mint: token.mint,
balance: token.balance,
decimals: token.decimals,
position: isYesToken ? "YES" : isNoToken ? "NO" : "UNKNOWN",
market,
};
});
Find Markets
Discover markets by category, tag, status, or series.
Bulk Fetch Markets
Hydrate multiple markets and outcome mints in one call.
Buy Outcome Tokens
Open a prediction market position from any input token.
Reclaim Rent
Close empty outcome token accounts and reclaim SOL rent.
API Routes