Build on the SteamTools API
The same endpoints the homepage uses, exposed as plain HTTP. No auth, no SDK, no vendor lock-in — just curl from the terminal.
Search the Steam catalog
/api/searchReturns up to 10 results that match a query — either a game name or a numeric App ID. Numeric queries are looked up via Steam's appdetails endpoint, so they always return the canonical record.
Query parameters
- query
- Free-text search term or numeric App ID.
Example request
curl -s "https://steamtools.games/api/search?query=portal" | jqGenerate the manifest + Lua pair
/api/generateVerifies the App ID against the Steam store, then returns the canonical CDN URLs for the .manifest and .lua files. Branches other than public must exist for that App ID on Steam.
Request body
- appId
- Numeric Steam App ID.
- branch
- Optional. One of: public, beta, beta_1, ptb, experimental, staging. Defaults to public.
Example request
curl -s -X POST "https://steamtools.games/api/generate" \
-H "Content-Type: application/json" \
-d '{"appId": "400", "branch": "public"}' | jqExample response
{
"code": 0,
"message": "ok",
"data": {
"appId": "400",
"branch": "public",
"gameName": "Portal",
"gameImage": "https://shared.cloudflare.steamstatic.com/store_item_assets/steam/apps/400/capsule_231x87.jpg",
"manifestUrl": "https://shared.fastly.steamstatic.com/steamtools/manifests/400_public.manifest",
"luaUrl": "https://shared.fastly.steamstatic.com/steamtools/scripts/400_public.lua",
"instructions": [
"1. Create a depotcache folder next to SteamTools if you don't have one.",
"2. Drop the manifest file (400_public.manifest) into the depotcache folder.",
"3. Drop the matching Lua script into the SteamTools root directory.",
"4. Restart SteamTools and the game will appear in your library.",
"5. Branches available for this App ID: public."
],
"generatedAt": "2026-06-30T12:34:56.000Z"
}
}JSON object with manifestUrl, luaUrl, gameName, gameImage, and per-step install instructions.
Rate limits & fair use
Search is throttled to one request per 300 ms per IP; generate is throttled to one request per 1.5 s. There is no daily quota. If you need higher throughput, run your own instance — the project is open source.
OpenAPI 3.1 spec
The full schema is available as a static JSON file — perfect for plugging into Postman, Insomnia, or your CI linter.
Download openapi.jsonFrequently asked
- Do I need an API key?
- No. The endpoints are public, free, and unauthenticated. We rate-limit by IP to keep the lights on.
- Can I use this in a commercial product?
- Yes, as long as you respect Steam's terms of service and don't repackage the manifest files behind ads or a paywall.
- Why JSON instead of XML?
- JSON is the lowest common denominator. The shape mirrors what the homepage generator already returns, so any client that talks to one can talk to the other.