Skip to content

Download everything

GET /v1/dump returns every item and every guide in one response — for a bulk consumer that wants a local copy instead of crawling item by item.

Terminal window
curl --compressed -o dump.json https://truefloat.app/api/v1/dump

--compressed asks for gzip and unpacks it on arrival, so dump.json is plain JSON. Leave it off and ask for gzip yourself (-H 'Accept-Encoding: gzip') only if you want to keep the compressed bytes. dump.json looks like this, with the arrays cut here:

{
"dataset_version": "e9c25a6",
"data": {
"items": [
{
"def_index": 1,
"paint_index": 1054,
"slug": "deagle-heat-treated",
"weapon": "Desert Eagle",
"finish": "Heat Treated",
"paint_label": "Heat Treated"
},
"..."
],
"guides": [
{
"steam_id": "2941982575",
"title": "AK-47 Case Hardened | Blue Gem",
"...": "..."
},
"..."
]
}
}

Served gzip when Accept-Encoding includes it; always ask for gzip (most HTTP clients do by default; curl needs --compressed). Measured 2026-09-25:

items guides uncompressed gzip
/v1/dump 298 308 30.2 MB 1.3 MB

The response is cached per dataset_version and reused for every request — your first request after a data reload is no slower than any other.

you’re building… use
a single item page or listing GET /v1/items/{def}/{paint}/patterns — one item, every seed
every listing on a marketplace page still /patterns, once per item shown
a local mirror, search index, or offline dataset /v1/dump
“did the dataset change since I last checked” GET /v1/meta, compare dataset_version

Three hundred listings on one page is one /patterns fetch per item, never three hundred /seeds/{seed} fetches. /v1/dump is for downloading the dataset once, not for serving a single page — see Building on the API for polling cadence.

/v1/dump carries the same ETag: "<dataset_version>" as everything else. Send If-None-Match with the version you already have to skip the download entirely when nothing changed:

Terminal window
curl --compressed -D - -o dump.json \
-H 'If-None-Match: "e9c25a6"' \
https://truefloat.app/api/v1/dump
HTTP/2 304
etag: "e9c25a6"
cache-control: public, max-age=3600
vary: Accept-Encoding
access-control-allow-origin: *
access-control-expose-headers: ETag, Retry-After

A 304 has no body, so curl leaves the dump.json you already have as it is. Send the ETag back exactly as you received it.