Developer documentation · v1
Integrate AI-powered market intelligence — sentiment, dealer gamma, COT positioning, and real-time webhooks — into your applications.
Quick start
Head to your account settings and generate a new API key. Each key is scoped to your subscription tier.
te_pub_b3f9_a17c…Pass your key in the X-API-Key header. All endpoints are HTTPS-only with JSON responses.
curl -X GET "https://api.tradeeasy.co/public/v1/sentiment/AAPL" \ -H "X-API-Key: te_pub_b3f9a17c92ef…"
Every response follows a consistent envelope. Parse data for your payload, check success for status.
{
"success": true,
"data": {
"symbol": "AAPL",
"score": 0.72,
"label": "bullish"
}
}Endpoint reference
Browse all 34 endpoints across 18 categories. Click any row to expand full details, parameters, and code examples.
Sentiment · 2 endpoints
AI-powered sentiment scores and historical sentiment trends for any supported symbol.
| Parameter | Type | Description |
|---|---|---|
| symbolrequired | string | Ticker symbol (e.g. AAPL, EUR/USD) |
| sourcesoptional | string | Comma-separated source filter (news, social, filings) |
curl -X GET "https://api.tradeeasy.co/public/v1/sentiment/AAPL" \ -H "X-API-Key: te_pub_b3f9a17c92ef..."
Response
{
"success": true,
"data": {
"symbol": "AAPL",
"score": 0.72,
"label": "bullish",
"sources": {
"news": 0.68,
"social": 0.81,
"filings": 0.64
},
"updated_at": "2026-05-17T14:30:00Z"
}
}Trade Briefs · 2 endpoints
Daily and weekly AI-generated trade briefings with key levels and catalysts.
Risk · 2 endpoints
AI-driven risk scores and portfolio-level risk analysis.
Predictions · 2 endpoints
AI price-target predictions and scenario analysis powered by machine learning models.
Market Regime · 2 endpoints
Detect current market regime (risk-on, risk-off, transition) and regime history.
Breaking News · 2 endpoints
Real-time breaking market news, filterable by symbol or category.
Economic Calendar · 2 endpoints
Upcoming and current economic events with expected impact ratings.
COT · 2 endpoints
Commitment of Traders data — institutional positioning and historical trends.
Signals · 2 endpoints
AI-generated trade signals with entry, target, and stop levels.
Portfolio · 1 endpoint
Aggregated portfolio view with P&L, allocation, and risk metrics.
Volatility · 1 endpoint
Implied and realized volatility data for options-aware trading.
Reports · 2 endpoints
AI-generated morning and weekly research reports for the broad market.
Narrative · 2 endpoints
AI-composed narrative analysis — the story behind the price action.
Watchlist · 1 endpoint
Retrieve your curated watchlist with live pricing and sentiment overlay.
Macro Ideas · 1 endpoint
AI-curated macro trade ideas based on economic data flows and positioning.
GEX · 1 endpoint
Dealer gamma exposure (GEX) levels — key for identifying pin risk and volatility catalysts.
Technical · 1 endpoint
AI-powered technical analysis with pattern detection, support/resistance, and indicators.
Webhooks · 6 endpoints
Create, manage, and test real-time webhook subscriptions for market events.
Authentication
All API requests require a valid API key passed in the X-API-Key header. Keys are tied to your subscription tier and can be rotated from your account dashboard.
Include this header on every request:
X-API-Key: te_pub_b3f9a17c92ef…
Store your key in an environment variable — never hard-code it.
# .env TRADEEASY_API_KEY=te_pub_b3f9a17c92ef…
On-demand analysis
The per-symbol core endpoints — /sentiment/{symbol}, /technical/{symbol}, /narrative/{symbol} and /predictions/intraday/{symbol} — can analyze assets that aren’t in our cache yet. The first time you request an uncached symbol we validate the ticker, queue analysis, and add the asset to your watchlist so it stays fresh on every subsequent call.
meta.stale=true + auto-refreshSYMBOL_NOT_FOUNDTriggering analysis adds the asset to your watchlist (counted against your per-tier cap) and returns immediately — never blocking while analysis runs. Freshness window: 120 minutes.
A cache miss returns 202 with a job id, a poll URL and a Retry-After header.
HTTP/1.1 202 Accepted
Retry-After: 8
{
"success": true,
"data": {
"status": "pending",
"symbol": "NVDA",
"job_id": "odj_9f1c…",
"poll_url": "/public/v1/analysis/status/odj_9f1c…",
"result_url": "/public/v1/sentiment/NVDA",
"retry_after": 8
},
"meta": { "accepted": true, "retry_after": 8 }
}Poll the job until state is ready. States: pending → running → ready | failed. When ready, fetch result_url for the data.
On-demand analysis generates sentiment immediately. For technical, narrative and predictions, readiness reflects that sentiment is live — the kind-specific data is backfilled by its scheduled pipeline once the asset joins your watchlist, so those result_urls may keep returning 202 until the next pipeline run. The response includes a note field explaining this, and the immediate result is always available at /sentiment/{symbol}.
curl -X GET \
"https://api.tradeeasy.co/public/v1/analysis/status/odj_9f1c..." \
-H "X-API-Key: te_pub_b3f9a17c92ef..."
{
"success": true,
"data": {
"job_id": "odj_9f1c...",
"symbol": "NVDA",
"state": "ready",
"requested_at": "2026-05-30T15:09:03Z",
"result_url": "/public/v1/sentiment/NVDA"
},
"meta": { "state": "ready" }
}When cached analysis is older than the freshness window we return it immediately with meta.stale=true (plus meta.age_seconds and meta.refreshed_at) and kick a background refresh — so your next call returns fresh data. You are never blocked waiting.
Each new asset you analyze is added to your watchlist. Adding a new asset beyond your cap returns 403 WATCHLIST_LIMIT_REACHED — remove an asset to continue. There is no per-call analysis credit; the scheduled pipeline keeps tracked assets fresh.
404 NOT_AVAILABLE_FOR_ASSET when no data exists for the requested symbol.Rate limits
Rate limits are enforced per API key. Exceeding limits returns a 429 with a Retry-After header.
Premium · $99.99/mo
requests per minute
Annual · $500/yr
requests per minute
Every response includes rate-limit metadata so you can manage your budget programmatically.
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 87 X-RateLimit-Reset: 1716000060 Retry-After: 12
Webhooks
Subscribe to market events and receive instant HTTPS callbacks. All payloads are signed with HMAC-SHA256 for verification.
| Event | Description | Payload fields |
|---|---|---|
| sentiment.flip | Sentiment direction changes (bullish ↔ bearish) | symbol, old_label, new_label, score |
| breaking_news.alert | High-impact breaking news published | headline, category, impact, symbols |
| prediction.update | Price prediction model updated | symbol, predicted_close, confidence |
| risk.alert | Risk score crosses threshold | symbol, score, label, threshold |
| signal.new | New trade signal generated | symbol, direction, entry, target, stop |
| market_regime.change | Market regime transition detected | from, to, confidence |
Verify webhook authenticity using the X-TradeEasy-Signature header and your webhook secret.
import hmac, hashlib
def verify(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)Failed deliveries are retried with exponential backoff — up to 4 attempts, with a 10s timeout per attempt. After 10 consecutive failures the subscription is automatically disabled.
Attempt 1 → immediate Attempt 2 → after 1s Attempt 3 → after 5s Attempt 4 → after 30s backoff schedule: 1s · 5s · 30s · 300s ─── auto-disabled after 10 consecutive failures ───
Response format
Every response — success or error — follows the same JSON structure so your error handling is predictable.
{
"success": true,
"data": { … },
"meta": {
"timestamp": "2026-05-17T14:30:00Z",
"request_id": "req_8f2a9b4c"
}
}{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 12s.",
"status": 429
}
}| Code | Status | Description |
|---|---|---|
| UNAUTHORIZED | 401 | Missing or invalid API key |
| FORBIDDEN | 403 | API key does not have access to this resource |
| SYMBOL_NOT_FOUND | 404 | Ticker could not be validated against our market-data provider (FMP) |
| INVALID_SYMBOL | 400 | Symbol is malformed or unsupported (e.g. too long, discontinued asset) |
| NOT_AVAILABLE_FOR_ASSET | 404 | Endpoint data does not exist for this asset class (COT / GEX / volatility) |
| WATCHLIST_LIMIT_REACHED | 403 | Per-tier tracked-asset cap reached — remove an asset before triggering a new one |
| ON_DEMAND_RATE_LIMIT | 429 | Too many new-asset analysis triggers — slow down |
| JOB_NOT_FOUND | 404 | Analysis job id is unknown or has expired |
| UPSTREAM_UNAVAILABLE | 502 | Market-data provider was temporarily unreachable during symbol validation |
| INVALID_PARAM | 422 | A query parameter has an invalid value |
| RATE_LIMITED | 429 | Too many requests — slow down |
| INTERNAL_ERROR | 500 | Unexpected server error — retry with backoff |