Potential breakouts validated against the chart, with posts translated to English and a mechanical risk plan.
/api/radar**Historical endpoint: `/api/influencers`.** The board now lives at `/api/radar`, the path that names what it returns; the old one answers identically while clients migrate and carries `Deprecation`, `Sunset` (2027-03-19) and a `Link` to its successor. `/api/influencers` keeps `view=accounts` and `view=traders` for good — those really are about influencers. Hybrid pre-breakout radar whose social evidence comes from the influencers you choose. `leaderboard` and `candidates` hold the same variable core set (0–30), never padded. Every row must clear all filters: favourable regime, verified market cap of at least $300M, earnings clear, 0–8% from the pivot and a mature pattern measured on closed daily candles. Posts keep the original wording in `text` and add English in `textEn`; `translation` reports whether that coverage is complete or partial. `executionPlan` adds the pivot, stop, mechanical 1R/2R/3R levels and position size from the risk budget and position cap you pass. Cached for about 3 hours, rebuilt on demand.
Use it toSee only pre-breakout setups that clear every filter, and choose which influencers provide the social evidence.
Codes and field names stay stable so integrations do not break; `labels` holds their human-readable English labels. That now includes the section codes: `labels.section` reads `setup-explicado`, `mencionado` and `descartado`, and `labels.sections` reads the keys of the `sections`/`returnedSections` counters, which are plurals of those codes rather than the codes themselves. The three sections are a two-tier board: `setup-explicado` is a social mention that passes the full structural contract and carries an explained setup; `mencionado` keeps a social mention visible when it only fails quality gates (the chart is not verified, the mention is); `descartado` is reserved for hard reasons — already broke its pivot, outside the forming window, unknown or imminent earnings, or market cap below the floor. A client can therefore tell a verified setup from a raw mention without losing either. The counters keep their keys on purpose — publishing English duplicates beside them would double any client that sums the object, so they are translated rather than aliased. `risk_budget_usd` defaults to 1000 and `max_position_usd` is optional; sizing uses whole shares and exposes utilization and which constraint limits the size. `executionSummary` totals assume every returned candidate triggers: they are a scenario, not a recommended portfolio. `plannableByFreshness` separates plans computable with current, stale or unknown data. `executionPlan` is a deterministic sizing template, not a recommendation or a prediction. `dataFreshness` separates `priceAsOf`/`quoteAgeSeconds` from the age of the technical cache: stale means a quote older than seven days or a technical cache older than two hours. If the board is stale and its rebuild fails, `sourceStatus` gives the cause, `sourceNeedsAttention` is true when retrying cannot help (for example an inactive X subscription), `ageDays` gives the age in whole days and `sourceDetail` explains it; the rebuild stops at the first batch on an inactive subscription. With personal accounts, `personalization.sourceStatus` appears when their refresh failed for an account-wide X cause; X is then not queried for 10 minutes and the previous overlay is served if it exists. **What the pattern quality grade means.** `patternQualityScore` starts at 42 and adds six measured components, each capped so no single one can carry a chart: proximity to the pivot (up to 16, `16 − distToPivot × 1.5`), base maturity (up to 12, `(baseAgeSessions − 10) × 0.6`), volume dryness (up to 12, `12 × (1.15 − volContraction)`), base compactness (up to 12, `12 − range20Pct × 0.45`), how many times the pivot was tested (up to 12, `pivotTouches × 3`) and a structure quorum (2 points for each of six signals: range contracting, rising lows, dry volume, a strong pivot cluster, price in the upper half of the base and a compact recent range). The total is clamped to 0–100. `grade` reads that score: **A at 80 or above** (textbook), **B from 65 to 79** (solid), **C below 65**. The score only ever RANKS a valid setup: `patternQualityPass` is a separate hard contract, and a chart that trips any of its checks — already broke, immature base, illiquid, extended, choppy, untested resistance, a recent spike or gap — is rejected whatever it scored, with the failed checks listed in `patternQualityReasons`. A high score cannot rescue a chart the contract rejects, and every rejection says which check failed. `screenFunnel` reports how the technical lane reached its candidate count — charts scanned, with data, with a setup, selected — and names the gates that rejected the rest, so a zero can be read as a weak tape or as a broken gate.
Add, rename, replace or hide X accounts from your dashboard. A change affects only your own responses, never the shared list or another customer. The same list is used in two places: the Breakout Radar reads it automatically, and Stock Sentiment reads it when you ask with include=mine, which adds a separate myInfluencers block and leaves the shared numbers untouched. Posts are delivered in English through textEn and always keep the original text in text.
Send your ra_live_… key in the x-api-key header. Pick your language:
curl "https://raspberrytrades.com/api/radar?setup=breakout&risk_budget_usd=500&max_position_usd=10000" \
-H "x-api-key: ra_live_your_key_here"setuptickerviewrisk_budget_usdmax_position_usdx-api-key| Parameter | Type | Description |
|---|---|---|
setup | string | Filter by pattern. Friendly aliases: breakout (includes base_breakout), base, flag; exact values also work: vcp, staircase, pullback, bull_flag, base_breakout, cup_and_handle, ascending_triangle, high_tight_flag, double_bottom, bull_retest, support_bounce (optional). |
ticker | string | Check a single symbol, e.g. NVDA (optional) |
view | string | evaluated: audit-only list with per-ticker exclusion reasons; accounts: trusted accounts; traders: trader statistics. ticker/setup and sizing parameters apply only to board and evaluated views. Invalid combinations return 400 before source requests (optional). |
risk_budget_usd | number | Maximum mechanical loss per candidate from entry and stop; board/evaluated only, rejected with accounts/traders (default 1000; min 1; max 1,000,000). |
max_position_usd | number | Optional cap on notional capital per candidate; board/evaluated only, rejected with accounts/traders (min 1; max 10,000,000). |
x-api-key | header | Your API key (required) |
Example, not a live result. Field shapes are exact; the values, prices and timestamps are illustrative. Call the endpoint for current data.
{
"generatedAt": "2026-09-18T14:00:00Z",
"locale": "en",
"translation": { "targetLanguage": "en", "originalField": "text", "translatedField": "textEn", "posts": 18, "completed": 18, "translated": 18, "status": "complete", "preservesOriginal": true },
"regime": "ON",
"cached": true,
"stale": false,
"signalFresh": true,
"refreshDeferred": false,
"count": 13,
"strictCount": 13,
"candidateCount": 13,
"returnedSections": { "explicados": 13, "mencionados": 0, "descartados": 0 },
"returnedSources": { "trader": 2, "technical": 9, "hybrid": 2 },
"executionInputs": { "riskBudgetUsd": 500, "maxPositionUsd": 10000, "fractionalShares": false },
"executionSummary": { "candidates": 13, "plannable": 13, "medianRiskPctAtTrigger": 4.8, "smallestRiskPctAtTrigger": 2.1, "largestRiskPctAtTrigger": 7.6, "unitRiskBudget": 1000, "riskBudgetUsd": 500, "maxPositionUsd": 10000, "sized": 13, "zeroSharePlans": 0, "totalEstimatedRiskUsd": 6310, "totalEstimatedEntryNotionalUsd": 112400, "dataFreshness": { "current": 13, "stale": 0, "unknown": 0 }, "plannableByFreshness": { "current": 13, "stale": 0, "unknown": 0 }, "aggregateAssumption": "all-returned-candidates-trigger", "basis": "mechanical-risk-template-not-price-forecast" },
"candidateFilters": {
"explainedSetupRequired": true,
"conservativeTechnicalValidationRequired": true,
"patternQualityRequired": true,
"marketCapRequired": 300000000,
"readyMaxDistToPivotPct": 8,
"selection": {
"available": 13, "returned": 13,
"limit": 30, "truncated": false
}
},
"filters": {
"explainedSetupRequired": true,
"broke": false,
"earningsSoon": false,
"maxDistToPivotPct": 8
},
"leaderboard": [
{
"ticker": "MU", "breakoutScore": 82,
"source": "hybrid", "section": "setup-explicado",
"candidateState": "ready", "strictEligible": true, "actionable": true,
"pattern": "vcp", "patternLabel": "VCP base — volatility contracting above the EMA21", "grade": "A",
"setupTraders": 2, "traderCount": 3, "postAgeHours": 11.2,
"price": 198.2, "distFromHigh": -4.1,
"pivot": 205, "distToPivot": 3.4,
"broke": false, "earningsSoon": false,
"patternQualityPass": true, "patternQualityScore": 91,
"patternQualityReasons": [],
"executionPlan": { "status": "available", "state": "waiting-for-breakout", "entryTrigger": 205, "initialStop": 195, "riskPerShare": 10, "riskPctAtTrigger": 4.88, "currentDistanceToTriggerPct": 3.4, "targets": { "oneR": 215, "twoR": 225, "threeR": 235 }, "trailingStop": { "atrMultiple": 3.25, "distance": 12.35 }, "sharesPer1000Risk": 100, "positionSizing": { "riskBudgetUsd": 500, "maxPositionUsd": 10000, "sharesByRisk": 50, "sharesByCapital": 48, "shares": 48, "estimatedRiskUsd": 480, "estimatedEntryNotionalUsd": 9840, "riskBudgetUtilizationPct": 96, "positionCapUtilizationPct": 98.4, "bindingConstraint": "position-cap", "fractionalShares": false }, "dataFreshness": { "status": "current", "priceAsOf": "2026-09-18T13:58:00Z", "quoteAgeSeconds": 120, "technicalAgeSeconds": 120, "maxQuoteAgeSeconds": 604800, "maxTechnicalAgeSeconds": 7200 }, "basis": "mechanical-risk-template-not-price-forecast", "warnings": ["targets_are_risk_multiples_not_forecasts"] },
"patternMetrics": {
"structuralAsOf": "2026-09-17",
"baseAgeSessions": 24,
"pivotTouches": 3,
"range20Pct": 14.2,
"volContraction": 0.72
},
"setupSummary": "@srxtrades (bull flag): $MU coils under 205; watching for the breakout",
"setupReasons": [
{
"evidenceSource": "trader",
"trader": "srxtrades", "setupType": "bull_flag", "setupTypeLabel": "bull flag",
"text": "$MU se comprime bajo 205; vigilando la ruptura",
"textEn": "$MU coils under 205; watching for the breakout",
"images": ["https://pbs.twimg.com/media/...daily.jpg"],
"createdAt": "Wed Jul 01 06:09:25 +0000 2026",
"url": "https://x.com/srxtrades/status/..."
}
],
"why": "the same array as setupReasons — kept because clients read this name"
}
],
"candidates": [
{
"ticker": "MU", "source": "hybrid",
"section": "setup-explicado", "candidateState": "ready",
"strictEligible": true, "actionable": true, "distToPivot": 3.4,
"technicalQualified": true, "patternQualityPass": true,
"marketCapQualified": true,
"technicalSetupReason": {
"evidenceSource": "technical",
"author": "Raspberry Radar",
"setupType": "vcp",
"text": "MU presenta un vcp grado A: cotiza a 3.4% del pivote..."
}
}
],
"watchlist": []
}Create a free account, copy your ra_live_… key and make your first call to https://raspberrytrades.com/api/radar.
Keep your key on your server — never ship it in front-end code.