Free, public JSON API for the KOSPI Fear & Greed Index. Live score, full daily history, USD/KRW, and foreign investor flow. No registration. No API key. CORS open.
All endpoints are accessed via a single base URL with an ?action= query parameter:
https://kospi.feargreedchart.com/api/?action=<endpoint>
All responses are JSON unless otherwise noted. CORS is open (Access-Control-Allow-Origin: *) so you can call this directly from a browser.
Current KOSPI F&G score, label, all four components with notes, KOSPI level + change, USD/KRW, three-forces flow breakdown, and historical comparison points (yesterday/week/month/year). Cached server-side for 5 minutes.
| Field | Type | Description |
|---|---|---|
| score | int | 0–100 composite score. Higher = greedier. |
| label | string | One of: Extreme Fear, Fear, Neutral, Greed, Extreme Greed. |
| updated | string (YYYY-MM-DD) | Last computation date (Seoul trading day). |
| kospi.level | float | KOSPI closing level. |
| kospi.change_pct | float | Day-over-day % change. |
| kospi.today_rank_60d | int | Percentile rank of today's move vs the last 60 sessions. |
| kospi.recent_30d | array | 30 most recent closing levels (sparkline). |
| usd_krw | float | Latest USD/KRW rate. |
| components[] | array | 4 components: Market Momentum, Volatility, Safe-Haven Demand, Foreign Flow. Each has name, weight, score, note. |
| foreign_flow | object | Foreign investor net buy: latest_net, trend_5d, recent[]. |
| three_forces | object | Foreigners / Institutions / Individuals flow breakdown. |
| history | object | Comparison snapshots: prev_close, week, month, year — each with date + score. |
| meta | object | Methodology note, history size, flow archive size, generation time. |
{
"score": 65,
"label": "Greed",
"updated": "2026-05-15",
"kospi": {
"level": 7981.41,
"change_pct": 1.752,
"today_rank_60d": 87,
"recent_30d": [7544.21, 7610.30, /* ... */]
},
"usd_krw": 1378.50,
"components": [
{
"name": "Market Momentum",
"weight": 25,
"score": 78,
"note": "KOSPI is 8.4% above its 125-day moving average — an extended reading versus the past two years' distribution."
},
{
"name": "Volatility",
"weight": 25,
"score": 42,
"note": "Downside volatility sits at the 58% rank of its two-year history — in a normal range."
},
{
"name": "Safe-Haven Demand",
"weight": 25,
"score": 62,
"note": "The won has moved -0.45% against the dollar over 20 sessions — a steady reading."
},
{
"name": "Foreign Flow",
"weight": 25,
"score": 78,
"note": "Foreigners have been net buyers over the past 5 sessions."
}
],
"history": {
"prev_close": { "date": "2026-05-14", "score": 63 },
"week": { "date": "2026-05-08", "score": 71 },
"month": { "date": "2026-04-15", "score": 58 },
"year": { "date": "2025-05-15", "score": 44 }
},
"meta": {
"methodology": "equal-weight 25% × 4; components percentile-ranked over trailing window",
"history_size": 1247,
"generated_at_utc": "2026-05-15T07:30:21+00:00"
}
}
Full daily score history with KOSPI closes. Each row has the date, score (0–100), and KOSPI closing level. Cached server-side for 1 hour.
| Field | Type | Description |
|---|---|---|
| count | int | Number of daily entries. |
| range.from | string | Earliest date in the history. |
| range.to | string | Latest date in the history. |
| rows[] | array | Per-day entries: {date, score, kospi}. score may be null on days before the index began computing. |
{
"date": "2026-05-15",
"score": 65,
"kospi": 7981.41
}
Same data as the JSON history endpoint, served as a downloadable CSV. The shorter alias ?action=kospi-csv works identically. Drops straight into Excel, Google Sheets, or pandas.
date,fear_greed_score,label,kospi_close
2026-05-15,65,Greed,7981.41
2026-05-14,63,Greed,7844.01
2026-05-13,61,Greed,7820.55
// ...
Content-Disposition: attachment, so clicking the URL in a browser downloads the file. Use curl -O or a hotlinked anchor with download attribute to save it programmatically.
// Get today's KOSPI F&G score
fetch('https://kospi.feargreedchart.com/api/?action=kospi')
.then(r => r.json())
.then(data => {
console.log('Score:', data.score, '(' + data.label + ')');
console.log('KOSPI:', data.kospi.level);
console.log('USD/KRW:', data.usd_krw);
// Component breakdown
data.components.forEach(c => {
console.log(c.name + ':', c.score, '(' + c.weight + '%)');
});
// Historical comparison
console.log('A year ago:', data.history.year.score);
});
import requests
import pandas as pd
# Live snapshot
r = requests.get("https://kospi.feargreedchart.com/api/?action=kospi")
data = r.json()
print(f"Score: {data['score']} ({data['label']})")
# Full history as DataFrame (via CSV)
df = pd.read_csv("https://kospi.feargreedchart.com/api/?action=kospi-csv",
parse_dates=["date"])
df = df.dropna(subset=["fear_greed_score"])
print(f"Records: {len(df)}, mean score: {df['fear_greed_score'].mean():.1f}")
curl -s "https://kospi.feargreedchart.com/api/?action=kospi" | jq .score
# 65
curl -O "https://kospi.feargreedchart.com/api/?action=kospi-history.csv"
# Downloads kospi-fear-greed-history.csv
?action=kospi sends Cache-Control: max-age=300 (5 minutes). The history JSON and CSV send max-age=3600 (1 hour). CDNs and clients should honour these.The API and methodology are free to use. If you build something public with this data, a link back to KOSPI.FearGreedChart.com is appreciated but not required.
Underlying data: KOSPI Composite Index via Yahoo Finance (^KS11). USD/KRW via Yahoo Finance.
Foreign investor flow scraped from Naver Finance (KRX Trading by Investor Type).
Data is provided as-is with no uptime guarantee. Nothing here is investment advice. Always consult a qualified financial professional before making investment decisions.