Protocol

Public API

Read-only JSON endpoints with schemas and examples.

Base URL: https://dapp.pinarc.io/api/v1. No key is required for reads. Amounts are plain numbers: USDG in USDG (not 6-dec units), tokens in whole tokens, prices in USDG per token.

Endpoints

EndpointReturns
GET /health{ ok, chain, last_block, synced_at, ts }
GET /stats{ launches_total, graduated_total, volume_24h, usdg_locked_bonds, usdg_floor_reserves, last_block, synced_at }
GET /tokens?tab=trending&sort=volume_24h&dir=desc&limit=50{ tokens: Token[] }. tab = trending · new · graduating · graduated; sortmcap_usdg volume_24h holders created_at change_24h change_1h curve_progress liquidity_usdg buys_24h; limit ≤ 200
GET /tokens/:address{ token, trades: Trade[30], holders: Holder[50] }. :address may be the symbol
GET /tokens/:address/trades?limit=50{ trades: Trade[] }, newest first, limit ≤ 500
GET /tokens/:address/candles?tf=5m&limit=300{ tf, candles: Candle[], price, status }. tf = 1m 5m 15m 1h 4h 1d; limit ≤ 1000
GET /metadata/:id.json · GET /metadata/:id/imageHosted metadata (CORS *, cached 5 min / immutable)
POST /metadata{ id, uri } — see Token metadata
POST /sync{ from, to, head, logs, tokensTouched, ms } or { throttled: true }

Token

{
  "address": "0x…", "curve": "0x…", "creator": "0x…", "pair": "0x…|null",
  "name": "Hood Doge", "symbol": "HDOGE", "metadata_uri": "https://…/api/v1/metadata/….json",
  "description": "…", "image": "https://…/image|null", "website": "…", "x_url": "…", "telegram_url": "…",
  "status": "batch|live|graduated",
  "created_at": 1789600000, "created_block": 1234567, "create_tx": "0x…",
  "batch_ends_at": 1789600030, "anti_sniper_until": 1789600150, "batch_usdg": 812.5, "batch_settled": 1,
  "batch_clearing_price": 0.0000041, "batch_tokens_out": 198000000, "batch_refund": 0,
  "total_supply": 1000000000, "curve_supply": 800000000, "lp_supply": 200000000, "virtual_tokens": 1073000000,
  "graduation_usdg": 12400, "trade_fee_bps": 100, "creator_share_bps": 4000,
  "max_wallet": 10000000, "max_tx": 5000000, "cooldown_seconds": 10,
  "floor_bps": 1000, "lp_lock_seconds": 31536000, "team_allocation": 80000000, "team_vesting_id": 3,
  "bond_usdg": 500, "bond_status": "active|released|slashed|none", "dev_buy_usdg": 100,
  "price_usdg": 0.0000504, "usdg_raised": 10168.2, "tokens_sold": 655000000, "curve_progress": 81.9,
  "mcap_usdg": 50400, "liquidity_usdg": 10168.2, "holders": 350, "volume_24h": 18300, "buys_24h": 810, "sells_24h": 472,
  "change_1h": -14.6, "change_24h": 64.7, "top10_pct": 28.6, "creator_pct": 3.0, "creator_sold": 0,
  "creator_fees_usdg": 73.2, "floor_reserve_usdc": 0, "last_trade_at": 1789603000,
  "graduated_at": null, "lp_lock_id": null, "lp_burned": 0, "lp_usdg": null, "lp_tokens": null
}

Trade

{ "tx_hash": "0x…", "log_index": 12, "ts": 1789603000, "block": 1234890, "venue": "curve|batch|dex",
  "side": "buy|sell", "trader": "0x…", "usdg": 250, "tokens": 4912610, "price": 0.0000509, "fee": 2.5 }

Candle

Built from trades on the server: for each bucket of tf seconds, o = previous close (or the first trade), h/l = max/min trade price, c = last trade price, v = summed USDG; empty buckets carry the previous close forward. Curve and DEX trades are merged into one series.

{ "t": 1789603200, "o": 0.0000501, "h": 0.0000512, "l": 0.0000498, "c": 0.0000509, "v": 1840.5 }

Example

curl https://dapp.pinarc.io/api/v1/tokens?tab=graduating | jq '.tokens[] | {symbol, curve_progress, price_usdg, bond_usdg, creator_sold}'
curl "https://dapp.pinarc.io/api/v1/tokens/HDOGE/candles?tf=1h&limit=48" | jq '.candles[-1]'

Rate limit: 60 requests per minute per IP. Websocket streams are planned.