API Documentation

Base URL: https://api.irrationalsignals.com

Quick Start

Get your first signal in under a minute:

  1. Create an account to get your API key
  2. Call the signals endpoint with your key
  3. Receive live trading signals during market hours (10:47 AM – 3:47 PM ET) — see schedule
curl -H "X-API-Key: YOUR_API_KEY" \
  https://api.irrationalsignals.com/v1/signals

Python SDK

The official Python SDK wraps the API with typed models and error handling. Requires Python 3.9+.

Install

pip install irrationalsignals

Usage

from irrationalsignals import Client

client = Client("YOUR_API_KEY")
response = client.get_signals()

for signal in response.signals:
    print(f"{signal.symbol} {signal.direction} (win rate: {signal.win_rate:.0%})")
    if signal.execution_guidance:
        eg = signal.execution_guidance
        print(f"  Entry: ${eg.entry_price}  Exit: ${eg.exit_target}")

Filter by Sector or Hour

# Filter by sector
response = client.get_signals(sector="Technology")

# Same-day lookback (Max tier only)
response = client.get_signals(hour=14)

Error Handling

from irrationalsignals import Client, AuthError, RateLimitError, APIError

client = Client("YOUR_API_KEY")

try:
    response = client.get_signals()
except AuthError:
    print("Invalid API key")
except RateLimitError as e:
    print(f"Rate limited. Retry after: {e.retry_after}s")
except APIError as e:
    print(f"API error {e.status_code}: {e.detail}")

View on PyPI

Authentication

All API requests require authentication via the X-API-Key header:

X-API-Key: isk_free_abc123...

Create an account to get your API key. Keys are prefixed with your tier (e.g., isk_free_, isk_pro_, isk_max_). You can manage your keys from the dashboard.

Signals

GET /v1/signals

Get live trading signals. Available during US market hours — see signal schedule for exact times.

Query Parameters

ParameterTypeDescription
sectorstringFilter by sector. One of: Technology, Consumer Cyclical, Communication Services
hourintET hour for same-day lookback (10–15). Max only. See schedule.

Request

# Basic — get latest signals
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.irrationalsignals.com/v1/signals"

# Filter by sector
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.irrationalsignals.com/v1/signals?sector=Technology"

# Same-day lookback (Max only)
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.irrationalsignals.com/v1/signals?hour=14"

Response

Free tier gets 1 signal per day from the first market hour (10:47 AM ET); Pro gets up to 8 per hour; Pro Max gets all signals. Fields not available for your tier are omitted entirely.

{
  "market_hour": "2026-03-13T17:00:00+00:00",
  "signal_count": 1,
  "tier": "free",
  "next_update": "2026-03-13T17:50:00+00:00",
  "signals": [
    {
      "symbol": "MRVL",
      "direction": "BUY",
      "win_rate": 0.78,
      "win_rate_type": "per_symbol",
      "current_price": 87.52,
      "vix_at_signal": 18.4,
      "sector": "Technology",
      "industry": "Semiconductors",
      "execution_guidance": {
        "entry_price": 87.45,
        "expected_return_pct": 0.0123,
        "exit_target": 88.52,
        "primary_horizon": "2h"
      }
    }
  ],
  "disclaimer": "Not investment advice. Signals are statistical observations, not recommendations."
}

Response Fields

FieldTypeDescription
market_hourstringISO 8601 timestamp of the market hour these signals cover.
signal_countintNumber of signals in this response.
tierstringYour current tier (free, pro, or max).
next_updatestringISO 8601 timestamp of when the next batch of signals will be available. null after the last signal of the day.
signalsarrayArray of signal objects (see below).
disclaimerstringLegal disclaimer included in every response.

Signal Fields

FieldTypeTierDescription
symbolstringAllTicker symbol (e.g., MRVL, AAPL).
directionstringAllBUY or SELL — the predicted direction.
win_ratefloatAllHistorical win rate for this signal pattern (0.0 – 1.0). E.g., 0.78 means 78% of past signals with similar characteristics were correct. See win_rate_type for how this value was derived.
win_rate_typestringAllSource of the win_rate value. One of:
  • per_symbol — Individually validated for this symbol + signal pattern (≥10 samples), paired with a discovery-derived expected_return_pct. Highest confidence.
  • all_symbol — Symbol-specific but below the eligibility threshold. Less validated than per_symbol but still symbol-specific.
  • pooled — Signal-level rate averaged across all symbols. The symbol itself was not individually validated; actual per-symbol performance can diverge substantially. Treat as lower confidence.
Historical signals written before this field existed may be null — treat null as equivalent to pooled. Filter on win_rate_type == "per_symbol" if you only want individually validated signals.
current_pricefloatAllPrice of the stock at the time the signal was generated.
vix_at_signalfloatAllCBOE Volatility Index (VIX) at signal time. Lower VIX (<20) generally means calmer markets with more signals; higher VIX (>25) means fewer but potentially higher-conviction signals.
sectorstringAllGICS sector: Technology, Consumer Cyclical, or Communication Services.
industrystringAllIndustry within the sector (e.g., Semiconductors, Software).

Execution Guidance Fields

Included in every signal. Pro Max tier adds additional fields marked below.

FieldTypeTierDescription
entry_pricefloatAllSuggested entry price. Compare to current_price to gauge whether the opportunity is still within range.
expected_return_pctfloatAllExpected return from entry to exit target, expressed as a decimal (e.g., 0.008 = 0.8%). Derived from the signal type's per-signal empirical 2.5-hour (150-minute) paper-forward return over the trailing 90 days of historical price data, refreshed weekly. Values are clipped to a sensible range (0.3% minimum, 1.5% maximum) and default to 0.5% for signal types with insufficient historical data (<30 samples in the 90-day window).
exit_targetfloatAllSuggested exit price for the signal. Computed as entry_price × (1 + expected_return_pct). Intended as an execution reference — you're free to exit earlier or later based on your own risk tolerance.
primary_horizonstringAllExpected time horizon for the signal (typically 2h). Signals are designed for intraday holds.
horizon_endstringPro MaxISO 8601 timestamp for when the signal's effective window closes (signal_time + 2h30m, capped at 15:50 ET). After this time, the statistical edge is no longer expected to hold.

Preflight Fields Pro Max only

Live market conditions fetched at request time. Use these to validate whether the signal's assumptions still hold before entering a trade.

FieldTypeDescription
price_vs_entry_pctfloatHow far the current price has drifted from the suggested entry price, as a percentage. A large positive value means the price has moved away from entry — the opportunity may have passed.
intraday_range_positionfloatWhere the current price sits within today's high-low range (0.0 = at the low, 1.0 = at the high). Useful for gauging intraday momentum.
relative_volumefloatCurrent volume relative to the average for this time of day. Values >1.0 indicate above-average activity, which can confirm conviction in the signal.
checked_atstringISO 8601 timestamp of when the preflight data was fetched. Preflight data is live — this tells you how fresh it is.

Signal Schedule

Signals are generated 6 times per trading day, at approximately :47 past each hour from 10 AM to 3 PM Eastern Time. Each batch analyzes the current hour's :30 mid-hour bar.

Daily Signal Timetable

The schedule is the same year-round in ET. UTC times shift with US Daylight Saving Time (DST).

Signal Available (ET) Bar Analyzed UTC (EDT, Mar–Nov) UTC (EST, Nov–Mar)
10:47 AM10:00 – 10:30 AM14:4715:47
11:47 AM11:00 – 11:30 AM15:4716:47
12:47 PM12:00 – 12:30 PM16:4717:47
1:47 PM1:00 – 1:30 PM17:4718:47
2:47 PM2:00 – 2:30 PM18:4719:47
3:47 PM3:00 – 3:30 PM19:4720:47

Key Details

  • Timezone: All times are US Eastern (ET), which automatically adjusts for Daylight Saving Time. EDT (UTC-4) runs from the 2nd Sunday of March through the 1st Sunday of November; EST (UTC-5) runs the rest of the year.
  • No signals before 10:47 AM ET: The first half-hour bar of each market hour must complete before signals can be generated.
  • Last signal at 3:47 PM ET: The final signal analyzes the 3:00–3:30 PM bar. There is no signal for the 3:30–4:00 PM window as the market closes at 4:00 PM, leaving no actionable window.
  • Non-trading days: No signals on weekends or US market holidays. The API returns an empty signals array.
  • next_update field: Every API response includes a next_update timestamp (ISO 8601 / UTC) so you always know exactly when fresh signals will be available.
  • hour parameter: Use the hour query parameter (ET hour, 10–15) to request signals for a specific market hour within the current day.

Rate Limits

Requests are limited per day based on your tier:

TierDaily LimitPer Hour (approx)
Free25~4
Pro100~14
Max500~71

Rate limit info is included in response headers:

  • X-RateLimit-Limit — your daily limit
  • X-RateLimit-Remaining — requests remaining today

Errors

All errors follow RFC 7807 problem details format:

{
  "type": "about:blank",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Invalid or revoked API key."
}

Common Status Codes

CodeMeaning
401Invalid or missing authentication
403Account deactivated
409Duplicate email (registration)
429Rate limit exceeded

Response by Tier

Each tier builds on the previous. Free gets 1 signal per day from the first market hour, Pro up to 8/hour, Max sees all (~16/hr avg). Signals are proportionally sampled across win-rate buckets.

Feature Free Pro Pro Max
Signals1 / day (first hour)Up to 8 / hourAll (~16/hr avg)
Daily requests25100500
Symbol, direction, industry
Win rate, current price, sector
Execution guidance (entry, expected return, exit target, horizon)
Horizon end timestamp
Preflight checks (VIX, drift, momentum, volume)
Same-day historical lookback

Free & Pro Tiers

All tiers include direction, win rate, current price, VIX at signal time, sector, industry, and execution guidance (entry price, expected return, exit target, primary horizon). Free gets 1 signal from the first market hour; Pro gets up to 8/hr across all hours. Same response fields. See the Signals response example above.

Pro Max Tier — adds horizon end, preflight, and lookback

Adds a precise horizon end timestamp and live preflight checks (price drift vs. entry, intraday momentum, and relative volume — fetched at request time). Pro Max also unlocks same-day historical lookback via the hour query parameter. Fields not available for lower tiers are simply absent from their responses.

{
  "symbol": "MRVL",
  "direction": "BUY",
  "win_rate": 0.78,
  "win_rate_type": "per_symbol",
  "current_price": 87.52,
  "vix_at_signal": 18.4,
  "sector": "Technology",
  "industry": "Semiconductors",
  "execution_guidance": {
    "entry_price": 87.45,
    "expected_return_pct": 0.0123,
    "exit_target": 88.52,
    "primary_horizon": "2h",
    "horizon_end": "2026-03-13T19:30:00+00:00"
  },
  "preflight": {
    "price_vs_entry_pct": 0.0008,
    "intraday_range_position": 0.62,
    "relative_volume": 1.34,
    "checked_at": "2026-03-13T17:52:00+00:00"
  }
}