Skip to content

LOTTERYCHECKS · LOTTERY COLLECTION

For developers

Free lottery results API, no key required

Pull today's lottery results and past draws into your website, app, bot or Google Sheet as JSON: Thai Government Lottery, Lao Development Lottery, GSB lottery and the Hanoi lotteries, with endpoints for checking numbers and historical statistics. No sign-up, no key, and CORS is open so any domain can call it straight from the browser.
Free: no sign-up, no API key

Start in 10 seconds

Paste the line below into a terminal or open the URL in a browser. No headers, no token. You get the latest draw of that lottery with every prize.

With curl

curl "https://lotterychecks.com/api/public/results?lottery=thai-government&limit=1&lang=en"

With JavaScript

// Today's lottery results (the latest draw), from a browser or Node.js
const res = await fetch("https://lotterychecks.com/api/public/results?lottery=thai-government&limit=1&lang=en");
const json = await res.json();

const draw = json.data[0];
console.log(draw.displayName);                    // 16 August 2026
for (const prize of draw.prizes) {
  console.log(prize.name, prize.numbers.join(" ")); // 1st Prize 004615
}

The base URL of every endpoint is https://lotterychecks.com/api/public

Answers in your language

Add lang to any endpoint to get lottery names, prize names, draw dates and messages in that language: th, en, lo, my, vi. Without it the answer is Thai, exactly as before. Numbers and field names never change with the language, and times are always Thai time.

Supported lotteries (49 types)

lottery valueLotteryDraws
thai-governmentThai Government Lottery1st and 16th of every month, results from 14:30 (Thai time)
lao-lotteryLao Development LotteryEvery Monday and Thursday, results around 20:30 (Thai time)
gsb-lotteryGSB Lottery1st and 16th of every month
hanoi-morningHanoi MorningEvery day, results around 08:30 (Thai time)
hanoi-aseanHanoi ASEANEvery day, results around 09:30 (Thai time)
hanoi-starHanoi StarEvery day, results around 12:30 (Thai time)
hanoi-tvHanoi TVEvery day, results around 14:30 (Thai time)
hanoi-redcrossHanoi Red CrossEvery day, results around 16:30 (Thai time)
hanoi-adhocHanoi Special TaskEvery day, results around 16:30 (Thai time)
hanoi-svipHanoi SVIPEvery day, results around 16:45 (Thai time)
hanoi-specialHanoi SpecialEvery day, results around 17:30 (Thai time)
hanoi-unionHanoi UnionEvery day, results around 17:30 (Thai time)
hanoi-normalHanoi NormalEvery day, results around 18:30 (Thai time)
hanoi-vipHanoi VIPEvery day, results around 19:30 (Thai time)
hanoi-developHanoi DevelopmentEvery day, results around 19:30 (Thai time)
hanoi-4dHanoi 4DEvery day, results around 21:00 (Thai time)
hanoi-lateHanoi LateEvery day, results around 22:30 (Thai time)
hanoi-extraHanoi ExtraEvery day, results around 22:30 (Thai time)
lao-patuxayLao Patuxay LotteryEvery day, results around 05:45 (Thai time)
lao-santipapLao Santipap LotteryEvery day, results around 06:45 (Thai time)
lao-citizenLao Citizen LotteryEvery day, results around 07:45 (Thai time)
lao-extraLao Extra LotteryEvery day, results around 08:30 (Thai time)
lao-morningLao Morning LotteryEvery day, results around 08:30 (Thai time)
lao-development-morningLao Development Morning LotteryEvery day, results around 09:00 (Thai time)
lao-development-morning-vipLao Development Morning VIP LotteryEvery day, results around 10:00 (Thai time)
lao-tvLao TV LotteryEvery day, results around 10:30 (Thai time)
lao-mungkungLao Mungkung LotteryEvery day, results around 11:30 (Thai time)
lao-special-middayLao Special Midday LotteryEvery day, results around 12:00 (Thai time)
lao-specialLao Special LotteryEvery day, results around 12:00 (Thai time)
lao-plusLao Plus LotteryEvery day, results around 12:05 (Thai time)
lao-development-middayLao Development Midday LotteryEvery day, results around 12:30 (Thai time)
lao-sabaideeLao Sabaidee LotteryEvery day, results around 12:30 (Thai time)
lao-kaownahLao Kaownah LotteryEvery day, results around 13:30 (Thai time)
lao-hdLao HD LotteryEvery day, results around 13:45 (Thai time)
lao-jaroenLao Jaroen LotteryEvery day, results around 14:30 (Thai time)
lao-nakhonluangLao Nakhon Luang LotteryEvery day, results around 15:30 (Thai time)
lao-munkongLao Munkong LotteryEvery day, results around 15:30 (Thai time)
lao-starLao Star LotteryEvery day, results around 15:45 (Thai time)
lao-niyomLao Niyom LotteryEvery day, results around 16:30 (Thai time)
lao-rumruayLao Rumruay LotteryEvery day, results around 16:30 (Thai time)
lao-mongkolLao Mongkol LotteryEvery day, results around 18:30 (Thai time)
lao-superLao Super LotteryEvery day, results around 19:00 (Thai time)
lao-aseanLao ASEAN LotteryEvery day, results around 21:00 (Thai time)
lao-rungreungLao Rungreung LotteryEvery day, results around 21:30 (Thai time)
lao-vipLao VIP LotteryEvery day, results around 21:30 (Thai time)
lao-union-vipLao Union VIP LotteryEvery day, results around 21:30 (Thai time)
lao-star-vipLao Star VIP LotteryEvery day, results around 22:00 (Thai time)
lao-aiyaraLao Aiyara LotteryEvery day, results around 23:30 (Thai time)
lao-redcrossLao Red Cross LotteryEvery day, results around 23:30 (Thai time)

Results by draw

Today's results and past draws, newest first. status tells you whether every prize of the draw has been announced (complete) or not yet (announced), and pendingPrizes lists the prizes still to come. In a draw that isn't complete, a prize missing from the list has not been announced yet; it doesn't mean the prize doesn't exist.

GET https://lotterychecks.com/api/public/results

ParameterRequiredDefaultDescription
lotteryOptionalthai-governmentThe lottery you want. A wrong value returns 400 with the full list of supported values.
limitOptional1Number of draws, newest first. The default 1 is the latest draw; at most 20 per request.
langOptionalthLanguage of names, dates and messages. Leave it out for Thai.

Example request

https://lotterychecks.com/api/public/results?lottery=thai-government&limit=1&lang=en

Example response

{
  "success": true,
  "attribution": {
    "source": "LotteryChecks",
    "url": "https://lotterychecks.com",
    "note": "Free to use. Please add a credit link back to LotteryChecks."
  },
  "data": [
    {
      "lottery": "thai-government",
      "lotteryName": "Thai Government Lottery",
      "drawDate": "2026-08-16",
      "displayName": "16 August 2026",
      "status": "complete",
      "pendingPrizes": [],
      "publishedAt": "2026-08-16T09:00:00.000Z",
      "publishedAtText": "16 Aug 2026, 16:00 (Thailand time)",
      "prizes": [
        {
          "slug": "first-prize",
          "name": "1st Prize",
          "amount": "6000000.00",
          "numbers": [
            "004615"
          ]
        },
        {
          "slug": "first-three-digit",
          "name": "First 3 Digits",
          "amount": "4000.00",
          "numbers": [
            "517",
            "884"
          ]
        },
        {
          "slug": "last-three-digit",
          "name": "Last 3 Digits",
          "amount": "4000.00",
          "numbers": [
            "109",
            "760"
          ]
        },
        {
          "slug": "last-two-digit",
          "name": "Last 2 Digits",
          "amount": "2000.00",
          "numbers": [
            "53"
          ]
        }
      ]
    }
  ]
}

The example is shortened and shows the answer with lang set to this page's language.

Limit: 120 requests per minute per IP · cached at the CDN for 300 seconds

Check a number against the latest draw

Send a 2- to 7-digit number and get back which prize it wins and how much, using the same checking rules as the checker on our website. Look at complete before concluding that a number did not win: when complete is false, the number may still match a prize that hasn't been announced (see notice).

GET https://lotterychecks.com/api/public/check

ParameterRequiredDefaultDescription
lotteryOptionalthai-governmentThe lottery you want. A wrong value returns 400 with the full list of supported values.
numberRequiredThe number to check. A full ticket number is matched against every prize including the near-1st prizes, 3 digits against both the first and last 3 digits, and 2 digits against the last 2.2 to 7 digits
langOptionalthLanguage of names, dates and messages. Leave it out for Thai.

Example request

https://lotterychecks.com/api/public/check?lottery=thai-government&number=004615&lang=en

Example response

{
  "success": true,
  "data": {
    "number": "004615",
    "isWinner": true,
    "drawDate": "2026-08-16",
    "displayName": "16 August 2026",
    "complete": true,
    "pendingPrizes": [],
    "notice": null,
    "matches": [
      {
        "prize": "1st Prize",
        "amount": "6000000.00",
        "winningNumber": "004615"
      }
    ],
    "totalAmount": 6000000
  },
  "disclaimer": "This check is for convenience only. Prize claims follow the official announcement of the issuing lottery office.",
  "attribution": {
    "source": "LotteryChecks",
    "url": "https://lotterychecks.com"
  }
}

The example is shortened and shows the answer with lang set to this page's language.

Limit: 60 requests per minute per IP · answered fresh every time, never cached

Number frequency statistics

How often every number has come up in each prize group, with the date it last came up and how many draws it has been missing, calculated from every real draw on record.

GET https://lotterychecks.com/api/public/stats

ParameterRequiredDefaultDescription
lotteryOptionalthai-governmentThe lottery you want. A wrong value returns 400 with the full list of supported values.
langOptionalthLanguage of names, dates and messages. Leave it out for Thai.

Example request

https://lotterychecks.com/api/public/stats?lottery=thai-government&lang=en

Example response

{
  "success": true,
  "attribution": {
    "source": "LotteryChecks",
    "url": "https://lotterychecks.com/en/stats",
    "note": "Free to use. Please add a credit link back to LotteryChecks.",
    "dataSource": "Prize announcements of the Government Lottery Office (glo.or.th)"
  },
  "lottery": "thai-government",
  "dataset": {
    "draws": 437,
    "firstDate": "2015-09-01",
    "lastDate": "2026-08-16",
    "updatedAt": "2026-08-16T09:00:00.000Z"
  },
  "prizes": [
    {
      "prize": "last-two-digit",
      "prizeName": "Last 2 Digits",
      "draws": 437,
      "picks": 437,
      "possibleValues": 100,
      "expectedPerNumber": 4.37,
      "numbers": [
        {
          "number": "53",
          "count": 9,
          "lastDate": "2026-08-16",
          "drawsSince": 0
        }
      ],
      "neverDrawn": []
    }
  ]
}

The example is shortened and shows the answer with lang set to this page's language.

Limit: 60 requests per minute per IP · cached at the CDN for 300 seconds

Calculations from past results

A snapshot of the analysis of real results, per lottery, data window and prize type, with the formula version, sample size, scores and their breakdown.

GET https://lotterychecks.com/api/public/calculations

ParameterRequiredDefaultDescription
lotteryOptionalthai-governmentThe lottery you want. It is read from the lottery registry in the database, so new lotteries work without a new endpoint.slug of any active lottery
windowOptional30How many past draws to use. If fewer exist, the real number is used and reported in sampleSize.
prizeOptionalOnly this prize type. Leave it out to get every supported prize.prize slug of that lottery
langOptionalthLanguage of names, dates and messages. Leave it out for Thai.

Example request

https://lotterychecks.com/api/public/calculations?lottery=thai-government&window=30&prize=last-two-digit&lang=en

Example response

{
  "success": true,
  "lottery": {
    "slug": "thai-government",
    "name": "Thai Government Lottery"
  },
  "sourceDraw": {
    "id": "draw-id",
    "drawDate": "2026-08-16"
  },
  "window": "30",
  "requestedDraws": 30,
  "sampleSize": 30,
  "quality": "high",
  "formulaVersion": "1.0.0",
  "calculatedAt": "2026-08-29T13:36:00.000Z",
  "disclaimer": "Scores are statistics computed from past results. They are not probabilities and do not guarantee any future result.",
  "data": {
    "prizes": [
      {
        "prize": {
          "slug": "last-two-digit",
          "name": "Last 2 Digits",
          "digitCount": 2
        },
        "sampleSize": 30,
        "digitRanking": [
          {
            "candidate": "0",
            "score": 78.4,
            "breakdown": {
              "frequency30": 84.2,
              "recent": 72.6
            }
          }
        ],
        "pairRanking": [
          {
            "candidate": "03",
            "score": 76.1,
            "breakdown": {
              "historical": 80,
              "position": 73.4
            }
          }
        ]
      }
    ]
  }
}

The example is shortened and shows the answer with lang set to this page's language.

Limit: 60 requests per minute per IP · cached at the CDN for 300 seconds

Examples in other languages

The answer is plain JSON that works with any language. These two are the ones people ask about most.

PHP

<?php
// Today's lottery results with PHP. Caching for 300 seconds is enough: results only change when a draw is announced.
$url  = "https://lotterychecks.com/api/public/results?lottery=thai-government&limit=1&lang=en";
$json = json_decode(file_get_contents($url), true);

$draw = $json["data"][0];
echo $draw["displayName"] . "\n";
foreach ($draw["prizes"] as $prize) {
  echo $prize["name"] . ": " . implode(", ", $prize["numbers"]) . "\n";
}

Python

import requests

url = "https://lotterychecks.com/api/public/results"
r = requests.get(url, params={"lottery": "lao-lottery", "limit": 5, "lang": "en"}, timeout=10)
r.raise_for_status()

for draw in r.json()["data"]:
    print(draw["drawDate"], draw["prizes"][0]["numbers"])

OpenAPI and README

Don't want to read this whole page? These two files tell your tools everything they need.

  • OpenAPI 3.1 Generate a client automatically, or open it straight in Postman or Swagger UI.
  • README (Markdown) A short Markdown version of this documentation to paste into your project's README.

Both files are written in Thai. The endpoints, parameters and field names are the same in every language.

How to credit us

The only condition for free use is that your readers know where the data comes from. Paste this under your results. We can't enforce it and don't intend to, but it is what keeps this API free.

Credit line (HTML)

<p>
  Lottery results from
  <a href="https://lotterychecks.com/en" target="_blank" rel="noopener">LotteryChecks</a>
</p>

Status codes and errors

StatusMeaningWhat to do
200SuccessRead data
400Invalid parameterRead error, which lists every supported value
404No results for that lottery yetWait for the next draw
429Over the rate limitWait the number of seconds in the Retry-After header, then try again
500Temporary server problemTry again, and keep a cached copy to show meanwhile

Every answer has a success field. When it is false there is an error message you can show to your users as it is, in the language you asked for with lang.

Terms of use

Free for personal and business websites. No fees and no permission needed in advance. We only ask for a credit link back to LotteryChecks.

Results follow the announcements of the Government Lottery Office and the official source of each lottery. We work to publish quickly and accurately, but prize claims are always decided by the official announcement, and anyone using the API should tell their readers so.

Please don't fetch more often than you need. Results only change when a draw is announced, so calling every second doesn't bring new data; it only adds load. Cache answers on your side for at least 300 seconds.

This website takes no bets and offers no gambling services, and the API may not be used on online gambling websites.

Frequently asked questions

Is the lottery results API really free? Do I need a key?

It really is free. No account, no API key and no fees, for personal and business websites alike. Call the URL straight away; we only ask for a credit link back to LotteryChecks so your readers know where the data comes from.

Can I call it from the browser, or will CORS block me?

You can call it straight from browser JavaScript. Every endpoint answers with Access-Control-Allow-Origin: * and supports the OPTIONS preflight, so fetch or axios work from any domain.

How often should I fetch?

Results only change when a draw is announced, so fetching every 5 minutes during the announcement is plenty. The results endpoint allows 120 requests per minute per IP; above that you get status 429 with a Retry-After header saying how many seconds to wait.

Where does the data come from, and how reliable is it?

Thai Government Lottery results follow the Government Lottery Office (glo.or.th), and other lotteries follow their own official source. Every draw is checked against two sources before it is published, but prize claims are always decided by the official announcement.

Can I get the answers in English, Lao, Burmese or Vietnamese?

Yes. Add lang=en, lo, my or vi to any endpoint. Lottery names, prize names, draw dates and messages come back in that language; numbers and field names stay the same.

Can I use it on a gambling website?

No. LotteryChecks reports results so people can check them. It takes no bets and offers no gambling of any kind, and the API and widget may not be used on online gambling websites.

Don't want to write code?

If you only want to show results on your website, use the lottery results widget: paste it once and it updates every draw. Or see today's results, the latest Thai Government Lottery draw, lottery statistics and the number checker right here on the site.

Stuck, or want another endpoint? Tell us on the contact page