API Documentation
Base URL: https://api.irrationalsignals.com
Quick Start
Get your first signal in under a minute:
- Create an account to get your API key
- Call the signals endpoint with your key
- Receive live trading signals during market hours (10 AM – 4 PM ET)
curl -H "X-API-Key: YOUR_API_KEY" \
https://api.irrationalsignals.com/v1/signals
Authentication
All API requests require authentication via the X-API-Key header:
X-API-Key: isk_free_abc123...
You receive your API key when you register. Keys are prefixed with tier information (e.g., isk_free_, isk_pro_, isk_max_).
For dashboard access, use a JWT Bearer token obtained from the login endpoint:
Authorization: Bearer eyJ...
Signals
Get live trading signals. Available during US market hours (10 AM – 4 PM ET).
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| min_win_rate | float | Minimum per-symbol win rate (0.0–1.0) |
| max_win_rate | float | Maximum per-symbol win rate (0.0–1.0) |
| sector | string | Filter by sector (e.g., "tech") |
| hour | int | ET hour for same-day lookback (10–16) |
Request
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.irrationalsignals.com/v1/signals?min_win_rate=0.65§or=tech"
Response (Free Tier)
{
"market_hour": "2026-03-13T17:00:00+00:00",
"signal_count": 8,
"tier": "free",
"next_update": "2026-03-13T17:50:00+00:00",
"signals": [
{
"symbol": "MRVL",
"direction": "BUY",
"win_rate": 0.78,
"expected_return_pct": 0.0041,
"current_price": 87.52,
"sector": "tech",
"status": "QUALIFIED"
}
],
"disclaimer": "Not investment advice. Signals are statistical observations, not recommendations."
}
Register
Create a new account. Returns your API key — save it immediately, it won't be shown again.
Request Body
{
"email": "user@example.com",
"password": "SecurePass1!"
}
Password requirements: 8–128 characters, at least 1 uppercase, 1 lowercase, 1 digit, 1 special character.
Request
curl -X POST https://api.irrationalsignals.com/v1/auth/register \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "SecurePass1!"}'
Response (201)
{
"api_key": "isk_free_abc123...",
"key_prefix": "isk_free_abc12345",
"tier": "free",
"created_at": "2026-03-13T10:00:00Z"
}
Login
Authenticate and receive a JWT for dashboard access.
Request
curl -X POST https://api.irrationalsignals.com/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "SecurePass1!"}'
Response (200)
{
"access_token": "eyJ...",
"token_type": "bearer",
"tier": "free",
"expires_in": 3600
}
Rotate Key
Revoke your current API key and generate a new one. Requires API key authentication.
Request
curl -X POST https://api.irrationalsignals.com/v1/auth/api-key/rotate \
-H "X-API-Key: YOUR_API_KEY"
List Keys
List all API keys associated with your account.
Request
curl -H "X-API-Key: YOUR_API_KEY" \
https://api.irrationalsignals.com/v1/auth/api-keys
Account
Get account info including keys and usage.
Request
curl -H "X-API-Key: YOUR_API_KEY" \
https://api.irrationalsignals.com/v1/account
Response
{
"email": "user@example.com",
"tier": "free",
"is_active": true,
"trial_ends_at": null,
"created_at": "2026-03-13T10:00:00Z",
"api_keys": [
{
"key_prefix": "isk_free_abc12345",
"tier": "free",
"is_active": true,
"created_at": "2026-03-13T10:00:00Z"
}
],
"usage": {
"tier": "free",
"daily_limit": 200,
"requests_today": 42,
"requests_remaining": 158
}
}
Usage
Get usage statistics only.
Response
{
"tier": "free",
"daily_limit": 200,
"requests_today": 42,
"requests_remaining": 158
}
Billing
Stripe billing integration is coming soon. The following endpoints will be available:
Create a Stripe checkout session for upgrading.
Open the Stripe customer portal to manage subscriptions.
Rate Limits
Requests are limited per day based on your tier:
| Tier | Daily Limit | Per Hour (approx) |
|---|---|---|
| Free | 200 | ~28 |
| Pro | 1,000 | ~143 |
| Pro Max | 5,000 | ~714 |
Rate limit info is included in response headers:
X-RateLimit-Limit— your daily limitX-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
| Code | Meaning |
|---|---|
401 | Invalid or missing authentication |
403 | Account deactivated |
409 | Duplicate email (registration) |
429 | Rate limit exceeded |
Response by Tier
Signal responses include different fields based on your tier.
Pro Tier (additional fields)
{
"conviction": {
"pooled_win_rate": 0.68,
"n_samples": 47
},
"execution_guidance": {
"entry_price": 87.45,
"expected_return_pct": 0.0041,
"exit_target": 87.81,
"primary_horizon": "1h"
}
}
Pro Max Tier (additional fields)
{
"execution_guidance": {
"entry_price": 87.45,
"expected_return_pct": 0.0041,
"exit_target": 87.81,
"stop_loss_armed": 87.23,
"stop_loss_hard": 86.58,
"primary_horizon": "1h",
"horizon_end": "2026-03-13T18:50:00+00:00",
"position_sizing_factor": 0.5,
"predicted_drawdown_pct": -0.005
},
"preflight": {
"vix_at_signal": 18.4,
"avg_daily_volume": 12500000,
"price_vs_entry_pct": 0.0008
}
}