BYTETOOLS

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.

No API key requiredHTTPSFree tier

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
curl 'https://api.steampowered.com/ISteamNews/GetNewsForApp/v0002/?appid=440&count=2&maxlength=200&format=json'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200
{
  "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

ParameterTypeRequiredDescription
appidqueryRequiredThe Steam application id. 440 is Team Fortress 2; find ids via `ISteamApps/GetAppList`. 440
countqueryOptionalHow many news items to return. 2
maxlengthqueryOptionalTruncate the `contents` field to this many characters, appending an ellipsis. Omit for full text. 200
formatqueryOptional`json`, `xml` or `vdf`. Defaults to JSON. json
feedsqueryOptionalComma-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

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.