Getting Started
Welcome to SteamWebAPI — a high-quality API service that gives developers seamless access
to Steam game data, user profiles, inventories, item prices, and more. No direct Steam API
dependency, no IP blocking risk.
SteamWebAPI is an independent service and is not affiliated with Valve, Steam, or any of
their partners. All rights belong to their respective owners.
How to Use
Getting started takes three steps:
- Make a GET request to any API endpoint.
- Browse the endpoints in this reference — pick one from the sidebar.
- Send your API key in the recommended
X-Api-Key HTTP header.
Authentication
Every production API request requires an API key. Use the header for new integrations:
Recommended HTTP Header
X-Api-Key: YOUR_API_KEY
Legacy Query Parameter
https://www.steamwebapi.com/steam/api/inventory?key=YOUR_API_KEY
The ?key= parameter remains supported for backward compatibility. Avoid query-string credentials in new applications.
How to Get an API Key
- Click "Login with Steam" to create an account.
- Go to your Dashboard → API Key.
Your Steam data is not stored by SteamWebAPI.
Is it Free?
The free tier provides limited access for initial integration work. Endpoint groups, premium data and limits depend on the selected plan; verify them on the pricing page before deployment.
Base URL
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://www.steamwebapi.com/steam/api/YOUR_ENDPOINT"
Responses
All responses are JSON. Errors include a descriptive error message field.
Supported Games
| Game |
Shortname |
Status |
| CS2 |
cs2 |
Fully Tested |
| RUST |
rust |
Basic Tested |
| DOTA |
dota |
Basic Tested |
Output Formats
Select the output format with the format query parameter. Default is JSON.
Add pretty=1 to pretty-print JSON. The examples omit the repeated
X-Api-Key header for readability.
# JSON (default)
/steam/api/inventory
# Pretty JSON
/steam/api/inventory?pretty=1
# Gzip-compressed download
/steam/api/items?format=gzip
# ZIP archive
/steam/api/items?format=zip
# CSV
/steam/api/items?format=csv
# YAML
/steam/api/items?format=yaml
# Interactive HTML table
/steam/api/items?format=table
# MySQL INSERTs
/steam/api/items?format=mysql_with_table
# MongoDB insertMany
/steam/api/items?format=mongo
| format |
Description |
Content-Type |
json |
JSON body (default) |
application/json |
gzip |
Gzip-compressed JSON |
application/gzip |
zip |
ZIP archive with JSON |
application/zip |
csv |
CSV export (UTF-8 BOM) |
text/csv |
tsv |
Tab-separated values |
text/tab-separated-values |
xml |
XML document |
application/xml |
yaml / yml |
YAML document |
application/x-yaml |
table / view |
Interactive HTML table |
text/html |
ndjson |
Newline-delimited JSON |
application/x-ndjson |
jsonp |
JSON with callback |
application/javascript |
mysql |
MySQL INSERT statements |
text/plain |
mysql_with_table |
MySQL CREATE + INSERTs |
text/plain |
pgsql |
PostgreSQL INSERT statements |
text/plain |
pgsql_with_table |
PostgreSQL CREATE + INSERTs |
text/plain |
mongo |
MongoDB insertMany script |
application/javascript |
Supported Languages (Inventory API)
Languages are only supported by the Inventory API. The marketname field
contains the item name in the selected language, while markethashname is always in
English — it serves as a unique identifier and does not change with the language parameter.
| Language |
API Value |
| العربية |
arabic |
| Български |
bulgarian |
| 简体中文 |
schinese |
| 繁體中文 |
tchinese |
| Čeština |
czech |
| Dansk |
danish |
| Nederlands |
dutch |
| English |
english |
| Suomi |
finnish |
| Français |
french |
| Deutsch |
german |
| Ελληνικά |
greek |
| Magyar |
hungarian |
| Bahasa Indonesia |
indonesian |
| Italiano |
italian |
| 日本語 |
japanese |
| 한국어 |
koreana |
| Norsk |
norwegian |
| Polski |
polish |
| Português |
portuguese |
| Português (Brasil) |
brazilian |
| Română |
romanian |
| Русский |
russian |
| Español |
spanish |
| Español (Latinoamérica) |
latam |
| Svenska |
swedish |
| ไทย |
thai |
| Türkçe |
turkish |
| Українська |
ukrainian |
| Tiếng Việt |
vietnamese |
Third-Party Marketplaces
SteamWebAPI collects pricing data from the following external marketplaces for
pricerealXXXX values:
- Skinport
- DMarket
- Buff
- CSGO.com
- Tradeit
- Skinpull
- Waxpeer
- Skinbaron
Item & Pricing Fields
| Key |
Description |
pricelatest |
Steam – Current lowest sell offer; null if no offer |
pricelatestsell |
Steam – Price of the most recent sale |
pricelatestsell24h |
Steam – Most recent sale within the last 24h window |
pricelatestsell7d |
Steam – Most recent sale within the last 7 days |
pricelatestsell30d |
Steam – Most recent sale within the last 30 days |
pricelatestsell90d |
Steam – Most recent sale within the last 90 days |
lateststeamsellat |
Steam – Timestamp of the most recent sale |
latest10steamsales |
Steam – Last 10 daily sales as [date, price, volume] |
pricemedian |
Steam – Median of the last 10 daily sales |
pricemedian24h |
Steam – Volume-weighted median of sales in the last 24h |
pricemedian7d |
Steam – Volume-weighted median of sales in the last 7 days |
pricemedian30d |
Steam – Volume-weighted median of sales in the last 30 days |
pricemedian90d |
Steam – Volume-weighted median of sales in the last 90 days |
priceavg |
Steam – Average of the last 10 daily sales |
priceavg24h |
Steam – Volume-weighted average of sales in the last 24h |
priceavg7d |
Steam – Volume-weighted average of sales in the last 7 days |
priceavg30d |
Steam – Volume-weighted average of sales in the last 30 days |
priceavg90d |
Steam – Volume-weighted average of sales in the last 90 days |
pricesafe |
Steam – Conservative listing anchor: avg of the 3 lowest period medians (24h/7d/30d/90d/latest), with launch-spike outliers (>5× the cheapest) filtered out, × 0.95 |
pricemin |
Steam – Minimum price over the last 90 days (sub-cent outliers filtered) |
pricemax |
Steam – Maximum price over the last 90 days |
pricemix |
Steam – Lowest of sell / offer / third-party real price |
pricereal |
Third-Party – Lowest price from external markets |
pricereal24h |
Third-Party – Lowest price 24h ago |
pricereal7d |
Third-Party – Lowest price 7d ago |
pricereal30d |
Third-Party – Lowest price 30d ago |
pricerealmedian |
Third-Party – Median of 5 lowest external prices |
winloss |
Third-Party vs Steam price difference (%) |
buyorderprice |
Steam – Current highest buy order price |
buyordermedian |
Steam – Median of the top 5 buy order prices |
buyorderavg |
Steam – Average of the top 5 buy order prices |
buyordervolume |
Steam – Sum of qty across all buy orders |
offervolume |
Steam – Sum of qty across all sell offers |
soldtoday |
Steam – Units sold today (current calendar day) |
sold24h |
Steam – Units sold during the previous calendar day |
sold7d |
Steam – Units sold in the last 7 days |
sold30d |
Steam – Units sold in the last 30 days |
sold90d |
Steam – Units sold in the last 90 days |
soldtotal |
Steam – Total units sold across the full sales history Steam exposes (multi-year lifetime, not a rolling window) |
hourstosold |
Steam – Estimated avg hours to sell a single listing (derived from sold24h & offervolume) |
points |
Steam – Demand points: Σ qty × price across all buy orders |
unstable |
1 = unstable price (alltime volume ≤ 10), 0 = stable |
unstablereason |
Reason for instability (nullable) |
priceupdatedat |
Last time the scraper checked this item; price columns themselves only update on a successful USD scrape |
markethashname |
Market hash name |
marketname |
Market display name |
slug |
URL-friendly identifier |
isstattrack |
1 = StatTrak™, 0 = not |
isstar |
1 = has star (★), 0 = no |
Resources
Production Use
Use these parameters and best practices to build a stable, resilient integration on top
of SteamWebAPI in production environments.
production=1 — Stable Versioning
The production=1 parameter ensures that your integration is not disrupted by
unexpected changes introduced in API updates, and allows SteamWebAPI to monitor active
production users.
Benefits
- You receive the exact same response structure already working in your environment.
- After two weeks, your request automatically upgrades to the new stable version — use this period to test.
- You have enough time to adapt your integration before migrating to the new version.
Use version=latest to access the newest API response with all current changes
even while in production mode.
critical=1 — Real-Time Safety Switch
In addition to production=1, the critical=1 parameter provides
an automatic safety mechanism for real-time endpoints such as /inventory or
/item.
For the /items endpoint, critical=1 is automatically activated
in production mode. For all other endpoints it defaults to 0 but can be
manually enabled.
What Does critical=1 Do?
- The API automatically checks whether a critical issue has been flagged (very rare under normal circumstances).
- If a critical issue is detected, all requests with critical=1 are temporarily blocked to prevent bad data.
- You do not need to deactivate your endpoint manually — the system handles it automatically.
When Should You Use critical=1?
Enable it for any operation that depends on real-time data and has financial impact:
- Skin deposit services (SkinPay, DMarket, BitSkins, etc.)
- Automated trades via bots
- Any purchase or trade flow where a wrong price causes a loss
Parameter Summary
| Parameter |
Description |
| production=1 |
Use on all production endpoints — guarantees stable response structure. |
| version=latest |
Opt in to the latest response format even in production mode. |
| critical=1 |
Enables real-time safety switch. Auto-enabled on /items in production. |
Best Practices
General
- Always pass production=1 on every endpoint used in production.
- Always pass critical=1 for real-time financial operations.
- Pull /items prices every 30 minutes to 24 hours and cache them locally in your backend.
- This endpoint is not a backend service — store the data yourself and wrap calls in try-catch.
Item Response Validation (Critical Operations)
Before using an item price in a trade, purchase, or bot decision, always verify two fields:
// ✅ Safe to use
if (item.unstable === false && item.checkedAt !== null) {
// Price is validated and hasn't spiked > 10% vs. yesterday
proceed();
}
// ⚠️ Do NOT use if:
// item.unstable === true → price is flagged as unstable
// item.checkedAt === null → price has not been validated yet
If checkedAt is null, the price has not yet been validated by the system.
Do not use such items in critical operations.
Profile Autocomplete
Call the endpoint from your backend and keep the API key out of public browser
code:
GET /autocomplete/profile?search=shro
X-Api-Key: YOUR_API_KEY
Use a trimmed search value of 3–64 characters. The response contains at most five
profiles ordered by match quality, with no pagination. Each call accepted by
the authentication and quota checks consumes one Profile credit, regardless
of how many profiles are returned. This also applies to an empty result, an
empty search value, or a search shorter than three characters: charging happens
before input validation.
Autocomplete shares the account's existing Profile per-minute, daily, and
monthly limits with /steam/api/profile.
The response is a direct array. Every suggestion includes steamid,
personaname, accountname, displayname, profiletype, and avatarmedium.
steamid and accountname are strings; the other fields can be null. Keep
steamid as a string and use it as the selected form value. accountname is
the public custom URL name, falling back to the Steam ID. Preserve the returned
order: exact account names come first, then exact persona or display names,
followed by matching prefixes across all three fields. Suggestions are not
guaranteed to be the globally shortest or alphabetically first matches.
Missing or shorter-than-three-character searches return []. Invalid UTF-8,
array input, or more than 64 characters after trimming returns HTTP 400.
Infrastructure failures return an error status rather than an empty result.
For form inputs, wait until at least three characters have been entered and
debounce typing before sending a request, for example by 250 ms. This reduces
request and credit consumption without introducing a search-result cache.
Cancel superseded client requests and ignore stale responses so old suggestions
do not replace newer ones. Browser cancellation does not guarantee that an
already submitted backend request stops or that its Profile credit is avoided.
Responses use Cache-Control: no-store; do not cache suggestion results.
See the API reference for the response fields and
authentication details.
Rate Limits & Subscriptions
- Rate limits vary by plan — check your Dashboard for current limits.
- Subscriptions are processed via Stripe — choose between an auto-renewing recurring plan or a one-time, non-renewing plan at checkout.
- Newly released game items are typically added within 1–3 days.
- All Pro plans include priority support.
Plans, Limits & Data
Choose an endpoint from the product you are building, then verify that endpoint group's access and limits before deployment.
Use the "What do you want to build?" helper in the sidebar when you are unsure which endpoint fits your project.
Which endpoint group do I need?
| What you are building |
Start with |
Typical plan family |
| Inventory valuation or marketplace deposits |
/steam/api/inventory |
Inventory |
| Item catalogue or current Steam prices |
/steam/api/items |
Item or balanced |
| Marketplace comparison |
/price-api and market endpoints |
Item or Enterprise |
| Player profile or account context |
/steam/api/profile |
Profile or balanced |
| CS2 float inspection |
/steam/api/float |
Float |
Access and request limits
Limits are assigned by endpoint group and plan. The pricing page is the commercial source of truth; your dashboard shows the limits active on your account. Do not assume a free or general limit applies to inventory, profile, history or bulk item endpoints.
Compare current plans and endpoint limits →
Data freshness
Freshness varies by source and product. Read the response timestamp fields and the product page coverage notes instead of assuming one global refresh interval. The public explorer shows current source and update times on a bounded sample.
Inspect live sample data →
Common error cases
| Status |
Meaning |
Action |
| 400 |
Invalid or missing input |
Check required parameters and accepted formats. |
| 401 / 403 |
Authentication or plan access failed |
Send X-Api-Key and verify endpoint access. |
| 404 |
Requested resource was not found |
Verify the identifier and supported game. |
| 429 |
A rate limit was reached |
Honor Retry-After or select a suitable plan. |
| 5xx |
Temporary service or upstream failure |
Retry idempotent calls with bounded backoff. |
Production and Enterprise
For higher volume, custom marketplaces, custom data structures, scheduled delivery or contractually agreed support, use the Enterprise path. Operational and business verification is available in the Trust Center.
Enterprise → Trust Center →
Steam Trading API
The Steam Trading API offers a robust solution for facilitating game item trading
without the need for a traditional Steam Trading Bot. Build platforms like Skinport,
Skinbaron, or DMarket — or create your own instant skin buy/sell service.
You won't need a Node.js trade bot — our Tradeoffer API supports your marketplace,
trading site, or any other innovative concept you have in mind.
Trade API Features
| Feature |
Description |
| Create a Tradeoffer |
Generate trade offers for any desired item. |
| Accept a Tradeoffer |
Accept trade offers for any item you choose. |
| Cancel / Decline |
Cancel or decline trade offers as needed. |
| Tradeoffer Status |
Confirm and monitor trade statuses in real time. |
What Can You Build?
- Marketplaces
- Trading Sites
- Gambling Sites
- Skin Upgraders
- Deposit Systems
- Price Aggregators
B2C vs. P2P Trading Models
B2C (Business-to-Customer)
In a B2C model your bot directly interacts with customers — similar to how Skinport,
Skinbaron, and DMarket operate. You own an account where items are sent or received
instantly without delay.
| Challenge |
Difficulty |
| Retrieving the steamloginsecure cookie |
Low |
| Mobile confirmation when sending skins |
Low |
P2P (Peer-to-Peer)
In a P2P model customers send items directly to the buyer. Platforms like Whitemarket,
Waxpeer, or Buff use this approach — items reach the owner directly and are released
by the seller after a delay.
SteamAuth — The Modern Approach
steamauth.app is a browser extension that lets your users share their Steam login cookie securely with
your platform — no bot needed.
Many major marketplaces already use SteamAuth. With it your customers only need to install
the extension — you can then retrieve inventory, trade status, and execute trade actions
without any additional programming on the user's side.
P2P with SteamAuth (Recommended)
- Your users install the SteamAuth browser extension (Chrome, Opera, Firefox).
- You can then retrieve their steamloginsecure cookie via the extension.
- Use our Trade API endpoints to create, accept, or cancel offers on their behalf.
- No need for a traditional trade bot or manual cookie handling.
P2P without SteamAuth (Advanced)
Alternatively, you can build your own extension or solution and use our API endpoints
with a steamloginsecure cookie that you obtain yourself.
SteamAuth Features
| Feature |
Description |
| Inventory Data |
Access and share CS2 inventory securely with trusted websites. |
| Trade History |
View and analyze complete trading history. |
| Create Trades |
Initiate trades directly through connected websites. |
| Pending Trades |
Monitor all outgoing trade offers in one place. |
| Incoming Trades |
Review and respond to incoming trade offers. |
Available for
Security & Authentication
All trade endpoints require a JSON payload and a valid steamloginsecure cookie
obtained either via SteamAuth or manually from steamcommunity.com.
While our API can perform various trade actions, Steam still requires mobile confirmation
for certain actions. We are actively exploring solutions for automated mobile confirmation
and plan to provide an open-source solution in the future.
Quick Start
- Get your API key from the Dashboard.
- Have your users install SteamAuth (for P2P).
- Use the
POST /steam/api/trade/create endpoint to create trade offers.
- Monitor status via the trade status endpoint.
For questions or assistance, feel free to contact us via the Dashboard or Discord.