Market Data¶
All endpoints on this page are GET requests with no parameters, relative to the base URLs. Examples below use testnet; swap in the mainnet base URL for production.
Tokens Info¶
GET /tokens/info
Returns every token known to Cantex, including tokens that are not currently tradable.
{
"tokens": [
{
"info": {
"instrument_admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"instrument_id": "Amulet",
"instrument_name": "Canton Coin",
"instrument_symbol": "CC",
"coingecko_id": "canton-coin"
}
}
]
}
The instrument_admin / instrument_id pair is how you reference a token in every other endpoint, including Connect quotes.
coingecko_id is the CoinGecko coin this Canton instrument represents, for use by price aggregators. Tokens use their own CoinGecko listing where one exists (e.g. USDCx → xreserve-bridged-usdc-canton); a 1:1-backed representation without its own listing maps to its underlying asset (e.g. USDC.B → usd-coin). It is null for tokens that cannot be priced via CoinGecko.
Swap Info¶
GET /swap/info
Returns the tokens that are currently tradable (i.e. present in at least one live pool) and the instrument used for network fees.
{
"data": {
"fees": {
"network_fee": {
"instrument_admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"instrument_id": "Amulet"
}
},
"tokens": [
{
"instrument_admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"instrument_id": "Amulet",
"instrument_name": "Canton Coin",
"instrument_symbol": "CC"
}
],
"updated_at": "2026-08-20T12:34:56.789012+00:00"
}
}
This response is cached for several minutes; a newly added pool can take a few minutes to show up here.
Markets Info¶
GET /markets/info
Returns the list of market symbols, the candle periods available, and the websocket endpoint and channel names for streaming ticker and candle data.
{
"data": {
"updated_at": "2026-08-20T12:34:56.789012+00:00",
"websocket": {
"endpoint": "/v1/ws/public",
"channel_formats": {
"ticker": "market.<SYMBOL>.ticker",
"candles": "market.<SYMBOL>.candles.<PERIOD>"
}
},
"candle_periods": [60, 300, 600, 3600],
"markets": [
{
"symbol": "BTC-USDC",
"source": "external",
"kinds": ["ticker", "candles"],
"channels": {
"ticker": "market.BTC-USDC.ticker",
"candles": [
"market.BTC-USDC.candles.60",
"market.BTC-USDC.candles.300",
"market.BTC-USDC.candles.600",
"market.BTC-USDC.candles.3600"
]
}
},
{
"symbol": "CC-USDCX",
"source": "cantex",
"kinds": ["ticker", "candles"],
"channels": {
"ticker": "market.CC-USDCX.ticker",
"candles": [
"market.CC-USDCX.candles.60",
"market.CC-USDCX.candles.300",
"market.CC-USDCX.candles.600",
"market.CC-USDCX.candles.3600"
]
}
}
]
}
}
sourceis"cantex"for markets derived from Cantex pools and"external"for reference price streams (e.g.BTC-USDC,ETH-USDC,CC-USDC) — see Market sources.candle_periodsare in seconds (1m, 5m, 10m, 1h).- Symbols are
<BASE>-<QUOTE>in upper case, e.g.CC-USDCX,CETH-CC.
Info
The websocket channels listed here are served on the public websocket at /v1/ws/public. See Websocket Streams for how to subscribe and the message formats.
Exchange Info¶
GET /exchange/info
Returns the current fee schedule and exchange policy.
{
"data": {
"updated_at": "2026-08-20T12:34:56.789012+00:00",
"fees": {
"transfer": {
"amount": "1",
"instrument_admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"instrument_id": "Amulet"
},
"allocation": {
"amount": "0",
"instrument_admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"instrument_id": "Amulet"
}
},
"policy": {
"free_transfers_per_day": 1,
"min_recommended_cc_balance": "10",
"min_swap_amount_for_fee_waiver": "1000",
"min_swap_amount_size_cc": "10",
"min_connect_swap_amount_size_cc": "50",
"need_invite_code": false
}
}
}
feesare denominated in the listed instrument (CC).min_swap_amount_size_ccis the minimum swap size, andmin_swap_amount_for_fee_waiveris the size (both in CC or CC-equivalent) above which the network fee is waived.min_connect_swap_amount_size_ccis the minimum size for a Connect swap, in CC or CC-equivalent.free_transfers_per_dayis the number of free transfers (withdrawals) per day.need_invite_codetells you whether new account creation currently requires an invite code.
Fee values and policy can change; always use the values from this endpoint rather than hard-coding them.
Pools Info¶
GET /pools/info
Returns the liquidity pools currently available.
{
"pools": [
{
"contract_id": "…",
"pool_id": "…",
"token_a_instrument_id": "Amulet",
"token_a_instrument_admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"token_b_instrument_id": "USDCx",
"token_b_instrument_admin": "decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61",
"fee_rate": "0.003",
"admin_fee_share": "…"
}
]
}
fee_rate is the pool's swap fee as a fraction (e.g. 0.003 = 0.30%).
Pools State¶
GET /pools/state
Returns the live state of every pool: reserves, mid price and CC-denominated TVL, alongside enough identity (pool, market symbol, token pair) to use the response standalone. This is the endpoint to use for TVL and pool-depth data — for example, DefiLlama-style TVL aggregation.
{
"data": {
"updated_at": "2026-08-26T12:34:56.789012+00:00",
"pools": [
{
"pool_id": "5334933188510330895",
"contract_id": "…",
"symbol": "CC-USDCX",
"token_a_instrument": {
"id": "Amulet",
"admin": "DSO::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
"symbol": "CC"
},
"token_b_instrument": {
"id": "USDCx",
"admin": "decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61",
"symbol": "USDCx"
},
"fee_rate": "0.0005000000",
"reserve_a": "1284561.5537909740",
"reserve_b": "152387.7953121842",
"price": "0.1186301235",
"tvl_cc": "2569123.1075819480"
}
]
}
}
reserve_a/reserve_bare the pool's current balances oftoken_a_instrument/token_b_instrument, in token units.symbolis the pool's market pair ordered base-quote, matching the symbols in/markets/info;priceis the mid price of one unit of the base token denominated in the quote token, derived from the reserves (nullwhile a pool has no reserves).tvl_ccis the pool's total value locked denominated in CC (twice the CC-side reserve).- Reserves update as swaps execute; responses may be cached for a few seconds.
Join symbol against the websocket ticker channels for live prices, and token_*_instrument against /tokens/info for token metadata including coingecko_id.
Pools Proof¶
GET /pools/proof
Verification companion to /pools/state, intended for aggregators and auditors. For each active pool it returns the latest on-chain reserve contract: its contract ID, the Canton created_event_blob, template identity, ledger timestamp and the reserve amounts.
{
"data": {
"updated_at": "2026-08-28T09:00:00.000000+00:00",
"pools": [
{
"pool_id": "5334933188510330895",
"pool_cid": "…",
"token_a_instrument": { "id": "Amulet", "admin": "DSO::1220…" },
"token_b_instrument": { "id": "USDCx", "admin": "decentralized-usdc-interchain-rep::1220…" },
"reserve_contract": {
"contract_id": "…",
"update_id": "…",
"template": {
"package_id": "…",
"package_name": "cantex-amm-pool-v0",
"module_name": "Cantex.AmmPool.V0.Core",
"entity_name": "…"
},
"ledger_created_at": "2026-08-28T08:59:57.123456+00:00",
"created_event_blob": "CgMyLjES…(base64)…",
"reserve_a": "1284561.5537909740",
"reserve_b": "152387.7953121842",
"total_lp_supply": "…"
}
}
]
}
}
created_event_blob is the Canton explicit disclosure serialization of the reserve contract's create event. Because a Canton contract ID cryptographically commits to the contract's contents, a third party can decode the blob, read the reserves, and recompute the contract ID to verify that the balances reported by /pools/state are genuine on-chain state — without any access to ledger infrastructure. The blob proves contents and authenticity; currency is attested by this endpoint serving it as the pool's latest reserve state, together with ledger_created_at.
Stats¶
GET /stats
Returns exchange-wide statistics: swap counts and volume, a 30-day volume chart, total value locked and active trader counts.
{
"stats": {
"swaps": {
"count_1h": 42,
"cc_volume_1h": "12345.67",
"count_24h": 980,
"cc_volume_24h": "234567.89",
"count_7d": 6543,
"cc_volume_7d": "1234567.89",
"count_30d": 25000,
"cc_volume_30d": "4567890.12"
},
"swap_performance": {
"chart_data": [{ "seconds": 2, "count": 2 }],
"avg_speed": 6.2,
"consistency": 2.8,
"fastest": 2.0
},
"chart_volume": [
{ "day_bucket": "2026-08-19T00:00:00+00:00", "cc_volume_total": "98765.43" }
],
"pool_tvl": { "tvl_cc": "1234567.89" },
"active_traders": { "count_90d": 1234 }
}
}
- Volumes (
cc_volume_*,tvl_cc) are denominated in CC. chart_volumeis daily CC volume over the last 30 days.active_traders.count_90dis the number of unique traders over the last 90 days.