Public API

Salvo publishes a small, read-only REST API so third-party tools (trackers, bots, aggregators) can read live token data without scraping the app. It is the same data the app itself renders from, never a separate copy: prices, market caps and curve state all come from the same precomputed store the home page and token pages read.

Every endpoint below is GET and returns JSON. There is no write access: nothing on this API creates a token, places a trade or moves funds: every write on Salvo is a transaction your own wallet signs, straight to the contract.

Base URL

All paths are relative to the app's own domain, versioned under /v1:

https://salvolaunch.com/v1

Rate limits

Unauthenticated requests are limited to 60 requests per minute per IP address. This is a starting number, not a permanent one: if it's too tight for a legitimate integration, ask; there is no paid or authenticated tier today.

Every response carries rate-limit headers:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 41
X-RateLimit-Reset: 1788000060

X-RateLimit-Reset is a Unix timestamp (seconds) for when the current window resets. Once the limit is hit, a request gets a 429 instead of the endpoint's normal response:

HTTP/1.1 429 Too Many Requests
Retry-After: 23

{"error": "rate limit exceeded", "limit": 60, "window_seconds": 60, "reset_at": 1788000060}

Back off until reset_at (or for Retry-After seconds) before retrying.

Errors

A malformed request (a bad address, an out-of-range page number, an unsupported interval) answers 400 with an issues list describing what was wrong. An unknown token address answers a clean 404. Neither case is ever a silent failure or a 500:

{"error": "expected a 20-byte hex token address"}
{"error": "unknown token"}

GET /v1/snapshot

The current top-ranked tokens, burn counter and cap state, as one compact JSON blob refreshed roughly every 1-2 seconds. This is the fastest way to see current market caps and ranks for the tokens that matter most; it does not include every token that has ever launched (see /v1/tokens/:address for any individual token).

curl https://salvolaunch.com/v1/snapshot

The response shape is the same versioned snapshot schema the app itself consumes: see the version field if you need to detect a breaking change ahead of time.

GET /v1/tokens/:address

Full detail for one token: current price and market cap, curve progress toward graduation, verified status, holder summary, declared team allocation, a recent-activity feed and an inline recent-candles window. :address is the token's 20-byte hex contract address (0x...).

curl https://salvolaunch.com/v1/tokens/0x1234567890123456789012345678901234567890
{
  "version": 1,
  "generated_at": 1788000000,
  "token": {
    "address": "0x1234567890123456789012345678901234567890",
    "name": "Example",
    "ticker": "$EXAMPLE",
    "verified": false,
    "price_usd": 0.0000421,
    "market_cap_usd": 42100,
    "curve_pct_to_graduation": 62.5,
    "graduated": false
  },
  "holders": { "holder_count": 318, "top_ten_holder_pct": 24.1 },
  "activity": [ { "side": "buy", "usdc_amount": "15000000", "ts": 1787999940 } ],
  "candles": { "interval": "1h", "items": [ { "t": 1787994000, "o": 41000, "h": 43200, "l": 40800, "c": 42100, "v": 3120 } ] }
}

(Trimmed for readability: the real response includes every field documented on the token page itself.)

GET /v1/tokens/:address/candles

OHLC candle history for one token at a chosen bucket width.

ParamValuesDefault
interval1m, 5m, 1h, 1d1h
limit1-1000200
beforea bucket-start Unix timestamp; returns buckets strictly before it(none)
curl "https://salvolaunch.com/v1/tokens/0x1234567890123456789012345678901234567890/candles?interval=1d&limit=90"
{
  "version": 1,
  "token": "0x1234567890123456789012345678901234567890",
  "interval": "1d",
  "items": [
    { "t": 1787900000, "o": 3125, "h": 5200, "l": 3000, "c": 4800, "v": 9600 }
  ]
}

items is chronological, oldest first. o/h/l/c are market-cap dollars (the primary series Salvo charts everywhere); v is USDC volume in whole dollars. To page further back than one response, pass before set to the oldest t you already have.

GET /v1/tokens/:address/trades

Paginated recent trades for one token, newest first.

ParamValuesDefault
page1 and up1
page_size1-10025
curl "https://salvolaunch.com/v1/tokens/0x1234567890123456789012345678901234567890/trades?page=1&page_size=50"
{
  "version": 1,
  "token": "0x1234567890123456789012345678901234567890",
  "page": 1,
  "page_size": 50,
  "total_rows": 812,
  "total_pages": 17,
  "trades": [
    { "side": "buy", "trader": "0xabc...", "usdc_amount": "15000000", "token_amount": "356000000000000000000000", "ts": 1787999940, "tx_hash": "0x..." }
  ]
}

usdc_amount is raw 6-decimal USDC as a decimal string, token_amount is raw 18-decimal tokens as a decimal string, both bigint-safe, never floats. This endpoint always paginates; it never returns every trade a token has ever had in one response.