Markets API (Meteora)
Public, IP rate-limited endpoints that read a token’s Meteora market and build unsigned trades. They work for Etch launches of both kinds and for any other mint (Etch discovers DBC and DAMM v2 pools on chain; for DAMM v2 only pools paired with wSOL or USDC count, wSOL first, deepest liquidity first, so a pool against some other token can never be quoted or traded).
| Launch mode | Market before graduation | Market after |
|---|---|---|
pool (instant pool) | Meteora Dynamic AMM v1 (kind: "amm_v1", use the pool routes in Signal) | — |
dbc (bonding curve) | Meteora Dynamic Bonding Curve (kind: "dbc") | Meteora DAMM v2 (kind: "damm_v2") |
Get a market
GET /api/markets/:mint
{
"mint": "3avH…",
"kind": "dbc",
"graduated": false,
"curve": {
"pool": "Fohp…", "config": "FajH…", "baseMint": "3avH…",
"quoteMint": "So11…112", "quoteSymbol": "SOL", "quoteDecimals": 9,
"creator": "5qgF…",
"quoteReserve": 0.198, "threshold": 0.5, "progress": 0.396,
"price": 1.33e-9, "startPrice": 1.12e-9, "endPrice": 1.69e-9,
"points": [{ "raised": 0, "price": 1.12e-9 }, "…"],
"migrationProgress": 0, "isMigrated": false,
"budgetPercent": 20, "creatorTradingFeePercent": 50, "finishedAt": null
},
"damm": null,
"launch": { "id": "…", "mode": "dbc", "status": "success", "graduatedAt": null,
"params": { "preset": "steady", "quote": "SOL", "goal": 0.5, "budgetPercent": 20 },
"daoTreasury": "9xHH…", "daoTreasuryFunded": false }
}curve.points samples the curve (price against quote raised) for a chart.
After graduation kind is "damm_v2" and damm carries
{ pool, price, quoteReserve, baseReserve, feeBps }.
Quote
GET /api/markets/:mint/quote?side=buy|sell&amount=<raw>&slippageBps=100
amount is raw units of the input (lamports / USDC base units for a buy,
token base units for a sell). Before graduation the quote comes from the
bonding curve, after it from DAMM v2.
{ "venue": "dbc", "pool": "Fohp…", "side": "buy",
"amountIn": "200000000", "amountOut": "161813069824462411",
"minAmountOut": "160194939126217786", "fee": "2000000",
"priceImpactPct": null, "fillsCurve": false, "slippageBps": 100, "graduated": false }A buy bigger than what is left on the curve is filled up to the funding goal
(fillsCurve: true, amountIn = what is actually spent); the rest of the input
is never taken.
Build a swap
POST /api/markets/:mint/swap-tx
{ "owner": "Hf…", "side": "buy", "amountIn": "200000000",
"minAmountOut": "160194939126217786", "priorityMicroLamports": 10000 }Returns the standard unsigned transaction (transaction,
feePayer = owner, blockhash, lastValidBlockHeight, summary) plus
venue and pool. The owner signs and sends it.
Nudge graduation
POST /api/markets/:mint/graduate
Runs the graduation keeper for one Etch bonding-curve launch now (it also runs every 5 minutes). A no-op until the curve is full. Migration is permissionless on chain; Etch only pays network fees.
Preview a curve
GET /api/markets/preview → { enabled, cluster, presets, goalLimits }
POST /api/markets/preview with { totalSupply, allocation, vesting?, dbc }
returns the launch’s start and graduation price, price multiple, production
budget, liquidity locked at graduation and a chart sketch — computed with
Meteora’s own curve builder, before anything is launched.