API Reference

All endpoints return JSON. No authentication needed for public endpoints. Pro plan removes rate limits and extends history to 7 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://trady.app/api/signals?action=BUY"

# Get BTC signals above 75% confidence
curl "https://trady.app/api/signals?ticker=BTC-USD&minConfidence=75"

# Get one signal per ticker (snapshot)
curl "https://trady.app/api/signals/latest"

# With API key (Pro)
curl "https://trady.app/api/signals?limit=50" \
  -H "Authorization: Bearer trady_live_your_key_here"

Authentication

Public endpoints work without authentication but return at most 3 results. Pro accounts get the full feed with 7-day history and raw indicator data.

Option 1 — API key (recommended for bots): Generate a key from your dashboard → Settings → API key. Pass it as Authorization: Bearer trady_live_...in every request. Pro plan only.

Option 2 — Session cookie: Log in via POST /api/auth/login, then pass the returned trady_session cookie in subsequent requests.

Endpoints

GET/api/signals

Returns recent trading signals. Filtered by plan — free gets 3, Pro gets up to 100.

Query parameters

actionstringFilter by BUY or SELL
tickerstringFilter by ticker — BTC-USD, NVDA, EURUSD=X. Short aliases also work: BTC, EURUSD, GOLD, OIL, USDJPY
typestringFilter by signal type, e.g. RSI_OVERSOLD
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=BTC-USD
{
  "signals": [
    {
      "id": 142,
      "ticker": "BTC-USD",
      "type": "RSI_OVERSOLD",
      "action": "BUY",
      "confidence": 88,
      "price": 67420.50,
      "summary": "BTC-USD RSI hit 26 — ...",
      "data": { "rsi": 26.3, "threshold": 30 },
      "timeframe": "1d",
      "createdAt": "2025-01-15T14:32: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/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://trady.app/api/signals/badge">
<!-- SVG badge: "signals today | 14" in green/blue -->
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 trady_live_...
{
  "id": 42,
  "plan": "pro",
  "planPeriod": "monthly",
  "limits": {
    "signalsPerRequest": 100,
    "historyDays": 7,
    "rawIndicatorData": true,
    "telegramAlerts": true
  },
  "notifications": {
    "email": true,
    "telegram": true,
    "telegramLinked": true
  }
}
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
POST/api/subscribe

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

Query parameters

plan"pro" | "pro_annual"Monthly ($19) or annual ($149). Defaults to "pro".

Example

POST /api/subscribe { "plan": "pro" }
{ "url": "https://checkout.lemonsqueezy.com/..." }

Signal types

typeactiondescription
RSI_OVERSOLDBUYRSI dropped below 30. Mean-reversion setup.
RSI_OVERBOUGHTSELLRSI rose above 70. Potential pullback.
MACD_BULLISH_CROSSBUYMACD line crossed above signal line.
MACD_BEARISH_CROSSSELLMACD line crossed below signal line.
EMA_GOLDEN_CROSSBUYEMA20 crossed above EMA50.
EMA_DEATH_CROSSSELLEMA20 crossed below EMA50.
BB_LOWER_TOUCHBUYPrice touched lower Bollinger Band.
BB_UPPER_TOUCHSELLPrice touched upper Bollinger Band.
STOCH_RSI_OVERSOLDBUYStochastic RSI %K and %D both below 20. Faster-reacting oversold signal.
STOCH_RSI_OVERBOUGHTSELLStochastic RSI %K and %D both above 80. Faster-reacting overbought signal.
VOLUME_SPIKE_BULLBUYVolume ≥2× 20-day average with price up ≥1%. High volume confirms the move.
VOLUME_SPIKE_BEARSELLVolume ≥2× 20-day average with price down ≥1%. Heavy selling with conviction.
HAMMER_CANDLEBUYSmall body at top, long lower wick after a downtrend. Buyers absorbed selling pressure at the low — potential reversal.
SHOOTING_STARSELLSmall body at bottom, long upper wick after an uptrend. Buyers couldn't hold gains at the high — potential reversal.
BULLISH_ENGULFINGBUYCurrent green candle body fully covers previous red candle body. Strong momentum shift in favor of buyers.
BEARISH_ENGULFINGSELLCurrent red candle body fully covers previous green candle body. Strong momentum shift in favor of sellers.
RSI_BULL_DIVERGENCEBUYPrice made a lower low while RSI made a higher low. Classic signal that selling pressure is weakening — potential reversal up.
RSI_BEAR_DIVERGENCESELLPrice made a higher high while RSI made a lower high. Classic signal that buying pressure is fading — potential reversal down.

Covered markets

BTC-USDETH-USDSOL-USDXRP-USDADA-USDDOGE-USDBNB-USDAAPLNVDAMSFTTSLAAMZNGOOGLMETASPYQQQAMDNFLXCOINEURUSD=XGBPUSD=XJPY=XGC=FCL=F

Equity signals (AAPL, NVDA, MSFT, TSLA, AMZN, GOOGL, META, SPY, QQQ) only fire during US market hours. Crypto (BTC, ETH, SOL) and forex/commodities run 24/7.

Rate limits & plans

Free / Anonymous

  • 3 signals per request
  • 24h signal history
  • 30 requests/hour

Pro ($19/mo)

  • Up to 100 signals per request
  • 7-day signal history
  • Raw indicator data in response
  • 300 requests/hour
  • Telegram push alerts

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.

Create free account →