JSON API for results and charts
What Satta Matka publishes is also available as JSON: the live board for the day, the market list, the past data behind each jodi chart and panel chart, plus the Starline draws. Numbers and timings are the same ones the pages show.
The API is switched off at the moment. What follows describes how it works once it is back on.
Base URL
https://sattamatkachart.live/api/v1
Passing your key
For now the API can be called without a key. If you are given one (for a higher daily limit, or because the site later switches to keys only), put it in a request header. Either of these two forms works:
# pick one; both work
X-API-Key: YOUR_KEY
Authorization: Bearer YOUR_KEY
Never put the key in the URL. A request such as https://sattamatkachart.live/api/v1/results?key=YOUR_KEY is rejected.
Query strings end up in server logs, in browser history and in Referer headers. A key sent that way
should be treated as leaked. Keys are read from headers only.
Keys look like kg_ followed by 36 hex characters. Treat yours like a password: keep it on your own server,
and never put it in HTML, in a phone app or in any file the public can download. If a key leaks, contact us; we will cancel it and
issue a new one, and the old key stops working immediately.
Endpoints
1. Today’s results
GET https://sattamatkachart.live/api/v1/results
Returns the current result of each market in the form open_panna-jodi-close_panna (e.g. 346-38-459). A result not yet declared comes back as ***, and a market on holiday as HOLIDAY. Each market also carries its open time, close time and status, and the day’s Starline slots are included.
{
"date": "23-09-2026",
"time": "17:05",
"markets": [
{
"name": "MILAN DAY",
"slug": "milan-day",
"result": "346-38-459",
"jodi": "38",
"open": "03:00 PM",
"close": "05:00 PM",
"status": "closed",
"holiday": false
},
{
"name": "MAIN BAZAR",
"slug": "main-bazar",
"result": "***-**-***",
"jodi": "**",
"open": "09:40 PM",
"close": "11:55 PM",
"status": "upcoming",
"holiday": false
}
],
"starline": [
{ "time": "12:30 PM", "result": "481-3" }
]
}
Possible status values: holiday, upcoming, running, closed.
The date field holds the result day: a market that declares after midnight keeps the date of the day it opened.
2. Market list
GET https://sattamatkachart.live/api/v1/markets
Lists each market with its name, the slug you pass to the chart endpoint, its open time, its close time and its current status.
{
"markets": [
{
"name": "MILAN DAY",
"slug": "milan-day",
"open": "03:00 PM",
"close": "05:00 PM",
"status": "running",
"holiday": false
}
],
"count": 31
}
3. History for the jodi chart and panel chart
GET https://sattamatkachart.live/api/v1/chart/{slug}?days=90
Returns a single market, one row per day. Set days to any value from 1 to 1100; without it you get 90. The slug must be one that /markets lists.
GET https://sattamatkachart.live/api/v1/chart/sridevi-night?days=30
{
"market": "SRIDEVI NIGHT",
"slug": "sridevi-night",
"days": 30,
"rows": [
{
"date": "23-09-2026",
"open_panna": "346",
"jodi": "38",
"close_panna": "459",
"result": "346-38-459"
}
]
}
4. Starline
GET https://sattamatkachart.live/api/v1/starline?days=7
Gives the slots of the current result day plus earlier days, up to 30 days back.
{
"date": "23-09-2026",
"today": [
{ "game": "STARLINE", "time": "12:30 PM", "result": "481-3" }
],
"history": [
{
"date": "22-09-2026",
"results": [
{ "game": "STARLINE", "time": "12:30 PM", "result": "560-1" }
]
}
]
}
Code examples
Each example fetches today’s results. Replace YOUR_KEY with your own key.
curl
curl --silent --header "X-API-Key: YOUR_KEY" \
"https://sattamatkachart.live/api/v1/results"
JavaScript (Node.js, server side only)
// server side only; browsers must never see the key
const reply = await fetch("https://sattamatkachart.live/api/v1/results", {
headers: { "X-API-Key": "YOUR_KEY" }
});
const board = await reply.json();
for (const row of board.markets) {
console.log(row.name, row.result, row.status);
}
Code that runs in a browser can be read by every visitor, so a key placed there is exposed. Make the request from your own server and pass only the results on to your page.
PHP
// runs on your server; YOUR_KEY never appears in HTML
$curl = curl_init("https://sattamatkachart.live/api/v1/results");
curl_setopt_array($curl, [
CURLOPT_HTTPHEADER => ["X-API-Key: YOUR_KEY"],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$payload = json_decode((string) curl_exec($curl), true);
curl_close($curl);
foreach ($payload["markets"] as $row) {
echo $row["name"] . " " . $row["result"] . "\n";
}
Python
import requests
# timeout in seconds; the key never leaves this script
response = requests.get(
"https://sattamatkachart.live/api/v1/results",
headers={"X-API-Key": "YOUR_KEY"},
timeout=15,
)
response.raise_for_status()
for row in response.json()["markets"]:
print(row["name"], row["result"], row["status"])
Android (OkHttp)
// never build the key into the app
Request call = new Request.Builder()
.url("https://sattamatkachart.live/api/v1/results")
.addHeader("X-API-Key", "YOUR_KEY")
.build();
Anyone can unpack an APK and read what is inside it, a key included. Send the request from a server you control instead.
Errors and status codes
Success is HTTP 200 with the JSON shown above for that endpoint. Cross-origin browser requests are allowed (Access-Control-Allow-Origin: *).
On failure you get one of the codes below with a body of {"error": "..."}; base your handling on the status code, not on the shape of the JSON.
| Code | Meaning | What to do |
|---|---|---|
| 401 | Key missing, unknown or disabled | Put the key in the X-API-Key header. Keys placed in the URL are ignored and lead to this code. |
| 403 | The API is turned off for the whole site | This cannot be fixed from your end; please contact us. |
| 404 | Unknown slug, or a path that does not exist | Take slugs from /markets and check the path for typos. |
| 429 | Daily limit reached (1000/day) | Cache responses and slow down, or ask us for a higher limit. |
Failed requests count toward the limit as well, so repeating a request that keeps getting 401 or 404 simply uses it up — fix the request instead. The 429 counter resets at midnight Asia/Kolkata.
Webhooks (push instead of poll)
You do not have to poll. We can POST each change to a URL on your server: once your callback is registered, a JSON request goes out within seconds of every update.
- Events:
result.declared,result.cleared,starline.declared,test.ping;X-KG-Eventcarries the same name. - Body:
{"event","site","sent_at","market":{"name","slug","oid"},"half","result","jodi","date"}; for Starline the body carriesgame,timeandresult. - Signature: every request has
X-KG-Signature: sha256=HMAC_SHA256(rawBody, your_secret). Verify it before you act on the body. - Your endpoint has to return HTTP 2xx within a few seconds. Failed deliveries are logged, and a hook that keeps failing may be disabled.
To register a webhook, get in touch with the callback URL you want us to use.
Fair use
Please request /results at most once a minute, and cache jodi and panel history for a day before fetching it again. Heavy use or resale, or a higher limit, needs an API key — contact us. The data is provided as published and for information only; see the disclaimer.