Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.cs2cap.com/llms.txt

Use this file to discover all available pages before exploring further.

The Market Analytics API gives you programmatic access to CS2 market intelligence: scan for arbitrage across 40+ buy and sell providers, view category-level market cap indexes, compute technical indicators from composite OHLCV candles, and retrieve per-item analytics snapshots with full provider depth data.

GET /market/arbitrage

Scans buy-side and sell-side providers for cross-market arbitrage opportunities and ranks results by estimated net profit after fees. Tier: Quant only · Rate limit: 300 req/min
curl -sS \
  -H "Authorization: Bearer $CS2C_API_KEY" \
  "$CS2C_API_BASE/market/arbitrage?min_spread_pct=5&providers_buy=buff163&providers_sell=csfloat&limit=25"
min_spread_pct
number
default:"1.0"
Minimum gross spread percentage to include. Results below this threshold are excluded.
providers_buy
string[]
Buy-side provider keys. Repeat the parameter to pass more than one. Valid values: avanmarket, buff163, buffmarket, c5, csdeals, csfloat, csgo500, csgoempire, csmoney_m, csmoney_t, cstrade, dmarket, dupefi, ecosteam, gameboost, haloskins, itradegg, lisskins, lootfarm, mannco, marketcsgo, pirateswap, rapidskins, shadowpay, skinbaron, skinflow, skinland, skinout, skinplace, skinport, skinscom, skinsmonkey, skinswap, skinvault, steam, swapgg, tradeit, waxpeer, whitemarket, youpin.
providers_sell
string[]
Sell-side provider keys. Repeat the parameter to pass more than one. Only providers that support buy orders are valid here: buff163, buffmarket, c5, csfloat, dmarket, dupefi, ecosteam, marketcsgo, steam, waxpeer, whitemarket, youpin.
limit
integer
Number of results per page.
offset
integer
default:"0"
Zero-based pagination offset.
Response example
{
  "meta": { "..." : "..." },
  "data": {
    "items": [
      {
        "item_id": 10108,
        "market_hash_name": "★ M9 Bayonet | Fade (Factory New)",
        "phase": null,
        "buy_provider": "skinscom",
        "sell_provider": "steam",
        "buy_price_usd": "1119.70",
        "sell_price_usd": "1427.03",
        "gross_spread_pct": 27.45,
        "estimated_fees_usd": "185.51",
        "net_profit_usd": "121.82",
        "last_updated": "2026-03-21T06:30:32.692372Z"
      },
      {
        "item_id": 9505,
        "market_hash_name": "★ StatTrak™ Flip Knife | Bright Water (Well-Worn)",
        "phase": null,
        "buy_provider": "csfloat",
        "sell_provider": "buff163",
        "buy_price_usd": "150.19",
        "sell_price_usd": "217.30",
        "gross_spread_pct": 44.68,
        "estimated_fees_usd": "5.43",
        "net_profit_usd": "61.68",
        "last_updated": "2026-03-21T06:30:32.692372Z"
      }
    ]
  },
  "pagination": { "..." : "..." }
}
data.items[].item_id
integer
Catalog item ID.
data.items[].market_hash_name
string
Full item name as it appears in the Steam catalog.
data.items[].phase
string | null
Doppler/Gamma phase, or null for non-phase items.
data.items[].buy_provider
string
Provider key where you purchase the item.
data.items[].sell_provider
string
Provider key where you sell the item.
data.items[].buy_price_usd
string
Decimal string purchase price in USD.
data.items[].sell_price_usd
string
Decimal string sell price in USD.
data.items[].gross_spread_pct
number
Gross spread as a percentage before fees.
data.items[].estimated_fees_usd
string
Decimal string estimated transaction fees in USD.
data.items[].net_profit_usd
string
Decimal string net profit after fees in USD.
data.items[].last_updated
string
ISO 8601 timestamp of the most recent price data used.
buy_price_usd, sell_price_usd, estimated_fees_usd, and net_profit_usd are decimal strings in USD — not minor units (cents).
pagination.total is always -1 on this endpoint. Use offset pagination only — passing a cursor returns HTTP 400.

GET /market/indexes

Aggregates the cached 24-hour market snapshot into category-level market cap indexes grouped by item_type or weapon_type. Tier: Quant only · Rate limit: 300 req/min
curl -sS \
  -H "Authorization: Bearer $CS2C_API_KEY" \
  "$CS2C_API_BASE/market/indexes?group_by=weapon_type"
group_by
string
default:"item_type"
Catalog dimension to group by. One of: item_type, weapon_type.
Response example
{
  "meta": {
    "generated_at": "2026-01-20T12:06:10Z",
    "data_source": "cache",
    "freshness_sec": 18,
    "window": {
      "timeframe": "24h"
    },
    "group_by": "item_type"
  },
  "data": {
    "total_marketcap_usd": "576594.00",
    "groups": [
      {
        "group": "weapon",
        "marketcap_usd": "576594.00",
        "item_count": 2,
        "included_count": 2,
        "excluded_count": 0
      },
      {
        "group": "wearable",
        "marketcap_usd": "0.00",
        "item_count": 1,
        "included_count": 0,
        "excluded_count": 1
      }
    ]
  }
}
data.total_marketcap_usd
string
Decimal string total market cap across all included items, in USD.
data.groups
array
Category breakdown sorted by marketcap_usd descending.
meta.window.timeframe is always 24h. Groups remain in the response even when every item in that group was excluded from the total. Items without a grouping value are omitted entirely.

GET /market/indicators

Computes technical indicators — including RSI, MACD, Bollinger Bands, ATR, VWAP, and OBV — from composite OHLCV candles across all providers for a single item. Tier: Quant only · Rate limit: 300 req/min
curl -sS \
  -H "Authorization: Bearer $CS2C_API_KEY" \
  "$CS2C_API_BASE/market/indicators?item_id=4994&interval=1d&currency=USD"
item_id
integer
Catalog item ID. Takes precedence over market_hash_name when both are provided.
market_hash_name
string
Exact item name as it appears in the Steam catalog. Use item_id instead when you have it.
phase
string
Doppler/Gamma phase filter. One of: Phase 1, Phase 2, Phase 3, Phase 4, Ruby, Sapphire, Black Pearl, Emerald.
interval
string
default:"1d"
Candle interval for indicator computation. One of: 1h, 1d.
currency
string
default:"USD"
Output currency for price-level indicators (ISO 4217).
Response example
{
  "meta": { "..." : "..." },
  "data": {
    "item_id": 156,
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "phase": null,
    "provider": "All Providers",
    "interval": "1d",
    "close_price_usd": "25.50",
    "momentum": {
      "rsi_14": 62.5,
      "macd_line": 0.45,
      "macd_signal": 0.32,
      "macd_histogram": 0.13,
      "sma_20": 25.30,
      "sma_50": 24.80,
      "sma_200": 23.50,
      "ema_12": 25.45,
      "ema_26": 25.00,
      "bb_upper": 27.10,
      "bb_middle": 25.30,
      "bb_lower": 23.50
    },
    "volatility": {
      "atr_14": 1.25,
      "historical_volatility_20": 0.35,
      "kc_upper": 27.95,
      "kc_middle": 25.45,
      "kc_lower": 22.95
    },
    "volume": {
      "vwap": 25.15,
      "obv": 12500,
      "volume_sma_20": 520
    },
    "signals": {
      "rsi": "neutral",
      "macd": "bullish",
      "trend": "bullish",
      "bollinger": "neutral",
      "volatility": "normal",
      "composite_score": 0.55
    },
    "coverage": {
      "candle_count": 250,
      "first_bucket": "2025-06-26T00:00:00Z",
      "last_bucket": "2026-02-20T00:00:00Z",
      "sufficient_for": ["rsi_14", "macd", "sma_20", "sma_50", "sma_200"],
      "insufficient_for": []
    }
  }
}
data.momentum
object
Momentum indicators.
data.volatility
object
Volatility indicators.
data.volume
object
Volume indicators.
data.signals
object
Human-readable signal summaries derived from the indicators above.
data.coverage
object
Candle history metadata for the item.
This endpoint does not accept a provider filter — indicators reflect the best available price across all providers. close_price_usd is always in USD. Price-level indicators (SMA, EMA, Bollinger Bands) are returned in your requested currency.

GET /market/items

Returns a market-wide summary snapshot with one row per catalog item. Liquidity is always scored against the 24-hour horizon. The snapshot is refreshed periodically — requests return the most recently available data. Tier: Pro, Quant · Rate limit: Pro 100 req/min · Quant 300 req/min
curl -sS \
  -H "Authorization: Bearer $CS2C_API_KEY" \
  "$CS2C_API_BASE/market/items"
This endpoint takes no query parameters.
Response example
{
  "meta": { "..." : "..." },
  "data": {
    "items": [
      {
        "item_id": 156,
        "market_hash_name": "AK-47 | Redline (Field-Tested)",
        "phase": null,
        "summary": {
          "provider_count": 2,
          "best_ask_usd": "24.90",
          "best_bid_usd": "24.90",
          "avg_spread_pct": 2.78,
          "liquidity": 78,
          "supply": 9060,
          "rank": 1292,
          "marketcap": "225594.00",
          "price_rate_24h": 3.75,
          "price_diff_24h": "0.90",
          "price_rate_7d": 8.26,
          "price_diff_7d": "1.90",
          "price_rate_30d": -2.73,
          "price_diff_30d": "-0.70",
          "sales_1d": 107,
          "total_volume_24h": 107,
          "sales_7d": 687,
          "sales_30d": 2096,
          "steam_sales_7d": 34,
          "steam_sales_30d": 587,
          "listing_score": 12,
          "gap_score": 7,
          "volume_score": 24,
          "stability_score": 15,
          "external_score": 14,
          "liquidity_last_updated": "2026-03-21T06:48:43.193895Z"
        }
      }
    ]
  }
}
data.items[].summary.best_ask_usd
string
Decimal string best ask price in USD across providers with active listings.
data.items[].summary.best_bid_usd
string
Decimal string highest bid in USD across all providers, including providers without a current ask.
data.items[].summary.marketcap
string
best_ask_usd × supply, expressed in USD major units.
data.items[].summary.supply
integer
Best available estimate of the number of items in circulation.
data.items[].summary.price_diff_24h
string
Price change over the last 24 hours, in USD.
data.items[].summary.price_rate_24h
number
Same 24h price change expressed as a percentage.
data.items[].summary.sales_1d
integer
Estimated number of trades in the last 24 hours. A useful approximation, not a guaranteed exact count.
data.items[].summary.liquidity
integer
Composite liquidity score (0–100) scored against the 24h horizon.
data.items[].summary.listing_score
integer | null
Listing-depth component score (0–15). null when liquidity data is unavailable.
data.items[].summary.gap_score
integer | null
Bid/ask gap component score (0–10). null when liquidity data is unavailable.
data.items[].summary.volume_score
integer | null
24h churn component score (0–35). null when liquidity data is unavailable.
data.items[].summary.stability_score
integer | null
Price stability component score (0–20): measures how consistently the item is observed and how stable its price has been over the last 24 hours. null when insufficient history.
data.items[].summary.external_score
integer | null
External confirmation component score (0–20): based on Steam and Buff163 market activity. null when external data is unavailable.
best_ask_usd and all price_* values are decimal strings in USD — not minor units. Rows are sorted by rank, then by item ID.

GET /market/items/:item_id

Returns per-item market analytics including a summary and per-provider depth, spread, and volume data. Tier: Pro, Quant · Rate limit: Pro 100 req/min · Quant 300 req/min
curl -sS \
  -H "Authorization: Bearer $CS2C_API_KEY" \
  "$CS2C_API_BASE/market/items/4994"
item_id
integer
required
Catalog item ID to analyze. Use GET /items to look up IDs.
Response example
{
  "meta": { "..." : "..." },
  "data": {
    "item_id": 15652,
    "market_hash_name": "StatTrak™ SCAR-20 | Cardiac (Factory New)",
    "phase": null,
    "summary": {
      "provider_count": 5,
      "best_ask_usd": "58.41",
      "best_bid_usd": "61.74",
      "avg_spread_pct": 41.59,
      "liquidity": 46,
      "supply": 9060,
      "rank": 1292,
      "marketcap": "529194.60",
      "price_rate_24h": -4.48,
      "price_diff_24h": "-2.74",
      "price_rate_7d": 6.11,
      "price_diff_7d": "3.36",
      "price_rate_30d": 12.37,
      "price_diff_30d": "6.43",
      "sales_1d": 3,
      "total_volume_24h": 3,
      "sales_7d": 18,
      "sales_30d": 71,
      "steam_sales_7d": 34,
      "steam_sales_30d": 587,
      "listing_score": 9,
      "gap_score": 5,
      "volume_score": 18,
      "stability_score": 7,
      "external_score": 7,
      "liquidity_last_updated": "2026-03-21T06:48:43.193895Z"
    },
    "providers": [
      {
        "provider": "buff163",
        "ask_usd": "66.67",
        "bid_usd": "41.60",
        "spread_usd": "25.07",
        "spread_pct": 37.61,
        "ask_depth": 16,
        "bid_depth": 9,
        "volume_24h": 2,
        "volume_7d": 8,
        "total_value_24h_usd": "133.34",
        "price_rate_24h": -1.96,
        "price_diff_24h": "-1.33",
        "price_rate_7d": 4.17,
        "price_diff_7d": "2.67",
        "price_rate_30d": null,
        "price_diff_30d": null,
        "bid_anomaly": false
      },
      {
        "provider": "steam",
        "ask_usd": "92.41",
        "bid_usd": "61.32",
        "spread_usd": "31.09",
        "spread_pct": 33.64,
        "ask_depth": 1,
        "bid_depth": 150,
        "volume_24h": 1,
        "volume_7d": 0,
        "total_value_24h_usd": "92.41",
        "price_rate_24h": null,
        "price_diff_24h": null,
        "price_rate_7d": 2.13,
        "price_diff_7d": "1.93",
        "price_rate_30d": 9.16,
        "price_diff_30d": "7.76",
        "bid_anomaly": false
      },
      {
        "provider": "skinport",
        "ask_usd": "58.41",
        "bid_usd": null,
        "spread_usd": null,
        "spread_pct": null,
        "ask_depth": 3,
        "bid_depth": null,
        "volume_24h": null,
        "volume_7d": null,
        "total_value_24h_usd": null,
        "price_rate_24h": -4.48,
        "price_diff_24h": "-2.74",
        "price_rate_7d": null,
        "price_diff_7d": null,
        "price_rate_30d": null,
        "price_diff_30d": null,
        "bid_anomaly": null
      }
    ],
    "coverage": {
      "provider_count": 5,
      "providers_with_volume": 3,
      "providers_with_bid_side": 2
    }
  }
}
data.providers
array
Per-provider depth and spread data. Ask-driven: providers with a live ask but no current bid still appear with bid_usd, spread_usd, spread_pct, and bid_depth set to null.
data.coverage
object
Provider coverage summary for this item.
ask_usd, bid_usd, spread_usd, and total_value_24h_usd are decimal strings in USD — not minor units. summary.best_bid_usd is the highest bid across all providers, including providers that do not appear in data.providers[].
bid_anomaly: true indicates the best bid exceeds the best ask on that provider, which produces a negative spread_pct. This is a data anomaly, not a tradeable state.
Last modified on May 28, 2026