rust.wiki API: skinler, fiyatlar, eşyalar, sunucular ve oyuncu istatistikleri için ücretsiz bir Rust API'si

rust.wiki'deki her şey JSON olarak. 106 endpoint; canlı Steam Community Market fiyatı ve üçüncü taraf pazar yeri fiyatlarıyla her Rust skinini, satış geçmişini, fırsatları, piyasa endeksini ve piyasa değerini; tarifler, geri dönüşüm verimleri, blueprint'ler ve loot kaynaklarıyla her Rust eşyasını; haftalık item store'u ve geçmişini; Steam Workshop'u; monumentleri, loot tablolarını, konsol komutlarını, CCTV kodlarını, dünya varlıklarını, yapı parçalarını, tech tree'yi ve hesaplayıcıları; Facepunch güncellemelerini; Rust sunucu dizinini; resmi Steam Web API'den Rust oyuncu istatistiklerini; Steam envanter değerlemelerini; provably-fair verili rustprofit.com casino turlarını; oluşturulmuş PNG grafikleri; ve canlı ağ durumunu kapsar. Temel URL https://rust.wiki/api/v1.

Bu API ücretsizdir. Ücret yok, kredi kartı yok, ücretli paket yok ve süresi dolan deneme yok. Steam ile giriş yap, bir anahtar oluştur; aşağıdaki günlük kotalar dahilinde her endpoint senin. Tek ricamız, yaptığın şeyden rust.wiki'ye görünür bir bağlantı vermen.
Ücretsiz API anahtarı al
OpenAPI 3.1 şeması Markdown referansı llms.txt AI asistanları için MCP sunucusu Skinler ve fiyatlar Sunucular Oyuncu istatistikleri

Başlarken

  1. Steam ile giriş yap ve bir anahtar oluştur. Ücretsiz ve on saniye sürer; en fazla 5 anahtara sahip olabilirsin.
  2. Anahtarı her istekte https://rust.wiki/api/v1 adresine bir X-API-Key header'ı olarak gönder.
  3. Yanıtı JSON olarak oku. Fiyatlar USD sentidir, zaman damgaları UTC'dir.
  4. Ne kadar hakkın kaldığını istediğin zaman GET /me ile kontrol et; kotanda asla sayılmaz.
curl
curl -H "X-API-Key: rw_live_YOUR_KEY" \
  "https://rust.wiki/api/v1/skins/search?q=tempered"
Python
import requests
r = requests.get("https://rust.wiki/api/v1/market/prices",
                 headers={"X-API-Key": "rw_live_YOUR_KEY"})
prices = r.json()["prices"]   # {market_hash_name: {...}}
JavaScript
const r = await fetch("https://rust.wiki/api/v1/servers/top?limit=5",
  { headers: { "X-API-Key": "rw_live_YOUR_KEY" } });
const { results } = await r.json();

İnsanlar bununla ne yapıyor

  • Rust skin fiyat takipçileri ve Discord botları: tüm kataloğu tek çağrıda almak için /market/prices, grafik için /skins/{id}/history ve /charts/price/{id}.png.
  • Ticaret ve arbitraj araçları: /market/deals, /market/marketplaces ve /skins/{id}/orderbook.
  • Sunucu tarayıcıları ve durum widget'ları: dizinin sahip olduğu her filtreyle /servers, oyuncu sayıları için /servers/{id}/history.
  • Oyuncu ve envanter sorguları: Rust istatistikleri ve başarımlar için /players/{steamid}, değerlenmiş bir envanter için /inventory/{steamid}.
  • Provably-fair doğrulayıcılar: /games/{game}/rounds, /games/{game}/seeds ve /games/verify.
  • AI asistanları: rust.wiki MCP sunucusunu ekle (https://rust.wiki/mcp, anahtar gerekmez) ya da agent'ları /openapi.json veya /llms.txt adresine yönlendir.

Kimlik doğrulama

X-API-Key: rw_live_… (önerilen)
Tarayıcılar dahil her istemciden çalışır (API cross-origin GET isteklerine izin verir).
Authorization: Bearer rw_live_…
Yalnızca bearer token bilen HTTP kütüphaneleri için aynı şey.
?api_key=rw_live_…
Header ayarlayamayan araçlar için query-string alternatifi. Mümkünse kaçın: URL'ler loglara düşer.

Eksik, hatalı biçimli, bilinmeyen veya iptal edilmiş bir anahtar, JSON {"error": "…"} gövdesiyle 401 döndürür. Anahtarların süresi dolmaz; onları anahtarlar sayfasında iptal et. Her anahtarın yalnızca bir hash'i saklanır, bu yüzden kaybolan bir anahtar kurtarılamaz: yeni bir tane oluştur.

Kotalar ve limitler

API ücretsizdir; tek sınır kotalardır. Her anahtar kategori başına ayrı bir günlük kota alır (00:00 UTC'de sıfırlanır) ve her şeyin toplamında dakikada 300 istek ani yük sınırı vardır. Gerçek bir uygulamanın bunları fark etmeyeceği şekilde boyutlandırılmıştır; kontrolden çıkmış tek bir döngünün siteyi diğer herkes için yavaşlatmaması için vardırlar. GET /me, anahtarının bugünkü kullanılan ve kalan sayılarını gösterir ve asla sayılmaz.

Kategoriİstek / gün
Hesap accountsayılmaz
Eşyalar items25,000
Skinler skins25,000
Piyasa ve fiyatlar market10,000
Grafikler charts2,000
Eşya mağazası store10,000
Workshop workshop10,000
Referans verileri reference25,000
Oyuncu istatistikleri players2,000
Envanterler inventory1,000
Casino oyunları games10,000
Rust sunucuları servers10,000
Ağ durumu status10,000
Paper fonlar funds5,000

Her yanıt X-RateLimit-Category, X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset (günlük sıfırlamaya kalan saniye) taşır. Limitlerden birini aşarsan Retry-After başlığıyla 429 alırsın. Daha fazlası mı lazım? Sor; kotalar bir ayar düğmesidir, duvar değil.

Kurallar

  • Para, alan adı aksini söylemedikçe tam sayı USD sentidir (ör. usd). Bir skinin wiki'deki esas fiyatı Steam'in en düşük satış emridir; hiçbir şey listelenmemişse en yüksek alış emrine geri döner; üçüncü taraf pazar yeri fiyatları ayrıca bildirilir.
  • Zaman damgaları UTC ISO-8601 dizeleridir.
  • Listeler page (1 tabanlı) ve per_page (en fazla 200) ile sayfalanır ve {"page", "per_page", "total", "pages", "results": [...]} döndürür.
  • Tanımlayıcılar: eşyalar Rust shortname değerini kullanır (ör. rifle.ak), skinler Steam itemdefid değerini, oyuncular 17 haneli SteamID64'i, monument/dünya/yapı ise URL slug değerini kullanır.
  • Hatalar JSON {"error", "status"} olarak döner: bilinmeyen kaynaklar için 404, geçersiz parametreler için 422 (details ile), anahtar sorunları için 401, limitler için 429.
  • Güncellik: verilerin çoğu sunucu tarafında her 5-30 dakikada bir yenilenir (Steam fiyatları yaklaşık her 12 dakikada, pazar yerleri her 5 dakikada, mağaza rotasyon yaptığında). Bundan daha sık sorgulamak yalnızca kotayı harcar.
  • Sıkıştırma: Accept-Encoding: gzip, br gönder; toplu fiyat endpoint'leri büyüktür.
  • Daha az kota harca: GET /status/data her veri setinin en son ne zaman değiştiğini ve ne sıklıkla değişebileceğini bildirir. Bunu sorgula (ucuzdur) ve /market/prices veya /servers gibi ağır bir yükü yalnızca updated_at değeri değiştiğinde yeniden çek; referans verilerini (eşyalar, monumentler, loot tabloları, komutlar) yerelde önbelleğe al, çünkü bunlar yalnızca Facepunch'ın aylık yamasıyla değişir. GET /me ne kadar hakkın kaldığını gösterir ve asla sayılmaz.

Account

category account · never counted

Your own API key: what it is, how much of each daily quota it has used today and when the quotas reset. Calls here are free - they are never counted against any limit.

GET/me

Your key's usage and remaining quota for today
Returns the key's name and prefix, the SteamID64 of the account that owns it, and for every category the daily `limit`, `used` and `remaining` counts (UTC day), plus the per-minute burst window, the forced inventory-refresh allowance and `resets_in_seconds`. This call is not counted against any quota, so poll it freely. Every other response also carries the same numbers for its own category in the `X-RateLimit-*` headers.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/me"
Example response
{
  "key": {
    "name": "Docs examples (Claude, 2026-10-01)",
    "prefix": "rw_live_fd645f",
    "owner_steamid": "76561198869732295",
    "created_at": "2026-10-01T06:39:16.630147",
    "last_used_at": "2026-10-03T00:09:02.349619"
  },
  "free": true,
  "day": "2026-10-03",
  "resets_in_seconds": 85372,
  "resets_at": "2026-10-03T23:59:59Z",
  "categories": {
    "items": {
      "label": "Items",
      "limit": 25000,
      "used": 0,
      "remaining": 25000
    },
    "skins": {
      "label": "Skins",
      "limit": 25000,
      "used": 0,
      "remaining": 25000
    },
    "market": {
      "label": "Market & prices",
      "limit": 10000,
      "used": 0,
      "remaining": 10000
    },
    "…": "10 more keys"
  },
  "burst": {
    "limit_per_minute": 300,
    "used_this_minute": 0,
    "remaining_this_minute": 300
  },
  "inventory_refreshes": {
    "limit": 100,
    "used": 0
  }
}

Items

category items · 25,000 requests/day

The complete Rust item catalogue (~930 items) as seeded from wiki.facepunch.com and Steam's official item definitions: display name, shortname (the exact string Rust's `give` / `inventory.giveto` console commands expect), category, stack size, despawn time, icon, crafting recipe, blueprint and scrap research costs, recycler yields (standard and safe-zone recycler), repair costs, every loot source with drop chance, reverse 'used in' lookups, and the item's skins priced at the canonical wiki price (Steam's lowest sell order, integer USD cents, refreshed about every 12 minutes). The game data itself only changes when Facepunch patches; responses are cached server-side for 15 minutes.

GET/items

Browse or search the item catalogue
One page of live items (seasonal, obsolete and unreleased items are excluded from browsing but still resolve by shortname). Each result carries `shortname`, `display_name`, `category`, `icon_url` and `is_craftable`; fetch `/items/{shortname}` for everything else. Same ordering and cache as the /items page on the site (15 minutes).
ParameterInTypeDefaultDescription
categoryqueryone of `weapon`, `construction`, `general`, `resource`, `attire`, `tool`, `medical`, `food`, `ammo`, `trap`, `component`, `electrical`, `fun`, `misc`Restrict to one of the 14 wiki.facepunch.com item categories.
searchquerystringFuzzy name search: substring match plus trigram similarity, so a typo like `asault` still finds the Assault Rifle. Results are ranked by similarity unless `sort=category`.
sortqueryone of `name`, `category`name`name` = alphabetical (similarity-ranked while searching); `category` = grouped by category, then name.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/items"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 3,
  "pages": 1,
  "results": [
    {
      "shortname": "rifle.ak",
      "display_name": "Assault Rifle",
      "category": "weapon",
      "icon_url": "https://files.facepunch.com/rust/item/rifle.ak_512.png",
      "is_craftable": true
    },
    {
      "shortname": "rifle.lr300",
      "display_name": "LR-300 Assault Rifle",
      "category": "weapon",
      "icon_url": "https://files.facepunch.com/rust/item/rifle.lr300_512.png",
      "is_craftable": false
    },
    {
      "shortname": "rifle.lr300.space",
      "display_name": "Space LR-300 Assault Rifle",
      "category": "weapon",
      "icon_url": "https://files.facepunch.com/rust/item/rifle.lr300.space_512.png",
      "is_craftable": false
    }
  ]
}

GET/items/categories

Item categories with item counts
The 14 categories in the site's display order (wiki.facepunch.com's own sidebar order, not alphabetical), each with the number of live items in it, plus `total`. Use the `category` value as the `category` filter of `/items`. Cached for one hour.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/items/categories"
Example response
{
  "total": 1098,
  "results": [
    {
      "category": "weapon",
      "count": 99
    },
    {
      "category": "construction",
      "count": 69
    },
    {
      "category": "general",
      "count": 202
    },
    "… 11 more"
  ]
}

GET/items/{shortname}

Full item detail bundle
Everything the item page shows, in one response: `item` (name, description, category, icon, stack size, despawn seconds, craftable flag), `recipe` (components with quantities), `blueprint_costs` (unlock source, scrap cost, workbench tier), `recycle` (yields per recycler type with chance), `repair`, `loot_sources` (every crate/NPC/barrel that drops it, with `chance_pct` and `amount`, highest chance first), `used_in` (items this one is an ingredient of), `skins` (the first 24 skins by price, each with `price` and `store_price` in USD cents, `subscriptions` and `released`), `skins_total` and `similar` (six items from the same category). Page through all skins with `/items/{shortname}/skins`. Cached for 15 minutes.
ParameterInTypeDefaultDescription
shortname requiredpathstringThe item's shortname, e.g. `rifle.ak` or `metal.fragments`. (min length 1, max length 80)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/items/rifle.ak"
Example response
{
  "item": {
    "shortname": "rifle.ak",
    "display_name": "Assault Rifle",
    "description": "High damage machine rifle.",
    "category": "weapon",
    "icon_url": "https://files.facepunch.com/rust/item/rifle.ak_512.png",
    "stack_size": 1,
    "despawn_seconds": 3600,
    "is_craftable": true
  },
  "recipe": [
    {
      "shortname": "wood",
      "display_name": "Wood",
      "icon_url": "https://files.facepunch.com/rust/item/wood_512.png",
      "quantity": 200
    },
    {
      "shortname": "metal.refined",
      "display_name": "High Quality Metal",
      "icon_url": "https://files.facepunch.com/rust/item/metal.refined_512.png",
      "quantity": 50
    },
    {
      "shortname": "metalspring",
      "display_name": "Metal Spring",
      "icon_url": "https://files.facepunch.com/rust/item/metalspring_512.png",
      "quantity": 4
    },
    "… 1 more"
  ],
  "blueprint_costs": [
    {
      "unlock_source": "research_table",
      "scrap_cost": 120,
      "workbench_tier": null
    },
    {
      "unlock_source": "tech_tree",
      "scrap_cost": 500,
      "workbench_tier": 3
    }
  ],
  "recycle": [
    {
      "recycler_type": "recycler",
      "shortname": "wood",
      "display_name": "Wood",
      "icon_url": "https://files.facepunch.com/rust/item/wood_512.png",
      "quantity": 120,
      "chance": 1.0
    },
    {
      "recycler_type": "recycler",
      "shortname": "metal.refined",
      "display_name": "High Quality Metal",
      "icon_url": "https://files.facepunch.com/rust/item/metal.refined_512.png",
      "quantity": 30,
      "chance": 1.0
    },
    {
      "recycler_type": "recycler",
      "shortname": "metalspring",
      "display_name": "Metal Spring",
      "icon_url": "https://files.facepunch.com/rust/item/metalspring_512.png",
      "quantity": 2,
      "chance": 1.0
    },
    "… 7 more"
  ],
  "repair": [
    {
      "shortname": "metal.refined",
      "display_name": "High Quality Metal",
      "icon_url": "https://files.facepunch.com/rust/item/metal.refined_512.png",
      "quantity": 13,
      "condition_restored_pct": 20
    },
    {
      "shortname": "wood",
      "display_name": "Wood",
      "icon_url": "https://files.facepunch.com/rust/item/wood_512.png",
      "quantity": 40,
      "condition_restored_pct": 20
    }
  ],
  "loot_sources": [
    {
      "source_id": 6,
      "source_name": "Locked Crate (Ghost Ship)",
      "amount": 1,
      "chance_pct": 31.6
    },
    {
      "source_id": 86,
      "source_name": "Locked Crate (Oil Rig)",
      "amount": 1,
      "chance_pct": 31.6
    },
    {
      "source_id": 156,
      "source_name": "Locked Crate - Oilrig",
      "amount": 1,
      "chance_pct": 28.451
    },
    "… 19 more"
  ],
  "used_in": [],
  "skins": [
    {
      "itemdefid": 22003,
      "itemshortname": "rifle.ak",
      "name": "Glory AK47",
      "…": "19 more keys"
    },
    {
      "itemdefid": 21008,
      "itemshortname": "rifle.ak",
      "name": "Alien Red",
      "…": "19 more keys"
    },
    {
      "itemdefid": 64708,
      "itemshortname": "rifle.ak",
      "name": "After Death AR",
      "…": "19 more keys"
    },
    "… 21 more"
  ],
  "skins_total": 339,
  "similar": [
    {
      "shortname": "weapon.mod.small.scope",
      "display_name": "8x Zoom Scope",
      "icon_url": "https://files.facepunch.com/rust/item/weapon.mod.small.scope_512.png"
    },
    {
      "shortname": "ballista.static",
      "display_name": "Ballista",
      "icon_url": "https://files.facepunch.com/rust/item/ballista.static_512.png"
    },
    {
      "shortname": "mace.baseballbat",
      "display_name": "Baseball Bat",
      "icon_url": "https://files.facepunch.com/rust/item/mace.baseballbat_512.png"
    },
    "… 3 more"
  ]
}

GET/items/{shortname}/skins

All skins for an item, priced
Every skin for one base item, most expensive first (unpriced skins last, then by name) - the same list and order as the Skins tab on the item page. Each skin carries `itemdefid`, `name`, `icon_url`, `market_hash_name`, `item_collection`, `workshopid`, `price` (canonical wiki price, USD cents, null when nothing is listed), `store_price` (its original Rust item-store price, USD cents), `store_change_pct`, `subscriptions` (Workshop subscriber count), `released` and the tradable/marketable/banned flags. Prices refresh about every 12 minutes; this list is cached for 15.
ParameterInTypeDefaultDescription
shortname requiredpathstringThe item's shortname, e.g. `rifle.ak`. (min length 1, max length 80)
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/items/rifle.ak/skins"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 339,
  "pages": 7,
  "results": [
    {
      "itemdefid": 22003,
      "itemshortname": "rifle.ak",
      "name": "Glory AK47",
      "…": "19 more keys"
    },
    {
      "itemdefid": 21008,
      "itemshortname": "rifle.ak",
      "name": "Alien Red",
      "…": "19 more keys"
    },
    {
      "itemdefid": 64708,
      "itemshortname": "rifle.ak",
      "name": "After Death AR",
      "…": "19 more keys"
    },
    "… 47 more"
  ]
}

Skins

category skins · 25,000 requests/day

Every Rust skin (about 6,500: weapon, clothing, deployable and decoration skins, drops and DLC) with the same live price the wiki shows: the canonical wiki price is Steam Community Market's lowest sell order, falling back to the highest buy order only when nothing is listed, refreshed every few minutes by our own Steam scraper. Prices are integer USD cents. Sale history is Steam's own median-sale-price series (hourly for the recent window, daily beyond it); holders come from inventories scanned by the rust.wiki/inventory lookup, not a census of the game. Browse and detail payloads are cached 2 and 15 minutes respectively.

GET/skins

Browse skins with the site's filters and sorts
One page of skin cards exactly as the /skins browser shows them: `itemdefid`, `name`, icons, `category`, `item_collection`, `market_hash_name`, flags (`is_twitch_drop`, `is_limited_time`, `marketable`, `tradable`, `is_permanent`...), `price` (canonical wiki price in cents, null when Steam has no listing), `subscriptions` (Workshop subscribers, the site's supply proxy), `store_price` (the original item-store price in cents), `store_change_pct` (market price vs store price) and `released` (date accepted into the store). Filters combine with AND. `total` is the filtered count; results are cached for 120 seconds per filter combination.
ParameterInTypeDefaultDescription
categoryqueryone of `weapon`, `clothing`, `deployable`, `decoration`, `crate`, `resource`, `mask`, `none`Skin category.
collectionquerystringExact collection name, e.g. `Forest Raiders` (see /skins/collections).
itemquerystringBase item shortname, e.g. `rifle.ak` - every skin of that one item.
searchquerystringFuzzy name search (trigram similarity; with sort=name results are relevance-ordered). Searches are never cached server-side.
creatorquerystringWorkshop creator: a 17-digit SteamID64 for an exact match, or part of the creator's display name.
colorqueryone of `red`, `orange`, `yellow`, `green`, `cyan`, `blue`, `purple`, `pink`, `brown`, `white`, `gray`, `black`, `tan`, `olive`, `navy`, `maroon`, `silver`Dominant icon colour bucket; matches any of a skin's up to five dominant colours.
limited_timequerybooleanFalseOnly limited-time store items.
permanentquerybooleanFalseOnly permanent store items.
marketablequerybooleanFalseOnly Steam-marketable skins.
tradablequerybooleanFalseOnly tradable skins.
breakablequerybooleanFalseOnly skins with a recycle yield (`recycle_hint`).
glowsquerybooleanFalseOnly skins with glow-in-the-dark elements.
commodityquerybooleanFalseOnly Steam commodity items.
hide_dropsquerybooleanFalseHide loot-crate drops, publisher drops and Twitch drops (what the site calls DLCs and drops).
min_subsqueryone of `1000`, `5000`, `10000`, `25000`, `50000`Minimum Steam Workshop subscriber count of the skin's original submission.
releasedqueryone of `2026`, `2025`, `2024`, `2023`, `2022`, `2021`, `2020`, `2019`, `2018`, `2017`, `2016`, `2015`Year the skin was accepted into the item store.
sortqueryone of `price_desc`, `price_asc`, `name`, `popularity`, `supply_asc`, `released_desc`, `released_asc`, `trending`, `marketcap_desc`price_descOrdering. `popularity` and `supply_asc` use Workshop subscribers; `trending` is the 7-day price change; `marketcap_desc` is price x subscribers.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 1984,
  "pages": 40,
  "results": [
    {
      "itemdefid": 67303,
      "itemshortname": "rifle.sks",
      "name": "Limited Edition Training SKS",
      "…": "19 more keys"
    },
    {
      "itemdefid": 20413,
      "itemshortname": "smg.2",
      "name": "Alien Relic SMG",
      "…": "19 more keys"
    },
    {
      "itemdefid": 54500,
      "itemshortname": "pistol.revolver",
      "name": "No Mercy Revolver - E Class",
      "…": "19 more keys"
    },
    "… 47 more"
  ]
}

GET/skins/collections

Skin collections with counts and values
Every skin collection (about 750, e.g. `Forest Raiders`, `Abyss`): `name`, `count` (members), `total_value` and `avg_value` (cents, over the priced members only; null when nothing in it is priced) and `icons`, one `{url, name}` per member skin. The collection's URL slug is its lower-cased name with non-alphanumerics collapsed to `-` (`Forest Raiders` -> `forest-raiders`), which is what GET /skins/collections/{slug} takes. Cached for 30 minutes.
ParameterInTypeDefaultDescription
sortqueryone of `value_desc`, `value_asc`, `count_desc`, `count_asc`, `name`value_desc`value_*` sorts by the summed wiki price of the collection's skins, `count_*` by member count.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/collections"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 962,
  "pages": 20,
  "results": [
    {
      "name": "Training",
      "count": 25,
      "total_value": 207747,
      "avg_value": 8310,
      "icons": [
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/67303_small.png?2937526183",
          "name": "Limited Edition Training SKS"
        },
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/36500_small.png?1193358283",
          "name": "Training AR"
        },
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/64407_small.png?3469452427",
          "name": "Training Backpack"
        },
        "… 22 more"
      ]
    },
    {
      "name": "No Mercy",
      "count": 53,
      "total_value": 152285,
      "avg_value": 2929,
      "icons": [
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/33107_small.png?17669496",
          "name": "No Mercy AK47"
        },
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/50802_small.png?1195794693",
          "name": "No Mercy Armored Door"
        },
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/69300_small.png?241887439",
          "name": "No Mercy Auto Turret"
        },
        "… 50 more"
      ]
    },
    {
      "name": "Horror",
      "count": 5,
      "total_value": 126688,
      "avg_value": 25338,
      "icons": [
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/10107_small.png?717639237",
          "name": "Horror Bag"
        },
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/66110_small.png?788791927",
          "name": "Horror Bed"
        },
        {
          "url": "https://files.facepunch.com/rust/icons/inventory/rust/34708_small.png?1517349008",
          "name": "Horror Chest Plate"
        },
        "… 2 more"
      ]
    },
    "… 47 more"
  ]
}

GET/skins/collections/{slug}

One collection with all its skins
The collection's `name`, `slug`, `count`, `total_value` and `avg_value` (cents), `released` (the earliest member's store-acceptance date) and `skins`: every member as `{itemdefid, name, icon_url, rarity, category, price}` ordered by price, highest first. The collection's value-over-time series is GET /market/collection-value. Cached for 30 minutes.
ParameterInTypeDefaultDescription
slug requiredpathstringCollection slug (lower-case, hyphenated name), e.g. `forest-raiders`. (max length 120)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/collections/forest-raiders"
Example response
{
  "name": "Forest Raiders",
  "slug": "forest-raiders",
  "skins": [
    {
      "itemdefid": 44201,
      "name": "Forest Raiders Roadsign Pants",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/44201_small.png?685985818",
      "rarity": "a7ec2e",
      "category": "clothing",
      "price": 9193
    },
    {
      "itemdefid": 44202,
      "name": "Forest Raiders Roadsign Vest",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/44202_small.png?1414360230",
      "rarity": "a7ec2e",
      "category": "clothing",
      "price": 6072
    },
    {
      "itemdefid": 44203,
      "name": "Forest Raiders Helmet",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/44203_small.png?1493227454",
      "rarity": "a7ec2e",
      "category": "clothing",
      "price": 6024
    },
    "… 9 more"
  ],
  "count": 12,
  "total_value": 36852,
  "avg_value": 3071,
  "released": "2021-07-29"
}

GET/skins/{itemdefid}

Full skin detail: price, order book, history, cross-market prices
Everything the skin's wiki page shows, as data. `skin` is the full catalogue record (creator, workshop title and dates, collection, flags, store price and availability, crafting components, glow/cutout ratios, colours). `price` is the canonical wiki price in cents and `price_source` says which side of the book it came from. `orderbook` is Steam's live book: lowest sell order, highest buy order, order counts, the `buy_orders` and `sell_orders` depth ladders (`{price, quantity}`, best first) and `fetched_at`; the headline price refreshes more often than the ladders, so they can briefly trail it. `steam_history` is the last year of Steam's own sale history (`recorded_at`, median sale `price`, `volume`; `sale_basis` false means Steam has no sale series and the points are our ask-price readings instead) - wider ranges via /skins/{itemdefid}/history. `market_stats` is the page's Community & Market Stats card: an archived SCMM snapshot (frozen September 2026) of `supply_total`/`supply_total_estimated`/`supply_total_owners_estimated`, Workshop `subscriptions_current`/ `subscriptions_lifetime`, `favourited_current`, `views`, `votes_up`/`votes_down`, `market_24hr_value`, `market_168hr_value`, `market_last_30d_sales`, `market_rank_index`, `market_liquidity_score`, the market high/low with their dates, `change_7d_percent`/`change_30d_percent`/`change_90d_percent` and `ath_percent`; null for skins SCMM never covered. `cross_market` is live and always present: `market_prices`, the current price and stock on each third-party marketplace we poll (`marketType`, `price` in cents, `supply`; names only, no links), plus the cheapest as `buy_now_price`/`buy_now_from`. `est_supply` (Workshop subscribers or SCMM estimate) and `est_market_cap` (price x supply) are the site's stated approximations. Also `store_rotations` the skin appeared in, `collection_items` and `other_item_skins` (sibling cards), `description`, and `tracked_holders` (`holders`/`units` seen in scanned inventories). Cached for 15 minutes; the cross-market block refreshes every ~5.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's Steam item definition id (also its rust.wiki URL: /skin/{itemdefid}). (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/10138"
Example response
{
  "skin": {
    "itemdefid": 10138,
    "itemshortname": "rifle.ak",
    "name": "Tempered AK47",
    "…": "38 more keys"
  },
  "price": 999,
  "steam_history": [
    {
      "recorded_at": "2025-10-03",
      "price": 970,
      "volume": 28
    },
    {
      "recorded_at": "2025-10-04",
      "price": 896,
      "volume": 24
    },
    {
      "recorded_at": "2025-10-05",
      "price": 946,
      "volume": 22
    },
    "… 362 more"
  ],
  "sale_basis": true,
  "orderbook": {
    "lowest_sell_order": 999,
    "highest_buy_order": 952,
    "sell_order_count": 96,
    "buy_order_count": 731,
    "buy_orders": [
      {
        "price": 952,
        "quantity": 4
      },
      {
        "price": 951,
        "quantity": 2
      },
      {
        "price": 947,
        "quantity": 6
      },
      "… 137 more"
    ],
    "sell_orders": [
      {
        "price": 999,
        "quantity": 1
      },
      {
        "price": 1010,
        "quantity": 1
      },
      {
        "price": 1021,
        "quantity": 1
      },
      "… 65 more"
    ],
    "fetched_at": "2026-10-03T00:04:16.404971"
  },
  "sale_updated": "2026-10-03T00:04:17.363621",
  "market_stats": {
    "supply_total": 4889,
    "supply_total_estimated": 4889,
    "supply_total_owners_estimated": null,
    "…": "23 more keys"
  },
  "description": "A tempered metal AK47\n\nThis is a skin for the Assault Rifle item. You will be able to apply this skin at a repair bench or when you craft the item in game.\n\nBre…",
  "est_supply": 4889,
  "est_market_cap": 4884111,
  "store_rotations": [],
  "collection_items": [
    {
      "itemdefid": 20083,
      "itemshortname": "smg.mp5",
      "name": "Tempered Mp5",
      "…": "19 more keys"
    },
    {
      "itemdefid": 20082,
      "itemshortname": "metal.facemask",
      "name": "Tempered Mask",
      "…": "19 more keys"
    },
    {
      "itemdefid": 50803,
      "itemshortname": "wall.frame.garagedoor",
      "name": "Tempered Garage Door",
      "…": "19 more keys"
    },
    "… 21 more"
  ],
  "…": "8 more keys"
}

GET/skins/{itemdefid}/orderbook

Full Steam order book for one skin
Steam Community Market's current order book for the skin, straight from our scraper's latest snapshot: `lowest_sell_order` and `highest_buy_order` (cents; null when that side is empty), `sell_order_count` and `buy_order_count`, the COMPLETE `sell_orders` and `buy_orders` depth ladders as `[{price, quantity}, ...]` best price first (every level Steam publishes, not a top-N cut), and `fetched_at`, when the snapshot was taken. The headline ask is refreshed by a market-wide sweep every ~12 minutes; the depth ladders come from the per-item rotation (every few hours), so they can trail it slightly. 404 when the skin has no Steam order book (unmarketable items). Not cached: this is one indexed row.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's item definition id. (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/10138/orderbook"
Example response
{
  "itemdefid": 10138,
  "market_hash_name": "Tempered AK47",
  "unit": "cents",
  "lowest_sell_order": 999,
  "highest_buy_order": 952,
  "sell_order_count": 96,
  "buy_order_count": 731,
  "sell_orders": [
    {
      "price": 999,
      "quantity": 1
    },
    {
      "price": 1010,
      "quantity": 1
    },
    {
      "price": 1021,
      "quantity": 1
    },
    "… 65 more"
  ],
  "buy_orders": [
    {
      "price": 952,
      "quantity": 4
    },
    {
      "price": 951,
      "quantity": 2
    },
    {
      "price": 947,
      "quantity": 6
    },
    "… 137 more"
  ],
  "fetched_at": "2026-10-03T00:04:16.404971"
}

GET/skins/{itemdefid}/history

Steam sale history for one skin
Steam Community Market's own sale history for the skin, scraped from Steam's listing page: `points` of `{recorded_at, price, volume}` where `price` is Steam's median sale price for that interval in cents and `volume` the number of sales. Steam reports roughly hourly points for the recent month and daily beyond; ranges of a year or more are condensed to one point per day (median price, summed volume). Empty when Steam has no sale series for the item (unmarketable skins). History goes back to the skin's first sale, as far as 2015. Refreshed continuously; the full series is cached for an hour.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's item definition id. (min 1)
rangequeryone of `1d`, `1w`, `1m`, `3m`, `6m`, `1y`, `2y`, `5y`, `all`1yHow far back: `1d`, `1w`, `1m`, `3m`, `6m`, `1y`, `2y`, `5y` or `all`.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/10138/history"
Example response
{
  "itemdefid": 10138,
  "range": "1y",
  "points": [
    {
      "recorded_at": "2025-10-03",
      "price": 970,
      "volume": 28
    },
    {
      "recorded_at": "2025-10-04",
      "price": 896,
      "volume": 24
    },
    {
      "recorded_at": "2025-10-05",
      "price": 946,
      "volume": 22
    },
    "… 362 more"
  ]
}

GET/skins/{itemdefid}/marketplace-history

Price and sales history for one skin on each marketplace
The skin's history on every marketplace rust.wiki tracks, Steam included. Per site in `sites`: `listing` is `[day, low, close, qty]` per UTC day - the lowest listing price we read that day (`low` the day's lowest reading, `close` the last) and how many listings stood behind it; `sales` maps a period to `[day, volume, avg_price]` rows - `day` and `week` are real sales buckets (`day` = the bucket's first day) from each site's own sales data: Rust.tm (years back), CS.Deals, DMarket, Mannco.store and RustSkins; `r1` is Skinport's last-24-hours figure recorded once a day against the day it covers; `r7` and `r30` are a site's rolling 7- and 30-day figures as we read them that day. Prices are integer USD cents. Listing history starts 2026-10-30. Steam's own sale history is GET /skins/{itemdefid}/history. Updated through the day (listings every ~5 minutes).
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's item definition id. (min 1)
rangequeryone of `1m`, `3m`, `6m`, `1y`, `all`1yHow far back: `1m`, `3m`, `6m`, `1y` or `all`.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/43203/marketplace-history"

GET/skins/{itemdefid}/price

Live price, order book depth, extremes and 7d/30d change for one skin
The compact price card the rust.wiki Discord bot's /price command shows, as data. All prices are integer USD cents: `price_cents` (the canonical wiki price - Steam's lowest sell order, or the highest buy order when nothing is listed), `ask_cents` and `bid_cents` (the two sides of Steam's book), `sell_orders`/`buy_orders` (how many orders stand on each side), `sell_ladder` and `buy_ladder` (the top five price levels on each side, best first, as `{price, quantity}`), `ath_cents`/`atl_cents` (the skin's all-time high and low from Steam's sale history), `change_7d`/`change_30d` (percent move of today's price against our closest Steam price reading 7 and 30 days back; null without enough history) and `sales_30d` (units sold on Steam in the last 30 days, null when none). Plus `name`, `icon_url`, `market_hash_name` and `category`. Cached for 5 minutes.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's item definition id. (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/10138/price"
Example response
{
  "itemdefid": 10138,
  "name": "Tempered AK47",
  "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10138_small.png?1255120650",
  "market_hash_name": "Tempered AK47",
  "category": "weapon",
  "price_cents": 999,
  "ask_cents": 999,
  "bid_cents": 952,
  "sell_orders": 96,
  "buy_orders": 731,
  "sell_ladder": [
    {
      "price": 999,
      "quantity": 1
    },
    {
      "price": 1010,
      "quantity": 1
    },
    {
      "price": 1021,
      "quantity": 1
    },
    "… 2 more"
  ],
  "buy_ladder": [
    {
      "price": 952,
      "quantity": 4
    },
    {
      "price": 951,
      "quantity": 2
    },
    {
      "price": 947,
      "quantity": 6
    },
    "… 2 more"
  ],
  "…": "5 more keys"
}

GET/skins/{itemdefid}/holders

Who holds this skin (scanned inventories)
The largest known holders of the skin, most units first: `{steamid64, display_name, avatar_url, quantity}`. This is the same public Top Holders list the skin page shows, built only from inventories that someone has run through the rust.wiki/inventory lookup - `total` is the number of such holders and `tracked_units` the units they hold between them, not the skin's circulating supply. Cached for 30 minutes.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's item definition id. (min 1)
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/skins/10138/holders"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 1777,
  "pages": 36,
  "results": [
    {
      "steamid64": "76561198297663226",
      "display_name": "TRADEIT MultiTrade BOT #1",
      "avatar_url": "https://avatars.steamstatic.com/ac9abb720c0244baaefe7422d59d5bb55bebd643_full.jpg",
      "quantity": 129
    },
    {
      "steamid64": "76561198181645734",
      "display_name": "$HAI",
      "avatar_url": "https://avatars.steamstatic.com/a0e47c77e305e51dee64f931952a1df08cda655d_full.jpg",
      "quantity": 100
    },
    {
      "steamid64": "76561199273425385",
      "display_name": "east",
      "avatar_url": "https://avatars.steamstatic.com/abca83d1b8eaad487b2f5d10fb803a7316c61f9f_full.jpg",
      "quantity": 91
    },
    "… 47 more"
  ],
  "tracked_units": 2482
}

Market & prices

category market · 10,000 requests/day

Market data for Rust skins. Canonical prices are Steam Community Market's lowest sell order (highest buy order when nothing is listed), from our own Steam scraper, in integer USD cents; third-party marketplace prices (Skinport, DMarket, CS.Deals, Waxpeer, LIS-Skins, Mannco, Tradeit, RustSkins and more) are polled every ~5 minutes. Analytics are the site's own: the equal- or market-cap-weighted market index and compare series built from Steam's daily price history back to 2015, executable 3rd-party-to-Steam deals net of Steam's 15% fee, market cap (price x Workshop subscribers as the supply proxy), and insights. Caches range from 5 minutes (prices, deals) to 24 hours (index/compare series, which only gain a point every 6 hours).

GET/market/prices

Steam price of every skin, in one response
Every skin's Steam Community Market price in one blob (about 6,000 priced skins; ~0.7 MB in `full`, ~0.2 MB in `simple`): `prices` is keyed by Steam `market_hash_name`, values in integer USD cents. `price` is the canonical wiki price - the lowest sell order, or the highest buy order when nothing is listed for sale - exactly what every rust.wiki page displays. Steam only; third-party marketplace prices live at GET /market/marketplaces. Regenerated at most every 5 minutes (`generated_at`); the underlying Steam order books refresh every ~12 minutes, so polling faster than that gains nothing. Send `Accept-Encoding: gzip`. Single skins: GET /market/prices/{itemdefid}.
ParameterInTypeDefaultDescription
formatquerystringfull`full` (default): `{itemdefid, price, lowest_sell_order, highest_buy_order}` per skin. `simple`: just `{market_hash_name: price}` - the smallest possible price list.
include_unpricedquerybooleanFalseAlso list skins Steam has no order book for (price null). Off by default, so every entry has a price.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/prices"
Example response
{
  "generated_at": "2026-10-03T00:17:08.579780Z",
  "unit": "cents",
  "source": "steam",
  "format": "simple",
  "count": 5523,
  "prices": {
    "Red Tshirt": 15,
    "Demonic Pistol": 5996,
    "Blue Jeans": 15,
    "…": "5520 more keys"
  }
}

GET/market/prices/{itemdefid}

Canonical wiki price for one skin
One entry of /market/prices: `market_hash_name`, `price` (canonical wiki price, cents, null when Steam has no order book for it), `lowest_sell_order`, `highest_buy_order` and the blob's `generated_at`. Served from the same 5-minute blob, so it costs nothing extra to call per skin. 404 for an unknown id or a skin with no Steam market name.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerThe skin's item definition id. (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/prices/10337"
Example response
{
  "generated_at": "2026-10-03T00:17:08.579780Z",
  "unit": "cents",
  "itemdefid": 10337,
  "market_hash_name": "RPG Launcher",
  "price": null,
  "lowest_sell_order": null,
  "highest_buy_order": null
}

GET/market/marketplaces

Every skin's price on every third-party marketplace
Current listing prices on the third-party marketplaces we poll directly (Skinport, CS.Deals, DMarket, Rust.tm, CS.Trade, Waxpeer, LIS-Skins, Mannco.store, Swap.gg, Tradeit.gg, RapidSkins, Loot.farm, RustSkins): `prices` is keyed by Steam `market_hash_name`, each value a `{marketplace: price}` map. UNLIKE the rest of the API these prices are USD floats (`unit: "usd"`, e.g. 12.34) - this payload predates the API and outside tooling already reads it. Only marketplaces whose poller is currently alive are included (`sources`, with each one's `polled_at`); a source that stopped polling is listed in `excluded_sources` with its last poll time instead of serving stale prices. Listings a marketplace reports as out of stock are omitted. Cached 5 minutes, matching the ~5-minute poll cycle.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/marketplaces"
Example response
{
  "generated_at": "2026-10-03T00:17:09.389917Z",
  "unit": "usd",
  "sources": [
    "CSDealsMarketplace",
    "CSTrade",
    "DMarket",
    "… 10 more"
  ],
  "polled_at": {
    "CSDealsMarketplace": "2026-10-03T00:11:41.877823",
    "CSTrade": "2026-10-03T00:11:45.218818",
    "DMarket": "2026-10-03T00:12:02.903897",
    "…": "10 more keys"
  },
  "excluded_sources": {},
  "prices": {
    "Freshly Dug Grave": {
      "RapidSkins": 400.95,
      "Waxpeer": 533.28,
      "ManncoStore": 585.99,
      "RustSkins": 389.62,
      "Skinport": 422.25,
      "CSDealsMarketplace": 449.89,
      "DMarket": 402.96
    },
    "Banana Leaf Bandana": {
      "RustSkins": 1.24,
      "TradeitGG": 1.89,
      "DMarket": 1.33,
      "ManncoStore": 6.79,
      "CSDealsMarketplace": 1.29,
      "Waxpeer": 1.34,
      "Skinport": 1.23,
      "RustTM": 1.52,
      "LISSkins": 1.28
    },
    "Large Fruit Pit Hatchet": {
      "Skinport": 5.95,
      "RapidSkins": 1.61,
      "LISSkins": 1.59,
      "RustTM": 1.62,
      "DMarket": 7.0,
      "Waxpeer": 1.62,
      "CSDealsMarketplace": 2.98,
      "CSTrade": 1.22
    },
    "…": "5505 more keys"
  }
}

GET/market/index

Skin market index series
The rust.wiki Market Index: a basket of skins rebased to 100 at the start of the window, like a stock index, built from Steam's daily price history (one point per day; weekly beyond two years). Returns `dates` (ISO dates), `values` (index level, 100 = the window's first day), `constituent_count` (skins that had a price at the baseline; baskets are capped at 300 constituents) and `label`. A skin whose history starts inside the window joins from its first price. Cached for 24 hours per parameter combination (history only gains a point every 6 hours); the full catalogue, every category and every collection are kept warm server-side.
ParameterInTypeDefaultDescription
basket_typequeryone of `all`, `high_value`, `low_value`, `category`, `collection`, `color`, `item`, `custom`allWhich skins form the index: `all`, `high_value`/`low_value` (300 priciest/cheapest), `category`, `collection`, `color`, `item` (one base item's skins) or `custom` (your own list).
basket_valuequerystringThe category, collection name, colour, item shortname, or for `custom` a comma-separated list of up to 300 itemdefids. Ignored for all/high_value/low_value.
rangequeryone of `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`, `custom`90dWindow: `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`, or `custom` with `start_date`/`end_date`. Spans over two years are downsampled to one point per week.
start_datequerystringCustom range start (YYYY-MM-DD, inclusive). Only read when range=custom.
end_datequerystringCustom range end (YYYY-MM-DD, inclusive). Only read when range=custom.
weight_modequeryone of `equal`, `marketcap`equal`equal`: every constituent's % move counts the same. `marketcap`: weighted by price x Workshop subscribers, like an S&P-style index.
smoothquerybooleanFalseApply a trailing 30-day moving average.
trim_daysqueryinteger0Mask each constituent's first N days of history (0-90) to drop launch-week volatility. (max 90, min 0)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/index"
Example response
{
  "dates": [
    "2026-07-04",
    "2026-07-05",
    "2026-07-06",
    "… 88 more"
  ],
  "values": [
    100.0,
    100.01,
    100.2,
    "… 88 more"
  ],
  "constituent_count": 300,
  "label": "Weapon Skins"
}

GET/market/compare

Overlay skins, baskets and indices on one date axis
The data behind rust.wiki/skins/compare: one shared `dates` axis and a `series` entry per token with `key`, `name`, `icon_url`, `is_basket`, `is_index` and `prices` aligned to the axis (null where that entry has no data yet). Skin and basket entries are prices in cents (a basket is the plain average of its members' prices); index entries are index levels rebased to 100. Spans over two years are downsampled to weekly points. Cached for 24 hours per parameter combination.
ParameterInTypeDefaultDescription
entries requiredquerystringComma-separated, up to 8: an `itemdefid` (that skin's price), `category:weapon` / `collection:Forest Raiders` / `item:shoes.boots` (the basket's average price) or `index:all` / `index:category:weapon` / `index:custom:123.456` (an index entry; custom ids joined with `.`). (min length 1, max length 400)
rangequeryone of `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`, `custom`90dWindow: `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`, or `custom` with `start_date`/`end_date`. Spans over two years are downsampled to one point per week.
start_datequerystringCustom range start (YYYY-MM-DD, inclusive). Only read when range=custom.
end_datequerystringCustom range end (YYYY-MM-DD, inclusive). Only read when range=custom.
smoothquerybooleanFalseApply a trailing 30-day moving average.
trim_daysqueryinteger0Mask each constituent's first N days of history (0-90) to drop launch-week volatility. (max 90, min 0)
index_weight_modequeryone of `equal`, `marketcap`equalWeighting for any `index:` entries (see /market/index).
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/compare?entries=10337,10148,category:weapon"
Example response
{
  "dates": [
    "2026-07-05",
    "2026-07-06",
    "2026-07-07",
    "… 87 more"
  ],
  "series": [
    {
      "key": "skin:10337",
      "name": "RPG Launcher",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10337_small.png?2934967024",
      "is_basket": false,
      "is_index": false,
      "prices": []
    },
    {
      "key": "skin:10148",
      "name": "Snowman",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10148_small.png?2638033461",
      "is_basket": false,
      "is_index": false,
      "prices": [
        120.0,
        117.0,
        111.0,
        "… 87 more"
      ]
    },
    {
      "key": "category:weapon",
      "name": "Weapon Skins (avg)",
      "icon_url": null,
      "is_basket": true,
      "is_index": false,
      "prices": [
        239.75,
        239.74,
        239.8,
        "… 87 more"
      ]
    }
  ]
}

GET/market/events

Collection and skin release dates for a chart's window
Release markers to draw on an index or compare chart: `events` of `{date, label, icon_url, kind}` where `kind` is `collection` (the day a collection's first skin was accepted into the item store, labelled with the collection name) or `item` (an individual skin's acceptance date, only when scoped). Scoped to the skins of the given basket or compare entries so only releases related to what is plotted are returned; unscoped returns every collection release in the window. There is no DLC concept in Steam's data - store-acceptance dates are the release signal. Cached for an hour (5 minutes when scoped by `entries`).
ParameterInTypeDefaultDescription
rangequeryone of `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`, `custom`90dWindow: `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`, or `custom` with `start_date`/`end_date`. Spans over two years are downsampled to one point per week.
start_datequerystringCustom range start (YYYY-MM-DD, inclusive). Only read when range=custom.
end_datequerystringCustom range end (YYYY-MM-DD, inclusive). Only read when range=custom.
basket_typequeryone of `all`, `high_value`, `low_value`, `category`, `collection`, `color`, `item`, `custom`Scope to an index basket (same meaning as /market/index). Omit both this and `entries` for every collection's release.
basket_valuequerystringThe basket's value (see /market/index).
entriesquerystringScope to a /market/compare token list instead of a basket.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/events"
Example response
{
  "range": "1y",
  "start_date": null,
  "end_date": null,
  "count": 70,
  "events": [
    {
      "date": "2025-10-09",
      "label": "Black Ops",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/65807_small.png?1267695810",
      "kind": "collection"
    },
    {
      "date": "2025-10-30",
      "label": "From Hell",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/66115_small.png?491818776",
      "kind": "collection"
    },
    {
      "date": "2025-11-06",
      "label": "Abyss",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/66200_small.png?679648054",
      "kind": "collection"
    },
    "… 67 more"
  ]
}

GET/market/collection-value

Total value of a collection over time
The cost of owning one of every skin in the collection, day by day: `dates` and `values` (total in cents) plus `count`, the number of member skins with price history in the window. A skin whose history starts mid-window contributes its first known price backwards, so early totals are not "the sum of fewer skins". This is the chart on rust.wiki/collections/{slug}. Cached 15 minutes so today's point tracks the scraper.
ParameterInTypeDefaultDescription
collection requiredquerystringExact collection name (see /skins/collections). (min length 1, max length 120)
rangequeryone of `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y`, `all`90dWindow: `7d`, `30d`, `90d`, `1y`, `2y`, `3y`, `4y`, `5y` or `all`.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/collection-value?collection=Forest%20Raiders"
Example response
{
  "collection": "Forest Raiders",
  "range": "90d",
  "dates": [
    "2026-07-05",
    "2026-07-06",
    "2026-07-07",
    "… 87 more"
  ],
  "values": [
    40976,
    40870,
    42149,
    "… 87 more"
  ],
  "count": 12
}

GET/market/deals

Executable buy-on-marketplace, sell-on-Steam flips
Every skin that can be bought on a third-party marketplace for less than it nets on Steam Community Market right now, as rust.wiki/skins/deals computes it. Per deal: `buy_market` and `buy_price` (the cheapest in-stock listing we poll, cents), `sell_url` (the Steam listing page), the two Steam references `bid_gross`/`bid_net` (highest buy order, and what you actually receive after Steam's 15% fee) and `ask_gross`/`ask_net` (lowest sell order, same), then for the chosen `steam_ref`: `sell_price` (the net proceeds), `sell_gross`, `spread_abs` (cents) and `spread_pct`. Only rows profitable under the chosen reference are returned. A stale buy order above a fresher ask is capped at the ask. Filters combine with AND; `search` matches the skin name case-insensitively. Marketplace links are not included. Recomputed every ~5 minutes from the marketplace poll.
ParameterInTypeDefaultDescription
steam_refqueryone of `buy`, `sell`buySteam exit price: `buy` = sell instantly into the highest buy order (default), `sell` = list just under the lowest sell order.
sortqueryone of `pct`, `abs`pctBest `pct` (spread as % of buy price) or `abs` (spread in cents) first.
categoryqueryone of `weapon`, `clothing`, `deployable`, `decoration`, `crate`, `resource`, `mask`, `none`Only skins of this category.
marketplacequeryone of `Skinport`, `CSDealsMarketplace`, `DMarket`, `RustTM`, `CSTrade`, `Waxpeer`, `LISSkins`, `ManncoStore`, `SwapGGTrade`, `TradeitGG`, `RapidSkins`, `LootFarm`, `RustSkins`, `TradeRust`[][]Only deals whose cheapest listing is on one of these marketplaces (repeat the parameter).
min_pricequeryintegerMinimum buy price in cents.
max_pricequeryintegerMaximum buy price in cents.
searchquerystringCase-insensitive substring of the skin name (or Steam market name).
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/deals"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 4254,
  "pages": 86,
  "results": [
    {
      "itemdefid": 32507,
      "name": "Metal Lord Crossbow",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/32507_small.png?4134877346",
      "…": "12 more keys"
    },
    {
      "itemdefid": 10031,
      "name": "Cloth",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10031_small.png?1987935665",
      "…": "12 more keys"
    },
    {
      "itemdefid": 10068,
      "name": "Forest Camo Balaclava",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10068_small.png?3640106314",
      "…": "12 more keys"
    },
    "… 47 more"
  ],
  "steam_ref": "buy"
}

GET/market/cap

Market cap of the Rust skin market
The rust.wiki Market Cap page as data: `total_value` (cents), `skin_count`, `unit_count`, `by_category` (`{category, value}`) and `top`, every skin ranked by value with `{itemdefid, name, icon_url, price, amount, value}`. Supply is not something Steam exposes, so `amount` is the skin's Steam Workshop subscriber count - a stated approximation (subscribing is not owning) - and `value` is price x amount. Only marketable skins with a live Steam price and a linked Workshop submission are included. Cached for 15 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/cap"
Example response
{
  "skin_count": 5343,
  "unit_count": 58325075,
  "total_value": 15635120354,
  "by_category": [
    {
      "category": "clothing",
      "value": 7068897948
    },
    {
      "category": "deployable",
      "value": 4722663129
    },
    {
      "category": "weapon",
      "value": 3653697670
    },
    "… 2 more"
  ],
  "top": [
    {
      "itemdefid": 44201,
      "name": "Forest Raiders Roadsign Pants",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/44201_small.png?685985818",
      "price": 9193,
      "amount": 27400,
      "value": 251888200
    },
    {
      "itemdefid": 42007,
      "name": "Whiteout Hoodie",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/42007_small.png?864959197",
      "price": 1976,
      "amount": 75680,
      "value": 149543680
    },
    {
      "itemdefid": 42305,
      "name": "Whiteout Facemask",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/42305_small.png?4013001147",
      "price": 2050,
      "amount": 71971,
      "value": 147540550
    },
    "… 5340 more"
  ]
}

GET/market/insights

Stonking, crashing and most-anticipated skins
The rust.wiki Insights page: `stonking` - the 10 skins trading closest to (or above) their all-time high, `crashing` - the 10 closest to their all-time low (each `{itemdefid, name, icon_url, price, reference_price}`, cents; the reference is that skin's own all-time high or low from Steam's multi-year history, skins with under 30 history points excluded), and `anticipated` - the 50 marketable skins with the most Steam Workshop subscribers (`{itemdefid, name, icon_url, subscriptions}`). Refreshed with each price-history run, about every 6 hours.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/market/insights"
Example response
{
  "stonking": [
    {
      "itemdefid": 30806,
      "name": "Regeneration Program",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/30806_small.png?2589253865",
      "price": 5975,
      "reference_price": 1034
    },
    {
      "itemdefid": 41203,
      "name": "Pharaoh's Bow",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/41203_small.png?1859011566",
      "price": 501,
      "reference_price": 226
    },
    {
      "itemdefid": 54500,
      "name": "No Mercy Revolver - E Class",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/54500_small.png?3706509287",
      "price": 128116,
      "reference_price": 75045
    },
    "… 7 more"
  ],
  "crashing": [
    {
      "itemdefid": 48200,
      "name": "Graffiti Metal Storage",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/48200_small.png?1681191300",
      "price": 69,
      "reference_price": 101
    },
    {
      "itemdefid": 60502,
      "name": "Bombshell SAR",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/60502_small.png?3162369524",
      "price": 110,
      "reference_price": 107
    },
    {
      "itemdefid": 29303,
      "name": "Tempered Python",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/29303_small.png?4110162725",
      "price": 217,
      "reference_price": 208
    },
    "… 7 more"
  ],
  "anticipated": [
    {
      "itemdefid": 41401,
      "name": "Tempered Thompson",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/41401_small.png?2193805946",
      "subscriptions": 82512
    },
    {
      "itemdefid": 42007,
      "name": "Whiteout Hoodie",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/42007_small.png?864959197",
      "subscriptions": 75680
    },
    {
      "itemdefid": 42006,
      "name": "Whiteout Pants",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/42006_small.png?1423357804",
      "subscriptions": 74407
    },
    "… 47 more"
  ]
}

Charts

category charts · 2,000 requests/day

Ready-made PNG charts (dark site style, 792x412) for skin price history (line or candlestick), market indexes, collection value and multi-skin comparisons - the same images the rust.wiki Discord bot posts. Series come from Steam Community Market history; images are cached for 15 minutes. Use the JSON endpoints under /skins and /market when you want the numbers instead.

GET/charts/price/{itemdefid}.png

Price history chart for one skin (line or candlestick)
Renders the skin's Steam sale-price history over the window as a PNG: a filled line of daily prices, or weekly candlesticks with `style=candle`. The axis is in the requested currency. 404 when the skin is unknown or has fewer than two history points in the window.
ParameterInTypeDefaultDescription
itemdefid requiredpathintegerSteam itemdefid of the skin.
rangequerystring3mWindow: 1d, 1w, 1m, 3m, 6m, 1y, 2y, 5y or all.
stylequerystringline`line` (daily closes) or `candle` (weekly OHLC candlesticks).
currencyquerystringUSDISO currency code for the y-axis (converted with the site's live rates); USD by default.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/charts/price/10138.png"
Returns: image/png - image/png image (about 42 KB)

GET/charts/index.png

Market index chart
The same index the /skins/index page and GET /market/index compute (baseline 100 at the start of the window, equal- or market-cap-weighted), drawn as a single filled line. Pair it with GET /market/index for the numbers and constituent count.
ParameterInTypeDefaultDescription
basket_typequerystringallall, high_value, low_value, category, collection, item or custom (comma-separated itemdefids in basket_value).
basket_valuequerystringThe category / collection name / item shortname / itemdefid list for that basket type.
rangequerystring90dWindow: 7d, 30d, 90d, 1y, 2y, 3y, 4y, 5y or all.
weight_modequerystringequal`equal` or `marketcap` weighting of constituents.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/charts/index.png"
Returns: image/png - image/png image (about 32 KB)

GET/charts/collection.png

Collection value chart
Equal-weighted index of every skin in the collection over the window, the chart the bot's /collection command posts. 404 for an unknown collection or too little history.
ParameterInTypeDefaultDescription
collection requiredquerystringCollection name exactly as GET /skins/collections lists it.
rangequerystring90dWindow: 7d, 30d, 90d, 1y, 2y, 3y, 4y, 5y or all.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/charts/collection.png?collection=Forest%20Raiders"
Returns: image/png - image/png image (about 42 KB)

GET/charts/compare.png

Compare up to four skins, baskets or indexes on one chart
Overlays the entries' daily price series (baskets as their average, indexes as index points) exactly as the /skins/compare page does, rendered with a legend. `indexed` is the only mode where a $0.30 and a $300 skin read on one axis.
ParameterInTypeDefaultDescription
entries requiredquerystringComma-separated entries, the same tokens GET /market/compare accepts: an itemdefid, `category:<name>`, `collection:<name>`, `item:<shortname>` or `index:all`. First four are drawn.
rangequerystring90dWindow: 7d, 30d, 90d, 1y, 2y, 3y, 4y, 5y or all.
modequerystringindexed`indexed` rebases every line to 100 at its first point (comparable); `price` draws raw USD prices.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/charts/compare.png?entries=10138,42007"
Returns: image/png - image/png image (about 58 KB)

Item store

category store · 10,000 requests/day

Rust's official in-game item store (the Steam item store for app 252490): the current weekly rotation, the permanent catalogue and DLC packs, plus every past rotation back to July 2015 (over 500). Store prices are what Facepunch charges, in integer USD cents; `market_price` is the skin's canonical wiki price on Steam Community Market, also cents. New rotations are detected from Steam's storefront within the hour and land every Thursday; payloads are cached 30-60 minutes.

GET/store

The current Rust item store
What is purchasable in Rust's item store right now, in the three sections the wiki shows: `limited_time` (this week's rotation, most Workshop subscribers first), `general` (the permanent catalogue) and `dlc_packs` (bundles, by name). Each item carries `itemdefid`, `name`, `icon_url`, `category`, `store_price` (cents), `market_price` (its Steam Community Market price in cents, null when unlisted), `rarity`, `item_collection`, `creator_name`/`creator_avatar_url`, `subscriptions`, `est_supply` with `est_supply_source` (`workshop` subscribers for brand-new items, the market estimate otherwise), `base_item_name` and the usual flags. Also `recent_rotations` (the last six, newest first, `is_current` marks the open one), `active_rotation_id` and `next_rotation_at` (the open rotation's start + 7 days; rotations land on Thursdays). Steam's own purchase URL for any item is `https://store.steampowered.com/buyitem/252490/{itemdefid}/{quantity}`. Cached 30 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/store"
Example response
{
  "limited_time": [
    {
      "itemdefid": 70910,
      "name": "No Mercy Wood Gloves",
      "icon_url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WPFfCk4nReh8DEiv5dYPqE_qrU-Sf9hl…",
      "…": "20 more keys"
    },
    {
      "itemdefid": 70901,
      "name": "Molten Visage Triangle Hatch",
      "icon_url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WLEfCk4nReh8DEiv5dbP6A8r70wSPu3M…",
      "…": "20 more keys"
    },
    {
      "itemdefid": 70903,
      "name": "Antique Salvaged Icepick",
      "icon_url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WLGfCk4nReh8DEiv5daMag7qbwyQv65i…",
      "…": "20 more keys"
    },
    "… 9 more"
  ],
  "general": [
    {
      "itemdefid": 10220,
      "name": "Adobe Building Skin",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10220_small.png?1330644722",
      "…": "20 more keys"
    },
    {
      "itemdefid": 10492,
      "name": "Bowless Crossbow",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10492_small.png?103559818",
      "…": "20 more keys"
    },
    {
      "itemdefid": 10223,
      "name": "Brick Building Skin",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10223_small.png?2770892197",
      "…": "20 more keys"
    },
    "… 19 more"
  ],
  "dlc_packs": [
    {
      "itemdefid": 10222,
      "name": "Abyss Pack",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10222_small.png?2950078003",
      "…": "20 more keys"
    },
    {
      "itemdefid": 10304,
      "name": "Adobe Gate and Wall Pack",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10304_small.png?554334055",
      "…": "20 more keys"
    },
    {
      "itemdefid": 10207,
      "name": "Arctic Pack",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/10207_small.png?4009280131",
      "…": "20 more keys"
    },
    "… 18 more"
  ],
  "recent_rotations": [
    {
      "id": "2026-10-01-1807",
      "name": null,
      "start": "2026-10-01T18:07:55.360751",
      "is_current": true
    },
    {
      "id": "2026-10-01-1638",
      "name": null,
      "start": "2026-10-01T16:38:00.255252",
      "is_current": false
    },
    {
      "id": "2026-09-24-2214",
      "name": null,
      "start": "2026-09-24T22:14:08.112206",
      "is_current": false
    },
    "… 3 more"
  ],
  "next_rotation_at": "2026-10-08T18:07:55.360751",
  "active_rotation_id": "2026-10-01-1807"
}

GET/store/history

Past item-store rotations
Every weekly rotation, newest first (the open one included): `id` (the rotation slug, `YYYY-MM-DD-HHMM`, or `General` for the permanent catalogue), `name` (Facepunch's label when it had one, usually null), `start`, `end` (null while current), `itemdefid_count` and `icons` - every skin in it as `{url, name}`, DLC packs excluded. With `search`, only the rotations that sold a matching skin are returned (same shape, newest first), which answers "when was X in the store?". Full item lists via GET /store/rotations/{rotation_id}. Cached for an hour; searches are computed live.
ParameterInTypeDefaultDescription
searchquerystringOnly rotations that contained a skin whose name matches this (case-insensitive substring), e.g. `Tempered`.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/store/history"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 521,
  "pages": 11,
  "results": [
    {
      "id": "2026-10-01-1807",
      "name": null,
      "start": "2026-10-01T18:07:55.360751",
      "end": null,
      "itemdefid_count": 12,
      "icons": [
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WLBfCk4nReh8DEiv5dYMK07pbY0SfC20…",
          "name": "Antique Salvaged Axe"
        },
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WLGfCk4nReh8DEiv5daMag7qbwyQv65i…",
          "name": "Antique Salvaged Icepick"
        },
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WPEfCk4nReh8DEiv5ddO683r7IwRv--X…",
          "name": "Apotheosis of War Small Box"
        },
        "… 9 more"
      ]
    },
    {
      "id": "2026-10-01-1638",
      "name": null,
      "start": "2026-10-01T16:38:00.255252",
      "end": "2026-10-01T18:07:55.360751",
      "itemdefid_count": 13,
      "icons": [
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WPHfCk4nReh8DEiv5daP686qbw_RPm4a…",
          "name": "*S* Door"
        },
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WLBfCk4nReh8DEiv5dYMK07pbY0SfC20…",
          "name": "Antique Salvaged Axe"
        },
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7WLGfCk4nReh8DEiv5daMag7qbwyQv65i…",
          "name": "Antique Salvaged Icepick"
        },
        "… 10 more"
      ]
    },
    {
      "id": "2026-09-24-2214",
      "name": null,
      "start": "2026-09-24T22:14:08.112206",
      "end": "2026-10-01T16:38:00.255252",
      "itemdefid_count": 20,
      "icons": [
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7GLEfCk4nReh8DEiv5deOaw9qrQ0R_BR5…",
          "name": "Boots from Hell"
        },
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7GLAfCk4nReh8DEiv5daP6k4q702R_y75…",
          "name": "Cobalt Jungle Container Armored Door"
        },
        {
          "url": "https://community.akamai.steamstatic.com/economy/image/6TMcQ7eX6E0EZl2byXi7vaVKyDk_zQLX05x6eLCFM9neAckxGDf7qU2e2gu64OnAeQ7835Re7GPHfCk4nReh8DEiv5dQO6s8rL0_RvjUk…",
          "name": "Doodle SAP"
        },
        "… 17 more"
      ]
    },
    "… 47 more"
  ]
}

GET/store/rotations/{rotation_id}

One rotation's full item list
One rotation as the wiki's /store/rotation page shows it: `rotation` (`id`, `name`, `start`, `end`, `itemdefid_count` - the number of items that still resolve in the catalogue) and its items split into `limited_time`, `general` and `dlc_packs`, each item in the same shape as GET /store, including today's `market_price` and `is_available_on_store` (a past rotation can still contain evergreen catalogue items). Cached for an hour.
ParameterInTypeDefaultDescription
rotation_id requiredpathstringRotation id from /store/history, e.g. `2017-07-13-2006`, or `General`. (max length 40)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/store/rotations/2017-07-13-2006"
Example response
{
  "rotation": {
    "id": "2017-07-13-2006",
    "name": "",
    "start": "2017-07-13T20:06:07",
    "end": "2017-07-20T18:23:11",
    "itemdefid_count": 19
  },
  "limited_time": [],
  "general": [
    {
      "itemdefid": 23201,
      "name": "Apocalypse Kilt",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/23201_small.png?2982679604",
      "…": "20 more keys"
    },
    {
      "itemdefid": 23200,
      "name": "Apocalypse Vest",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/23200_small.png?4215416301",
      "…": "20 more keys"
    },
    {
      "itemdefid": 23218,
      "name": "Forest Guardian Revolver",
      "icon_url": "https://files.facepunch.com/rust/icons/inventory/rust/23218_small.png?3987841886",
      "…": "20 more keys"
    },
    "… 16 more"
  ],
  "dlc_packs": []
}

Workshop

category workshop · 10,000 requests/day

The complete Steam Workshop archive of Rust skin submissions (~158,000 and growing, every item tagged 'Skin'), polled incrementally every few minutes so new uploads appear within minutes: title, author SteamID64, preview image, submission time, the target item as Steam tags it, subscriber count, vote score, and whether Facepunch accepted it into the game (with the in-game `accepted_itemdefid` that links to /skins). Search is a plain case-insensitive substring match on the title. Results are cached for 15 minutes.

GET/workshop

Browse or search Workshop submissions
One page of submissions. Each carries `workshopid` (the Steam published-file id), `title`, `author_steamid64`, `preview_image_url`, `submitted_at` (UTC ISO-8601, may be null), `accepted` and `accepted_itemdefid` (the in-game item definition id when Facepunch accepted it - use it with `/skins/{itemdefid}`), `target_item_tag`, `subscriptions` and `vote_score` (Steam's 0-1 score; both null when Steam has not reported them). Same filters, ordering and cache as the /workshop page.
ParameterInTypeDefaultDescription
searchquerystringCase-insensitive substring match on the submission title.
targetquerystringOnly submissions for this target item, exactly as the Workshop tags it (e.g. `AK47`, `Garage Door`); `/workshop/targets` lists every value.
sortqueryone of `newest`, `popular`newest`newest` = most recently submitted first; `popular` = most subscribers first.
acceptedqueryone of `any`, `yes`, `no`any`yes` = only submissions Facepunch accepted into the game; `no` = only ones it has not.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/workshop"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 83,
  "pages": 2,
  "results": [
    {
      "workshopid": 3772647985,
      "title": "Young Dragon | AR (V2) (Cut Sights)",
      "author_steamid64": "76561198262840821",
      "preview_image_url": "https://images.steamusercontent.com/ugc/14315349540881935116/0D85A1FFB86C08D48BB17374EFD9CFE069C451E8/",
      "submitted_at": "2026-07-27T10:10:10",
      "accepted": true,
      "accepted_itemdefid": 70108,
      "target_item_tag": "AK47",
      "subscriptions": 19135,
      "vote_score": 0.6380090713500977
    },
    {
      "workshopid": 3772631404,
      "title": "Young Dragon | AR (V2)",
      "author_steamid64": "76561198262840821",
      "preview_image_url": "https://images.steamusercontent.com/ugc/15445615739190898617/048B90C1A427AF522BB59AF7A1577F390EF49E03/",
      "submitted_at": "2026-07-27T09:19:37",
      "accepted": false,
      "accepted_itemdefid": null,
      "target_item_tag": "AK47",
      "subscriptions": 0,
      "vote_score": 0.6000000238418579
    },
    {
      "workshopid": 3749721305,
      "title": "Young Dragon | AR (NoStock)",
      "author_steamid64": "76561198262840821",
      "preview_image_url": "https://images.steamusercontent.com/ugc/15922966841576236374/9AEE07E4DDAEF06D4EE138E4310201770551FA8C/",
      "submitted_at": "2026-06-22T12:36:57",
      "accepted": false,
      "accepted_itemdefid": null,
      "target_item_tag": "AK47",
      "subscriptions": 0,
      "vote_score": 0.6319290399551392
    },
    "… 47 more"
  ]
}

GET/workshop/targets

Every target-item tag in use
The distinct `target_item_tag` values (alphabetical) - Steam's own Workshop tag text for the item a skin is made for, e.g. `AK47`, `Garage Door`. Pass one as the `target` filter of `/workshop`. The set only grows when Facepunch makes a new item skinnable; cached for 15 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/workshop/targets"
Example response
{
  "total": 154,
  "results": [
    "Acoustic Guitar",
    "AK47",
    "AK47 Skin",
    "… 151 more"
  ]
}

Reference data

category reference · 25,000 requests/day

Static Rust reference data and site utilities: 3,500+ console commands with syntax, defaults and admin permission; give-command item shortnames; the 60 fixed monuments (tier, safe zone, radiation, recyclers, tunnel/Chinook/heli flags); 86 loot tables with per-item drop chance, amount and condition; CCTV camera codes; 200 world entities (animals, NPCs, resource nodes) with HP and loot; every building piece with health, decay, build/repair/upkeep costs and time-to-destroy by weapon; the four tech trees with prerequisite edges; design notes paraphrased from The Art of Rust; the craft, recycle and blueprint calculator datasets, the raid cost table and the upkeep decay constants, plus computed answers from the same calculators (raw materials to craft a list, recycle yields, explosives to raid a set of pieces, a base's daily upkeep, the best plant crossbreeding layout, a base's build cost + upkeep + sulfur to raid, power draw and the panels/turbines/batteries to run it, furnace smelting time and wood); every gun, bow and melee weapon's damage, DPS, fire rate, magazine, reload and range; every tea recipe with its berries and Mixing Table slot order; doors, walls and deployables ranked by sulfur to raid vs build cost; a search over the RustProfit blog's Rust guides; current Twitch and Kick drops; Facepunch's update feed; and the USD exchange rates the site prices with. Game data only changes when Facepunch patches and is cached server-side for 30-60 minutes (the raid table for a day); updates and rates are near-live (worker freshness lives under /status).

GET/commands

Console and server commands
One page of Rust console/server commands, alphabetical. Each carries `command`, `syntax`, `description`, `category` (Rust's own ConVar namespace, e.g. `server`, `gather`), `command_type` (`command` or `variable`), `default_value` (variables only) and `permission_required` (null when any player can run it). Cached for 30 minutes.
ParameterInTypeDefaultDescription
searchquerystringCase-insensitive substring match on the command name, its description OR its category (so `workbench` finds every workbench ConVar).
admin_onlyquerybooleanFalse`true` = only commands that need admin/moderator permission.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/commands"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 4,
  "pages": 1,
  "results": [
    {
      "command": "ai.npc_cover_info_tick_rate_multiplier",
      "syntax": null,
      "description": "The rate at which we gather information about available cover points. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (…",
      "category": "ai",
      "command_type": "variable",
      "default_value": "20",
      "permission_required": "Admin"
    },
    {
      "command": "gamemodesoftcore.gather_rate",
      "syntax": null,
      "description": "(Generated) Global multiplier for resources gathered in Softcore mode from ores, trees, logs, wild plants and animals; 1.0 = default, 2.0 = double yield",
      "category": "gamemodesoftcore",
      "command_type": "variable",
      "default_value": "2",
      "permission_required": "Admin"
    },
    {
      "command": "server.occlusiongatherbatchplayercount",
      "syntax": null,
      "description": "UsePlayerUpdateJobs 4 related - how many players to gather occlusion pairs for per task",
      "category": "server",
      "command_type": "variable",
      "default_value": "64",
      "permission_required": "Admin"
    },
    "… 1 more"
  ]
}

GET/commands/give-items

Item shortnames for the give command
Live items as a copy-paste reference for `give <shortname> <amount>` and `inventory.giveto <player> <shortname> <amount>`: `shortname` is the exact string those commands expect, plus `display_name`, `category`, `icon_url` and `stack_size` (the maximum one stack holds). Alphabetical by display name; cached for 30 minutes.
ParameterInTypeDefaultDescription
categoryqueryone of `weapon`, `construction`, `general`, `resource`, `attire`, `tool`, `medical`, `food`, `ammo`, `trap`, `component`, `electrical`, `fun`, `misc`Restrict to one item category.
searchquerystringCase-insensitive substring match on the display name or shortname.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/commands/give-items"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 13,
  "pages": 1,
  "results": [
    {
      "shortname": "rifle.ak",
      "display_name": "Assault Rifle",
      "category": "weapon",
      "icon_url": "https://files.facepunch.com/rust/item/rifle.ak_512.png",
      "stack_size": 1
    },
    {
      "shortname": "rifle.bolt",
      "display_name": "Bolt Action Rifle",
      "category": "weapon",
      "icon_url": "https://files.facepunch.com/rust/item/rifle.bolt_512.png",
      "stack_size": 1
    },
    {
      "shortname": "rifle.ak.glass",
      "display_name": "Crystal AR Diamond",
      "category": "weapon",
      "icon_url": "https://files.facepunch.com/rust/item/rifle.ak.glass_512.png",
      "stack_size": 1
    },
    "… 10 more"
  ]
}

GET/monuments

All 60 fixed monuments
Every fixed-location monument, alphabetical, in one response (no pagination - the set is 60 and static). Each carries `slug`, `name`, `tier` (1-3, null for safe zones and minor monuments), `is_safezone`, `has_radiation` and `radiation_level`, `recyclers` (count on site), `has_tunnel_entrance` (underground rail), `has_chinook_drop_zone`, `allows_patrol_heli_crash`, `no_build_area_sqm` and `icon_url`. Moving monuments (Cargo Ship) are not included. Cached for one hour.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/monuments"
Example response
{
  "total": 60,
  "results": [
    {
      "slug": "abandoned-cabins",
      "name": "Abandoned Cabins",
      "tier": "1",
      "is_safezone": false,
      "has_tunnel_entrance": false,
      "has_chinook_drop_zone": false,
      "allows_patrol_heli_crash": true,
      "no_build_area_sqm": 1256,
      "recyclers": "None",
      "has_radiation": false,
      "radiation_level": null,
      "icon_url": null
    },
    {
      "slug": "abandoned-military-base",
      "name": "Abandoned Military Base",
      "tier": "1/2/3",
      "is_safezone": false,
      "has_tunnel_entrance": false,
      "has_chinook_drop_zone": false,
      "allows_patrol_heli_crash": false,
      "no_build_area_sqm": 70685,
      "recyclers": "None",
      "has_radiation": false,
      "radiation_level": null,
      "icon_url": null
    },
    {
      "slug": "abandoned-supermarket",
      "name": "Abandoned Supermarket",
      "tier": "1/2/3",
      "is_safezone": false,
      "has_tunnel_entrance": false,
      "has_chinook_drop_zone": false,
      "allows_patrol_heli_crash": true,
      "no_build_area_sqm": 45238,
      "recyclers": "1",
      "has_radiation": false,
      "radiation_level": null,
      "icon_url": null
    },
    "… 57 more"
  ]
}

GET/monuments/{slug}

One monument with its loot sources
The same fields as `/monuments` for one monument plus `loot_sources`: every crate/NPC loot table that spawns at it (`id`, `name`, `drop_count`), alphabetical - fetch each with `/loot-tables/{id}`. Cached for one hour.
ParameterInTypeDefaultDescription
slug requiredpathstringMonument slug from `/monuments`, e.g. `airfield`. (min length 1, max length 80)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/monuments/airfield"
Example response
{
  "slug": "airfield",
  "name": "Airfield",
  "tier": "2",
  "is_safezone": false,
  "has_tunnel_entrance": true,
  "has_chinook_drop_zone": true,
  "allows_patrol_heli_crash": true,
  "no_build_area_sqm": 49152,
  "recyclers": "2",
  "has_radiation": true,
  "radiation_level": "11",
  "icon_url": null,
  "…": "1 more keys"
}

GET/loot-tables

Every loot source (crates, NPCs, barrels)
One page of loot sources, alphabetical. Each carries `id`, `name` (Facepunch's own loot-table name, e.g. `Elite Tier Crate`), `drop_count` (how many distinct items it can drop) and `icons` (the icons of its four likeliest drops). Fetch the full drop table with `/loot-tables/{id}`. Cached for 30 minutes.
ParameterInTypeDefaultDescription
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/loot-tables"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 158,
  "pages": 4,
  "results": [
    {
      "id": 87,
      "name": "Abandoned Military Base Scientist",
      "drop_count": 211,
      "icons": [
        "https://files.facepunch.com/rust/item/ammo.pistol_512.png",
        "https://files.facepunch.com/rust/item/ammo.rifle_512.png",
        "https://files.facepunch.com/rust/item/syringe.medical_512.png",
        "… 1 more"
      ]
    },
    {
      "id": 76,
      "name": "airdrop",
      "drop_count": 16,
      "icons": [
        "https://files.facepunch.com/rust/item/explosive.satchel_512.png",
        "https://files.facepunch.com/rust/item/explosive.timed_512.png",
        "https://files.facepunch.com/rust/item/chainsaw_512.png",
        "… 1 more"
      ]
    },
    {
      "id": 88,
      "name": "Airfield Scientist",
      "drop_count": 211,
      "icons": [
        "https://files.facepunch.com/rust/item/ammo.pistol_512.png",
        "https://files.facepunch.com/rust/item/ammo.rifle_512.png",
        "https://files.facepunch.com/rust/item/syringe.medical_512.png",
        "… 1 more"
      ]
    },
    "… 47 more"
  ]
}

GET/loot-tables/{source_id}

One loot table with every drop
The loot source's `id` and `name` plus `drops`, highest chance first: for each item `shortname`, `display_name`, `icon_url`, `chance_pct` (0-100), `amount_min`/`amount_max` and, for items that spawn damaged, `condition_min_pct`/`condition_max_pct`. Scraped from wiki.facepunch.com; cached for 30 minutes.
ParameterInTypeDefaultDescription
source_id requiredpathintegerLoot source id from `/loot-tables`, `/monuments/{slug}` or an item's `loot_sources`. (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/loot-tables/1"
Example response
{
  "id": 1,
  "name": "Medical Crate",
  "drop_count": 3,
  "drops": [
    {
      "shortname": "bandage",
      "display_name": "Bandage",
      "icon_url": "https://files.facepunch.com/rust/item/bandage_512.png",
      "chance_pct": 50.0,
      "amount_min": 1,
      "amount_max": 1,
      "condition_min_pct": null,
      "condition_max_pct": null
    },
    {
      "shortname": "largemedkit",
      "display_name": "Large Medkit",
      "icon_url": "https://files.facepunch.com/rust/item/largemedkit_512.png",
      "chance_pct": 25.0,
      "amount_min": 1,
      "amount_max": 1,
      "condition_min_pct": null,
      "condition_max_pct": null
    },
    {
      "shortname": "syringe.medical",
      "display_name": "Medical Syringe",
      "icon_url": "https://files.facepunch.com/rust/item/syringe.medical_512.png",
      "chance_pct": 25.0,
      "amount_min": 1,
      "amount_max": 1,
      "condition_min_pct": null,
      "condition_max_pct": null
    }
  ]
}

GET/cctv-codes

CCTV camera codes by monument
The 12 monuments with working CCTV cameras and their Computer Station identifiers (60 codes). `codes` are the literal in-game console codes; when `randomized` is true the trailing `****` is a per-wipe random 4-digit suffix posted near the camera in-game, not a fixed code. `slug` links to `/monuments/{slug}` (null for Cargo Ship, which is a moving monument). Fixed reference data.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/cctv-codes"
Example response
{
  "total": 12,
  "code_count": 60,
  "results": [
    {
      "name": "Airfield",
      "codes": [
        "AIRFIELDHELIPAD"
      ],
      "randomized": false,
      "slug": "airfield"
    },
    {
      "name": "Bandit Camp",
      "codes": [
        "CASINO",
        "TOWNWEAPONS"
      ],
      "randomized": false,
      "slug": "bandit-camp"
    },
    {
      "name": "Cargo Ship",
      "codes": [
        "CARGODECK",
        "CARGOBRIDGE",
        "CARGOSTERN",
        "… 2 more"
      ],
      "randomized": false,
      "slug": null
    },
    "… 9 more"
  ]
}

GET/world

World entities: animals, NPCs, resource nodes
One page of world entities (anything not tied to one monument), alphabetical. Each carries `slug`, `display_name`, `is_npc`, `npc_hp` (null for resources) and `icon_url`. Cached for one hour.
ParameterInTypeDefaultDescription
kindqueryone of `npc`, `resource``npc` = anything with hit points (animals, scientists, bosses, vehicles); `resource` = nodes, trees, barrels and other harvestables.
searchquerystringCase-insensitive substring match on the display name.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/world"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 25,
  "pages": 1,
  "results": [
    {
      "slug": "abandoned-military-base-scientist",
      "display_name": "Abandoned Military Base Scientist",
      "is_npc": true,
      "npc_hp": 150.0,
      "icon_url": null
    },
    {
      "slug": "airfield-scientist",
      "display_name": "Airfield Scientist",
      "is_npc": true,
      "npc_hp": 150.0,
      "icon_url": null
    },
    {
      "slug": "arctic-research-base-scientist",
      "display_name": "Arctic Research Base Scientist",
      "is_npc": true,
      "npc_hp": 150.0,
      "icon_url": null
    },
    "… 22 more"
  ]
}

GET/world/{slug}

One world entity with its loot
The entity's `slug`, `display_name`, `is_npc`, `npc_hp`, `icon_url` and `loot_source_id` (null when it drops nothing), plus `drops` - its five likeliest drops (`shortname`, `display_name`, `icon_url`, `chance_pct`, `amount_min`, `amount_max`) - and `drop_count`, the full number of distinct drops. The complete table is `/loot-tables/{loot_source_id}`. Cached for one hour.
ParameterInTypeDefaultDescription
slug requiredpathstringEntity slug from `/world`, e.g. `bear`. (min length 1, max length 80)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/world/bear"
Example response
{
  "slug": "bear",
  "display_name": "Bear",
  "is_npc": false,
  "npc_hp": null,
  "loot_source_id": 94,
  "icon_url": null,
  "drops": [],
  "drop_count": 0
}

GET/building

Building pieces by grade
One page of building pieces (every grade of every block: foundations, walls, floors, doorways, stairs, roofs, ...), alphabetical. Each carries `slug`, `display_name`, `grade` (Twig, Wood, Stone, Metal, Armored or Boat), `health` and `decay_hours` (how long an unmaintained piece takes to decay fully). Cached for one hour.
ParameterInTypeDefaultDescription
gradequeryone of `Twig`, `Wood`, `Stone`, `Metal`, `Armored`, `Boat`Restrict to one building grade.
searchquerystringCase-insensitive substring match on the display name.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/building"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 6,
  "pages": 1,
  "results": [
    {
      "slug": "stone-wall",
      "display_name": "Stone Wall",
      "grade": "Stone",
      "health": 500.0,
      "decay_hours": 5.0
    },
    {
      "slug": "stone-wall-doorway",
      "display_name": "Stone Wall Doorway",
      "grade": "Stone",
      "health": 500.0,
      "decay_hours": 5.0
    },
    {
      "slug": "stone-wall-frame",
      "display_name": "Stone Wall Frame",
      "grade": "Stone",
      "health": 500.0,
      "decay_hours": 5.0
    },
    "… 3 more"
  ]
}

GET/building/best-value

Doors, walls and deployables ranked by sulfur to raid vs build cost
The data behind https://rust.wiki/building/best-value. `doors`, `walls` (walls, foundations and floors at every grade) and `other` (raidable deployables), each hardest to raid first. Every row has `slug`, `name`, `health`, `raid` - the cheapest single standard explosive (rockets, C4, satchel charges, explosive 5.56 ammo, beancans) as `explosive` (shortname), `count` and `sulfur` - and `build`, resource name -> amount (a building block's upgrade cost at its grade, a door's or deployable's crafting recipe). Building blocks add `grade` and `type`; doors and deployables add `shortname`, `icon_url` and `url`. `explosives` names the shortnames. Raid data cached for 24 hours.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/building/best-value"

GET/building/{slug}

One building piece: costs, durability, siblings
The piece's `slug`, `display_name`, `grade`, `health` and `decay_hours`, plus `costs` (`build`, `repair` and `upkeep` lists of `item_name`, `amount` or `min_amount`/`max_amount`, with `shortname`/`icon_url` when the material maps to a catalogue item), `durability` (up to ten entries each for `explosive`, `melee` and `bullet` damage: `item_name`, `seconds_taken` to destroy, `required_items` = how many of that weapon/explosive) and `siblings` - the same piece at every other grade, Twig to Armored. Cached for one hour.
ParameterInTypeDefaultDescription
slug requiredpathstringPiece slug from `/building`, e.g. `stone-wall`. (min length 1, max length 80)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/building/stone-wall"
Example response
{
  "slug": "stone-wall",
  "display_name": "Stone Wall",
  "grade": "Stone",
  "health": 500.0,
  "decay_hours": 5.0,
  "costs": {
    "build": [
      {
        "item_name": "Stones",
        "amount": 300.0,
        "min_amount": null,
        "max_amount": null,
        "shortname": "stones",
        "icon_url": "https://files.facepunch.com/rust/item/stones_512.png"
      }
    ],
    "repair": [
      {
        "item_name": "Stones",
        "amount": 300.0,
        "min_amount": null,
        "max_amount": null,
        "shortname": "stones",
        "icon_url": "https://files.facepunch.com/rust/item/stones_512.png"
      },
      {
        "item_name": "Stones",
        "amount": 300.0,
        "min_amount": null,
        "max_amount": null,
        "shortname": "stones",
        "icon_url": "https://files.facepunch.com/rust/item/stones_512.png"
      }
    ],
    "upkeep": [
      {
        "item_name": "Stones",
        "amount": null,
        "min_amount": 30.0,
        "max_amount": 99.0,
        "shortname": "stones",
        "icon_url": "https://files.facepunch.com/rust/item/stones_512.png"
      }
    ]
  },
  "durability": {
    "explosive": [
      {
        "item_name": "Timed Explosive Charge",
        "seconds_taken": 14.0,
        "required_items": 2.0,
        "shortname": "explosive.timed",
        "icon_url": "https://files.facepunch.com/rust/item/explosive.timed_512.png"
      },
      {
        "item_name": "Rocket",
        "seconds_taken": 18.0,
        "required_items": 4.0,
        "shortname": "ammo.rocket.basic",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.rocket.basic_512.png"
      },
      {
        "item_name": "Satchel Charge",
        "seconds_taken": 34.0,
        "required_items": 10.0,
        "shortname": "explosive.satchel",
        "icon_url": "https://files.facepunch.com/rust/item/explosive.satchel_512.png"
      },
      "… 7 more"
    ],
    "melee": [
      {
        "item_name": "Jackhammer",
        "seconds_taken": 101.0,
        "required_items": 1.0,
        "shortname": "jackhammer",
        "icon_url": "https://files.facepunch.com/rust/item/jackhammer_512.png"
      },
      {
        "item_name": "Combat Knife",
        "seconds_taken": 318.0,
        "required_items": 32.0,
        "shortname": "knife.combat",
        "icon_url": "https://files.facepunch.com/rust/item/knife.combat_512.png"
      },
      {
        "item_name": "Salvaged Icepick",
        "seconds_taken": 454.0,
        "required_items": 7.0,
        "shortname": "icepick.salvaged",
        "icon_url": "https://files.facepunch.com/rust/item/icepick.salvaged_512.png"
      },
      "… 7 more"
    ],
    "bullet": [
      {
        "item_name": "Multiple Grenade Launcher",
        "seconds_taken": 17.0,
        "required_items": 27.0,
        "shortname": "multiplegrenadelauncher",
        "icon_url": "https://files.facepunch.com/rust/item/multiplegrenadelauncher_512.png"
      },
      {
        "item_name": "M249",
        "seconds_taken": 28.0,
        "required_items": 159.0,
        "shortname": "lmg.m249",
        "icon_url": "https://files.facepunch.com/rust/item/lmg.m249_512.png"
      },
      {
        "item_name": "HMLMG",
        "seconds_taken": 35.0,
        "required_items": 163.0,
        "shortname": "hmlmg",
        "icon_url": "https://files.facepunch.com/rust/item/hmlmg_512.png"
      },
      "… 7 more"
    ]
  },
  "siblings": [
    {
      "slug": "twig-wall",
      "grade": "Twig"
    },
    {
      "slug": "wood-wall",
      "grade": "Wood"
    },
    {
      "slug": "stone-wall",
      "grade": "Stone"
    },
    "… 3 more"
  ]
}

GET/tech-tree/{tree}

One tech tree: nodes and prerequisite edges
The full research graph for one workbench. `nodes` carry `id`, `shortname` and `name` of the unlockable item, `icon_url`, `cost` (scrap to unlock that node) and `total_cost` (cumulative scrap along the cheapest path from the root), plus `x`/`y`: these are LAYOUT PIXELS from the site's own tree renderer (the top-left of a 110x78 card, see `card_size`), not game data. `edges` are the prerequisite links, each with `from_id`/ `to_id` (research `from` before `to`) and the card-centre pixel endpoints `x1`,`y1`,`x2`,`y2` the page draws. Node ids are only stable until the tree is re-seeded. Cached for one hour.
ParameterInTypeDefaultDescription
tree requiredpathone of `workbench1`, `workbench2`, `workbench3`, `engineering`Which research graph: Workbench Level 1/2/3 or the Engineering Workbench.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/tech-tree/workbench1"
Example response
{
  "tree": "workbench1",
  "label": "Workbench Level 1",
  "card_size": {
    "width": 110,
    "height": 78
  },
  "node_count": 94,
  "edge_count": 92,
  "nodes": [
    {
      "id": 53,
      "shortname": "knife.combat",
      "name": "Combat Knife",
      "icon_url": "https://files.facepunch.com/rust/item/knife.combat_512.png",
      "x": 1984.0,
      "y": 2048.0,
      "cost": 30,
      "total_cost": 375
    },
    {
      "id": 52,
      "shortname": "shotgun.double",
      "name": "Double Barrel Shotgun",
      "icon_url": "https://files.facepunch.com/rust/item/shotgun.double_512.png",
      "x": 1600.0,
      "y": 2048.0,
      "cost": 60,
      "total_cost": 405
    },
    {
      "id": 29,
      "shortname": "hatchet",
      "name": "Hatchet",
      "icon_url": "https://files.facepunch.com/rust/item/hatchet_512.png",
      "x": 1408.0,
      "y": 320.0,
      "cost": 30,
      "total_cost": 60
    },
    "… 91 more"
  ],
  "edges": [
    {
      "from_id": 18,
      "to_id": 1,
      "x1": 1655.0,
      "y1": 167.0,
      "x2": 503.0,
      "y2": 359.0
    },
    {
      "from_id": 84,
      "to_id": 2,
      "x1": 695.0,
      "y1": 551.0,
      "x2": 503.0,
      "y2": 743.0
    },
    {
      "from_id": 2,
      "to_id": 3,
      "x1": 503.0,
      "y1": 743.0,
      "x2": 503.0,
      "y2": 935.0
    },
    "… 89 more"
  ]
}

GET/design-notes

Design notes from The Art of Rust
Curated trivia paraphrased from The Art of Rust (Facepunch Studios / Dark Horse Books, January 2026): design inspirations, cut content and in-universe lore. Each note carries `id`, `chapter`, `title`, `text` (an original paraphrase, never a quotation), `page` (the book page cited), `tags` (the wiki pages it belongs to) and `cut_content`. Text only - the book's artwork is never reproduced. Fixed editorial data.
ParameterInTypeDefaultDescription
chapterqueryone of `Characters`, `Bases & World`, `Weapons & Tech`, `Vehicles`, `Events & DLC`Restrict to one chapter of the book.
tagquerystringOnly notes tagged for one wiki page: `item:<shortname>`, `monument:<slug>`, `building:<slug>` or `world:<slug>`.
cutqueryboolean`true` = only notes about cut/unshipped content; `false` = only notes about shipped content.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/design-notes"
Example response
{
  "book": "The Art of Rust (Facepunch Studios / Dark Horse Books, January 2026)",
  "chapters": [
    "Characters",
    "Bases & World",
    "Weapons & Tech",
    "… 2 more"
  ],
  "total": 1,
  "results": [
    {
      "id": "assault-rifle-ak47",
      "chapter": "Weapons & Tech",
      "title": "The Assault Rifle's AK-47 roots",
      "text": "Rust's most iconic weapon started from a familiar shape: early Assault Rifle sketches took the classic AK-47 silhouette and reimagined it through scavenging, im…",
      "page": 119,
      "tags": [
        "item:rifle.ak"
      ],
      "cut_content": false
    }
  ]
}

GET/calculators/craft

Craft calculator dataset: every recipe
The dataset behind the craft calculator: `items` maps every item shortname to `name`, `icon_url`, `craftable` and `recipe` (direct components as `shortname` + `quantity`; empty for non-craftables). Resolve a recipe recursively through the same map to get raw-material totals, exactly as the page's accumulator does. Cached for 30 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/craft"
Example response
{
  "total": 1101,
  "items": {
    "metal.facemask": {
      "name": "Metal Facemask",
      "icon_url": "https://files.facepunch.com/rust/item/metal.facemask_512.png",
      "craftable": false,
      "recipe": []
    },
    "metal.plate.torso": {
      "name": "Metal Chest Plate",
      "icon_url": "https://files.facepunch.com/rust/item/metal.plate.torso_512.png",
      "craftable": false,
      "recipe": []
    },
    "coffeecan.helmet": {
      "name": "Coffee Can Helmet",
      "icon_url": "https://files.facepunch.com/rust/item/coffeecan.helmet_512.png",
      "craftable": false,
      "recipe": []
    },
    "…": "1098 more keys"
  }
}

GET/calculators/recycle

Recycle calculator dataset: every recycler yield
The dataset behind the recycle calculator: `items` maps every recyclable item's shortname to `name`, `icon_url` and `yields`, split by `recycler` (the standard monument recycler) and `safe_zone` (the reduced- yield Outpost/Bandit Camp recycler). Each yield is `shortname`, `name`, `icon_url`, `quantity` and `chance` (0-1 probability of that output). Cached for 30 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/recycle"
Example response
{
  "total": 843,
  "items": {
    "ammo.shotgun": {
      "name": "12 Gauge Buckshot",
      "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun_512.png",
      "yields": {
        "recycler": [
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 1.0
          },
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 0.5
          },
          {
            "shortname": "gunpowder",
            "name": "Gun Powder",
            "icon_url": "https://files.facepunch.com/rust/item/gunpowder_512.png",
            "quantity": 3,
            "chance": 1.0
          }
        ],
        "safe_zone": [
          {
            "shortname": "gunpowder",
            "name": "Gun Powder",
            "icon_url": "https://files.facepunch.com/rust/item/gunpowder_512.png",
            "quantity": 2,
            "chance": 1.0
          },
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 1.0
          }
        ]
      }
    },
    "ammo.shotgun.fire": {
      "name": "12 Gauge Incendiary Shell",
      "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun.fire_512.png",
      "yields": {
        "recycler": [
          {
            "shortname": "sulfur",
            "name": "Sulfur",
            "icon_url": "https://files.facepunch.com/rust/item/sulfur_512.png",
            "quantity": 6,
            "chance": 1.0
          },
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 0.5
          },
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 1.0
          },
          "… 1 more"
        ],
        "safe_zone": [
          {
            "shortname": "sulfur",
            "name": "Sulfur",
            "icon_url": "https://files.facepunch.com/rust/item/sulfur_512.png",
            "quantity": 4,
            "chance": 1.0
          },
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 1.0
          },
          {
            "shortname": "gunpowder",
            "name": "Gun Powder",
            "icon_url": "https://files.facepunch.com/rust/item/gunpowder_512.png",
            "quantity": 2,
            "chance": 1.0
          }
        ]
      }
    },
    "ammo.shotgun.slug": {
      "name": "12 Gauge Slug",
      "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun.slug_512.png",
      "yields": {
        "recycler": [
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 0.5
          },
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 1.0
          },
          {
            "shortname": "gunpowder",
            "name": "Gun Powder",
            "icon_url": "https://files.facepunch.com/rust/item/gunpowder_512.png",
            "quantity": 3,
            "chance": 1.0
          }
        ],
        "safe_zone": [
          {
            "shortname": "metal.fragments",
            "name": "Metal Fragments",
            "icon_url": "https://files.facepunch.com/rust/item/metal.fragments_512.png",
            "quantity": 1,
            "chance": 1.0
          },
          {
            "shortname": "gunpowder",
            "name": "Gun Powder",
            "icon_url": "https://files.facepunch.com/rust/item/gunpowder_512.png",
            "quantity": 2,
            "chance": 1.0
          }
        ]
      }
    },
    "…": "840 more keys"
  }
}

GET/calculators/blueprints

Blueprint tracker dataset: unlock costs by source
The dataset behind the blueprint tracker: `groups` maps an unlock source (`Research Table`, `Workbench Level 1 - Tech Tree`, `Workbench Level 2 - Tech Tree`, `Workbench Level 3 - Tech Tree`, or plain `Tech Tree` where the tier is unknown) to its items (`shortname`, `name`, `icon_url`, `scrap_cost`). An item appears under every source it can be learned from. Cached for 30 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/blueprints"
Example response
{
  "total": 856,
  "groups": {
    "Research Table": [
      {
        "shortname": "ammo.shotgun",
        "name": "12 Gauge Buckshot",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun_512.png",
        "scrap_cost": 30
      },
      {
        "shortname": "ammo.shotgun.fire",
        "name": "12 Gauge Incendiary Shell",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun.fire_512.png",
        "scrap_cost": 30
      },
      {
        "shortname": "ammo.shotgun.slug",
        "name": "12 Gauge Slug",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun.slug_512.png",
        "scrap_cost": 30
      },
      "… 576 more"
    ],
    "Workbench Level 2 - Tech Tree": [
      {
        "shortname": "ammo.shotgun",
        "name": "12 Gauge Buckshot",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun_512.png",
        "scrap_cost": 250
      },
      {
        "shortname": "ammo.shotgun.fire",
        "name": "12 Gauge Incendiary Shell",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun.fire_512.png",
        "scrap_cost": 250
      },
      {
        "shortname": "ammo.shotgun.slug",
        "name": "12 Gauge Slug",
        "icon_url": "https://files.facepunch.com/rust/item/ammo.shotgun.slug_512.png",
        "scrap_cost": 250
      },
      "… 74 more"
    ],
    "Workbench Level 3 - Tech Tree": [
      {
        "shortname": "weapon.mod.small.scope",
        "name": "8x Zoom Scope",
        "icon_url": "https://files.facepunch.com/rust/item/weapon.mod.small.scope_512.png",
        "scrap_cost": 500
      },
      {
        "shortname": "door.hinged.toptier",
        "name": "Armored Door",
        "icon_url": "https://files.facepunch.com/rust/item/door.hinged.toptier_512.png",
        "scrap_cost": 500
      },
      {
        "shortname": "door.double.hinged.toptier",
        "name": "Armored Double Door",
        "icon_url": "https://files.facepunch.com/rust/item/door.double.hinged.toptier_512.png",
        "scrap_cost": 500
      },
      "… 17 more"
    ],
    "Workbench Level 1 - Tech Tree": [
      {
        "shortname": "fun.guitar",
        "name": "Acoustic Guitar",
        "icon_url": "https://files.facepunch.com/rust/item/fun.guitar_512.png",
        "scrap_cost": 125
      },
      {
        "shortname": "anchor",
        "name": "Anchor",
        "icon_url": "https://files.facepunch.com/rust/item/anchor_512.png",
        "scrap_cost": 125
      },
      {
        "shortname": "barricade.woodwire",
        "name": "Barbed Wooden Barricade",
        "icon_url": "https://files.facepunch.com/rust/item/barricade.woodwire_512.png",
        "scrap_cost": 125
      },
      "… 84 more"
    ],
    "Tech Tree": [
      {
        "shortname": "electric.andswitch",
        "name": "AND Switch",
        "icon_url": "https://files.facepunch.com/rust/item/electric.andswitch_512.png",
        "scrap_cost": 250
      },
      {
        "shortname": "vehicle.1mod.cockpit.armored",
        "name": "Armored Cockpit Vehicle Module",
        "icon_url": "https://files.facepunch.com/rust/item/vehicle.1mod.cockpit.armored_512.png",
        "scrap_cost": 500
      },
      {
        "shortname": "vehicle.1mod.passengers.armored",
        "name": "Armored Passenger Vehicle Module",
        "icon_url": "https://files.facepunch.com/rust/item/vehicle.1mod.passengers.armored_512.png",
        "scrap_cost": 500
      },
      "… 90 more"
    ]
  }
}

GET/calculators/upkeep

Upkeep decay brackets and decay times
Rust's dedicated-server upkeep defaults (the `decay.bracket_*` and `decay.duration_*` ConVars, as most servers run them). `brackets` are applied in order to a base's block count: the first 15 blocks cost 10% of their build cost per day, the next 35 cost 15%, the next 75 cost 20%, and every block beyond 125 costs 33.3% (`blocks` null = unbounded); a base's blended daily rate is the block-weighted average of the brackets it fills, paid in the resources each piece was built from. `decay_hours` is how long an unmaintained piece of each grade takes to decay completely. Fixed constants, no computation happens server-side.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/upkeep"
Example response
{
  "brackets": [
    {
      "blocks": 15,
      "rate": 0.1
    },
    {
      "blocks": 35,
      "rate": 0.15
    },
    {
      "blocks": 75,
      "rate": 0.2
    },
    "… 1 more"
  ],
  "decay_hours": [
    {
      "grade": "Twig",
      "hours": 1.0
    },
    {
      "grade": "Wood",
      "hours": 3.0
    },
    {
      "grade": "Stone",
      "hours": 5.0
    },
    "… 2 more"
  ],
  "formula": "rate = sum(min(remaining, bracket.blocks) * bracket.rate) / total_blocks, walking the brackets in order; daily upkeep of each resource = total spent building * …",
  "source": "Rust dedicated-server ConVar defaults (decay.bracket_0..3_blockcount/costfraction, decay.duration_*)."
}

GET/calculators/raid

Raid cost table: explosives and sulfur per building piece
The dataset behind the raid calculator. `explosives` lists every explosive the building durability data covers: `shortname`, `name`, `icon_url`, `group` (`staples`, `other` or `siege`), `staple` (true for rockets, C4, satchel charges, explosive 5.56 ammo and beancans - the page's default set), `sulfur_per_unit` and `raw_cost_per_unit` (the crafting recipe resolved down to raw resources such as sulfur, charcoal, metal fragments and low grade fuel, per single unit; both null for loot-only explosives like MLRS rockets), `batch` (units one craft makes: explosive ammo 2, mortar shells 2) and `recipe_source` (`wiki` = the wiki's own crafting data, `fallback` = Rust's standard recipe where that data has none yet, e.g. rockets). `targets` is every building piece with explosive data (`slug`, `name`, `grade`, `health`), each with `costs` - for every explosive that can damage it, `required` (how many destroy one piece), `damage_per_unit` and `sulfur` (null for loot-only) - and `cheapest_staple`, the single staple explosive that destroys it for the least sulfur. Damage from different explosives adds up, so a cheaper mix can be computed from `damage_per_unit`. Doors and deployables are not covered yet. Cached for 24 hours.
ParameterInTypeDefaultDescription
gradequeryone of `Twig`, `Wood`, `Stone`, `Metal`, `Armored`, `Boat`Restrict `targets` to one building grade.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/raid"
Example response
{
  "explosives": [
    {
      "shortname": "ammo.rocket.basic",
      "name": "Rocket",
      "icon_url": "https://files.facepunch.com/rust/item/ammo.rocket.basic_512.png",
      "group": "staples",
      "staple": true,
      "sulfur_per_unit": 1400,
      "raw_cost_per_unit": {
        "charcoal": 1950,
        "sulfur": 1400,
        "metal.fragments": 100,
        "lowgradefuel": 30,
        "metalpipe": 2
      },
      "batch": 1,
      "recipe_source": "fallback"
    },
    {
      "shortname": "explosive.timed",
      "name": "Timed Explosive Charge",
      "icon_url": "https://files.facepunch.com/rust/item/explosive.timed_512.png",
      "group": "staples",
      "staple": true,
      "sulfur_per_unit": 2200,
      "raw_cost_per_unit": {
        "charcoal": 3000,
        "sulfur": 2200,
        "metal.fragments": 200,
        "lowgradefuel": 60,
        "cloth": 5,
        "techparts": 2
      },
      "batch": 1,
      "recipe_source": "wiki"
    },
    {
      "shortname": "explosive.satchel",
      "name": "Satchel Charge",
      "icon_url": "https://files.facepunch.com/rust/item/explosive.satchel_512.png",
      "group": "staples",
      "staple": true,
      "sulfur_per_unit": 480,
      "raw_cost_per_unit": {
        "charcoal": 720,
        "sulfur": 480,
        "metal.fragments": 80,
        "rope": 1,
        "cloth": 10
      },
      "batch": 1,
      "recipe_source": "wiki"
    },
    "… 18 more"
  ],
  "total": 20,
  "targets": [
    {
      "slug": "stone-wall",
      "name": "Stone Wall",
      "grade": "Stone",
      "health": 500,
      "costs": [
        {
          "explosive": "ammo.rocket.basic",
          "required": 4,
          "damage_per_unit": 137.65,
          "sulfur": 5600
        },
        {
          "explosive": "explosive.timed",
          "required": 2,
          "damage_per_unit": 275.0,
          "sulfur": 4400
        },
        {
          "explosive": "explosive.satchel",
          "required": 10,
          "damage_per_unit": 51.5,
          "sulfur": 4800
        },
        "… 15 more"
      ],
      "cheapest_staple": {
        "explosive": "explosive.timed",
        "required": 2,
        "sulfur": 4400
      }
    },
    {
      "slug": "stone-wall-doorway",
      "name": "Stone Wall Doorway",
      "grade": "Stone",
      "health": 500,
      "costs": [
        {
          "explosive": "ammo.rocket.basic",
          "required": 4,
          "damage_per_unit": 137.65,
          "sulfur": 5600
        },
        {
          "explosive": "explosive.timed",
          "required": 2,
          "damage_per_unit": 275.0,
          "sulfur": 4400
        },
        {
          "explosive": "explosive.satchel",
          "required": 10,
          "damage_per_unit": 51.5,
          "sulfur": 4800
        },
        "… 15 more"
      ],
      "cheapest_staple": {
        "explosive": "explosive.timed",
        "required": 2,
        "sulfur": 4400
      }
    },
    {
      "slug": "stone-wall-window",
      "name": "Stone Wall Window",
      "grade": "Stone",
      "health": 500,
      "costs": [
        {
          "explosive": "ammo.rocket.basic",
          "required": 4,
          "damage_per_unit": 137.65,
          "sulfur": 5600
        },
        {
          "explosive": "explosive.timed",
          "required": 2,
          "damage_per_unit": 275.0,
          "sulfur": 4400
        },
        {
          "explosive": "explosive.satchel",
          "required": 10,
          "damage_per_unit": 51.5,
          "sulfur": 4800
        },
        "… 15 more"
      ],
      "cheapest_staple": {
        "explosive": "explosive.timed",
        "required": 2,
        "sulfur": 4400
      }
    },
    "… 17 more"
  ]
}

GET/calculators/craft/compute

Raw materials to craft a list of items
Resolves every recipe down to raw materials, per unit (items made in batches, like gunpowder, are divided by their batch size), exactly as the craft calculator page does. `raw_materials` is the total, largest first; `items` echoes each input with its direct recipe; `unknown` lists inputs that matched no item.
ParameterInTypeDefaultDescription
items requiredquerystringComma-separated `shortname:quantity` pairs (display names work too; quantity defaults to 1). (min length 1, max length 2000)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/craft/compute?items=rocket:4,explosive.timed:2"

GET/calculators/recycle/compute

What recycling a list of items yields
Expected outputs (quantity x per-unit yield x chance) per input and in total, for the chosen recycler.
ParameterInTypeDefaultDescription
items requiredquerystringComma-separated `shortname:quantity` pairs (display names work too; quantity defaults to 1). (min length 1, max length 2000)
recyclerqueryone of `recycler`, `safe_zone`recycler`recycler` (monument) or `safe_zone` (Outpost/Bandit Camp, lower yields).
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/recycle/compute?items=gears:10,metalpipe:5"

GET/calculators/raid/compute

Explosives needed to destroy a set of building pieces
For every explosive that can destroy all the given pieces: total units and sulfur, cheapest sulfur first; `cheapest` is the best single option. Single-explosive totals - damage adds up across explosives, so a mix can be cheaper (use /calculators/raid's damage_per_unit for that). Doors and deployables aren't covered yet.
ParameterInTypeDefaultDescription
targets requiredquerystringComma-separated `slug:count` building pieces (slugs from /building, or display names). (min length 1, max length 2000)
explosivesquerystringstaples`staples` (rockets, C4, satchels, explosive ammo, beancans), `all`, or a comma list of explosive shortnames.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/raid/compute?targets=stone-wall:2,sheet-metal-wall:1"

GET/calculators/upkeep/compute

Daily upkeep for a base
The upkeep calculator page's math: the block count walks Rust's default upkeep brackets to a blended daily rate, and each resource's daily upkeep is what was spent building times that rate (`per_week` = 7 days).
ParameterInTypeDefaultDescription
blocks requiredqueryintegerNumber of building blocks (foundations, walls, floors... each counts one). (max 100000, min 1)
woodquerynumber0Total wood spent building the base. (min 0)
stonequerynumber0Total stone spent. (min 0)
metal_fragmentsquerynumber0Total metal fragments spent. (min 0)
high_quality_metalquerynumber0Total high quality metal spent. (min 0)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/upkeep/compute?blocks=VALUE"

GET/calculators/base/compute

Build cost, daily upkeep and raid cost of a base
The base cost calculator page's math (https://rust.wiki/calculators/base). `build_cost` is the total resources (a block's upgrade cost at its grade, a door's crafting recipe); `upkeep` is the tool cupboard's daily and weekly cost on the building blocks at Rust's default brackets (the same result as /calculators/upkeep/compute); `raid_path` gives each layer's cheapest standard explosive and the total sulfur to reach the loot. `unknown` lists inputs that matched nothing.
ParameterInTypeDefaultDescription
pieces requiredquerystringComma-separated `slug:count` pieces: building blocks by grade slug from /building (`stone-wall`, `metal-foundation`...) and doors or deployables by slug or item shortname (`door.hinged.metal`). Display names work too. (min length 1, max length 2000)
raid_pathquerystringOptional: the layers a raider breaks through from outside to the loot, in order, same naming as `pieces` (`:n` repeats a layer).
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/base/compute?pieces=stone-foundation:4,stone-wall:7,stone-wall-doorway:1,stone-floor:4,door.hinged.metal:1"

GET/calculators/electricity

Electricity data: every component's power draw, sources and batteries
The data behind https://rust.wiki/calculators/electricity. `consumers` and `logic` list every powered component with `shortname`, `name`, `draw` (power it needs to run) and `note`; logic parts (switches, gates, timers, splitters, branches...) have drawn 0 since April 2024. `sources` are the generators (`max` = best-case output, `sizing` says what that assumes) and `batteries` give `capacity` (rWm) and `max_output` (rW). `mechanics` explains how Rust power flows; `verified` is when the numbers were last checked and `sources_cited` where. Fixed data, re-checked after Facepunch balance patches.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/electricity"

GET/calculators/electricity/compute

Power draw of a set of components, and what runs it
The electricity calculator page's math. `total_draw` is the summed power; `supply` says how many of each power source covers it at its best output (`needed`); `batteries` gives each battery's `runtime_minutes` on a full charge, or `enough_output: false` when the load is above what that battery can deliver.
ParameterInTypeDefaultDescription
components requiredquerystringComma-separated `shortname:quantity` pairs (display names work too; quantity defaults to 1). Components by shortname or name from /calculators/electricity. (min length 1, max length 2000)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/electricity/compute?components=autoturret:4,samsite:1,electric.heater:2"

GET/calculators/smelting

Smelting data: furnace speeds, fuel and slots
The data behind https://rust.wiki/calculators/smelting. Each of `smelters` (furnace, large furnace, electric furnace, small oil refinery) has `input_slots`, `fuel`, `wood_per_second` and `rates` per ore key (`metal_ore`, `sulfur_ore`, `hqm_ore`, `crude_oil`): `seconds_per_unit` for the WHOLE oven (since Rust's October 2022 rework every slot shares the oven's speed, so splitting ore doesn't help), `output` and `yield`. `charcoal_per_wood` is the average charcoal a burned wood leaves; `stack` is each ore's stack size.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/smelting"

GET/calculators/smelting/compute

Smelting time, wood burned and charcoal made
The smelting calculator page's math: `time`/`seconds` to smelt everything, `outputs` (metal fragments, sulfur, HQM, low grade fuel), `wood_burned` and `charcoal_made` (about 0.75 per wood), `power_draw` for the electric furnace, and `fits_one_fill` (false = you'll need to refill it). Ore a smelter can't process is listed in `not_smeltable_here`. Server-default speeds; modded servers differ.
ParameterInTypeDefaultDescription
smelterqueryone of `furnace`, `furnace.large`, `electric.furnace`, `small.oil.refinery`furnace.largeWhich smelter (item shortname).
metal_orequerynumber0Metal ore to smelt. (max 10000000, min 0)
sulfur_orequerynumber0Sulfur ore to smelt. (max 10000000, min 0)
hqm_orequerynumber0High quality metal ore to smelt. (max 10000000, min 0)
crude_oilquerynumber0Crude oil to refine (small oil refinery only). (max 10000000, min 0)
countqueryinteger1How many of that smelter share the ore. (max 100, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/smelting/compute"

GET/calculators/genetics/best

Best crossbreeding layout from a pool of plant clones
The gene calculator's beam search, ported exactly: which clones to plant around the centre, how many of each, and what the centre will most likely become (with every outcome's chance). Uses the game's gene weights (red W/X 1.0, green G/Y/H 0.6).
ParameterInTypeDefaultDescription
clones requiredquerystringComma-separated 6-letter gene strings of the clones you have (G Y H W X). (min length 6, max length 400)
targetquerystringOptional 6-letter target such as GGGGYY; default: as many G and Y as possible.
centrequerystringOptional genes of the plant in the centre slot (default: unknown).
max_neighboursqueryinteger8Most neighbouring plants to use (a planter grid allows 8). (max 8, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/genetics/best?clones=GGYYHX,GYYHWW,YYGGXH"

GET/calculators/genetics/predict

What a plant will grow into from its neighbours
Every possible result for the centre plant with its probability, most likely first.
ParameterInTypeDefaultDescription
neighbours requiredquerystringComma-separated 6-letter gene strings of the neighbouring plants. (min length 6, max length 200)
centrequerystringGenes of the centre plant, if known.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/calculators/genetics/predict?neighbours=GGYYHX,GGYYHX,YYGGXH"

GET/teas

Every tea recipe: berries, Mixing Table slot order, buff and duration
The data behind https://rust.wiki/teas. Each tea has `name`, `shortname`, `tier` (Basic, Advanced, Pure), `ingredients` (`item`, `qty`, `shortname`), `slot_order` / `slots` (the Mixing Table order for Basic teas - order matters: Scrap and Warming Tea use the same berries), `effect`, `duration_minutes` and `note` (Advanced and Pure values predate Rust's 5 Nov 2026 tea nerf). `notes` covers stacking and mixing rules. Sourced from Facepunch's wiki and devblogs (`sources`, `verified`).
ParameterInTypeDefaultDescription
searchquerystringCase-insensitive match on the tea's name or effect.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/teas"

GET/weapons

Every weapon's damage, DPS, fire rate, magazine, reload and range
The data behind https://rust.wiki/weapons: every gun, bow, launcher and main melee weapon with `damage` per bullet/pellet (standard ammo), `pellets` (shotguns), `hit` (damage x pellets), raw `dps` (hit x `rpm` / 60 - ignores reloads, recoil, armour and falloff), `magazine`, `reload_s`, `range_m` (damage falloff start-end) / `range_end`, `ammo`, `workbench` (level to craft; null = loot only, 0 = no bench) and `notes`. Checked against Facepunch's wiki and patch notes (`sources`, `verified`); Facepunch rebalances weapons often.
ParameterInTypeDefaultDescription
categoryqueryone of `Rifle`, `Machine gun`, `SMG`, `Pistol`, `Sniper`, `Shotgun`, `Bow`, `Other`, `Launcher`, `Melee`Restrict to one weapon type.
sortqueryone of `dps`, `hit`, `damage`, `rpm`, `magazine`, `reload_s`, `range_end`, `name`dpsSort key: highest first, except `name` and `reload_s` (lowest first).
searchquerystringCase-insensitive match on the weapon name.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/weapons"

GET/drops

Current Rust Twitch and Kick drops
The live drops campaigns (Twitch and Kick: round, dates, general and streamer drops with the skin each one gives), the most valuable drop skins ever by Steam price, and past rounds - the data behind rust.wiki/drops.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/drops"

GET/updates

Facepunch's Rust updates and devblogs
Every post from rust.facepunch.com/news, newest first. Each carries `slug`, `title`, `summary`, `category` (`devblog`, `news`, `update`, ...), `published_date` (UTC date), `thumbnail_url`, `url` (the official post, or this network's own write-up when `has_blog_post` is true) and `has_blog_post`. Polled every few minutes; the first page is refreshed the moment a new post is found.
ParameterInTypeDefaultDescription
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/updates"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 672,
  "pages": 14,
  "results": [
    {
      "slug": "livestock",
      "title": "Livestock Update",
      "summary": "This month's update brings a major refresh to farming with the introduction of new Livestock animals, critters, and swimmers. Plus, fresh food recipes, the new …",
      "category": "devblog",
      "published_date": "2026-10-01",
      "thumbnail_url": "https://files.facepunch.com/lewis/2026/September/livestock-branding.png",
      "url": "https://rust.facepunch.com/news/livestock",
      "has_blog_post": false
    },
    {
      "slug": "breach-and-clear",
      "title": "Breach and Clear",
      "summary": "This month's update brings you Monument Blockers, Breakable Attack Heli Armour, HQM Nodes, Upkeep Group Scaling, various item buffs, and QoL and balance changes…",
      "category": "devblog",
      "published_date": "2026-09-03",
      "thumbnail_url": "https://files.facepunch.com/lewis/2026/August/Brantbreach-and-clear_branding.png",
      "url": "https://blog.rustprofit.com/rust-update-breach-and-clear-explained",
      "has_blog_post": true
    },
    {
      "slug": "power-trip",
      "title": "Power Trip",
      "summary": "This month's update brings you Player Maintained Monuments in the form of a new Satellite Crash, Dome Pumping, restorable Power Plant, plus more. As well as ple…",
      "category": "devblog",
      "published_date": "2026-08-06",
      "thumbnail_url": "https://files.facepunch.com/lewis/2026/August/power-trip_branding_1.png",
      "url": "https://blog.rustprofit.com/rust-update-power-trip-explained",
      "has_blog_post": true
    },
    "… 47 more"
  ]
}

GET/currency/rates

USD exchange rates the site prices with
The live rates every rust.wiki currency switcher converts USD prices through, for the currencies the switcher offers. Each row carries `code` (ISO 4217), `name`, `symbol`, `flag` (ISO country code), `rate` (units of that currency per 1 USD) and `inverse` (USD per unit). Sourced from open.er-api.com and refreshed about every 15 minutes; USD itself is included at 1.0.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/currency/rates"
Example response
{
  "base": "USD",
  "total": 20,
  "results": [
    {
      "code": "USD",
      "name": "United States Dollar",
      "symbol": "$",
      "flag": "us",
      "rate": 1.0,
      "inverse": 1.0
    },
    {
      "code": "GBP",
      "name": "Pound Sterling",
      "symbol": "£",
      "flag": "gb",
      "rate": 0.7571,
      "inverse": 1.3208
    },
    {
      "code": "EUR",
      "name": "Euro",
      "symbol": "€",
      "flag": "eu",
      "rate": 0.8873,
      "inverse": 1.127
    },
    "… 17 more"
  ]
}

Player stats

category players · 2,000 requests/day

Rust player profiles and in-game statistics, fetched live from the official Steam Web API and cached for ten minutes. In-game stats and achievements are only available when the Steam profile's 'Game details' privacy setting is public (`stats_private` tells you). Bans are reported as Steam reports them; Rust EAC bans appear as game bans.

GET/players/resolve

Resolve a profile URL or vanity name to a SteamID64
Turns any of the accepted identifier forms into a 17-digit SteamID64. Does not fetch the profile.
ParameterInTypeDefaultDescription
q requiredquerystringA steamcommunity.com profile URL, a custom URL name, or a SteamID64. (min length 1, max length 200)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/players/resolve?q=https://steamcommunity.com/id/willjum"
Example response
{
  "query": "https://steamcommunity.com/id/willjum",
  "steamid": "76561199126382502"
}

GET/players/leaderboard

Rust player leaderboard: most kills, best K/D, hours and more
The leaderboard on https://rust.wiki/players: Rust players ranked by their official Steam stats. Boards: `kills`, `kd` (min 1,000 kills), `headshots` (headshots on anything), `hours` (public playtime only), `accuracy` (bullets that hit a player / fired, min 20,000 fired), `scientists`, `animals`, `gathered` (wood + stone + metal ore + sulfur ore), `building` (blocks placed), `rockets`, `fish`, `deaths`. Each result has `rank`, `steamid`, `name`, `avatar`, `country`, `value` / `value_text`, `kills`, `deaths`, `kd`, `hours` and `updated` (the date its stats were last read from Steam). Players are added when looked up on Player Stats or when their inventory is checked on rust.wiki, refreshed about weekly; only public game details are ranked and accounts with VAC or game bans never are. `total` is how many players qualify for the board.
ParameterInTypeDefaultDescription
boardqueryone of `kills`, `kd`, `headshots`, `hours`, `accuracy`, `scientists`, `animals`, `gathered`, `building`, `rockets`, `fish`, `deaths`killsWhich leaderboard.
countryquerystringTwo-letter country code (Steam profile country).
pagequeryinteger1 (max 100, min 1)
per_pagequeryinteger20 (max 100, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/players/leaderboard"

GET/players/{steamid}

Player profile, Rust stats and achievements
Profile summary (name, avatar, country, Steam level, account age), VAC/game bans, Rust playtime, every Rust stat Steam exposes grouped into Combat / Animals & NPCs / How you died / Gathering & loot / Building / Travel / Life on the island / Fishing / Music / Everything else, six headline figures (kills, deaths, K/D, headshots, bullet and arrow accuracy), and all 116 achievements with unlock dates. `stats_private` is true when the profile hides game details, in which case `groups` and `achievements` are empty.
ParameterInTypeDefaultDescription
steamid requiredpathstring17-digit SteamID64. Use /players/resolve for URLs and vanity names.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/players/76561199126382502"
Example response
{
  "steamid": "76561199126382502",
  "found": true,
  "name": "john final boss",
  "avatar": "https://avatars.steamstatic.com/5b67c938a6acd16f7e44a5b39f678d72bb5f6245_full.jpg",
  "profile_url": "https://steamcommunity.com/id/willjum/",
  "public": true,
  "country": null,
  "created": "Jan 2021",
  "level": 17,
  "vac_bans": 0,
  "game_bans": 0,
  "days_since_ban": 0,
  "…": "12 more keys"
}

Inventories

category inventory · 1,000 requests/day

Rust skin inventories of any public Steam account, valued at the canonical wiki price (Steam lowest sell order, falling back to highest buy order): every skin with quantity, price and value, totals, a category breakdown and a one-year value history. A read is served from the stored snapshot for 24 hours; `refresh=true` forces a live Steam read (limited per key per day). Values are USD cents, except `value_history`, which is USD dollars at each day's Steam sale price (so its latest point can sit below `total_value`, which uses current asks). Also the inventory leaderboard and daily snapshots.

GET/inventory/leaderboard

Most valuable inventories ever checked
The rust.wiki/inventory leaderboard: every inventory anyone has looked up, ranked by total value at its last check (values are re-priced each time an inventory is viewed or by the daily warmer for the top 20). Includes the network-wide totals. 20 per page.
ParameterInTypeDefaultDescription
pagequeryinteger11-based page; 20 inventories per page. (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/inventory/leaderboard"
Example response
{
  "page": 1,
  "per_page": 20,
  "total": 58105,
  "total_value_checked": 1938827938,
  "results": [
    {
      "rank": 1,
      "steamid64": "76561198297663226",
      "display_name": "TRADEIT MultiTrade BOT #1",
      "avatar_url": "https://avatars.steamstatic.com/ac9abb720c0244baaefe7422d59d5bb55bebd643_full.jpg",
      "total_value": 15120736,
      "item_count": 109484
    },
    {
      "rank": 2,
      "steamid64": "76561198250325118",
      "display_name": "Rushed",
      "avatar_url": "https://avatars.steamstatic.com/fe33df739913b7c6ec333f53e0919e0d6d04813b_full.jpg",
      "total_value": 12572878,
      "item_count": 40349
    },
    {
      "rank": 3,
      "steamid64": "76561197972605414",
      "display_name": "-RB- Rudeolph",
      "avatar_url": "https://avatars.steamstatic.com/bc5c53e0682b94785ca2d684eb4971243c335206_full.jpg",
      "total_value": 10101181,
      "item_count": 32703
    },
    "… 17 more"
  ]
}

GET/inventory/{steamid}

Value a Steam account's Rust skins
Every Rust skin the account holds with `quantity`, unit `price` and `value` (cents), sorted by value, and the same attributes /skins filters on (`collection`, `creator`, `item_shortname`, `item_name`, `est_supply`, `released_year`, `colors`, and `flags`: limited_time, permanent, marketable, tradable, breakable, glows, commodity, drop), plus `total_value`, `item_count`, `distinct_skins`, a `categories` breakdown with share percentages, the owner's display name and avatar, and `value_history` (the current holdings re-priced at each of the last 365 days, in USD DOLLARS, not cents, at each day's Steam sale price - so its latest point can be below `total_value`, which is at current asking prices). `found` is false for private or empty inventories; `stale` is true when Steam was unreachable and the last stored snapshot was re-priced instead.
ParameterInTypeDefaultDescription
steamid requiredpathstring17-digit SteamID64 (resolve URLs and vanity names with /players/resolve).
refreshquerybooleanFalseForce a live Steam read instead of the stored snapshot (max 100 per key per day).
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/inventory/76561198869732295"
Example response
{
  "found": true,
  "steamid": "76561198869732295",
  "display_name": "Mark",
  "avatar_url": "https://avatars.steamstatic.com/9fa5f109a7ae3611b68f8ecfb382962a3f90c10e_full.jpg",
  "profile_url": "https://steamcommunity.com/profiles/76561198869732295",
  "steam_inventory_url": "https://steamcommunity.com/profiles/76561198869732295/inventory/#252490_2",
  "total_value": 4330856,
  "item_count": 28386,
  "distinct_skins": 1357,
  "unpriced_skins": 0,
  "stale": false,
  "stale_as_of": null,
  "…": "4 more keys"
}

GET/inventory/{steamid}/history

Inventory value over time
The inventory's value over time: the account's current holdings re-priced at each day's Steam SALE price (median sale), `values` in USD cents, oldest first - the line on the rust.wiki inventory chart. It shows how the market moved, not when items were bought. `headline_total_value` is the total at current Steam ASKING prices (lowest sell order) as of `headline_checked_at`, the number shown at the top of the inventory page; for thinly traded skins it can sit well above the latest point here. Only inventories that have been looked up have a series. Read from stored data: never a live Steam call.
ParameterInTypeDefaultDescription
steamid requiredpathstring17-digit SteamID64.
rangequerystring1y7d, 30d, 90d, 1y, 2y, 3y, 4y, 5y, all, or custom (with start_date/end_date).
start_datequerystringYYYY-MM-DD, with range=custom.
end_datequerystringYYYY-MM-DD, with range=custom.
intervalquerystringautodaily, weekly, monthly, or auto (daily up to 400 points, then weekly, then monthly past 400 weeks).
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/inventory/76561198869732295/history"

GET/inventory/{steamid}/valuation

What an inventory is realistically worth
The inventory valued three ways, plus what selling would actually raise. `at_asks` is the headline number (each skin at its cheapest Steam listing, falling back to the best buy order); `at_bids` is every skin at its best buy order; `at_recent_sales` is every skin at its latest Steam median sale price (the inventory chart's basis). `sell_now` walks each skin's real buy-order ladder for the quantity held: `units_sellable` of `units_held` could be sold instantly for `gross` (what buyers pay) and `net_after_fees` (after Steam's 15%). `biggest_ask_gaps` lists the skins whose cheapest listing sits furthest above their recent sales - thin order books where the headline is least reliable. All cents. Uses the stored holdings (the last lookup) and current order books: never a live Steam call; look the inventory up first if `found` is false.
ParameterInTypeDefaultDescription
steamid requiredpathstring17-digit SteamID64.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/inventory/76561198869732295/valuation"

GET/inventory/{steamid}/snapshots

Dates with a saved daily snapshot
Every date (newest first, up to 400) on which a daily snapshot of this inventory was stored, plus `totals`: each of those days' total value in cents (that day's holdings at that day's prices). Snapshots are written when an inventory is looked up; fetch one with /inventory/{steamid}/snapshots/{date}.
ParameterInTypeDefaultDescription
steamid requiredpathstring17-digit SteamID64.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/inventory/76561198869732295/snapshots"
Example response
{
  "steamid": "76561198869732295",
  "count": 21,
  "dates": [
    "2026-10-03",
    "2026-10-02",
    "2026-10-01",
    "… 18 more"
  ]
}

GET/inventory/{steamid}/snapshots/{date}

One saved daily snapshot
The inventory exactly as it was priced on that day: items with quantity and that day's price, total value and item count. Useful for 'what was this worth last month' comparisons.
ParameterInTypeDefaultDescription
steamid requiredpathstring17-digit SteamID64.
date requiredpathstringISO date (YYYY-MM-DD) from /inventory/{steamid}/snapshots.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/inventory/76561198869732295/snapshots/2026-09-30"
Example response
{
  "steamid": "76561198869732295",
  "snapshot_date": "2026-09-30",
  "total_value": 4481943,
  "item_count": 31037,
  "items": [
    {
      "market_hash_name": "Tempered Mp5",
      "quantity": 1,
      "price": 52283,
      "itemdefid": 20083
    },
    {
      "market_hash_name": "Christmas Lights",
      "quantity": 1,
      "price": 14639,
      "itemdefid": 10150
    },
    {
      "market_hash_name": "Glowing Skull",
      "quantity": 1,
      "price": 19642,
      "itemdefid": 20009
    },
    "… 1324 more"
  ]
}

Casino games

category games · 10,000 requests/day

The rustprofit.com Rust-skin casino as data: every finished round of the public games (roulette, coinflip, jackpot, crash) with pot, result, participants as the site shows them and the provably-fair seeds the site reveals for finished rounds; the per-game seed pages; a pure verifier that recomputes any outcome from its seeds; and the fairness scheme itself. All amounts are integer USD cents (skin values at deposit time). The `/games/me/...` endpoints return the API key owner's OWN rustprofit.com account history, stats and client seed - never anyone else's.

GET/games

The seven casino games
Every game on rustprofit.com with a one-line description, whether its finished rounds are public here (`public_rounds`: roulette, coinflip, jackpot and crash have GET /games/{game}/rounds; mines, tower and upgrade are single-player and only appear in the key owner's own GET /games/me/history), its house edge as a fraction, and `live_wagered_cents` - the value currently sitting in that game's open round(s), from the same cache the site's header pot display reads (null if the cache is cold). All money is integer USD cents.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games"
Example response
{
  "games": [
    {
      "id": "roulette",
      "name": "Roulette",
      "players": "multiplayer",
      "public_rounds": true,
      "description": "A shared wheel every 45 seconds: bet skins on red or black (pays 2x) or green (pays 14x); one of 15 numbers is drawn from the day's server seed, the public seed…",
      "house_edge": 0.0667,
      "live_wagered_cents": null,
      "rounds_endpoint": "/games/roulette/rounds",
      "seeds_endpoint": "/games/roulette/seeds",
      "site_url": "https://rustprofit.com/roulette"
    },
    {
      "id": "coinflip",
      "name": "Coinflip",
      "players": "multiplayer",
      "public_rounds": true,
      "description": "One player creates a red-or-black game with their skins, another joins with a matching value (or the creator calls the house bot); a ticket drawn from the serve…",
      "house_edge": 0.05,
      "live_wagered_cents": null,
      "live_open_games": null,
      "rounds_endpoint": "/games/coinflip/rounds",
      "seeds_endpoint": "/games/coinflip/seeds",
      "site_url": "https://rustprofit.com/coinflip"
    },
    {
      "id": "jackpot",
      "name": "Jackpot",
      "players": "multiplayer",
      "public_rounds": true,
      "description": "Everyone deposits into one pot; each player holds a ticket range proportional to their share and a ticket drawn from the server seed and an EOS block hash picks…",
      "house_edge": 0.05,
      "live_wagered_cents": null,
      "rounds_endpoint": "/games/jackpot/rounds",
      "seeds_endpoint": "/games/jackpot/seeds",
      "site_url": "https://rustprofit.com/jackpot"
    },
    "… 4 more"
  ],
  "currency": "USD cents",
  "fairness": "https://rustprofit.com/fairness",
  "fairness_endpoint": "/games/fairness"
}

GET/games/fairness

How the provably-fair system works, as data
The commit-then-reveal scheme behind every game, written out so a program (or a reader) can re-implement the verification: per game the inputs, the exact HMAC-SHA256 message, the modulo, how the roll maps to an outcome (roulette colours, coinflip/jackpot ticket ranges, mines and tower Fisher-Yates position draws, the crash-point and upgrade formulas), which id goes into the message (the round `id` for roulette/coinflip/ jackpot, the shared `game_id` for mines/tower/crash/upgrade), how EOS block hashes and the player's client seed keep the house from choosing the message, when each server seed is revealed, and the house edge. Static - mirrors app code, and GET /games/verify applies it.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/fairness"
Example response
{
  "site": "https://rustprofit.com/fairness",
  "verify_endpoint": "/games/verify",
  "summary": "Commit-then-reveal. Before a round can be influenced the site publishes the SHA-256 hash of a secret server seed (shown on the round as `server_seed_hash`). The…",
  "encoding": "Seeds and messages are UTF-8 strings; the HMAC digest is interpreted as a big-endian hexadecimal integer before the modulo; sha256 is of the server seed string …",
  "games": {
    "roulette": {
      "inputs": [
        "server_seed",
        "public_seed",
        "round"
      ],
      "message": "{public_seed}-{round}",
      "roll": "int(HMAC-SHA256(key=server_seed, message=...) read as a hexadecimal integer, 16) % 15",
      "colour": {
        "red": [
          0,
          2,
          4,
          "… 4 more"
        ],
        "black": [
          1,
          3,
          5,
          "… 4 more"
        ],
        "green": [
          7
        ]
      },
      "payout_multipliers": {
        "red": 2,
        "black": 2,
        "green": 14
      },
      "round": "the roulette round id (`id` of /games/roulette/rounds; `round` in the round's `fair` block)",
      "seed_rotation": "One server seed + public seed pair serves a whole UTC day of rounds. While it is active the site shows only sha256(server_seed) and the public seed; at 00:00 UT…",
      "house_edge": 0.0667,
      "house_edge_note": "1/15 of the round's total is taken as tax.",
      "seeds_endpoint": "/games/roulette/seeds"
    },
    "coinflip": {
      "inputs": [
        "server_seed",
        "eos_block_hash",
        "round"
      ],
      "message": "{eos_block_hash}-{round}",
      "ticket": "int(HMAC-SHA256(key=server_seed, message=...) read as a hexadecimal integer, 16) % 100000000",
      "round": "the coinflip round id (`id` of /games/coinflip/rounds)",
      "eos_block": "When betting closes the site reads the current EOS head block N and commits to block N+4 (`eos_block`). Once that block is irreversible its block id becomes `eo…",
      "outcome": "Each side owns an inclusive ticket range of the 100,000,000 tickets, proportional to its share of the pot (`ticket_range` on the round). The side whose range co…",
      "house_edge": 0.05,
      "seeds_endpoint": "/games/coinflip/seeds"
    },
    "jackpot": {
      "inputs": [
        "server_seed",
        "eos_block_hash",
        "round"
      ],
      "message": "{eos_block_hash}-{round}",
      "ticket": "int(HMAC-SHA256(key=server_seed, message=...) read as a hexadecimal integer, 16) % 100000000",
      "round": "the jackpot round id (`id` of /games/jackpot/rounds)",
      "eos_block": "Same scheme as coinflip: head block N at countdown end, commit to N+4, roll on its irreversible block id.",
      "outcome": "Participants hold consecutive inclusive ticket ranges in deposit order (`ticket_range`); the participant whose range contains the ticket wins the pot.",
      "house_edge": 0.05,
      "seeds_endpoint": "/games/jackpot/seeds"
    },
    "mines": {
      "inputs": [
        "server_seed",
        "client_seed",
        "game_id",
        "… 1 more"
      ],
      "message": "{client_seed}-{game_id}",
      "roll": "int(HMAC-SHA256(key=server_seed, message=...) read as a hexadecimal integer, 16) % 100000000",
      "game_id": "the shared game id shown as `game_id` (NOT the per-game round id `id`); the one the site's own fairness page lists for the round",
      "mine_positions": "Seeded Fisher-Yates shuffle of positions = [0..24]: for i from 24 down to 1, r = int(HMAC-SHA256(server_seed, '{client_seed}-{game_id}-{i}'), 16) % (i + 1); swa…",
      "client_seed": "The player's own editable seed (User.client_seed, see /games/me/client-seed), fixed when the round is created, so the house cannot pick the message.",
      "multiplier": "product over revealed safe tiles of (25 - i) / (25 - mine_count - i), times (1 - 0.07)",
      "house_edge": 0.07,
      "seeds_endpoint": "/games/mines/seeds"
    },
    "tower": {
      "inputs": [
        "server_seed",
        "client_seed",
        "game_id",
        "… 2 more"
      ],
      "message": "{client_seed}-{game_id}-row{row}-{i}",
      "bad_positions": "For each of the 8 rows (row = 0..7) an independent seeded Fisher-Yates shuffle of cols = [0..cols_per_row-1]: for i from cols_per_row-1 down to 1, r = int(HMAC-…",
      "bad_count": "1 + (tier * (cols_per_row - 2)) // 2 with tier easy=0, medium=1, hard=2",
      "difficulties": [
        "easy",
        "medium",
        "hard"
      ],
      "multiplier": "(cols_per_row / (cols_per_row - bad_count)) ** rows_climbed, times (1 - 0.07)",
      "house_edge": 0.07,
      "seeds_endpoint": "/games/tower/seeds"
    },
    "crash": {
      "inputs": [
        "server_seed",
        "client_seed",
        "game_id"
      ],
      "message": "{client_seed}-{game_id}",
      "roll": "int(HMAC-SHA256(key=server_seed, message=...) read as a hexadecimal integer, 16) % 100000000",
      "crash_point": "max(1.0, floor(((1 - 0.07) / (1 - roll / 100000000)) * 100) / 100)",
      "curve": "the live multiplier is exp(0.045 * seconds since the round started) until it reaches crash_point",
      "game_id": "the shared game id shown as `game_id` on the round (NOT the round id `id`)",
      "house_edge": 0.07,
      "seeds_endpoint": "/games/crash/seeds"
    },
    "upgrade": {
      "inputs": [
        "server_seed",
        "client_seed",
        "game_id",
        "… 2 more"
      ],
      "message": "{client_seed}-{game_id}",
      "roll": "int(HMAC-SHA256(key=server_seed, message=...) read as a hexadecimal integer, 16) % 100000000",
      "win": "((roll - int(offset)) % 100000000) < int(chance * 100000000) - the win zone is a `chance`-wide arc of the 100,000,000-slot wheel starting at `offset` (0 for 'un…",
      "multiplier": "(1 - 0.1) / chance",
      "game_id": "the shared game id shown as `game_id` on the round (NOT the round id `id`)",
      "house_edge": 0.1,
      "seeds_endpoint": "/games/upgrade/seeds"
    }
  }
}

GET/games/verify

Recompute a round's outcome from its revealed seeds
A pure function - no database, nothing stored. Applies the exact formulas in GET /games/fairness and returns `server_seed_hash` (sha256 of the seed, to match against the hash the site published before the round) plus the recomputed outcome: roulette `roll` and `colour`; coinflip/jackpot `ticket` (compare with the round's `ticket_range`s); mines `roll` and `mine_positions`; tower `bad_positions` per row; crash `roll` and `crash_point`; upgrade `roll` (and `win` when `chance` is given). Missing per-game inputs return 422.
ParameterInTypeDefaultDescription
game requiredquerystringWhich game's formula to apply.
server_seed requiredquerystringThe revealed server seed (`server_seed` on a finished round or seeds page). (min length 1, max length 512)
public_seedquerystringRoulette only: the day's public seed shown next to the hash (five random numbers 1-39 run together).
eos_block_hashquerystringCoinflip/jackpot only: the irreversible EOS block id (`eos_block_hash` on the round).
roundqueryintegerRoulette/coinflip/jackpot only: the round id (`id` of the round, `round` in its `fair` block).
client_seedquerystringMines/tower/crash/upgrade only: the player's client seed shown on the round.
game_idqueryintegerMines/tower/crash/upgrade only: the SHARED game id (`game_id` on the round / history row), not the round id.
mine_countqueryintegerMines only: how many mines the round was played with.
cols_per_rowqueryintegerTower only: tiles per row (2-4).
difficultyquerystringTower only: easy, medium or hard (derives bad_count); or pass bad_count directly.
bad_countqueryintegerTower only: bad tiles per row, if you have it instead of difficulty.
rowsqueryinteger8Tower only: rows to draw (the site plays 8). (max 64, min 1)
chancequerynumberUpgrade only (optional): the win chance as a fraction, e.g. 0.45, to also evaluate the win.
offsetquerynumberUpgrade only (optional): the win-zone offset committed at start (0 for 'under').
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/verify?game=mines&server_seed=3f1c9a8e5b7d2c4a6e8f0b1d3c5a7e9f"
Example response
{
  "game": "mines",
  "server_seed_hash": "fcdd8c4e91034ee234766d4ce5f96c304e9159d5741980d049f6767bdbf1f9f6",
  "inputs": {
    "client_seed": "a1b2c3d4e5f60718",
    "game_id": 1234567,
    "message": "a1b2c3d4e5f60718-1234567"
  },
  "result": {
    "roll": 51918515,
    "mine_positions": [
      13,
      17,
      18
    ],
    "grid_size": 25
  }
}

GET/games/me/history

Your own game history
The API key owner's own finished rounds across the seven games, one row per round played (the same source as the site's History page), newest first by default: `type` (the game), `game_id` (the shared id used in the fairness message for mines/tower/crash/upgrade), `round_id` (the per-game round id - the `id` of GET /games/{game}/rounds/{round_id} for roulette/coinflip/jackpot/crash and of the seeds pages), `amount_cents` (bet), `payout_cents`, `win`, `completed_at` and `details` (per-game facts such as multiplier, mines count, crash point, revealed server seed, the skins involved as `{name, classid, price}`). Trade-offer, bot and asset identifiers are removed. Only the key owner's own account is ever returned.
ParameterInTypeDefaultDescription
gamequerystringOnly this game; omit for all seven.
winquerybooleantrue = only wins, false = only losses, omit for both.
sortquerystringnewestnewest (default), amount_desc or amount_asc (by bet amount).
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/me/history"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 0,
  "pages": 1,
  "results": []
}

GET/games/me/stats

Your own lifetime casino stats
The API key owner's lifetime totals as the site's profile shows them: `total_wagered`, `total_won`, `total_lost`, `profit`, `played`, `wins`, `losses`, `win_loss_ratio`, biggest win/loss with the game and round id, and the same six counters per game (`roulette`, `coinflip`, `jackpot`, `mines`, `crash`, `upgrade`, `tower`). Amounts are USD cents. 404 until the account has played a round.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/me/stats"
Example response
{
  "total_wagered": 0,
  "total_won": 0,
  "total_lost": 0,
  "profit": 0,
  "played": 0,
  "wins": 0,
  "losses": 0,
  "win_loss_ratio": 0.0,
  "biggest_win": 0,
  "biggest_win_game": null,
  "biggest_win_id": null,
  "biggest_loss": 0,
  "…": "9 more keys"
}

GET/games/me/client-seed

Your current provably-fair client seed
The client seed the key owner's next mines/tower/crash/upgrade round will be created with (it is fixed on the round at creation, so later changes never affect a round in play). Read-only here - change it on the site's fairness page. `null` means the account has not played a seed-pair game yet; the site generates one the first time.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/me/client-seed"
Example response
{
  "client_seed": "free",
  "used_by": [
    "mines",
    "tower",
    "crash",
    "… 1 more"
  ],
  "message_format": "{client_seed}-{game_id}",
  "change_at": "https://rustprofit.com/fairness"
}

GET/games/{game}/rounds

Finished rounds of a public game, newest first
Completed rounds only, newest first. Every row has `id`, `started_at`/`ended_at`, `result`, the pot and tax in cents, the participants as the site's own round page shows them (public `user_id`, `username`, `avatar`, `badge`, `level`, bet in cents - never SteamIDs) and a `fair` block: `server_seed_hash`, `server_seed` (null with `seed_revealed: false` for roulette rounds under the still-active daily seed; `seed_id` is that day's row on /games/roulette/seeds), the public input (roulette `public_seed`, coinflip/jackpot `eos_block` + `eos_block_hash`, crash `client_seed`), the id the HMAC uses and the exact `message`. Per game: roulette `result.colour`/`number` and `bets_cents` per colour; coinflip `creator`/`opponent` with `side`, `ticket_range`, `win_chance_pct`, `is_house_bot`; jackpot `participants` with `ticket_range`/`win_chance_pct` and `result.winner`; crash `result.crash_point`/ `cashed_out_at`/`win` with the single `player`. Item lists are on GET /games/{game}/rounds/{round_id}.
ParameterInTypeDefaultDescription
game requiredpathstringroulette, coinflip, jackpot or crash. mines/tower/upgrade return 404 (single-player; see /games/me/history).
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/roulette/rounds"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 200503,
  "pages": 4011,
  "results": [
    {
      "id": 200567,
      "game": "roulette",
      "started_at": "2026-10-03T00:16:31.737811",
      "ended_at": "2026-10-03T00:17:16.737811",
      "result": {
        "colour": "black",
        "number": 3,
        "multiplier": 2
      },
      "pot_cents": 0,
      "bets_cents": {
        "red": 0,
        "green": 0,
        "black": 0
      },
      "tax_cents": 0,
      "participant_count": 0,
      "participants": [],
      "fair": {
        "server_seed_hash": "0e16fc7431a4facd5d1f64f29bdd82ce637ccbecb757f17d0c6b00ea2ecdd920",
        "server_seed": null,
        "seed_revealed": false,
        "public_seed": "2024111822",
        "round": 200567,
        "message": "2024111822-200567",
        "seed_id": 110,
        "seed_note": "The day's server seed is revealed when the seed rotates at 00:00 UTC; until then only its hash and the public seed are public."
      }
    },
    {
      "id": 200566,
      "game": "roulette",
      "started_at": "2026-10-03T00:15:46.630125",
      "ended_at": "2026-10-03T00:16:31.630125",
      "result": {
        "colour": "black",
        "number": 5,
        "multiplier": 2
      },
      "pot_cents": 9836,
      "bets_cents": {
        "red": 0,
        "green": 0,
        "black": 9836
      },
      "tax_cents": 655,
      "participant_count": 1,
      "participants": [
        {
          "user_id": 30,
          "username": "gorloc destroyeer",
          "avatar": "https://avatars.fastly.steamstatic.com/b741881a35e2d598cf0f5e27c605d0dc43ccd267_full.jpg",
          "avatar_static": "https://avatars.fastly.steamstatic.com/b741881a35e2d598cf0f5e27c605d0dc43ccd267_full.jpg",
          "badge": "level",
          "level": null,
          "bet_cents": 9836,
          "won_cents": 19672,
          "colours": [
            "black"
          ]
        }
      ],
      "fair": {
        "server_seed_hash": "0e16fc7431a4facd5d1f64f29bdd82ce637ccbecb757f17d0c6b00ea2ecdd920",
        "server_seed": null,
        "seed_revealed": false,
        "public_seed": "2024111822",
        "round": 200566,
        "message": "2024111822-200566",
        "seed_id": 110,
        "seed_note": "The day's server seed is revealed when the seed rotates at 00:00 UTC; until then only its hash and the public seed are public."
      }
    },
    {
      "id": 200565,
      "game": "roulette",
      "started_at": "2026-10-03T00:15:01.565115",
      "ended_at": "2026-10-03T00:15:46.565115",
      "result": {
        "colour": "red",
        "number": 4,
        "multiplier": 2
      },
      "pot_cents": 0,
      "bets_cents": {
        "red": 0,
        "green": 0,
        "black": 0
      },
      "tax_cents": 0,
      "participant_count": 0,
      "participants": [],
      "fair": {
        "server_seed_hash": "0e16fc7431a4facd5d1f64f29bdd82ce637ccbecb757f17d0c6b00ea2ecdd920",
        "server_seed": null,
        "seed_revealed": false,
        "public_seed": "2024111822",
        "round": 200565,
        "message": "2024111822-200565",
        "seed_id": 110,
        "seed_note": "The day's server seed is revealed when the seed rotates at 00:00 UTC; until then only its hash and the public seed are public."
      }
    },
    "… 47 more"
  ]
}

GET/games/{game}/rounds/{round_id}

One finished round with every bet
The same shape as the rounds list plus the full bet detail: roulette participants carry `bets` (per colour, with each skin as `{name, classid, price, amount}`) and `payout_items`; coinflip `creator`/ `opponent` carry `items`; jackpot `participants` carry `items`; crash has `bet_items` and `payout_items`. 404 for an unknown id or a round that has not finished (nothing about a round in progress is served).
ParameterInTypeDefaultDescription
game requiredpathstringroulette, coinflip, jackpot or crash.
round_id requiredpathintegerThe round id (`id` in the rounds list; also `round_id` in /games/me/history). (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/roulette/rounds/196855"
Example response
{
  "id": 196855,
  "game": "roulette",
  "started_at": "2026-10-01T01:45:10.333847",
  "ended_at": "2026-10-01T01:45:55.333847",
  "result": {
    "colour": "black",
    "number": 8,
    "multiplier": 2
  },
  "pot_cents": 4543,
  "bets_cents": {
    "red": 2567,
    "green": 0,
    "black": 1976
  },
  "tax_cents": 302,
  "participant_count": 2,
  "participants": [
    {
      "user_id": 72,
      "username": "P3TRYk",
      "avatar": "https://www.hrad.cz/file/edee/2023/03/prezident.jpg",
      "avatar_static": "https://www.hrad.cz/file/edee/2023/03/prezident.jpg",
      "badge": "level",
      "level": null,
      "bet_cents": 2567,
      "won_cents": 0,
      "colours": [
        "red"
      ],
      "bets": [
        {
          "colour": "red",
          "bet_cents": 2567,
          "items": [
            {
              "name": "Forest Raiders Hoodie",
              "classid": "4532464797",
              "price": 1976,
              "amount": 1
            },
            {
              "name": "Island Assault Team Chestplate",
              "classid": "7173169503",
              "price": 591,
              "amount": 1
            }
          ]
        }
      ],
      "payout_items": []
    },
    {
      "user_id": 35,
      "username": "federal agent",
      "avatar": "https://shared.fastly.steamstatic.com/community_assets/images/items/3186040/90ce847fef147481b22ec1176254838143dbf383.gif",
      "avatar_static": "https://static.rustprofit.com/static/assets/avatars/90ce847fef147481b22ec1176254838143dbf383.webp",
      "badge": "level",
      "level": null,
      "bet_cents": 1976,
      "won_cents": 3952,
      "colours": [
        "black"
      ],
      "bets": [
        {
          "colour": "black",
          "bet_cents": 1976,
          "items": [
            {
              "name": "Forest Raiders Hoodie",
              "classid": "4532464797",
              "price": 1976,
              "amount": 1
            }
          ]
        }
      ],
      "payout_items": [
        {
          "name": "Forest Raiders Hoodie",
          "classid": "4532464797",
          "price": 1976,
          "amount": 1
        },
        {
          "name": "Forest Raiders Metal Chest Plate",
          "classid": "4518251267",
          "price": 1893,
          "amount": 1
        },
        {
          "name": null,
          "classid": null,
          "price": 83,
          "amount": 1,
          "is_balance": true
        }
      ]
    }
  ],
  "fair": {
    "server_seed_hash": "a655dc366c8c14ff82268400a1d064204d88ba5d0af30e74765b8891c2ef095d",
    "server_seed": "169b4017c1e88d45e70bbdd186599221",
    "seed_revealed": true,
    "public_seed": "211712212",
    "round": 196855,
    "message": "211712212-196855",
    "seed_id": 108,
    "seed_note": null
  }
}

GET/games/{game}/seeds

Revealed seeds of finished rounds, as the site's fairness page lists them
Exactly what each game's own public seeds page returns, 15 per page, newest first - nothing added. Field names are the site's: `server_random` is the revealed server seed, `server_random_hashed` its SHA-256 commitment. Roulette lists the daily seed pairs (`public_seed`, `start_roll`/`end_roll` = the round ids the seed covered, `active`; the active day's `server_random` is withheld). Coinflip/jackpot rows carry `target_eos_block_hash` and the drawn `ticket`; mines/tower/crash/upgrade rows carry `client_seed` and the round's parameters (`mine_count`; `cols_per_row`/`difficulty`; `crash_point`/`cashed_out_at_multiplier`; `chance`/`multiplier`/`direction`/`offset`/`roll`) with `win`. `id_` is the round id. Feed a row into GET /games/verify (for the seed-pair games use the round's `game_id` from /games/me/history or /games/crash/rounds, not `id_`).
ParameterInTypeDefaultDescription
game requiredpathstringAny of the seven games.
pagequeryinteger11-based page; 15 rows per page (the site's own page size). (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/games/mines/seeds"
Example response
{
  "page": 1,
  "per_page": 15,
  "total": 28659,
  "pages": 1911,
  "results": [
    {
      "id_": 28659,
      "server_random": "46699632bbc562646dbc3b57475d2743",
      "server_random_hashed": "e0d673790b571ac2d1230ea3863ed303907b943d0635bfc4b86a304e2bd88f9f",
      "client_seed": "c96fb7251ea7595c",
      "mine_count": 9,
      "win": false,
      "completed_date": "2026-10-03 00:08:08.393161"
    },
    {
      "id_": 28658,
      "server_random": "5211a129e93e53b0a9ce33fda994e456",
      "server_random_hashed": "425c931192ede6a9427c0d2aa38827b6e83791ebafda361fc2657b9827afb52c",
      "client_seed": "9ac221529c9e7dcd",
      "mine_count": 4,
      "win": true,
      "completed_date": "2026-10-03 00:07:50.367018"
    },
    {
      "id_": 28657,
      "server_random": "8b0f3b279e416edb89518bf75fbc4cff",
      "server_random_hashed": "9d8bc20b96978bb78085bf48e2badb4e5e08bcefc8c962b41983243e24cc0d91",
      "client_seed": "e8ad0c3030b83a8f",
      "mine_count": 1,
      "win": true,
      "completed_date": "2026-10-03 00:07:25.340975"
    },
    "… 12 more"
  ]
}

Rust servers

category servers · 10,000 requests/day

The Rust server directory from servers.rustprofit.com: ~26,000 community and official servers discovered through Valve's master server list and re-queried over Steam's A2S protocol every poll cycle (roughly hourly at the current table size), with per-server player-count history, detected wipes (seed/size changes), community votes and ratings, map previews with monuments and biomes, and site-wide totals. `is_online` is true while a server keeps answering its polls, `last_seen_at` is the last answer, `last_polled_at` the last attempt, and `last_seen_at: null` means Steam lists the server but it has never answered us (no history, wipes or map). `gather_rate` and `is_official` are parsed from the server name by community convention, not reported by the game. Owner contact details, claim identities and voter identities are never exposed. Site-wide totals refresh with every poll cycle; most other responses are cached for five minutes.

GET/servers

Browse, filter and search the server list
One page of servers with the same filters, ordering and five-minute cache as the servers.rustprofit.com list and its hub pages (/country/de, /vanilla, /solo, /gather/2x ...). Each result is the full public server record: identity and connect details (`ip`, `game_port`, `query_port`, `connect` as a `steam://` URI), `map`, `world_seed`, `world_size`, `country`/`country_name`, live `current_players`/`max_players`/`queued_players`, the `kind` (official/modded/vanilla) and `is_*` flags, `password_protected`, `vac_enabled`, `gather_rate` with its `gather_bucket`, `group_limit` with its `group` label, `tags`, owner-supplied `description` (first 500 characters), `banner_url`, `website_url`, `discord_url`, `first_seen_at`/`last_seen_at`/`last_polled_at`, the aggregates `votes`, `rating` (1-5 average, null when unrated) and `last_wipe_at`, and the server's page `url` plus embeddable `widget_url`/`badge_url`. Ties in every sort are broken by `id` so pages never overlap.
ParameterInTypeDefaultDescription
searchquerystringCase-insensitive substring match on the server name.
countryquerystringISO 3166-1 alpha-2 country the server is hosted in (GeoIP of its address); `/servers/countries` lists the values in use.
kindqueryone of `vanilla`, `modded`, `official``vanilla` = not modded; `modded` = reports a modded flag over A2S; `official` = a Facepunch-run public server (by name convention).
groupqueryone of `solo`, `duo`, `trio`Team-size cap: `solo` (1), `duo` (2) or `trio` (3). Only servers whose cap is known match.
gatherqueryone of `2x`, `3x`, `5x`, `10x`Gather-rate bucket parsed from the server name: `2x` (2-2.99), `3x` (3-4.99), `5x` (5-9.99) or `10x` (10 and above). Servers with no `Nx` in their name never match.
monumentquerystringOnly servers whose current map (when a preview has been generated) contains this monument type, exactly as `/servers/monument-types` lists it.
biomequeryone of `snow`, `desert`, `forest`, `tundra`, `jungle`Only servers whose generated map preview is mostly this biome (its percentage is the highest of the five).
min_playersqueryintegerOnly servers with at least this many players online right now.
min_ratingquerynumberOnly servers whose average community rating (1-5) is at least this.
onlinequerybooleanTrue`true` (default) = only servers that were online at their last poll; `false` = only servers currently marked offline.
sortqueryone of `players`, `votes`, `rating`, `wiped`, `name`players`players` = most players online first (default); `votes` = most community votes; `rating` = highest average rating; `wiped` = most recently wiped; `name` = alphabetical.
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers"
Example response
{
  "page": 1,
  "per_page": 50,
  "total": 0,
  "pages": 1,
  "results": []
}

GET/servers/top

Most populated servers right now
The online servers with the most players right now - the same query behind the rust.wiki Discord bot's `/servers` command - as a compact list: `id`, `name`, `players`, `max_players`, `country` and the server's page `url`. Use `/servers?sort=players` for the full records. Cached for 60 seconds.
ParameterInTypeDefaultDescription
countryquerystringRestrict to one ISO 3166-1 alpha-2 country.
limitqueryinteger10How many servers to return (1-50). (max 50, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/top"
Example response
{
  "country": "US",
  "total": 10,
  "results": [
    {
      "id": 8346,
      "name": "Atlas - US 2X Monthly | Vanilla+ | No BP Wipes",
      "players": 884,
      "max_players": 950,
      "country": "US",
      "url": "https://servers.rustprofit.com/server/8346"
    },
    {
      "id": 8973,
      "name": "Rustoria.co - US Long Premium",
      "players": 632,
      "max_players": 650,
      "country": "US",
      "url": "https://servers.rustprofit.com/server/8973"
    },
    {
      "id": 8261,
      "name": "Atlas - US 2X Monthly Solo/Duo/Trio/Quad | Vanilla+ | No BP Wip",
      "players": 547,
      "max_players": 575,
      "country": "US",
      "url": "https://servers.rustprofit.com/server/8261"
    },
    "… 7 more"
  ]
}

GET/servers/leaderboard

Community leaderboard by votes or rating
Online servers ranked by Steam-authenticated community votes (one per user per server per day) or by average 1-5 rating - the ranking behind servers.rustprofit.com/best-rust-servers and /leaderboard?by=rating. Only servers with at least one vote (or rating) appear. Each entry is the full server record plus `rank`, `votes`, `rating` and `last_wipe_at`. Cached for five minutes.
ParameterInTypeDefaultDescription
byqueryone of `votes`, `rating`votes`votes` = most community votes (the site's Best Rust Servers page); `rating` = highest average rating, votes as tiebreaker.
limitqueryinteger50How many servers to return (1-100); the site shows 50. (max 100, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/leaderboard"
Example response
{
  "by": "votes",
  "total": 10,
  "results": [
    {
      "rank": 1,
      "id": 149,
      "name": "EU | Helli's Aimtrain | Facechecks/1v1/Speargun/Hellis",
      "…": "37 more keys"
    },
    {
      "rank": 2,
      "id": 348,
      "name": "UKN.GG - EU Training Grounds - Main",
      "…": "37 more keys"
    },
    {
      "rank": 3,
      "id": 354,
      "name": "Rustafied.com - EU Trio - Monday",
      "…": "37 more keys"
    },
    "… 7 more"
  ]
}

GET/servers/wipes

Recently wiped servers
Wipes detected across every online server in the window, newest first - the feed behind servers.rustprofit.com/wipes. A wipe is detected when a server's `world_seed` or `world_size` changes between two polls, or when the last-wipe time it advertises moves past our previous poll (for servers with A2S rules disabled). Each entry has `detected_at`, the old and new seed/size, and the full server record. Expect thousands of entries in the 24 hours after Rust's monthly forced wipe (first Thursday). Cached for five minutes.
ParameterInTypeDefaultDescription
hoursqueryinteger24Look-back window in hours (1-168). The site's /wipes page shows 24. (max 168, min 1)
pagequeryinteger11-based page number. (min 1)
per_pagequeryinteger50Results per page (max 200). (max 200, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/wipes"
Example response
{
  "hours": 24,
  "page": 1,
  "per_page": 50,
  "total": 2418,
  "pages": 49,
  "results": [
    {
      "detected_at": "2026-10-03T00:15:34.605360",
      "previous_seed": "1787961720",
      "new_seed": "1790985721",
      "previous_size": 6000,
      "new_size": 6000,
      "server": {
        "id": 1445888,
        "name": "nomarust LL | JP | Vanilla | Monthly",
        "ip": "160.16.60.191",
        "…": "33 more keys"
      }
    },
    {
      "detected_at": "2026-10-03T00:15:34.605360",
      "previous_seed": "834583388",
      "new_seed": "834583388",
      "previous_size": 3000,
      "new_size": 3000,
      "server": {
        "id": 3157,
        "name": "[UA/EU]AFTER WORK MAIN X2|Vanilla|",
        "ip": "116.202.39.45",
        "…": "33 more keys"
      }
    },
    {
      "detected_at": "2026-10-02T23:59:44.265482",
      "previous_seed": "1337",
      "new_seed": "1337",
      "previous_size": 3700,
      "new_size": 4500,
      "server": {
        "id": 1450507,
        "name": "My Untitled Rust Server",
        "ip": "77.42.34.243",
        "…": "33 more keys"
      }
    },
    "… 47 more"
  ]
}

GET/servers/stats

Site-wide totals and data freshness
The headline numbers from the servers.rustprofit.com homepage: `online_servers`, `total_players` and `queued_players` summed across every online server, `tracked_servers` (every row ever discovered, offline included), `steam_global_players` (Rust's concurrent player count from Steam, null if Steam did not answer), `next_force_wipe_at` (the first Thursday of the month at 2 PM US Eastern: 18:00 UTC during US daylight saving time, 19:00 UTC otherwise), the poller's configuration (`poll_interval_seconds` between cycles, `offline_after_seconds` before an unanswering server is marked offline, `snapshot_retention_days` of per-server history kept) and `workers` - the live heartbeat status of the discovery, polling and map-generation jobs, so you can tell how fresh the data is.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/stats"
Example response
{
  "online_servers": 25746,
  "total_players": 102923,
  "queued_players": 206,
  "tracked_servers": 35512,
  "steam_global_players": 99993,
  "next_force_wipe_at": "2026-11-05T19:00:00",
  "poll_interval_seconds": 300,
  "offline_after_seconds": 1800,
  "snapshot_retention_days": 7,
  "workers": [
    {
      "name": "rustservers_discovery",
      "label": "Rust Server Discovery",
      "status": "ok",
      "last_seen": "2026-10-02T23:25:53.056636",
      "seconds_ago": 3085,
      "expected_interval": 7200
    },
    {
      "name": "rustservers_poller",
      "label": "Rust Server Poller",
      "status": "stale",
      "last_seen": "2026-10-02T22:34:32.195587",
      "seconds_ago": 6166,
      "expected_interval": 4800
    },
    {
      "name": "rustservers_mapgen",
      "label": "Rust Map Generator",
      "status": "ok",
      "last_seen": "2026-10-03T00:10:24.632751",
      "seconds_ago": 414,
      "expected_interval": 3600
    }
  ],
  "generated_at": "2026-10-03T00:17:18.255460"
}

GET/servers/stats/history

Site-wide player and server counts over time
The homepage chart's data: parallel arrays `labels` (UTC ISO-8601 bucket start), `players` (players online across all tracked servers), `queued` (players in queues) and `servers` (servers online). Each hourly point is the reading from the poll cycle that landed last in that hour; daily points average the hours. Cached for 15 minutes.
ParameterInTypeDefaultDescription
rangequeryone of `24h`, `7d`, `31d`, `1y`24h`24h` and `7d` return one point per hour; `31d` and `1y` return one averaged point per day.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/stats/history"
Example response
{
  "range": "7d",
  "labels": [
    "2026-09-26T01:00:00",
    "2026-09-26T02:00:00",
    "2026-09-26T03:00:00",
    "… 117 more"
  ],
  "players": [
    69486,
    63264,
    59729,
    "… 117 more"
  ],
  "queued": [
    105,
    65,
    32,
    "… 117 more"
  ],
  "servers": [
    27115,
    27113,
    27086,
    "… 117 more"
  ]
}

GET/servers/countries

Countries with online servers, with counts
Every country (ISO 3166-1 alpha-2) that currently hosts at least one online server - the values accepted by the `country` filter of `/servers` and `/servers/top` - with `name`, the number of online `servers` and their summed `players`, most servers first, and the country hub page `url`. Cached for five minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/countries"
Example response
{
  "total": 120,
  "results": [
    {
      "country": "RU",
      "name": "Russia",
      "servers": 5318,
      "players": 17710,
      "url": "https://servers.rustprofit.com/country/ru"
    },
    {
      "country": "US",
      "name": "United States",
      "servers": 5094,
      "players": 27126,
      "url": "https://servers.rustprofit.com/country/us"
    },
    {
      "country": "DE",
      "name": "Germany",
      "servers": 2991,
      "players": 5769,
      "url": "https://servers.rustprofit.com/country/de"
    },
    "… 117 more"
  ]
}

GET/servers/monument-types

Monument types present on generated maps
The distinct monument type names found across every generated map preview (RustMaps data, e.g. `Launch Site`, `Oil Rig`), alphabetical - the values accepted by the `monument` filter of `/servers`. Grows on its own as more maps are generated. Cached for 15 minutes.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/monument-types"
Example response
{
  "total": 101,
  "results": [
    "3 Wall Rock",
    "Airfield",
    "Anvil Rock",
    "… 98 more"
  ]
}

GET/servers/{server_id}

One server in full
Everything the server's page shows except the live player names: the full public record (see `/servers`) read fresh, plus `votes`, `rating` (1-5 average) and `rating_count`, the last ten detected `wipes` (newest first, with the seed/size before and after), `last_wipe_at`, `avg_wipe_cycle_hours` across those wipes, `next_wipe_estimate_at` (last wipe + average cycle; a guess, not a schedule), `next_force_wipe_at` (Rust's monthly forced wipe) and `map_preview` - null until a RustMaps render exists for the server's seed/size, otherwise `image_url`, `thumbnail_url`, `total_monuments`, `monuments` (`{type, x, y}`), `monument_types`, `land_percentage` and the five `biome_*` percentages. Offline servers still resolve; unknown ids are 404. Player-count history is at `/servers/{id}/history`. Aggregates are cached for five minutes.
ParameterInTypeDefaultDescription
server_id requiredpathintegerThe server's numeric id (from `/servers`, or the number in its servers.rustprofit.com/server/{id} URL). (min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/1"
Example response
{
  "id": 1,
  "name": "My Rust Server",
  "ip": "85.190.100.68",
  "game_port": 28015,
  "query_port": 28017,
  "connect": "steam://connect/85.190.100.68:28015",
  "map": "Procedural Map",
  "world_seed": "1234567",
  "world_size": 3000,
  "country": "DE",
  "country_name": "Germany",
  "current_players": 0,
  "…": "33 more keys"
}

GET/servers/{server_id}/history

Player-count history for one server
The per-poll `player_count`/`queued_count` readings behind the server page's 24-hour chart, oldest first, as `points` of `{t, players, queued}`. One reading lands per poll cycle (roughly hourly); when the window holds more than 500 readings they are averaged into equal time buckets (`resolution_seconds`, null when the points are raw) so a response never exceeds 500 points. Also `peak_players`, `avg_players` and `point_count`. A server that has never answered a poll has an empty series. Cached for five minutes.
ParameterInTypeDefaultDescription
server_id requiredpathintegerThe server's numeric id. (min 1)
daysqueryinteger1How many days back to return (1-30). Snapshots are pruned nightly to the configured retention window (7 days by default - see `snapshot_retention_days` on `/servers/stats`), so longer ranges come back only as far as the table holds. (max 30, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/1/history"
Example response
{
  "server_id": 1,
  "days": 7,
  "resolution_seconds": null,
  "point_count": 0,
  "sample_count": 0,
  "peak_players": null,
  "avg_players": null,
  "points": []
}

GET/servers/{server_id}/votes

Community vote counts per day for one server
How many Steam-authenticated votes the server received on each UTC day (`daily` as `{date, votes}`, oldest first, days with no votes included as zero), plus `votes_in_range` and the all-time `total_votes`. Votes are one per user per server per day; who cast them is never exposed. Ratings are a separate 1-5 score, see `rating`/`rating_count` on `/servers/{id}`. Cached for five minutes.
ParameterInTypeDefaultDescription
server_id requiredpathintegerThe server's numeric id. (min 1)
daysqueryinteger30How many UTC days back to return (1-365), today included. (max 365, min 1)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/servers/1/votes"
Example response
{
  "server_id": 1,
  "days": 30,
  "total_votes": 0,
  "votes_in_range": 0,
  "daily": [
    {
      "date": "2026-09-04",
      "votes": 0
    },
    {
      "date": "2026-09-05",
      "votes": 0
    },
    {
      "date": "2026-09-06",
      "votes": 0
    },
    "… 27 more"
  ]
}

Network status

category status · 10,000 requests/day

Live health for the whole RustProfit network - rustprofit.com, rust.wiki, servers.rustprofit.com, rust.wiki/inventory (formerly inventory.rustprofit.com) and blog.rustprofit.com - plus the freshness of every background worker that keeps their data current (price scrapers, marketplace pollers, store/workshop/news pollers, game loops, trade bots). Use /status/data to see WHEN each dataset last changed and how often it refreshes, and only re-fetch the heavy endpoints after that timestamp moves: it saves your quota and our servers. Site probes are cached for 60 seconds; worker heartbeats and dataset timestamps are read live.

GET/status/data

When each dataset last changed and how often it refreshes
The quota-saver: for every dataset the API serves, `updated_at` (the newest timestamp actually in the table, UTC) and `refresh_seconds` (how often it can change), with the endpoints it feeds. Poll this cheap endpoint and only re-fetch a heavy payload such as /market/prices or /servers when its dataset's `updated_at` has moved; cache reference data (items, monuments, ...) locally since it only changes with Facepunch's monthly patch. Timestamps are read live from the database and cached for 60 seconds.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/status/data"
Example response
{
  "checked_at": "2026-10-03T00:17:18Z",
  "advice": "Re-fetch a dataset's endpoints only after its updated_at moves; most change far less often than you'd poll. GET /me is free and shows your remaining quota.",
  "datasets": [
    {
      "key": "steam_prices",
      "name": "Steam order books / canonical prices",
      "updated_at": "2026-10-03T00:16:32Z",
      "seconds_since_update": 46,
      "refresh_seconds": 720,
      "note": "Each skin's Steam order book is re-read about every 12 minutes; /market/prices is regenerated from them at most every 5 minutes.",
      "endpoints": [
        "/market/prices",
        "/market/prices/{itemdefid}",
        "/skins/{itemdefid}/orderbook",
        "… 5 more"
      ]
    },
    {
      "key": "steam_sale_history",
      "name": "Steam sale history",
      "updated_at": "2026-10-03T00:16:33Z",
      "seconds_since_update": 45,
      "refresh_seconds": 21600,
      "note": "Steam's own sale-history series is scraped on a rolling ~6h cycle; a skin's series changes at most a few times a day.",
      "endpoints": [
        "/skins/{itemdefid}/history",
        "/market/index",
        "/market/compare",
        "… 2 more"
      ]
    },
    {
      "key": "marketplaces",
      "name": "Third-party marketplace prices",
      "updated_at": "2026-10-03T00:12:11Z",
      "seconds_since_update": 307,
      "refresh_seconds": 300,
      "note": "Each marketplace is polled every ~5 minutes; a row's fetched_at moves only when its price changes.",
      "endpoints": [
        "/market/marketplaces",
        "/market/deals",
        "/skins/{itemdefid}"
      ]
    },
    "… 8 more"
  ]
}

GET/status

Network status: every site and its workers at a glance
One call for the whole network: each site's HTTPS probe (`ok`, HTTP status, latency, cached 60s) and a count of its background workers by health, plus an overall `all_ok`. Use /status/workers for per-worker detail.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/status"
Example response
{
  "checked_at": "2026-10-03T00:17:18Z",
  "all_ok": false,
  "sites": [
    {
      "key": "casino",
      "name": "RustProfit",
      "url": "https://rustprofit.com",
      "ok": true,
      "http_status": 200,
      "latency_ms": 101,
      "workers": {
        "ok": 12,
        "stale": 0,
        "unknown": 0,
        "total": 12
      }
    },
    {
      "key": "wiki",
      "name": "rust.wiki",
      "url": "https://rust.wiki",
      "ok": true,
      "http_status": 200,
      "latency_ms": 92,
      "workers": {
        "ok": 19,
        "stale": 0,
        "unknown": 0,
        "total": 19
      }
    },
    {
      "key": "servers",
      "name": "Rust Servers",
      "url": "https://servers.rustprofit.com",
      "ok": true,
      "http_status": 200,
      "latency_ms": 103,
      "workers": {
        "ok": 3,
        "stale": 1,
        "unknown": 0,
        "total": 4
      }
    },
    "… 2 more"
  ]
}

GET/status/sites

HTTPS reachability of each site
Probes rustprofit.com, rust.wiki, servers.rustprofit.com, rust.wiki/inventory and blog.rustprofit.com from the web tier and reports `ok`, `http_status` and `latency_ms` for each. Results are shared across callers and refreshed at most once a minute.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/status/sites"
Example response
{
  "checked_at": "2026-10-03T00:17:18Z",
  "sites": [
    {
      "key": "casino",
      "name": "RustProfit",
      "url": "https://rustprofit.com",
      "ok": true,
      "http_status": 200,
      "latency_ms": 101
    },
    {
      "key": "wiki",
      "name": "rust.wiki",
      "url": "https://rust.wiki",
      "ok": true,
      "http_status": 200,
      "latency_ms": 92
    },
    {
      "key": "servers",
      "name": "Rust Servers",
      "url": "https://servers.rustprofit.com",
      "ok": true,
      "http_status": 200,
      "latency_ms": 103
    },
    "… 2 more"
  ]
}

GET/status/workers

Background worker heartbeats, grouped by site
Every public background worker with `status` (ok / stale / unknown), `last_seen` (UTC), `seconds_ago` and its `expected_interval` - the cadence past which it counts as stale. Grouped by the site whose data it keeps fresh: game loops, trade bots and payouts for the casino; price, marketplace, store, workshop and news pollers for the wiki; discovery and polling for the server directory; the inventory backfill and leaderboard warmer.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/status/workers"
Example response
{
  "checked_at": "2026-10-03T00:17:19Z",
  "summary": {
    "ok": 36,
    "stale": 1,
    "unknown": 0,
    "total": 37
  },
  "sites": {
    "casino": {
      "summary": {
        "ok": 12,
        "stale": 0,
        "unknown": 0,
        "total": 12
      },
      "workers": [
        {
          "name": "roulette",
          "label": "Roulette Roller",
          "status": "ok",
          "last_seen": "2026-10-03T00:17:16.854510",
          "seconds_ago": 2,
          "expected_interval": 90
        },
        {
          "name": "coinflip",
          "label": "Coinflip Roller",
          "status": "ok",
          "last_seen": "2026-10-03T00:17:08.428193",
          "seconds_ago": 11,
          "expected_interval": 90
        },
        {
          "name": "jackpot",
          "label": "Jackpot Roller",
          "status": "ok",
          "last_seen": "2026-10-03T00:17:13.584273",
          "seconds_ago": 5,
          "expected_interval": 90
        },
        "… 9 more"
      ]
    },
    "wiki": {
      "summary": {
        "ok": 19,
        "stale": 0,
        "unknown": 0,
        "total": 19
      },
      "workers": [
        {
          "name": "steam_price_history",
          "label": "Steam Orderbook / Price History Poller",
          "status": "ok",
          "last_seen": "2026-10-03T00:16:33.015393",
          "seconds_ago": 46,
          "expected_interval": 1500
        },
        {
          "name": "rust_store_poller",
          "label": "Rust Item Store Poller",
          "status": "ok",
          "last_seen": "2026-10-03T00:17:06.090509",
          "seconds_ago": 13,
          "expected_interval": 1200
        },
        {
          "name": "wiki_workshop_poller",
          "label": "Wiki Workshop Poller",
          "status": "ok",
          "last_seen": "2026-10-03T00:17:03.959017",
          "seconds_ago": 15,
          "expected_interval": 300
        },
        "… 16 more"
      ]
    },
    "servers": {
      "summary": {
        "ok": 3,
        "stale": 1,
        "unknown": 0,
        "total": 4
      },
      "workers": [
        {
          "name": "rustservers_discovery",
          "label": "Rust Server Discovery",
          "status": "ok",
          "last_seen": "2026-10-02T23:25:53.056636",
          "seconds_ago": 3086,
          "expected_interval": 7200
        },
        {
          "name": "rustservers_poller",
          "label": "Rust Server Poller",
          "status": "stale",
          "last_seen": "2026-10-02T22:34:32.195587",
          "seconds_ago": 6167,
          "expected_interval": 4800
        },
        {
          "name": "rustservers_mapgen",
          "label": "Rust Map Generator",
          "status": "ok",
          "last_seen": "2026-10-03T00:10:24.632751",
          "seconds_ago": 414,
          "expected_interval": 3600
        },
        "… 1 more"
      ]
    },
    "inventory": {
      "summary": {
        "ok": 2,
        "stale": 0,
        "unknown": 0,
        "total": 2
      },
      "workers": [
        {
          "name": "inventory_holdings_backfill",
          "label": "Inventory Holdings Backfill",
          "status": "ok",
          "last_seen": "2026-10-03T00:13:14.474158",
          "seconds_ago": 245,
          "expected_interval": 720
        },
        {
          "name": "inventory_leaderboard_warmer",
          "label": "Inventory Leaderboard Cache Warmer",
          "status": "ok",
          "last_seen": "2026-10-03T00:09:28.233263",
          "seconds_ago": 471,
          "expected_interval": 4500
        }
      ]
    },
    "blog": {
      "summary": {
        "ok": 0,
        "stale": 0,
        "unknown": 0,
        "total": 0
      },
      "workers": []
    }
  }
}

Paper funds

category funds · 5,000 requests/day

rust.wiki paper-trading funds: every signed-in user can run a public $1,000 fund of skin picks whose trades are an append-only ledger priced at the canonical wiki price at execution. Read-only here; values in USD cents.

GET/funds/leaderboard

Public funds ranked by total value
All public funds that have traded at least once, ranked by current total value (cash + holdings at live wiki prices). `starting_cash` is the $1,000 every fund begins with. Cached for 120 seconds.
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/funds/leaderboard"
Example response
{
  "starting_cash": 100000,
  "funds": [],
  "rules": {
    "starting_cash": 100000,
    "sell_fee_bps": 500
  }
}

GET/funds/{steamid}

One public fund with positions and full trade ledger
Cash, holdings value, total value, P&L, every open position with average cost, the complete trade history (newest first) and the daily value series. Private funds return 403.
ParameterInTypeDefaultDescription
steamid requiredpathstringSteamID64 of the fund owner. (pattern ^\d{17}$)
curl -H "X-API-Key: rw_live_YOUR_KEY" "https://rust.wiki/api/v1/funds/76561198869732295"

AI agent'ları ve LLM araçları için

MCP sunucusu: https://rust.wiki/mcp bu API'nin çekirdeğini Model Context Protocol araçları olarak sunar; böylece Claude, ChatGPT, Cursor ve diğer asistanlar skinleri, fiyatları, eşyaları, item store'u, referans verilerini ve sunucuları doğrudan sorgulayabilir. Anahtar gerekmez (anahtarsız istemciler bir kotayı paylaşır; kendi kotan için X-API-Key gönder). Her istemci için kurulum.

Bu referans, bu sayfayla aynı kaynaktan üretilen makine dostu biçimlerde de yayınlanır; bu yüzden asla birbirinden kopmazlar:

  • /llms.txt: llms.txt kuralına göre sitenin ve API'nin kısa bir dizini; /llms-full.txt ise dizin artı tüm referansın tek dosyada hali.
  • /docs.md: her endpoint için örnek yanıtlar dahil, bu referansın tamamı Markdown olarak.
  • /openapi.json: parametre şemaları, örnek yanıtlar ve x-quotas altındaki kota tablosuyla OpenAPI 3.1. Herhangi bir OpenAPI uyumlu aracı veya agent framework'ünü buna yönlendir.

JSON API'yi doğrudan çağırmak hâlâ bir API anahtarı gerektirir: bir insan /api-keys adresinde bir tane oluşturur ve agent'a verir. Her anahtarın kategori başına günlük kullanımı orada gösterilir. MCP sunucusu anahtarsız yoldur.

Şartlar

API, onu kullanan ürün rust.wiki'ye görünür bir bağlantı verdiği sürece kişisel ve ticari kullanım için ücretsizdir. Ham veriyi kendi veri setin olarak yeniden satma, verinin değiştiğinden daha sık sorgulama ve oyuncu istatistikleri endpoint'lerine Steam'in senden beklediği gizlilik saygısıyla yaklaş. Veriler olduğu gibi, çalışma süresi garantisi olmadan sunulur; hizmeti kötüye kullanan anahtarlar iptal edilir. Facepunch Studios veya Valve ile bağlantılı değildir.

rust.wiki API'si, Rust oyun verileri için ücretsiz bir JSON API'sidir: tarifleri ve geri dönüşüm verimleriyle her eşya, canlı Steam fiyatları, satış geçmişi ve emir defterleriyle her skin, üçüncü taraf pazar yeri fiyatları ve fırsatlar, piyasa endeksi ve piyasa değeri, güncel ve geçmiş item store, Steam Workshop, monumentler, loot tabloları, sunucu komutları, CCTV kodları, yapı ve dünya verileri, tech tree, hesaplayıcılar, Facepunch güncellemeleri, Rust sunucu dizini, resmi Steam Web API'den Rust oyuncu istatistikleri, Steam envanter değerlemeleri, provably-fair verili rustprofit.com casino turları, PNG grafikler, ağ durumu ve paper trading fon lider tablosu. Bir anahtar oluşturmak için Steam ile giriş yap; hiçbir şeye mal olmaz ve her kategorinin cömert bir günlük kotası vardır.

Sık Sorulan Sorular

https://rust.wiki/api/v1 - bu sayfadaki her endpoint ona göre görelidir ve PNG görüntüsü döndüren grafik endpoint'leri hariç tüm yanıtlar JSON'dur.

Yalnızca kategori başına cömert günlük kotalar (örneğin skinler için günde 25,000 istek) ve anahtar başına dakikada 300 istek ani yük sınırı. GET /me anahtarının bugün ne kadar kullandığını ve ne kadar hakkı kaldığını gösterir ve asla sayılmaz.

Evet - X-API-Key header'lı cross-origin GET isteklerine izin verilir, yani statik bir web sayfası onu doğrudan çağırabilir. Herkese açık JavaScript'e gömülen bir anahtarın kaynağı görüntüleyen herkes tarafından görülebileceğini unutma.

Steam emir defterleri sürekli sorgulanır (skin başına yaklaşık her 12 dakikada bir), üçüncü taraf pazar yerleri birkaç dakikada bir; toplu fiyat endpoint'leri ise en fazla her 5 dakikada bir yeniden oluşturulur. Bundan daha sık sorgulamak yalnızca kotayı harcar.

Evet. Steam ile giriş yaptıktan sonra rust.wiki/api-keys adresinde bir anahtar oluştur. Her anahtar her kategoride günde binlerce istek alır ve tek şart, yaptığın şeyden rust.wiki'ye görünür bir bağlantı vermendir.

Steam Community Market emir defterleri (en düşük satış emri, yoksa en yüksek alış emrine geri döner) sürekli sorgulanır, ayrıca onlarca üçüncü taraf pazar yeri birkaç dakikada bir sorgulanır. Tüm fiyatlar USD sentidir.

Evet - /api/v1/players/{steamid}, profilin oyun ayrıntıları herkese açık olduğu sürece profili, banları, oynama süresini, Steam'in sunduğu her Rust istatistiğini ve tüm başarımları döndürür.

Evet: rust.wiki/mcp, AI asistanlarının doğrudan ekleyebileceği, anahtar gerektirmeyen bir MCP sunucusudur. Agent framework'leri için /openapi.json örnek yanıtlı OpenAPI 3.1, /docs.md Markdown olarak tam referans ve /llms.txt bir llms.txt dizinidir. Hepsi bu sayfayla aynı tanımlardan üretilir.

Retry-After header'lı HTTP 429 alırsın; günlük kota 00:00 UTC'de sıfırlanır. Her yanıt ayrıca X-RateLimit-Remaining taşır, böylece hızını ayarlayabilirsin. Daha fazlasına ihtiyacın olursa destek sayfasında sor.