API Reference
All endpoints return JSON. No authentication needed for public endpoints. Pro plan removes rate limits and extends history to 30 days. Suitable for trading bots, AI agents, and dashboard integrations.
Quick start
# Get the latest BUY signals curl "https://vantum.cc/api/signals?action=BUY" # Get BTC signals above 75% confidence curl "https://vantum.cc/api/signals?ticker=BTC-USD&minConfidence=75" # Get one signal per ticker (snapshot) curl "https://vantum.cc/api/signals/latest" # Get win rates by signal type (historical accuracy) curl "https://vantum.cc/api/signals/stats" # With API key (Pro) curl "https://vantum.cc/api/signals?limit=50" \ -H "Authorization: Bearer vantum_live_your_key_here"
Authentication
Public endpoints work without authentication but return at most 3 results. Pro accounts get signals in real time with 30-day history, raw indicator data, and exit events by webhook.
Option 1 — API key (recommended for bots): Generate a key from your dashboard → Settings → API key. Pass it as Authorization: Bearer vantum_live_...in every request. Pro plan only.
Option 2 — Session cookie: Log in via POST /api/auth/login, then pass the returned vantum_session cookie in subsequent requests.
Endpoints
/api/signalsReturns recent trading signals. Free access is delayed 24 hours (up to 20 signals); Pro is real time (up to 100).
Query parameters
| action | string | Filter by BUY or SELL |
| ticker | string | Filter by ticker — BTC-USD, NVDA, JPM. Short crypto aliases also work: BTC, ETH, SOL |
| type | string | Filter by rule: RSI2_PULLBACK or DONCHIAN_BREAKOUT |
| limit | number | Max results (default 20, max 100) |
| minConfidence | number | Only return signals at or above this confidence score (0–100) |
| sort | string | 'confidence' returns highest-confidence signals first (default: newest first) |
Example
{
"signals": [
{
"id": 412,
"ticker": "NVDA",
"type": "RSI2_PULLBACK",
"action": "BUY",
"confidence": 85,
"price": 214.13,
"summary": "NVDA pulled back sharply inside an uptrend: RSI(2) 3.8, price $214.13 above its 200-day average ($202.97). Plan: buy at the next open, sell at the open after the first close above the 5-day average (now $221.50), or after 10 trading days.",
"data": { "rsi2": 3.8, "sma200": 202.97, "sma5": 221.5, "maxHold": 10 },
"timeframe": "1d",
"createdAt": "2026-10-17T00:15:00.000Z"
}
],
"meta": {
"count": 1,
"plan": "pro",
"limit": 20
}
}/api/signals/latestReturns the most recent signal for each ticker. Good for getting a current-state snapshot without duplicates.
Example
{
"signals": [ /* one per ticker */ ],
"count": 12,
"as_of": "2025-01-15T14:32:00.000Z"
}/api/signals/export.csvDownloads up to 30 days of signal history as a CSV file. Pro plan required. Columns: id, ticker, type, action, confidence, price, stop, target, timeframe, createdAt, summary, outcome_win, outcome_deltaPct. stop/target are ATR-based risk levels (empty when ATR unavailable). Designed for backtesting and quantitative analysis.
Query parameters
| days | number | Days to include (1–30, default 30) |
Example
id,ticker,type,action,confidence,price,stop,target,timeframe,createdAt,summary,outcome_win,outcome_deltaPct 412,NVDA,RSI2_PULLBACK,BUY,85,214.13,,,1d,2026-10-17T00:15:00.000Z,...,true,1.4 ...
/api/signals/badgeReturns an SVG badge showing the number of signals generated today. No auth required. Embed in README files, Discord server descriptions, or forum signatures.
Example
<!-- SVG badge: "signals today | 14" in green/blue -->
/api/signals/statsReturns 24h win rates by signal type, including retired v1 types. No auth required. For the closed-trade record and the backtest, see /accuracy.
Example
{
"overall": { "total": 150, "wins": 86, "winRate": 57 },
"byType": [
{ "type": "RSI2_PULLBACK", "total": 120, "wins": 70, "winRate": 58, "avgDeltaPct": 0.4 },
...
],
"last30d": {
"overall": { "total": 60, "wins": 35, "winRate": 58 },
"byType": [ ... ]
},
"note": "Win = signal direction correct after 24h. Updated hourly. last30d shows recent accuracy."
}/api/meReturns the authenticated user's plan and API limits. Useful for bots to check access level before making calls. Supports both session cookie and Bearer API key.
Example
{
"id": 42,
"plan": "pro",
"planPeriod": "monthly",
"limits": {
"signalsPerRequest": 100,
"historyDays": 30,
"rawIndicatorData": true,
"telegramAlerts": true
},
"notifications": {
"email": true,
"telegram": true,
"telegramLinked": true,
"webhookUrl": "https://your-server.com/vantum-hook",
"alertTickers": ["BTC-USD", "ETH-USD", "NVDA"]
}
}/api/auth/loginAuthenticates and sets a session cookie (30 days). Required before calling authenticated endpoints.
Query parameters
| string | Account email | |
| password | string | Account password |
Example
{ "ok": true, "plan": "pro" }/api/auth/registerCreates a new account and sets a session cookie. Use this before /api/auth/login when building automated workflows.
Query parameters
| string | Email address | |
| password | string | Password (min 8 chars) |
Example
{ "ok": true } // 201 Created — session cookie set/api/settingsUpdate notification preferences. All fields optional — only send what you want to change. webhookUrl and alertTickers require Pro plan.
Query parameters
| emailNotifications | boolean | Enable or disable email alerts |
| telegramNotifications | boolean | Enable or disable Telegram alerts (Pro only) |
| webhookUrl | string | null | HTTPS endpoint for signal.created POST events. Set to null to disable. Pro only. |
| alertTickers | string[] | null | Restrict alerts to specific tickers. null = all 24 tickers. Pro only. Valid values: BTC-USD, ETH-USD, NVDA, etc. |
Example
{ "ok": true }/api/settings/test-webhookFires a test signal.created POST to your configured webhook endpoint. Returns ok:true if your endpoint responded with 2xx. Rate limited to 5/hour. Pro plan required.
Example
{ "ok": true, "status": 200 }
// or { "ok": false, "error": "Timed out after 5 seconds" }/api/subscribeCreates a Pro checkout session. Returns a URL to redirect the user to. Requires authentication.
Example
{ "url": "https://checkout.stripe.com/..." }Signal types
| type | action | description |
|---|---|---|
| RSI2_PULLBACK | BUY | RSI(2) under 10 while price is above its 200-day average. Enter at the next open; exit at the open after the first close above the 5-day average, or after 10 trading days. Stocks, ETFs and crypto. |
| DONCHIAN_BREAKOUT | BUY / SELL | Crypto close beyond the 20-day range. Enter at the next open with a 2 ATR stop; exit after a close through the opposite 10-day range. |
Covered markets
BTC-USDETH-USDSOL-USDXRP-USDADA-USDDOGE-USDBNB-USDLTC-USDLINK-USDAVAX-USDDOT-USDBCH-USDXLM-USDTRX-USDATOM-USDETC-USDAAPLNVDAMSFTTSLASPYQQQAMZNGOOGLMETAAMDNFLXCOINJPMVMAUNHHDPGJNJXOMCVXKOPEPWMTCOSTBACADBECRMORCLINTCCSCOAVGOQCOMTXNMRKPFEABBVLLYTMONKEMCDDISBACATGEHONIBMGSMSTVZUPSIWMDIAXLFXLEXLKStocks and ETFs are decided on the previous session's close (weekdays only); crypto on the 00:00 UTC daily close, every day. The 20-day breakout rule runs on crypto only.
MCP server (AI agents)
Agents that speak the Model Context Protocol can connect to https://vantum.cc/api/mcp (Streamable HTTP, JSON responses). Tools: get_signals, get_rules, get_track_record, get_ledger and get_pricing. All are read-only.
Without a key, signals are delayed 24 hours. Add Authorization: Bearer vantum_live_... for real-time Pro access.
Webhook delivery (Pro)
Pro users can configure an HTTPS endpoint in Dashboard → Settings → Webhook delivery. Every signal fires a POST to that URL with Content-Type: application/json and X-Vantum-Event: signal.created. When a trade's exit rule fires, a second POST arrives with X-Vantum-Event: signal.exit and { id, ticker, type, action, exit, price, returnPct }.
Payload shape:
POST https://your-endpoint.com/hook
X-Vantum-Event: signal.created
Content-Type: application/json
{
"id": 1234,
"ticker": "BTC-USD",
"type": "DONCHIAN_BREAKOUT",
"action": "BUY",
"confidence": 75,
"price": 84210.00,
"stop": 80150.00,
"target": null,
"summary": "BTC-USD closed above its 20-day high ($83,900) at $84,210. Plan: buy at the next open, stop at $80,150 (2 ATR), exit at the open after a close below the 10-day low (now $79,400).",
"data": { "channelHigh": 83900, "channelLow": 76100, "atr": 2030, "stop": 80150 },
"createdAt": "2026-10-17T00:15:00.000Z"
}Delivery is fire-and-forget with a 5-second timeout. Your endpoint must respond within 5 seconds. Every delivery attempt (success or failure) is logged to your account.
To verify your endpoint is reachable, use the Send test event button in the dashboard, or POST /api/settings/test-webhook (authenticated, Pro only). Test payloads include "_test": true so you can filter them out.
Rate limits & plans
Free / Anonymous
- Up to 20 signals per request
- Signals delayed 24 hours
- 30 requests/hour
Pro ($19/mo)
- Up to 100 signals per request
- 30-day signal history
- Raw indicator data in response
- 300 requests/hour
- Telegram push alerts
- Exit alerts for every trade (Telegram, email, webhook)
- Alert ticker filter — restrict alerts to specific markets (PATCH /api/settings alertTickers)
- Email alerts
- Webhook delivery to your endpoint
- CSV export for backtesting (outcome data included)
Rate-limited responses return HTTP 429 with an accurate Retry-After header (seconds until window reset). All responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (Unix timestamp) headers.