Skip to content
montra

For builders

Public API

Montra's indexer reads the chain and serves what it finds as a public JSON API: tokens, prices, charts, trades, holders and wallets. It is read-only, needs no key, and is the same API this site runs on.

Copy for AI
Base URL
https://api.montramarkets.xyz
Auth
None
Open to any origin for reads.
Live trades
SSE
Server-sent events, up to 12 streams open at once per client.
Format
JSON
Pages of tokens; trades and events paged with before.

How answers are written

Every route that reads is a GET; the two that store a launch's image and document are POST, under Launch a token. Amounts are integer strings in the asset's smallest unit; prices are decimal strings in the quote asset per whole token, to 36 decimal places, and market caps decimal strings in the quote asset, never with an exponent; times are milliseconds since 1970, except the day of /api/stats/daily, a date written YYYY-MM-DD; addresses are lowercase, and an address not set is null.

Requests are rate limited per client: a 429 means slow down. A bad parameter answers 400 and names the field. The API never signs anything and holds no key; anything that moves value is a transaction from your own wallet.

Example: the five newest tokens (one shown, trimmed)Shell
curl -s "https://api.montramarkets.xyz/api/tokens?sort=new&limit=5"

{
  "tokens": [{
    "address": "0x…", "name": "…", "symbol": "…", "poolId": "0x…",
    "quote": { "address": "0x0000…0000", "symbol": "HYPE", "decimals": 18, "native": true, "usd": 40.5 },
    "supply": "1000000000000000000000000000",
    "price": "0.000000003500000000000000000000000000", "marketCap": "3.5", "volume24h": "…",
    "totalFeePips": 20000, "recipientKind": "holders",
    "graduation": { "stage": "new", "progressBps": 1640, "graduatedAt": null },
    "lpLine": { "progressBps": 410, "active": false, "activeAt": null }
  }],
  "total": 41, "page": 1, "pages": 9
}

Token cards

/api/tokens, a wallet's token lists and the top of /api/tokens/{token} answer with the same card. Its amounts are in the token's smallest unit (18 decimals) or the quote's, as the table says.

Field

address, name, symbol
Typestring
What it isThe token, as launched.
imageUrl
Typestring or null
What it isA URL a browser can load, null for no image.
creator, poolId
Typestring
What it isThe wallet that launched it, and its pool.
quote
Typeobject
What it isaddress, symbol, decimals and native, with usd (dollars per whole unit, null where nothing prices it), usdSource (dollar, hypercore or route) and usdAt (when it was read, null for a dollar or no price).
supply, burned
Typestring
What it isTokens minted, and burned since.
price, priceUsd
Typestring or null, number or null
What it isThe pool's price after the last trade, in the quote per whole token, and in dollars at the quote's price now.
marketCap, marketCapUsd
Typestring or null, number or null
What it isprice times supply less burned.
volume24h, volume24hUsd
Typestring, number or null
What it isThe last 24 hours' volume, in the quote's smallest unit and in dollars.
volume1h, volume1hUsd, traders1h
Typestring, number or null, number
What it isThe last hour's volume, and how many wallets traded.
change24hPct
Typenumber or null
What it isPercent, from the close of the last hourly candle begun 24 hours ago or more; null before there is one.
holders, swaps
Typenumber
What it isWallets holding it, the pool and other custody left out, and trades so far.
launchedAt, lastTradeAt
Typenumber, number or null
What it isBlock times.
totalFeePips
Typenumber
What it isThe pool's total fee now, in pips.
recipient, recipientKind
Typestring
What it isWho the pool's creator fees pay, and what that is: holders (the token itself), creator, splitter or wallet.
liquiditySealed
Typeboolean
What it isThe pool refuses outside liquidity.
rewardsReceived
Typestring
What it isWhat its holders' rewards have received, in the quote's smallest unit.
trend
Typenumber or null
What it isThe score sort=trending ranks by: dollars moving now, from how many wallets, how much of it buying and how young the market is. Null for a quote with no dollar price, which is left unranked.
graduation
Typeobject
What it isstage, below; progressBps, how far from the opening to the line in basis points of the quote the seed collects on the way, 10,000 past it; graduatedAt, a time or null.
lpLine
Typeobject
What it isThe same for the LP line: progressBps, active and activeAt.

graduation.stage, and the stage filter, are three columns of a board, not the chain's five stages. graduated is a pool the hook has graduated for good (PoolConfig.stage 2, 3 or 4) or one with no line. graduating is any other pool at 5,000 basis points of progressBps or more, at chain stage Below or Crossed. new is the rest. For the chain's own stage read LaunchHook.poolConfig(poolId).stage, under Contract reference. There is no bonding curve and nothing migrates: how a terminal tracks these.

/api/tokens/{token} adds what the launch named, pool (its terms), stats, rewards, splitter, config, liquidity and live, the pool read from the chain, null when that read fails. pool.feeFixed is true when nobody can lower the total any more: it is locked, at its floor, or paid to holders or a splitter.

Trades and the live stream

/api/tokens/{token}/trades answers { trades: [...] }, and each event of a stream carries one trade with its poolId and token added.

Field

id
Typenumber
What it isThe trade's row here: what before pages by, and the stream's event id.
block, logIndex, txHash
Typenumber, number, string
What it isWhere its Swap log is.
t
Typenumber
What it isIts block's time.
sender
Typestring
What it isWho traded, as below: not always the transaction's from, nor the Swap's sender, which is a router.
isBuy
Typeboolean
What it isTrue when the pool gave tokens out.
quoteAmount
Typestring
What it isWhat the trader paid on a buy, the hook's fee included, or received on a sale, after it: the size of the Swap's quote amount plus hookFee on a buy, less it on a sale.
tokenAmount
Typestring
What it isThe tokens that moved.
hookFee
Typestring
What it isThe hook's fee, the FeeAccrued event's fee, an anti-snipe rate's included. The LP fee is apart.
price
Typestring
What it isThe pool's price after this swap, not what the trade paid on average.

sender is the trader as far as the chain says. Through Montra's router it is the router's caller (Swapped's sender). On a launch's first buy it is the creator. Through any other router it is the address the token moved to on a buy, or from on a sale, in that swap's transfer, which names the wallet where the Swap names only the router. A router that holds the tokens on the way, or nets two swaps into one transfer, leaves only itself. A contract trading for someone is named in their place.

A trade on /api/stream or /api/tokens/{token}/streamPlain text
id: 1042
event: trade
data: {"id":1042,"poolId":"0x…","token":"0x…","block":1234567,"logIndex":2,"txHash":"0x…","t":1793000000000,"sender":"0x…","isBuy":true,"quoteAmount":"250000000000000000","tokenAmount":"71428571428571428571428571","hookFee":"5000000000000000","price":"0.000000003500000000000000000000000000"}

A stream opens with a retry: line and sends a : ping comment every 15 seconds. Reconnecting with Last-Event-ID sends the latest 200 trades after it, then goes live; take anything older from the trades route. A client has ten such replays a minute, and past them a stream still opens, live alone. A client that falls a mebibyte behind is dropped.

A client may hold 12 streams at once, a client being an IPv4 address or an IPv6 /64, and an IPv6 /48 may hold 150 in all: past either a new stream answers 429. A stream gives its place back when it closes. Past 5,000 streams in all, a new one answers 503 with retry-after.

Reading the figures

  • Volume is the pool's side. Every volume here (volume24h, volume1h, stats.volume, a candle's volumeQuote, and the platform's totals) sums the Swap's quote amount, which leaves out the hook's fee. So in an anti-snipe window a pool's fees over its volume can pass 100%. To see what traders spent, sum quoteAmount over the token's trades: what each buyer paid, and on a sale what the seller received.
  • Candles. t is the start of the bucket, a whole multiple of the interval counted from 1970. Each figure is the pool's price after a trade, so open is the bucket's first trade's, not the last bucket's close, and a bucket of one trade is flat. A bucket with no trades is not in the answer. from and to bound t, both included. volumeToken is in the token and trades counts them.
  • A token with no trades. price, priceUsd, marketCap and marketCapUsd are null until its first trade, though the pool has an opening price. Read it from the chain: live.sqrtPriceX96 in /api/tokens/{token}, which in the quote per whole token is 2^192 / sqrtPriceX96² × 10^(18 − the quote's decimals) with the quote as currency0, and sqrtPriceX96² / 2^192 × 10^(18 − the quote's decimals) with it as currency1 (pool.quoteIsCurrency0).
  • Holders. circulating in /api/tokens/{token}/holders is supply less burned, whoever holds it, the pool included: not what is in wallets. pct, top10Pct, inPoolPct and creatorPct are percent of it. The list and count leave out the token, its hook and the pool manager.
  • Dollar totals. volumeUsd, volume24hUsd, feesUsd and fees24hUsd in /api/stats add each quote at its dollar price now, not at each trade's, and skip a quote with no price: quotes shows which have none, and byQuote each quote's totals in its own units. If no quote has a price they read 0.
  • The buyback's keys. In /api/buyback, kntq and kntqFlow are the one currency the vault's buyback lane keeps out of the sale for HYPE and sells straight for its token, by those keys whatever that currency is: read its symbol and address. status and token are the vault's word, not the registry's: live says only that the lane pays out in a token through a burner.

Every route

Platform

/api/config
The chain id, the contracts' addresses with Uniswap's Universal Router, Permit2 and quoter (each null until the registry names it), the venue, the launch fee and the quote assets a launch can pair with. GET /api/config
/api/stats
Totals across every token: launches, holders, volume, fees and swaps, overall and per quote asset. GET /api/stats
/api/stats/daily
The last 90 days, per day and quote asset: launches, swaps, volume, fees and the protocol's part. GET /api/stats/daily
/api/protocol/fees
The protocol's share of fees: what waits in each hook, what has reached the vault and what it has paid out. GET /api/protocol/fees
/api/buyback
The vault's buyback lane: what it holds while no token is named, and once its burner is, what its sales spent and bought and the burner destroyed, by day, with the token's supply and the currency the lane keeps out of the HYPE sale. GET /api/buyback

Tokens

/api/tokens ?sort, stage, quote, search, creator, route, page, limit
A page of tokens as cards, 24 unless limit says, up to 100. sort: trending (the default), new, old, mcap, volume, holders, progress, graduated; stage: new, graduating, graduated; route: holders, creator, splitter, wallet. quote and creator are lowercase addresses: a checksummed address or a symbol answers 400. To find a token by name or symbol, use search. GET /api/tokens?sort=new&limit=5
/api/tokens/{token}
One token in full: its card, its pool's terms and stats, its holder-reward stats and the pool read live. GET /api/tokens/{token}
/api/tokens/{token}/trades ?before, limit
Its trades, newest first, 50 unless limit says, up to 200. Page back with before, the last id you have. GET /api/tokens/{token}/trades?limit=50
/api/tokens/{token}/candles ?interval, from, to, limit
Price candles, the newest 500 unless limit says, up to 2,000, oldest first: interval 1m, 5m (the default), 15m, 1h, 4h or 1d; from and to in milliseconds. GET /api/tokens/{token}/candles?interval=1h&limit=48
/api/tokens/{token}/holders ?limit
The largest holders with their share, the top ten's share, the pool's and the creator's; up to 200. GET /api/tokens/{token}/holders?limit=20
/api/tokens/{token}/liquidity ?from, to
Hourly volume and liquidity in its pool, the positions outside the seed and its pools elsewhere in the same pool manager; a week by default. GET /api/tokens/{token}/liquidity
/api/tokens/{token}/events ?before, limit
Its pool's events other than trades: claims, sweeps, fee changes, graduation, the LP fee switching on. GET /api/tokens/{token}/events
/api/tokens/{token}/rewards ?before, limit
Its holder-reward events: distributions, claims and pushes. GET /api/tokens/{token}/rewards
/api/tokens/{token}/rewards/{wallet}
A holder's rewards read live from the chain: earned now, and the stream it comes from. GET /api/tokens/{token}/rewards/{wallet}
/api/tokens/{token}/earned/{wallet}
What holding the token has paid a wallet, automatically and by its own claims, and the block that stands at. Add the token's earned(wallet) for everything holding it has earned. GET /api/tokens/{token}/earned/{wallet}
/api/tokens/{token}/position/{wallet}
A wallet's balance of the token and what it has bought and sold. GET /api/tokens/{token}/position/{wallet}

Wallets

/api/wallets/{wallet}/holdings
Every token the wallet holds, as cards with its balance and value. GET /api/wallets/{wallet}/holdings
/api/wallets/{wallet}/earned
What holding has paid it, token by token, with the tokens it has sold out of that pay holders, and the block that stands at. GET /api/wallets/{wallet}/earned
/api/wallets/{wallet}/launches
The tokens it launched. GET /api/wallets/{wallet}/launches
/api/wallets/{wallet}/lanes
The pools whose creator fees it is paid, directly or through a split. GET /api/wallets/{wallet}/lanes
/api/wallets/{wallet}/trades
Its last 100 trades across every token, newest first. GET /api/wallets/{wallet}/trades

Builders

/api/builders/programme
Montra Builders: the rules in force (the shares, the caps, the minimum), the terms' version and hash, the week under way and the programme's totals. GET /api/builders/programme
/api/builders
The approved builders: each one's codes, name, kind, website and what has been credited and paid to it. GET /api/builders
/api/builders/periods
Every week drafted or final: the protocol's revenue, the caps, what builders earned and are owed, the rates, and a final week's hash. GET /api/builders/periods
/api/builders/accounts/{wallet}
The builder a wallet is the account of, by its first code, and its standing. GET /api/builders/accounts/{wallet}
/api/builders/launch-check/{tx}
A launch transaction as the programme read it: the codes it carried, and whom it credited. GET /api/builders/launch-check/{tx}
/api/builders/{code}
A builder's record: its codes and contracts, what it is owed, holds and has been paid, and its week so far. GET /api/builders/{code}
/api/builders/{code}/stats
What its public page prints: the tokens launched through it, what they have traded, its top tokens and what it has been paid. GET /api/builders/{code}/stats
/api/builders/{code}/next-payout
What the next batch would pay it as things stand, and why it would pay less or nothing. GET /api/builders/{code}/next-payout
/api/builders/{code}/launches ?page, limit
The launches credited to it, newest first, with the trades, volume and protocol fee in each one's window and what it came to on final statements; up to 100 a page. GET /api/builders/{code}/launches?limit=25
/api/builders/{code}/trades ?page, limit
The trades through its routers, newest first, and whether each counts; up to 100 a page. GET /api/builders/{code}/trades?limit=25
/api/builders/{code}/statements
Its final statements, one a week: what it is owed and held, its lines and the statement's hash. GET /api/builders/{code}/statements
/api/builders/{code}/statements/{period}
One statement in full: the document its hash is of, every line with its pool, trades, protocol fee, share, rate and state. GET /api/builders/{code}/statements/{period}
/api/builders/{code}/payouts
Its payouts: each batch's amount, its state and the treasury's transaction that paid it. GET /api/builders/{code}/payouts

Live

/api/stream
Every trade as it is indexed, as server-sent events named trade. Reconnect with Last-Event-ID to be sent what you missed. GET /api/stream
/api/tokens/{token}/stream
The same, for one token's pool. GET /api/tokens/{token}/stream

Metadata and health

/metadata/{id}.json
A metadata document stored here: name, symbol, description, image and links, by the id its upload was answered with, which no token route gives. A token launched through Montra names its document on IPFS (ipfs://…), pinned as this one: read it from metadata in /api/tokens/{token}, which metadataUri names. The id in a card's imageUrl is the image's, and answers 404 here. GET /metadata/{id}.json
/health
The indexer's state: the block it has read to, the chain's head and how far behind it is. GET /health

For integrators

Terminals, wallets and apps can build on the pools without asking anyone: start with Build on Montra, Contract reference and Public API.

A product that brings launches earns a share of their fees: the Builder programme.

To talk to the team: @MontraXYZ on X.

For AI tools

Every page as Markdown in llms.txt, and all of it in one file at llms-full.txt.