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.
| Param | Values | Default |
|---|---|---|
interval | 1m, 5m, 1h, 1d | 1h |
limit | 1-1000 | 200 |
before | a 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.
| Param | Values | Default |
|---|---|---|
page | 1 and up | 1 |
page_size | 1-100 | 25 |
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.