Free download
No login or license key required.
| Method | Path | Description |
|---|---|---|
GET | /download/free | Download the current free DLL (TUP-Free.dll). |
GET | /api/download/free-info | JSON metadata: version, size, sha256, updatedAt. |
curl -fsSL https://thatutilspad.com/api/download/free-info curl -fsSL -o TUP-Free.dll https://thatutilspad.com/download/free
using var http = new HttpClient();
var info = await http.GetStringAsync("https://thatutilspad.com/api/download/free-info");
Console.WriteLine(info);
await using var stream = await http.GetStreamAsync("https://thatutilspad.com/download/free");
await using var file = File.Create("TUP-Free.dll");
await stream.CopyToAsync(file);// libcurl
CURL* curl = curl_easy_init();
FILE* out = fopen("TUP-Free.dll", "wb");
curl_easy_setopt(curl, CURLOPT_URL, "https://thatutilspad.com/download/free");
curl_easy_setopt(curl, CURLOPT_WRITEDATA, out);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_perform(curl);
fclose(out);
curl_easy_cleanup(curl);
// metadata: GET https://thatutilspad.com/api/download/free-infoimport urllib.request
info = urllib.request.urlopen("https://thatutilspad.com/api/download/free-info").read()
print(info.decode())
urllib.request.urlretrieve(
"https://thatutilspad.com/download/free",
"TUP-Free.dll",
)const info = await fetch("https://thatutilspad.com/api/download/free-info")
.then((r) => r.json());
console.log(info);
const res = await fetch("https://thatutilspad.com/download/free");
const buf = Buffer.from(await res.arrayBuffer());
require("fs").writeFileSync("TUP-Free.dll", buf);Public detections
Mod-checker detection list managed from the admin panel. No auth required. Only active detections are returned.
| Method | Path | Description |
|---|---|---|
GET | /api/detections | JSON list: name, hashes, fileNames, markers, category, notes, timestamps. |
GET | /api/detections.txt | Plain-text dump (NAME|, HASH|, FILE|, MARKER| blocks). |
GET | /download/detections.txt | Same text file with download disposition. |
curl -fsSL https://thatutilspad.com/api/detections curl -fsSL -o detections.txt https://thatutilspad.com/download/detections.txt
using System.Text.Json;
using var http = new HttpClient();
var json = await http.GetStringAsync("https://thatutilspad.com/api/detections");
using var doc = JsonDocument.Parse(json);
Console.WriteLine($"count = {doc.RootElement.GetProperty("count").GetInt32()}");
var bytes = await http.GetByteArrayAsync("https://thatutilspad.com/download/detections.txt");
await File.WriteAllBytesAsync("detections.txt", bytes);// libcurl โ fetch JSON list CURL* curl = curl_easy_init(); std::string body; curl_easy_setopt(curl, CURLOPT_URL, "https://thatutilspad.com/api/detections"); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteToString); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &body); curl_easy_perform(curl); curl_easy_cleanup(curl); // or save the text dump: // GET https://thatutilspad.com/download/detections.txt โ detections.txt
import json
import urllib.request
with urllib.request.urlopen("https://thatutilspad.com/api/detections") as r:
data = json.load(r)
print(data["count"], "detections")
urllib.request.urlretrieve(
"https://thatutilspad.com/download/detections.txt",
"detections.txt",
)const data = await fetch("https://thatutilspad.com/api/detections")
.then((r) => r.json());
console.log(data.count, "detections");
const txt = await fetch("https://thatutilspad.com/download/detections.txt")
.then((r) => r.text());
require("fs").writeFileSync("detections.txt", txt);Example text block:
# ThatUtilsPad detections # updated: 2026-07-27T00:00:00.000Z NAME|ExampleMod HASH|0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef FILE|Example.dll MARKER|Some.Namespace.Type ---
Public site
| Method | Path | Description |
|---|---|---|
GET | /api/public/config | Shop URL, Discord invite, captcha public config. |
GET | /api/public/stats | Member / license counts for the landing page. |
GET | /health | Service health check. |