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.
| Request | Credits |
|---|---|
| GET /v1/account | 0 |
| GET /v1/markets, /v1/currency_rates, /v1/sales/* | 1 |
| GET /v1/items?q=… | 1 |
| GET /v1/items (full catalog) | 20 |
| GET /v1/listings/latest/aggregate | 1 per market |
| GET /v1/listings/history/* | 1 per market × window (24h ×1, 7d ×2, 30d ×4, 90d ×8, older ×16) |
| GET /v1/prices | 10 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
| active | boolean | Whether this market is collected right now. |
| balance | string | What the price is paid with: cash, steam_wallet or site_credit. |
| currency | string | null | Native currency of the market's prices. |
| delivery | string | bot, p2p or mixed. |
| documentation_url | string | null | Documentation of the source the price comes from. |
| homepage | string | |
| inventory_group | string | null | Markets with the same group share one inventory; do not count their listings twice. |
| items | integer | Items with a current price on this market. |
| market | string | Code to pass as markets on the price endpoints. |
| name | string | |
| price_basis | string | buyer_total, before_fees, seller_net, trade_value or unspecified. |
| price_type | string | ask (lowest listing), bid, trade_withdrawal, trade_deposit, reference or sale. |
| quantity | string | What listings counts: items, listings, orders or unknown. |
| refresh_seconds | integer | null | Polling interval in seconds. |
| source | string | official_api, website_endpoint, html or partner_api. |
| stale_after_seconds | integer | null | A price older than this many seconds is reported as unavailable. |
| status | string | ok, degraded, stale, error or idle. |
| tradability | string | Trade-lock coverage: tradable, including_locked, locked_only or unspecified. |
| updated_at | string (date-time) | null | Last successful collection. |
| url | string | null | Item 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).
| Parameter | Type | Description |
|---|---|---|
| q | string | Case-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
| category | string | null | Steam item type, e.g. Rifle, Hoodie, Door. |
| icon_url | string | null | Steam icon URL. |
| listings | integer | Units or listings across those markets. |
| lowest_price | number | null | Cheapest current cash ask in USD. |
| lowest_price_market | string | null | Market with that ask. |
| market_hash_name | string | Exact Steam Community Market name. Use it for every other endpoint. |
| marketable | boolean | null | |
| markets | integer | Active markets with a current price for the item. |
| name | string | null | Display name when the Steam catalog knows one. |
| steam_itemdef_id | integer | null | |
| tradable | boolean | null | |
| workshop_id | string | 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.
| Parameter | Type | Description |
|---|---|---|
| market_hash_name | string | Exact market hash name. Example: Tempered AK47 |
| markets | string[] | Market codes, repeated or comma-separated. Default: every active market. |
| currency | string | Price currency. Default USD. |
| since | string | Start: 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
| currency | string | |
| market_hash_name | string | |
| markets | map<string, HistoryMarket> | Market code → link, listed once. |
| └ market_link | string | |
| └ price_type | string | |
| series | map<string, HistoryPoint[]> | Market code → changes, newest first. The last change before since is
included so a step chart starts at the right price. |
| └ ask_price | number | null | Price in the requested currency; null while unavailable. |
| └ available | boolean | |
| └ listings | integer | null | |
| └ observed_at | string (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.
| Parameter | Type | Description |
|---|---|---|
| market_hash_name | string | Exact market hash name. Example: Tempered AK47 |
| markets | string[] | Market codes, repeated or comma-separated. Default: every active market. |
| currency | string | Price currency. Default USD. |
| since | string | Start like on the history endpoint. Default 7d for 1h, 90d for 1d.Example: 30d |
| interval | string | 1h 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
| currency | string | |
| interval | string | 1h or 1d. |
| market_hash_name | string | |
| series | map<string, Candle[]> | Market code → candles, oldest first. |
| └ close | number | null | |
| └ coverage | number | Share of the bucket with an available price, 0–1. |
| └ high | number | null | |
| └ listings | integer | null | Last known listing count in the bucket. |
| └ low | number | null | |
| └ mean | number | null | Time-weighted mean over the priced part of the bucket. |
| └ open | number | null | |
| └ time | string (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.
| Parameter | Type | Description |
|---|---|---|
| market_hash_name | string | Exact market hash name. Example: Tempered AK47 |
| markets | string[] | Market codes, repeated or comma-separated. Default: every active market. |
| currency | string | Price 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
| currency | string | |
| listings | ListingResponse[] | Cheapest available first; unavailable markets last. |
| └ ask_price | number | null | Lowest listing (ask) or trade value, in the requested currency. |
| └ available | boolean | False when the market no longer lists the item or the price went stale. |
| └ balance | string | |
| └ changed_at | string (date-time) | When the price last changed. |
| └ listings | integer | null | Units or listings available, see quantity in GET /v1/markets. Null if not reported. |
| └ market | string | |
| └ market_link | string | Direct link for this item on the market. |
| └ max_price | number | null | Highest listing, when the market reports it. |
| └ mean_price | number | null | Mean listing price, when the market reports it. |
| └ median_price | number | null | Median listing price, when the market reports it. |
| └ price_type | string | Meaning of the prices, see GET /v1/markets. |
| └ timestamp | string (date-time) | When the market last confirmed this price. |
| market_hash_name | string |
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.
| Parameter | Type | Description |
|---|---|---|
| markets | string[] | Market codes, repeated or comma-separated. Default: every active market. |
| currency | string | Price 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
| currency | string | |
| items | PriceRow[] | Every item with at least one available price, sorted by name. |
| └ lowest_price | number | null | Cheapest current cash ask across the selected markets. |
| └ lowest_price_market | string | null | |
| └ market_hash_name | string | |
| └ prices | map<string, MarketPrice> | Market code → current price. |
| └ listings | integer | null | |
| └ median_price | number | null | |
| └ price | number | |
| └ updated_at | string (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.
| Parameter | Type | Description |
|---|---|---|
| market_hash_name | string | Exact market hash name. Example: Tempered AK47 |
| markets | string[] | Market codes, repeated or comma-separated. Default: every market with sales data. |
| currency | string | Price currency. Default USD. |
| start | string (date) | First day, YYYY-MM-DD. Default 90 days ago. |
| end | string (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
| currency | string | |
| market_hash_name | string | |
| series | map<string, SaleDay[]> | Market code → completed days, newest first. |
| └ complete | boolean | False when the market's history for that day is truncated. |
| └ day | string (date) | |
| └ max_price | number | null | |
| └ mean_price | number | null | |
| └ median_price | number | null | |
| └ min_price | number | null | |
| └ volume | integer | 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.
| Parameter | Type | Description |
|---|---|---|
| market_hash_name | string | Exact market hash name. Example: Tempered AK47 |
| markets | string[] | Market codes, repeated or comma-separated. Default: every market with sales data. |
| currency | string | Price 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
| currency | string | |
| market_hash_name | string | |
| sales | SaleMarket[] | |
| └ last_day | SaleDay | | null | null | |
| └ complete | boolean | False when the market's history for that day is truncated. |
| └ day | string (date) | |
| └ max_price | number | null | |
| └ mean_price | number | null | |
| └ median_price | number | null | |
| └ min_price | number | null | |
| └ volume | integer | null | |
| └ market | string | |
| └ windows | SaleWindow[] | Rolling windows, newest observation. |
| └ max_price | number | null | |
| └ mean_price | number | null | |
| └ median_price | number | null | |
| └ min_price | number | null | |
| └ period_end | string (date-time) | |
| └ period_start | string (date-time) | |
| └ volume | integer | null | Units sold; null if the market does not report volume. |
| └ window | string | Window 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
| currency | string | |
| day | string (date) | null | |
| rate | number | Units of this currency per 1 USD. |
| updated_at | string (date-time) | null | |
| usd_per_unit | number | USD 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
| string | null | ||
| name | string | |
| plan | string | free or pro. |
| quota_unlimited | boolean | |
| rate_limit | integer | Requests per minute. |
| usage | UsageResponse | |
| └ discount_percent | integer | |
| └ limit | integer | |
| └ list_price_cents | integer | |
| └ price_cents | integer | |
| └ quota_unlimited | boolean | |
| └ remaining | integer | |
| └ resets_in_days | integer | |
| └ savings_cents | integer | |
| └ usage_billing_enabled | boolean | |
| └ usage_billing_paused | boolean | |
| └ usage_budget_cents | integer | null | |
| └ usage_overage_credits | integer | |
| └ usage_overage_limit | integer | |
| └ used | integer | Credits used in the current period. |
| └ used_percent | number |
Errors: 403
Health
Service status.
Service status
GET/health
No key, no credits.
curl -G "https://rustmarketapi.com/api/health"Response fields
| status | string |
Community & support
Questions, feature requests or higher limits: join our Discord.
Join Discord