Response shape
{
"score": 27,
"label": "Fear",
"updated": "2026-05-27",
"ftse": {
"level": 10491.56,
"change_pct": 0.002,
"recent_30d": [10609.10, 10559.60, 10590.00, ...]
},
"gbp_usd": 1.3459,
"components": [
{ "name": "Market Momentum", "weight": 25, "score": 29, "note": "FTSE 100 is 2.7% above its 125-session moving average — a relatively weak momentum reading by 2-year history." },
{ "name": "Volatility", "weight": 25, "score": 12, "note": "FTSE 20-session realized volatility at 15.6% annualized — elevated realized risk." },
{ "name": "Currency", "weight": 25, "score": 59, "note": "GBP/USD has moved -0.12% over 60 sessions — within the usual recent range." },
{ "name": "European RS", "weight": 25, "score": 7, "note": "FTSE lagged Stoxx 600 by 1.9pp over 60 sessions — defensive rotation away from the UK." }
],
"history": {
"prev_close": { "date": "2026-05-26", "score": 40 },
"week": { "date": "2026-05-20", "score": 44 },
"month": { "date": "2026-04-27", "score": 51 },
"year": { "date": "2025-05-27", "score": 64 }
},
"meta": {
"methodology": "equal-weight 4-component model (25% × 4): Market Momentum, Volatility (20d realized), Currency (GBP/USD 60d), European RS (FTSE 100 vs Stoxx 600 60d)",
"history_size": 1191,
"generated_at_utc": "2026-05-27T18:00:04+00:00"
},
"available": true,
"state": "NEUTRAL"
}
Fields
| Field | Type | Description |
| score | int 0–100 | Composite Fear & Greed score. |
| label | string | One of: Extreme Fear, Fear, Neutral, Greed, Extreme Greed. |
| updated | date | London trading date the score reflects (YYYY-MM-DD). |
| ftse.level | float | FTSE 100 closing level. |
| ftse.change_pct | float | Day-over-day percent change. |
| ftse.recent_30d | array | Last 30 FTSE 100 closes for sparkline use. |
| gbp_usd | float | Latest GBP/USD rate from FRED DEXUSUK. |
| components | array | Each component: name, weight, score, note. |
| history | object | Score values from prev_close, week, month, year ago. |
| meta.methodology | string | Static model description — FTSE uses a fixed 4-component model with no fallback. |
| meta.history_size | int | Total number of dates in the history series. |
| meta.generated_at_utc | string | ISO-8601 timestamp of when the cron generated this score. |
| available | bool | True when a valid score is available (mirrors the score-file presence). |
| state | string | Uppercase label, consumed by the homepage sector-card and /global page. |
Examples
JavaScript
fetch('https://ftse.feargreedchart.com/api/?action=ftse')
.then(r => r.json())
.then(d => console.log(d.score, d.label));
Python
import requests
r = requests.get(
'https://ftse.feargreedchart.com/api/?action=ftse'
).json()
print(r['score'], r['label'])
cURL
curl -s https://ftse.feargreedchart.com\
/api/?action=ftse | jq .score