Skip to content

Quickstart

No sign-up, no authentication. Every call below works as written.

The JavaScript and Python snippets below share this helper. It returns the response’s data, waits out a 429 for Retry-After seconds (60 if the header is missing) up to three times, and throws on any other error. The JavaScript version also retries a plain network error (a thrown TypeError from fetch) after a fixed 10-second wait, up to three times: that’s what Cloudflare’s edge burst limit looks like in a browser, since its block response carries no CORS headers for fetch to read as a 429. Python sees no CORS, so there the block is an ordinary 429 and the same 429 branch handles it.

const API = 'https://truefloat.app/api/v1';
const EDGE_BLOCK_RETRY_MS = 10_000; // the edge burst-limit block lasts 10s
const MAX_RETRIES = 3;
async function get(path) {
for (let attempt = 0; ; attempt++) {
let res;
try {
res = await fetch(API + path);
} catch (err) {
// No response at all, just a thrown TypeError: the shape of the
// Cloudflare edge burst limit in a browser, since its block carries
// no CORS headers for us to read as a 429. Treat it the same way.
if (err instanceof TypeError && attempt < MAX_RETRIES) {
await new Promise((resolve) => setTimeout(resolve, EDGE_BLOCK_RETRY_MS));
continue;
}
throw err;
}
if (res.status === 429 && attempt < MAX_RETRIES) {
const wait = Number(res.headers.get('Retry-After')) || 60;
await new Promise((resolve) => setTimeout(resolve, wait * 1000));
continue;
}
const body = await res.json().catch(() => null);
if (!res.ok) {
const error = body?.error ?? { code: 'http_error', message: res.statusText };
throw new Error(`${res.status} ${error.code}: ${error.message}`);
}
return body.data;
}
}
  1. GET /v1/items/{def_index}/{paint_index} returns the item plus a menu of every guide covering it — authors, titles, and each system’s id, label and scale — with no seeds yet.

    Terminal window
    curl https://truefloat.app/api/v1/items/7/44
    {
    "dataset_version": "e9c25a6",
    "data": {
    "item": {
    "def_index": 7,
    "paint_index": 44,
    "slug": "ak47-case-hardened",
    "weapon": "AK-47",
    "finish": "Case Hardened",
    "paint_label": "Case Hardened"
    },
    "guides": [
    {
    "steam_id": "2941982575",
    "title": "AK-47 Case Hardened | Blue Gem",
    "authors": ["korenevskiy"],
    "url": "https://steamcommunity.com/sharedfiles/filedetails/?id=2941982575",
    "permission": "unknown",
    "updated": "2026-03-01T13:29:00",
    "systems": [
    {
    "id": "ak47-blue-gem",
    "label": "AK-47 Blue Gem",
    "alias": null,
    "topic": null,
    "kind": "tier",
    "levels": 4,
    "seeds": 97
    }
    ]
    },
    {
    "steam_id": "3313951742",
    "title": "The Complete Gold Gem Patterns Guide",
    "authors": ["korenevskiy"],
    "url": "https://steamcommunity.com/sharedfiles/filedetails/?id=3313951742",
    "permission": "unknown",
    "updated": "2026-06-19T17:01:00",
    "systems": [
    {
    "id": "ak47-gold-gem",
    "label": "Gold Gem Patterns",
    "alias": null,
    "topic": null,
    "kind": "group",
    "levels": 1,
    "seeds": 4
    }
    ]
    }
    ]
    }
    }
  2. GET /v1/items/{def}/{paint}/seeds/{seed} returns every guide’s verdict on one seed, side by side, plus which of the item’s other guides don’t list it at all.

    Terminal window
    curl https://truefloat.app/api/v1/items/7/44/seeds/387

    Always show v.guide.authors and v.guide.url next to any verdict you render — see Attribution.

  3. Grab every graded seed for a listings page

    Section titled “Grab every graded seed for a listings page”

    A listings page shouldn’t fetch per seed. GET /v1/items/{def}/{paint}/patterns returns every graded seed for the item in one response, with guide and system details given once; look each listing’s seed up in it locally.

    Terminal window
    curl https://truefloat.app/api/v1/items/7/44/patterns

    A page showing several items makes one /patterns call per item shown, never one call per listing. For a full local copy of the whole dataset, download /v1/dump once instead.

  • Reading a guide response — the verbatim quotes, ranks, values and recorded contradictions in a full guide.
  • Access & rate limits — 1000 requests per minute per IP, nothing to sign up for.
  • The data model — item → guide → system → level → seeds.
  • Endpoints — all eight, one line each, linked into the interactive reference.