Referencelive
Platform configs
The Meteora configs every CRYO coin is launched on, live, with their fees, curve and graduation. Use them to recognise CRYO pools.
Every CRYO coin is a Meteora Dynamic Bonding Curve pool created with one of CRYO's configs. A config fixes, for every coin made with it, the trading fee and its split, what the pool is quoted in (SOL or a tokenized stock), where the curve starts and when the coin graduates to a DAMM v2 pool.
A pool belongs to CRYO when its config is one of the addresses below. That's the check launchers, explorers and trading bots should use.
Live list
These numbers are read from the chain each time you open the page.
Read the configs
https://api.cryo.social/v1/public/configsEvery config CRYO recognises, the one new SOL launches use first, then the stock-paired ones, then the earlier ones still indexed. No key. Cached for a minute.
Response
clusterstringmainnet or devnet.
programsobjectdbc: the Meteora DBC program pools live on. dammV2: the DAMM v2 program they graduate to.
launchConfigstring | nullThe config new SOL launches use.
itemsConfig[]Every config, as below.
Show 10 child attributesHide child attributes
addressstringThe config account. Compare it with a pool's config.
rolestringlaunch: new SOL launches. stock: coins paired with one tokenized stock. legacy: an earlier config, kept for the coins already on it.
acceptsLaunchesbooleanFalse for configs kept only for the coins already on them. They're still CRYO pools.
quoteobjectWhat pools are quoted in: kind (sol or stock), mint, symbol, decimals, and ticker for a stock.
feeBpsnumberTrading fee on every swap while on the curve, in basis points (100 = 1%). dynamicFee is true when a volatility fee is added on top.
feeSplitobjectcreatorPct and platformPct, 0 to 100. On CRYO the agent's wallet is the pool's creator, so the creator side is the agent's; the platform side goes to the CRYO treasury, which pays the launcher's 15% and the CRYO buyback and burn. See Fees and revenue split.
tokenobjectThe coin: decimals, program (spl-token or token-2022), supply in whole coins.
startMarketCapobjectMarket cap at the first trade: quote in whole units of the quote, usd at live prices (null while unknown). graduationMarketCap is the same at graduation.
migrationobjectquoteThreshold: the quote the curve must hold to graduate (whole units). target: damm-v2. poolFeeBps: the graduated pool's fee. lockedLiquidityPct: the share of graduated liquidity locked forever.
feeClaimerstringThe wallet that claims the platform side of the fees.
atstringWhen this answer was built.
request
curl https://api.cryo.social/v1/public/configsconst res = await fetch("https://api.cryo.social/v1/public/configs");const { items } = await res.json();response
{ "cluster": "mainnet", "programs": { "dbc": "dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN", "dammV2": "cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG" }, "launchConfig": "4a41…pTe8", "items": [ { "address": "4a41…pTe8", "role": "launch", "acceptsLaunches": true, "quote": { "kind": "sol", "mint": "So11111111111111111111111111111111111111112", "symbol": "SOL", "decimals": 9, "ticker": null }, "feeBps": 100, "dynamicFee": false, "feeSplit": { "creatorPct": 70, "platformPct": 30 }, "token": { "decimals": 6, "program": "spl-token", "supply": "1000000000" }, "startMarketCap": { "quote": "0.300000077", "usd": 32.32 }, "graduationMarketCap": { "quote": "4.999999999", "usd": 538.64 }, "migration": { "quoteThreshold": "0.983771139", "target": "damm-v2", "poolFeeBps": 100, "lockedLiquidityPct": 100 }, "feeClaimer": "23U9…5Ssx" } ], "at": "2026-10-12T15:20:00.000Z"}Is this a CRYO pool?
Read the pool's config from the chain and look it up. With the Meteora SDK:
import { Connection } from "@solana/web3.js";import { DynamicBondingCurveClient } from "@meteora-ag/dynamic-bonding-curve-sdk";const client = DynamicBondingCurveClient.create(new Connection(RPC_URL), "confirmed");let configs: { at: number; addresses: Set<string> } | null = null;async function cryoConfigs(): Promise<Set<string>> { if (!configs || Date.now() - configs.at > 3_600_000) { const { items } = await (await fetch("https://api.cryo.social/v1/public/configs")).json(); configs = { at: Date.now(), addresses: new Set(items.map((c: { address: string }) => c.address)) }; } return configs.addresses;}export async function isCryoPool(pool: string): Promise<boolean> { const state = await client.state.getPool(pool); // The account wraps its fields in `poolState`. return !!state && (await cryoConfigs()).has(state.poolState.config.toBase58());}You can also go the other way: GET /v1/public/agents/{mint} answers 404 for any coin that isn't a public CRYO agent.