Steam Web API
Valve's official Steam Web API has endpoints that need no key at all: game news feeds, global achievement percentages and the full app list. Tested curl example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Steam Web API?
The Steam Web API is Valve's official API for Steam data. Most interfaces require a publisher or user key, but several do not — news feeds for any app, global achievement completion percentages and the complete app list are all readable anonymously.
The reputation that everything on Steam needs a key is mostly true and usefully wrong. Anything touching a user account does, and rightly so. But `ISteamNews`, `ISteamUserStats/GetGlobalAchievementPercentagesForApp` and `ISteamApps/GetAppList` are open, which is enough to build a patch-notes feed, an achievement rarity chart, or a searchable index of every app on the store without registering anything.
The news payload carries a Valve-shaped quirk. `contents` is not clean HTML — it is Steam's own markup dialect, sprinkled with placeholder macros such as `{STEAM_CLAN_LOC_IMAGE}` that resolve only inside the Steam client, so they must be substituted or stripped before rendering on the web. The `maxlength` parameter truncates that field and appends an ellipsis, which is the cheap way to get a summary. And `count` at the bottom of the response is the total number of news items the app has ever published, not how many you were sent — a distinction that quietly breaks pagination built on it.
Quick facts
- Base URL
https://api.steampowered.com- Authentication
- The endpoints documented here need no key. Most other interfaces on the same host require a `key` parameter tied to a Steam account, which we did not use.
- Rate limit
- Valve publishes a 100,000 calls per day ceiling for keyed access. The open endpoints carry no published figure; treat them as best-effort and cache.
- Pricing
- Free. It is Valve's own API.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Steam Web API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch the latest news items for a Steam game
GET https://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=440&count=2&maxlength=200&format=json
curl 'https://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=440&count=2&maxlength=200&format=json'const res = await fetch("https://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=440&count=2&maxlength=200&format=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=440&count=2&maxlength=200&format=json", timeout=20)
res.raise_for_status()
print(res.json()){
"appnews": {
"appid": 440,
"newsitems": [
{
"gid": "1840944183789813",
"title": "ÜBERFEST 2026",
"url": "https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1840944183789813",
"is_external_url": true,
"author": "erics",
"contents": "{STEAM_CLAN_LOC_IMAGE}/554111/c84ee9b825a4f7c0bb24cfc3a5263ff9acf1fad4.png (Image credit: SFM - BloodiestBanana, Illustrator - Max Shortt) For the third consecutive year, KritzKast presents ÜBERFEST L...",
"feedlabel": "Community Announcements",
"date": 1787083545,
"feedname": "steam_community_announcements",
"feed_type": 1,
"appid": 440
},
{
"gid": "1840944183789824",
"title": "ÜBERFEST 2026",
"url": "https://steamstore-a.akamaihd.net/news/externalpost/tf2_blog/1840944183789824",
"is_external_url": true,
"author": "",
"contents": "<a href=\"https://www.twitch.tv/kritzkast\" target=\"_blank\"> </a> (Image credit: SFM - <a href=\"http://steamcommunity.com/profiles/76561198935532676\" target=\"_blank\">BloodiestBanana</a>, Illustrator - <a href=\"http://steamcommunity.com/profiles/76561199065090344\" target=\"_blank\">Max Shortt</a>) For the third consecutive year, KritzKast presents ÜBERFEST LAN! This year it's not just the players who'll be celebrating! Viewers at...",
"feedlabel": "TF2 Blog",
"date": 1787083500,
"feedname": "tf2_blog",
"feed_type": 0,
"appid": 440
}
],
"count": 3931
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
appid | query | Required | The Steam application id. 440 is Team Fortress 2; find ids via `ISteamApps/GetAppList`. 440 |
count | query | Optional | How many news items to return. 2 |
maxlength | query | Optional | Truncate the `contents` field to this many characters, appending an ellipsis. Omit for full text. 200 |
format | query | Optional | `json`, `xml` or `vdf`. Defaults to JSON. json |
feeds | query | Optional | Comma-separated feed names to restrict the results, such as `steam_community_announcements`. steam_community_announcements |
Response fields
appnews.appidinteger- Echo of the app you queried.
appnews.newsitems[].gidstring- Globally unique news id, returned as a string because it is a 16-digit value.
appnews.newsitems[].dateinteger- Publication time as a Unix timestamp in SECONDS.
appnews.newsitems[].contentsstring- The body, in Steam's markup dialect. Contains macros such as `{STEAM_CLAN_LOC_IMAGE}` that do not resolve outside the Steam client.
appnews.newsitems[].feedlabel / feednamestring- Human-readable and machine-readable names of the source feed. Several feeds carry the same story, so expect near-duplicates.
appnews.newsitems[].is_external_urlboolean- Whether `url` points outside Steam. Useful for deciding whether to open it in a new tab.
appnews.countinteger- Total news items the app has ever published — NOT the number returned in this response.
What you can build with the Steam Web API
- Show a game's patch notes on a community site
- Build a multi-game news aggregator for a Discord server
- Chart global achievement completion rates to find the rarest ones
- Search the full Steam app list to resolve a game name to an appid
- Monitor an app's announcements feed for update alerts
Common errors and how to fix them
403
You called an interface that requires a key without supplying one.
Fix: Only `ISteamNews`, `GetGlobalAchievementPercentagesForApp` and `GetAppList` are open. Anything account-scoped needs a key from Valve.
An empty newsitems array
The appid is valid but has no news, or your `feeds` filter excluded everything.
Fix: Drop the `feeds` parameter first; feed names differ between games and a typo silently returns nothing.
Broken images in rendered news
The `contents` field contains Steam macros, not plain HTML.
Fix: Replace `{STEAM_CLAN_LOC_IMAGE}` and its siblings with the correct CDN prefix, or strip macro-containing tags entirely.
A CORS error in the browser
No allow-origin header is sent.
Fix: Call it server-side. Since keyed endpoints on the same host must never be exposed to a browser anyway, a backend proxy is the right pattern regardless.
Steam Web API — frequently asked questions
Can I use the Steam Web API without an API key?
For some interfaces, yes. Game news through `ISteamNews`, global achievement percentages and the full app list all answer anonymously. Anything reading a user's profile, library or inventory requires a key tied to a Steam account.
How do I find a Steam appid?
Call `ISteamApps/GetAppList/v2/`, which returns every app and its id with no key. It is a very large response, so fetch it once, store it, and refresh occasionally rather than querying it live.
What are the curly-brace macros in the news contents?
They are Steam's own placeholders — `{STEAM_CLAN_LOC_IMAGE}` and similar — which the Steam client expands to CDN paths. Outside the client they render as literal text, so substitute or strip them before displaying news on the web.
Is the count field the number of items returned?
No, it is the total number of news items that app has ever published. The number returned is whatever you asked for with `count`. Pagination built on the response's `count` field will misbehave.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
HTML Entity Decoder
Decode HTML entities back to plain text: named entities, &#nnn; decimal and &#xhh; hex references. Free, instant and processed entirely in your browser.
Steam Web API is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.