How KYRO works
Where every number comes from, how a swap is built, and the public API.
Data sources
- Jupiter: token lists, live prices, organic score, holder counts, audit flags (mint and freeze authority, top holders), and swap routes.
- GeckoTerminal: pools on every Solana DEX, liquidity, volume and OHLCV candles.
- Solana RPC: balances, token accounts, transactions and largest holders, read directly from the chain.
Answers are cached for seconds to minutes so the public sources are not overloaded. A failed upstream is shown as an error with a retry, never as an empty list or a zero.
Wallets
KYRO supports every wallet that implements the Solana Wallet Standard (Phantom, Solflare, Backpack, Magic Eden, OKX, Glow and more), plus Coinbase Wallet, Trust and Ledger through dedicated adapters. The connect dialog lists what is installed first and links to the rest.
KYRO never receives keys. Transactions are built server-side, shown and signed in your wallet, then submitted through KYRO's RPC proxy and confirmed by polling their status.
Swaps
- The widget asks Jupiter for the best route straight from your browser, with
/api/quoteas the fallback, refreshed every 15 seconds. - On Swap, Jupiter (or
/api/swapas the fallback) returns an unsigned versioned transaction with a dynamic compute limit and a capped priority fee. - Your wallet signs it; KYRO sends it and waits for confirmation, then links the result on Solscan.
Slippage is set by you (default 0.5%). Price impact above 1% is highlighted and above 5% asks you to confirm twice.
Limit orders and recurring buys use Jupiter's order programs: you sign one transaction that deposits the amount, Jupiter's keepers fill it on-chain, and cancelling returns whatever is left.
Vault program
The KYRO Vault is an open-source Solana program: deposit USDC, receive shares, withdraw pro rata at any time. The admin can pause deposits but never withdrawals, and cannot move user funds. It is live on Mainnet with a 10,000 USDC deposit cap while it awaits an external audit. See Vault for addresses.
Public API
The app uses these endpoints itself. They answer JSON, are cached at the edge, and return { error } with a 4xx or 5xx status when something is wrong.
Endpoints
18 routes/api/tokens?list=trending&interval=24h&limit=100Token lists with live stats. list: trending, traded, organic, recent, verified. interval: 5m, 1h, 6h, 24h.
Try it: /api/tokens?list=trending&interval=1h&limit=5/api/tokens/search?q=bonkSearch by symbol, name or mint. Comma-separate up to 100 mints for a batch lookup.
Try it: /api/tokens/search?q=jup/api/token/:mintOne token's record and every pool it trades in across Solana DEXs.
Try it: /api/token/JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN/api/token/:mint/candles?tf=1hOHLCV candles in USD from the deepest pool (or ?pool=). tf: 5m, 15m, 1h, 4h, 1d.
Try it: /api/token/So11111111111111111111111111111111111111112/candles?tf=1h/api/token/:mint/holdersThe 20 largest holders with owner wallets and share of supply.
/api/prices?ids=<mint>,<mint>USD price and 24h change for up to 100 mints.
Try it: /api/prices?ids=So11111111111111111111111111111111111111112,EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/api/pools?list=topPools across every Solana DEX. list: top, trending, new.
Try it: /api/pools?list=trending/api/wallet/:addressPriced holdings, net worth and the last 25 transaction signatures.
/api/wallet/:address/activityThe last 25 transactions, the newest 15 explained from the wallet's point of view (swaps, transfers, staking).
/api/holdings/:addressJust the priced balances, refreshed every 10 seconds.
/api/tx/:signatureWhat a transaction did: headline, balance changes per account, programs, fee and logs.
/api/quote?inputMint=&outputMint=&amount=&slippageBps=50A Jupiter route. amount is in base units of the input token.
Try it: /api/quote?inputMint=So11111111111111111111111111111111111111112&outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amount=100000000&slippageBps=50/api/swapBody { quoteResponse, userPublicKey }. Returns an unsigned versioned transaction (base64) for the user's wallet to sign.
/api/orders/limitBody { maker, inputMint, outputMint, makingAmount, takingAmount, expiredAt? }. An unsigned Jupiter limit order (minimum $5).
/api/orders/recurringBody { user, inputMint, outputMint, inAmount, numberOfOrders, interval }. An unsigned recurring buy (at least $50 per order; interval 3600, 86400, 604800 or 2592000).
/api/orders/executeBody { kind, signedTransaction, requestId }. Submits a signed order or cancel transaction through Jupiter.
/api/orders?user=<wallet>Open and past limit orders and recurring buys for a wallet.
/api/statusHealth of the upstreams: Solana RPC, devnet RPC, Jupiter, GeckoTerminal.
Try it: /api/statusLimits and errors
Without a dedicated RPC the public Solana endpoint is used, which rate-limits heavier reads such as largest holders. Set SOLANA_RPC_URL on the server to lift that. JUPITER_API_KEY switches Jupiter to its keyed host.