RUSTMARKETAPI / DOCUMENTATION · v1.0.0

Built for your next integration.

Rust skin prices from the major marketplaces in one REST API: current prices, price history and candles, sales statistics, the item catalog and market metadata.

Getting started

Base URL: https://rustmarketapi.com/api. Every request is a plain HTTPS GET that returns JSON. Sign in with Steam or Google, copy your key from the dashboard and make your first call:

curl -G "https://rustmarketapi.com/api/v1/listings/latest/aggregate" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "market_hash_name=Tempered AK47"

Find exact item names with GET /v1/items?q=, compare markets with /v1/listings/latest/aggregate, chart prices with /v1/listings/history/candles and sync everything at once with /v1/prices.

Authentication

Authentication. Every /v1 request needs your API key, either as ?key=rustmarketapi_key_… or in the X-API-Key header. Create a key in the dashboard. GET /health needs no key.

Prefer the X-API-Key header in server code: query strings end up in proxy logs. Keys look like rustmarketapi_key_… and can be rotated in the dashboard at any time.

Credits & limits

Credits. Each request costs credits; the cost is in the X-Quota-Cost header and in every endpoint description. Only successful answers are charged. X-Quota-Remaining, X-RateLimit-Limit and X-RateLimit-Remaining show what is left. Free: 20,000 credits per month and 600 requests per minute. Pro: 20,000,000 credits and 6,000 requests per minute.

RequestCredits
GET /v1/account0
GET /v1/markets, /v1/currency_rates, /v1/sales/*1
GET /v1/items?q=…1
GET /v1/items (full catalog)20
GET /v1/listings/latest/aggregate1 per market
GET /v1/listings/history/* 1 per market × window (24h ×1, 7d ×2, 30d ×4, 90d ×8, older ×16)
GET /v1/prices10 per market

Price semantics

Prices. Prices are floats in the requested currency (default USD). Markets differ in what a price means (lowest ask, trade value in site credit, …); GET /v1/markets documents it per market and every listing repeats price_type and balance.

Listing prices, Steam wallet prices and trade-site valuations are different things. Each market declares its price_type (ask, trade_withdrawal, …), balance (cash, site_credit, …), whether fees are included (price_basis) and what listings counts. The cheapest prices in the catalog and in /v1/prices only compare cash asks. A price older than the market's stale_after_seconds is reported with available: false.

Errors

Errors. Refusals are JSON: {"detail": "…"}. 403 invalid key, 404 unknown item, 422 invalid parameter, 429 quota or rate limit, 503 timeout.

Markets

Supported marketplaces and what their prices mean.

Supported marketplaces

GET/v1/markets

Every Rust marketplace with its native currency, what its prices mean and how fresh they are. Costs 1 credit.

curl -G "https://rustmarketapi.com/api/v1/markets" \ -H "X-API-Key: YOUR_KEY"
Response fields
activebooleanWhether this market is collected right now.
balancestringWhat the price is paid with: cash, steam_wallet or site_credit.
currencystring | nullNative currency of the market's prices.
deliverystringbot, p2p or mixed.
documentation_urlstring | nullDocumentation of the source the price comes from.
homepagestring
inventory_groupstring | nullMarkets with the same group share one inventory; do not count their listings twice.
itemsintegerItems with a current price on this market.
marketstringCode to pass as markets on the price endpoints.
namestring
price_basisstringbuyer_total, before_fees, seller_net, trade_value or unspecified.
price_typestringask (lowest listing), bid, trade_withdrawal, trade_deposit, reference or sale.
quantitystringWhat listings counts: items, listings, orders or unknown.
refresh_secondsinteger | nullPolling interval in seconds.
sourcestringofficial_api, website_endpoint, html or partner_api.
stale_after_secondsinteger | nullA price older than this many seconds is reported as unavailable.
statusstringok, degraded, stale, error or idle.
tradabilitystringTrade-lock coverage: tradable, including_locked, locked_only or unspecified.
updated_atstring (date-time) | nullLast successful collection.
urlstring | nullItem URL template. {name} is the URL-encoded market hash name, {slug} a lowercase dashed form.

Errors: 403

Items

The Rust item catalog.

Rust item catalog

GET/v1/items

Every item seen on a tracked market with its cheapest current cash ask in USD. With q a search (1 credit, max 25 results), without it the full catalog (20 credits).

ParameterTypeDescription
qstringCase-insensitive part of market_hash_name. Max 25 results. Omit for the full catalog.
Example: ak47
curl -G "https://rustmarketapi.com/api/v1/items" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "q=ak47"
Response fields
categorystring | nullSteam item type, e.g. Rifle, Hoodie, Door.
icon_urlstring | nullSteam icon URL.
listingsintegerUnits or listings across those markets.
lowest_pricenumber | nullCheapest current cash ask in USD.
lowest_price_marketstring | nullMarket with that ask.
market_hash_namestringExact Steam Community Market name. Use it for every other endpoint.
marketableboolean | null
marketsintegerActive markets with a current price for the item.
namestring | nullDisplay name when the Steam catalog knows one.
steam_itemdef_idinteger | null
tradableboolean | null
workshop_idstring | null

Errors: 403

Listings

Current prices, price history and candles.

Price history for an item

GET/v1/listings/history/aggregate

Every stored change of the price per market, newest first. A row exists only when price, listing count or availability changed; each state lasts until the next newer row.

ParameterTypeDescription
market_hash_namestringExact market hash name.
Example: Tempered AK47
marketsstring[]Market codes, repeated or comma-separated. Default: every active market.
currencystringPrice currency. Default USD.
sincestringStart: ISO 8601 time or date, unix seconds, or relative (24h, 7d, 4w). Omit for the full history. Older windows cost more: ≤24h ×1, ≤7d ×2, ≤30d ×4, ≤90d ×8, else ×16.
Example: 7d
curl -G "https://rustmarketapi.com/api/v1/listings/history/aggregate" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "market_hash_name=Tempered AK47" \ --data-urlencode "since=7d"
Response fields
currencystring
market_hash_namestring
marketsmap<string, HistoryMarket>Market code → link, listed once.
└ market_linkstring
└ price_typestring
seriesmap<string, HistoryPoint[]>Market code → changes, newest first. The last change before since is included so a step chart starts at the right price.
└ ask_pricenumber | nullPrice in the requested currency; null while unavailable.
└ availableboolean
└ listingsinteger | null
└ observed_atstring (date-time)Start of this state. It lasts until the next (newer) point.

Errors: 404, 422

Price candles for an item

GET/v1/listings/history/candles

Open, high, low, close and time-weighted mean per hour or day, computed from the stored changes. Gaps without an available price have null prices and coverage below 1. Costs like the history endpoint.

ParameterTypeDescription
market_hash_namestringExact market hash name.
Example: Tempered AK47
marketsstring[]Market codes, repeated or comma-separated. Default: every active market.
currencystringPrice currency. Default USD.
sincestringStart like on the history endpoint. Default 7d for 1h, 90d for 1d.
Example: 30d
intervalstring1h or 1d. Default 1h.
Example: 1h
curl -G "https://rustmarketapi.com/api/v1/listings/history/candles" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "market_hash_name=Tempered AK47" \ --data-urlencode "since=30d" \ --data-urlencode "interval=1h"
Response fields
currencystring
intervalstring1h or 1d.
market_hash_namestring
seriesmap<string, Candle[]>Market code → candles, oldest first.
└ closenumber | null
└ coveragenumberShare of the bucket with an available price, 0–1.
└ highnumber | null
└ listingsinteger | nullLast known listing count in the bucket.
└ lownumber | null
└ meannumber | nullTime-weighted mean over the priced part of the bucket.
└ opennumber | null
└ timestring (date-time)Bucket start (UTC).

Errors: 404, 422

Latest prices for an item

GET/v1/listings/latest/aggregate

The current price on every selected market, cheapest available first. Prices the market no longer reports stay with available: false and the last price seen. Costs 1 credit per market.

ParameterTypeDescription
market_hash_namestringExact market hash name.
Example: Tempered AK47
marketsstring[]Market codes, repeated or comma-separated. Default: every active market.
currencystringPrice currency. Default USD.
Example: USD
curl -G "https://rustmarketapi.com/api/v1/listings/latest/aggregate" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "market_hash_name=Tempered AK47" \ --data-urlencode "currency=USD"
Response fields
currencystring
listingsListingResponse[]Cheapest available first; unavailable markets last.
└ ask_pricenumber | nullLowest listing (ask) or trade value, in the requested currency.
└ availablebooleanFalse when the market no longer lists the item or the price went stale.
└ balancestring
└ changed_atstring (date-time)When the price last changed.
└ listingsinteger | nullUnits or listings available, see quantity in GET /v1/markets. Null if not reported.
└ marketstring
└ market_linkstringDirect link for this item on the market.
└ max_pricenumber | nullHighest listing, when the market reports it.
└ mean_pricenumber | nullMean listing price, when the market reports it.
└ median_pricenumber | nullMedian listing price, when the market reports it.
└ price_typestringMeaning of the prices, see GET /v1/markets.
└ timestampstring (date-time)When the market last confirmed this price.
market_hash_namestring

Errors: 404, 422, 429

Current prices of every item

GET/v1/prices

One row per item with each selected market's current price and the cheapest cash ask. Built for price comparison sites and bulk sync. Costs 10 credits per market.

ParameterTypeDescription
marketsstring[]Market codes, repeated or comma-separated. Default: every active market.
currencystringPrice currency. Default USD; see GET /v1/currency_rates.
Example: USD
curl -G "https://rustmarketapi.com/api/v1/prices" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "currency=USD"
Response fields
currencystring
itemsPriceRow[]Every item with at least one available price, sorted by name.
└ lowest_pricenumber | nullCheapest current cash ask across the selected markets.
└ lowest_price_marketstring | null
└ market_hash_namestring
└ pricesmap<string, MarketPrice>Market code → current price.
└ listingsinteger | null
└ median_pricenumber | null
└ pricenumber
└ updated_atstring (date-time)

Errors: 422

Sales

Completed-sale statistics.

Daily sales history for an item

GET/v1/sales/history/aggregate

Completed days of executed sales per market in the market's calendar, newest first. Costs 1 credit.

ParameterTypeDescription
market_hash_namestringExact market hash name.
Example: Tempered AK47
marketsstring[]Market codes, repeated or comma-separated. Default: every market with sales data.
currencystringPrice currency. Default USD.
startstring (date)First day, YYYY-MM-DD. Default 90 days ago.
endstring (date)Last day, YYYY-MM-DD. Default today.
curl -G "https://rustmarketapi.com/api/v1/sales/history/aggregate" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "market_hash_name=Tempered AK47"
Response fields
currencystring
market_hash_namestring
seriesmap<string, SaleDay[]>Market code → completed days, newest first.
└ completebooleanFalse when the market's history for that day is truncated.
└ daystring (date)
└ max_pricenumber | null
└ mean_pricenumber | null
└ median_pricenumber | null
└ min_pricenumber | null
└ volumeinteger | null

Errors: 404, 422

Latest sales for an item

GET/v1/sales/latest/aggregate

Completed-sale statistics per market: rolling 24h/7d/30d/90d windows and the latest completed day. Executed sales, not listings. Costs 1 credit.

ParameterTypeDescription
market_hash_namestringExact market hash name.
Example: Tempered AK47
marketsstring[]Market codes, repeated or comma-separated. Default: every market with sales data.
currencystringPrice currency. Default USD.
curl -G "https://rustmarketapi.com/api/v1/sales/latest/aggregate" \ -H "X-API-Key: YOUR_KEY" \ --data-urlencode "market_hash_name=Tempered AK47"
Response fields
currencystring
market_hash_namestring
salesSaleMarket[]
└ last_daySaleDay | | null | null
└ completebooleanFalse when the market's history for that day is truncated.
└ daystring (date)
└ max_pricenumber | null
└ mean_pricenumber | null
└ median_pricenumber | null
└ min_pricenumber | null
└ volumeinteger | null
└ marketstring
└ windowsSaleWindow[]Rolling windows, newest observation.
└ max_pricenumber | null
└ mean_pricenumber | null
└ median_pricenumber | null
└ min_pricenumber | null
└ period_endstring (date-time)
└ period_startstring (date-time)
└ volumeinteger | nullUnits sold; null if the market does not report volume.
└ windowstringWindow length: 24h, 7d, 30d or 90d.

Errors: 404

Currency rates

Supported currencies.

Exchange rates

GET/v1/currency_rates

Supported currency values with their latest daily rate. Costs 1 credit.

curl -G "https://rustmarketapi.com/api/v1/currency_rates" \ -H "X-API-Key: YOUR_KEY"
Response fields
currencystring
daystring (date) | null
ratenumberUnits of this currency per 1 USD.
updated_atstring (date-time) | null
usd_per_unitnumberUSD per unit of this currency.

Account

Your plan and credit usage.

Account and credit usage

GET/v1/account

Plan, rate limit and the credits used this period. Free of charge.

curl -G "https://rustmarketapi.com/api/v1/account" \ -H "X-API-Key: YOUR_KEY"
Response fields
emailstring | null
namestring
planstringfree or pro.
quota_unlimitedboolean
rate_limitintegerRequests per minute.
usageUsageResponse
└ discount_percentinteger
└ limitinteger
└ list_price_centsinteger
└ price_centsinteger
└ quota_unlimitedboolean
└ remaininginteger
└ resets_in_daysinteger
└ savings_centsinteger
└ usage_billing_enabledboolean
└ usage_billing_pausedboolean
└ usage_budget_centsinteger | null
└ usage_overage_creditsinteger
└ usage_overage_limitinteger
└ usedintegerCredits used in the current period.
└ used_percentnumber

Errors: 403

Health

Service status.

Service status

GET/health

No key, no credits.

curl -G "https://rustmarketapi.com/api/health"
Response fields
statusstring

Community & support

Questions, feature requests or higher limits: join our Discord.

Join Discord