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
| Endpoint | Returns |
|---|---|
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; sort ∈ mcap_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/image | Hosted 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.