Results API
Read the figures published on Satta Matka Result as JSON. The feed covers the day’s board, every market, history for both the jodi chart and the panel chart, and Starline. The values and the clock match what the pages show.
Access to this API is turned off right now. The notes below are how it behaves once access is restored.
Service root
https://sattamatkaresult.live/api/v1
Sending a key
A key is not required at the moment. If one is issued to you (a raised daily cap, or after the site moves to key-only access), place it in a request header. Both of the lines below are accepted:
# either line is accepted
X-API-Key: YOUR_KEY
Authorization: Bearer YOUR_KEY
The query string is the wrong place for a key. https://sattamatkaresult.live/api/v1/results?key=YOUR_KEY is refused:
anything after the question mark is written into access logs, kept in browser history and forwarded in Referer headers, so a key that travels there
is public in practice. Only a header is accepted.
A key is the prefix kg_ plus 36 hexadecimal digits. Guard it the way you guard a password: it stays on a server you control,
not in page markup, not inside a mobile app, and not in any file a visitor can open. If one gets out, tell us and we will revoke it and
mint a replacement — the old key stops working at once.
What you can request
1. Live results for the day
GET https://sattamatkaresult.live/api/v1/results
The latest number for every market, written open_panna-jodi-close_panna (for instance 346-38-459). Still waiting is shown as ***, and a holiday as HOLIDAY. The reply also includes open and close clock times, the status, and the Starline slots for that day.
{
"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" }
]
}
status will be upcoming, running, closed or holiday.
date is the result day: when a market posts its number after midnight, the date is still the day that market opened.
2. Catalogue of markets
GET https://sattamatkaresult.live/api/v1/markets
Every market’s name, the slug to pass into the chart route, its open and close times, and the status at this moment.
{
"markets": [
{
"name": "MILAN DAY",
"slug": "milan-day",
"open": "03:00 PM",
"close": "05:00 PM",
"status": "running",
"holiday": false
}
],
"count": 31
}
3. Jodi chart and panel chart history
GET https://sattamatkaresult.live/api/v1/chart/{slug}?days=90
One row for each day of a single market. days may be anywhere from 1 to 1100; leave it off and 90 is used. Only slugs that /markets returns are valid.
GET https://sattamatkaresult.live/api/v1/chart/kalyan-morning?days=30
{
"market": "KALYAN MORNING",
"slug": "kalyan-morning",
"days": 30,
"rows": [
{
"date": "23-09-2026",
"open_panna": "346",
"jodi": "38",
"close_panna": "459",
"result": "346-38-459"
}
]
}
4. Starline
GET https://sattamatkaresult.live/api/v1/starline?days=7
Slots for the current result day, and earlier days going back at most 30 days.
{
"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" }
]
}
]
}
Calling it from code
Every sample below loads the day’s results. Substitute the key issued to you for YOUR_KEY.
curl
curl --silent --header "X-API-Key: YOUR_KEY" \
"https://sattamatkaresult.live/api/v1/results"
JavaScript (Node on your server, never a browser page)
// run this on the server; do not ship the key to a browser
const reply = await fetch("https://sattamatkaresult.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);
}
JavaScript that runs in a visitor’s browser can be read by anyone, so the key does not belong there. Fetch on a server you run, then hand only the numbers to the page.
PHP
// server-side call; keep YOUR_KEY out of the page
$curl = curl_init("https://sattamatkaresult.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 is seconds; the key stays in this process
response = requests.get(
"https://sattamatkaresult.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)
// do not compile the key into the APK
Request call = new Request.Builder()
.url("https://sattamatkaresult.live/api/v1/results")
.addHeader("X-API-Key", "YOUR_KEY")
.build();
A packaged APK can be unpacked, so a key stored in the app can be lifted out of it. Let a server you control make the request.
Status codes
A call that succeeds is HTTP 200 and the JSON shown for that route. Browsers on other origins may read it (Access-Control-Allow-Origin: *).
A call that fails returns the status from the table and a body of {"error": "..."} — decide from the status, not from how the JSON is laid out.
| Status | Why you see it | Next step |
|---|---|---|
| 401 | The key is absent, not recognised, or has been disabled | Send X-API-Key as a header. A key written into the URL is not read, and this status is the result. |
| 403 | API access is switched off for the whole site | Nothing on your side will clear this — get in touch with us. |
| 404 | That slug is unknown, or the path is not a real route | Copy slugs from /markets and recheck the spelling of the path. |
| 429 | The daily cap has been used up (1000/day) | Store replies and call more slowly, or ask us to raise the cap. |
Failed calls are counted as well as successful ones, so repeating a 401 or a 404 in a loop only spends the cap — repair the call. A 429 returns to zero at midnight Asia/Kolkata.
Pushed updates (webhooks)
Polling is optional. We can deliver each change to a server you name: once a callback URL is on file, a JSON POST leaves within seconds of the change.
- Events:
result.declared,result.cleared,starline.declared,test.ping(that same name also arrives in theX-KG-Eventheader). - Body:
{"event","site","sent_at","market":{"name","slug","oid"},"half","result","jodi","date"}(a starline notice includesgame,time,result). - Signature: each delivery sets
X-KG-Signature: sha256=HMAC_SHA256(rawBody, your_secret)— check it, and only then trust the body. - Your URL must answer HTTP 2xx inside a few seconds. Missed deliveries are logged, and if they keep failing the hook can be switched off.
Ask for a webhook by reaching us and share your callback URL.
Rate of use
Hit /results no more than once a minute, and keep fetched jodi and panel history cached for a day before requesting it again. Large volume or resale, or a higher limit, requires an API key — write to us. Figures are supplied as published, for information only; read the disclaimer.