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.

openapi.json

Quick start

No auth required — try it now
# 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

GET/api/signals

Returns recent trading signals. Free access is delayed 24 hours (up to 20 signals); Pro is real time (up to 100).

Query parameters

actionstringFilter by BUY or SELL
tickerstringFilter by ticker — BTC-USD, NVDA, JPM. Short crypto aliases also work: BTC, ETH, SOL
typestringFilter by rule: RSI2_PULLBACK or DONCHIAN_BREAKOUT
limitnumberMax results (default 20, max 100)
minConfidencenumberOnly return signals at or above this confidence score (0–100)
sortstring'confidence' returns highest-confidence signals first (default: newest first)

Example

GET /api/signals?action=BUY&ticker=NVDA
{
  "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
  }
}
GET/api/signals/latest

Returns the most recent signal for each ticker. Good for getting a current-state snapshot without duplicates.

Example

GET /api/signals/latest
{
  "signals": [ /* one per ticker */ ],
  "count": 12,
  "as_of": "2025-01-15T14:32:00.000Z"
}
GET/api/signals/export.csv

Downloads 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

daysnumberDays to include (1–30, default 30)

Example

GET /api/signals/export.csv?days=30 Authorization: Bearer vantum_live_...
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
...
GET/api/signals/badge

Returns an SVG badge showing the number of signals generated today. No auth required. Embed in README files, Discord server descriptions, or forum signatures.

Example

GET /api/signals/badge // Returns SVG image — embed with <img src="https://vantum.cc/api/signals/badge">
<!-- SVG badge: "signals today | 14" in green/blue -->
GET/api/signals/stats

Returns 24h win rates by signal type, including retired v1 types. No auth required. For the closed-trade record and the backtest, see /accuracy.

Example

GET /api/signals/stats
{
  "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."
}
GET/api/me

Returns 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

GET /api/me // session cookie or Authorization: Bearer vantum_live_...
{
  "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"]
  }
}
POST/api/auth/login

Authenticates and sets a session cookie (30 days). Required before calling authenticated endpoints.

Query parameters

emailstringAccount email
passwordstringAccount password

Example

POST /api/auth/login { "email": "you@example.com", "password": "..." }
{ "ok": true, "plan": "pro" }
POST/api/auth/register

Creates a new account and sets a session cookie. Use this before /api/auth/login when building automated workflows.

Query parameters

emailstringEmail address
passwordstringPassword (min 8 chars)

Example

POST /api/auth/register { "email": "you@example.com", "password": "securepass" }
{ "ok": true }  // 201 Created — session cookie set
PATCH/api/settings

Update notification preferences. All fields optional — only send what you want to change. webhookUrl and alertTickers require Pro plan.

Query parameters

emailNotificationsbooleanEnable or disable email alerts
telegramNotificationsbooleanEnable or disable Telegram alerts (Pro only)
webhookUrlstring | nullHTTPS endpoint for signal.created POST events. Set to null to disable. Pro only.
alertTickersstring[] | nullRestrict alerts to specific tickers. null = all 24 tickers. Pro only. Valid values: BTC-USD, ETH-USD, NVDA, etc.

Example

PATCH /api/settings { "alertTickers": ["BTC-USD", "ETH-USD", "NVDA"], "webhookUrl": "https://your-server.com/hook" }
{ "ok": true }
POST/api/settings/test-webhook

Fires 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

POST /api/settings/test-webhook
{ "ok": true, "status": 200 }
// or { "ok": false, "error": "Timed out after 5 seconds" }
POST/api/subscribe

Creates a Pro checkout session. Returns a URL to redirect the user to. Requires authentication.

Example

POST /api/subscribe
{ "url": "https://checkout.stripe.com/..." }

Signal types

typeactiondescription
RSI2_PULLBACKBUYRSI(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_BREAKOUTBUY / SELLCrypto 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-USDAAPLNVDAMSFTTSLASPYQQQAMZNGOOGLMETAAMDNFLXCOINJPMVMAUNHHDPGJNJXOMCVXKOPEPWMTCOSTBACADBECRMORCLINTCCSCOAVGOQCOMTXNMRKPFEABBVLLYTMONKEMCDDISBACATGEHONIBMGSMSTVZUPSIWMDIAXLFXLEXLK

Stocks 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.