Skip to main content

Overview

Hridaya supports four distinct Steam Community Market API endpoints. Each serves a different purpose and returns different data structures.

Quick Reference

EndpointAuth RequiredUpdate FrequencyUse Case
priceoverviewNoSecondsCurrent prices and 24h volume
itemordershistogramNoSecondsFull order book depth
itemordersactivityNoSecondsReal-time trade feed
pricehistoryYesHourlyHistorical trend analysis
You can use multiple endpoints for the same item to get comprehensive market data. Simply add multiple entries with different apiid values.

priceoverview

Provides current market snapshot: lowest listing price, median sale price, and 24-hour trading volume.

When to Use

  • Monitor current market prices
  • Track price movements over time
  • Compare items by volume/liquidity
  • Build price alert systems
  • Simple portfolio valuation

Configuration

TRACKING_ITEMS:
  - market_hash_name: "AK-47 | Redline (Field-Tested)"
    appid: 730
    currency: 1
    country: 'US'
    language: 'english'
    polling-interval-in-seconds: 30
    apiid: 'priceoverview'
item_nameid
integer
Not required for this endpoint

Response Data

Returned fields (from dataClasses.py:PriceOverviewData):
success
boolean
Whether the API call succeeded
lowest_price
string
Current lowest listing price (formatted with currency symbol)Example: "$12.34", "€10.50"
median_price
string
Recent median sale price (formatted with currency symbol)Example: "$12.00"
volume
string
Number of sales in the last 24 hours (formatted with commas)Example: "1,234", "56"

Database Schema

Stored in table price_overview:
ColumnTypeDescription
idINTEGERAuto-incrementing row ID
timestampDATETIMEWhen this snapshot was taken (UTC)
appidINTEGERSteam app ID
market_hash_nameTEXTItem name
item_nameidINTEGERSteam’s internal item ID (if available)
currencyTEXTCurrency code
countryTEXTCountry code
languageTEXTLanguage
lowest_priceREALCheapest current listing (numeric)
median_priceREALMedian sale price (numeric)
volumeINTEGERSales in last 24h

Example Query

Get the latest price for an item:
SELECT timestamp, lowest_price, median_price, volume
FROM price_overview
WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
ORDER BY timestamp DESC
LIMIT 1;

API Endpoint Details

URL: https://steamcommunity.com/market/priceoverview/ Method: GET Query Parameters (from steamAPIclient.py:fetch_price_overview):
  • appid - Application ID
  • market_hash_name - Item name (URL-encoded)
  • currency - Currency code
  • country - Country code
  • language - Language

itemordershistogram

Provides complete order book with all buy orders (bids) and sell orders (asks) at each price level. Think “market depth chart”.

When to Use

  • Analyze market liquidity
  • Calculate bid-ask spread
  • Find support/resistance levels
  • Detect market manipulation (spoofed orders)
  • Build order book visualizations
  • Algorithmic trading strategies

Configuration

TRACKING_ITEMS:
  - market_hash_name: "Dreams & Nightmares Case"
    appid: 730
    currency: 1
    country: 'US'
    language: 'english'
    polling-interval-in-seconds: 15
    apiid: 'itemordershistogram'
    item_nameid: 175985258  # REQUIRED
item_nameid
integer
required
Required for this endpoint. See Config Reference for how to find it.

Response Data

Returned fields (from dataClasses.py:OrdersHistogramData):
success
boolean | integer
Whether the API call succeeded (Steam returns 1 for true)
highest_buy_order
string
Best bid price (highest price buyers are willing to pay)
lowest_sell_order
string
Best ask price (lowest price sellers are willing to accept)
buy_order_count
integer
Total number of buy orders across all price levels
sell_order_count
integer
Total number of sell orders across all price levels
buy_order_table
array
Array of buy order entries. Each entry has:
  • price (string) - Price level
  • quantity (string) - Number of orders at this price
Example: [{"price": "12.50", "quantity": "15"}, {"price": "12.45", "quantity": "8"}]
sell_order_table
array
Array of sell order entries (same structure as buy_order_table)
buy_order_graph
array
Graph visualization data for buy orders (cumulative depth)
sell_order_graph
array
Graph visualization data for sell orders (cumulative depth)

Database Schema

Stored in table orders_histogram:
ColumnTypeDescription
idINTEGERAuto-incrementing row ID
timestampDATETIMEWhen this snapshot was taken (UTC)
appidINTEGERSteam app ID
market_hash_nameTEXTItem name
item_nameidINTEGERSteam’s internal item ID
currencyTEXTCurrency code
countryTEXTCountry code
languageTEXTLanguage
buy_order_tableTEXTJSON array of buy orders
sell_order_tableTEXTJSON array of sell orders
buy_order_graphTEXTJSON graph data
sell_order_graphTEXTJSON graph data
buy_order_countINTEGERTotal buy orders
sell_order_countINTEGERTotal sell orders
highest_buy_orderREALBest bid
lowest_sell_orderREALBest ask

Example Query

Calculate current bid-ask spread:
SELECT 
  timestamp,
  highest_buy_order,
  lowest_sell_order,
  (lowest_sell_order - highest_buy_order) AS spread,
  ((lowest_sell_order - highest_buy_order) / highest_buy_order * 100) AS spread_pct
FROM orders_histogram
WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
ORDER BY timestamp DESC
LIMIT 1;
Extract top buy orders using JSON:
SELECT 
  json_extract(buy_order_table, '$[0].price') AS top_bid_price,
  json_extract(buy_order_table, '$[0].quantity') AS top_bid_quantity
FROM orders_histogram
WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
ORDER BY timestamp DESC
LIMIT 1;

API Endpoint Details

URL: https://steamcommunity.com/market/itemordershistogram Method: GET Query Parameters (from steamAPIclient.py:fetch_orders_histogram):
  • norender - Set to 1 (returns JSON instead of HTML)
  • appid - Application ID
  • item_nameid - Numeric item ID
  • currency - Currency code
  • country - Country code
  • language - Language

itemordersactivity

Provides real-time feed of recent market activity: purchases and new listings as they happen.

When to Use

  • Monitor trading velocity
  • Detect price trends from actual trades
  • Track market sentiment (buying vs selling pressure)
  • Build activity notifications
  • Analyze trading patterns

Configuration

TRACKING_ITEMS:
  - market_hash_name: "Revolution Case"
    appid: 730
    currency: 1
    country: 'US'
    language: 'english'
    polling-interval-in-seconds: 8
    apiid: 'itemordersactivity'
    item_nameid: 175995756  # REQUIRED
item_nameid
integer
required
Required for this endpoint. See Config Reference for how to find it.
This is the most rate-limit-sensitive endpoint. Steam returns HTML strings that require parsing. Recommended minimum polling interval: 8 seconds.

Response Data

Returned fields (from dataClasses.py:OrdersActivityData):
success
boolean | integer
Whether the API call succeeded (Steam returns 1 for true)
timestamp
integer
Unix timestamp when Steam generated this response
activity
array
Array of HTML strings describing recent activityExample: ["+$0.85\n" + " at 16:23:45"]
parsed_activities
array
Array of structured activity entries (parsed from HTML). Each entry has:
  • price (string) - Trade price
  • currency (string) - ISO currency code (“USD”, “EUR”, etc.)
  • action (string) - Activity type (“Purchased”, “Listed”)
  • timestamp (datetime) - When the activity occurred
  • raw_html (string) - Original HTML string
Note: This field is populated by parseActivityHTML_utility.py after fetching.

Database Schema

Stored in table orders_activity:
ColumnTypeDescription
idINTEGERAuto-incrementing row ID
timestampDATETIMEWhen this snapshot was taken (UTC)
appidINTEGERSteam app ID
market_hash_nameTEXTItem name
item_nameidINTEGERSteam’s internal item ID
currencyTEXTCurrency code
countryTEXTCountry code
languageTEXTLanguage
activity_rawTEXTJSON array of raw HTML strings
parsed_activitiesTEXTJSON array of parsed activities
activity_countINTEGERNumber of activities in snapshot
steam_timestampINTEGERUnix timestamp from Steam

Example Query

Get recent trades:
SELECT timestamp, parsed_activities, activity_count
FROM orders_activity
WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
ORDER BY timestamp DESC
LIMIT 10;

API Endpoint Details

URL: https://steamcommunity.com/market/itemordersactivity Method: GET Query Parameters (from steamAPIclient.py:fetch_orders_activity):
  • country - Country code
  • language - Language
  • currency - Currency code
  • item_nameid - Numeric item ID
  • two_factor - Two factor flag (default 0)
Response Format: JSON with text/html Content-Type (requires manual parsing)

pricehistory

Provides complete historical price data: hourly aggregated prices and volumes going back years. Like stock OHLC data.

When to Use

  • Long-term trend analysis
  • Volatility calculations
  • Seasonal pattern detection
  • Backtesting trading strategies
  • Portfolio historical valuation
  • Market research and reporting

Configuration

TRACKING_ITEMS:
  - market_hash_name: "AWP | Neo-Noir (Factory New)"
    appid: 730
    currency: 1
    country: 'US'
    language: 'english'
    polling-interval-in-seconds: 3600  # Hourly recommended
    apiid: 'pricehistory'
item_nameid
integer
Not required for this endpoint
This endpoint requires authentication. You must provide Steam session cookies in your .env file. See Authentication for setup instructions.
Historical data doesn’t change frequently. Use longer polling intervals (3600s / 1 hour) to conserve rate limits. The system fetches all available history on first request.

Response Data

Returned fields (from dataClasses.py:PriceHistoryData):
success
boolean
Whether the API call succeeded
price_prefix
string
Currency prefix symbol (e.g., "$")
price_suffix
string
Currency suffix symbol (e.g., "€")
prices
array
Array of price history data points. Each entry is a 3-element array:
  • [0] (string) - Date/time string (e.g., "Jul 02 2014 01: +0")
  • [1] (float) - Median price during this hour
  • [2] (string) - Trading volume during this hour
Example: [["Mar 03 2026 14: +0", 12.34, "156"], ["Mar 03 2026 15: +0", 12.50, "142"]]

Database Schema

Stored in table price_history:
ColumnTypeDescription
idINTEGERAuto-incrementing row ID
timeDATETIMEThe hour this data point represents (UTC)
appidINTEGERSteam app ID
market_hash_nameTEXTItem name
item_nameidINTEGERSteam’s internal item ID (if available)
currencyTEXTCurrency code
countryTEXTCountry code
languageTEXTLanguage
priceREALMedian price during this hour
volumeINTEGERNumber of sales during this hour
fetched_atDATETIMEWhen we fetched this data

Example Queries

Daily average price over last 30 days:
SELECT 
  date(time) AS day,
  AVG(price) AS avg_price,
  SUM(volume) AS total_volume
FROM price_history
WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
  AND time > datetime('now', '-30 days')
GROUP BY date(time)
ORDER BY day DESC;
Find price spikes (20% above average):
WITH avg_price AS (
  SELECT AVG(price) AS mean 
  FROM price_history
  WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
)
SELECT time, price, volume
FROM price_history, avg_price
WHERE market_hash_name = 'AK-47 | Redline (Field-Tested)'
  AND price > mean * 1.2
ORDER BY time DESC;

API Endpoint Details

URL: https://steamcommunity.com/market/pricehistory Method: GET Authentication: Required - Steam session cookies Query Parameters (from steamAPIclient.py:fetch_price_history):
  • appid - Application ID
  • market_hash_name - Item name (URL-encoded)
  • currency - Currency code
  • country - Country code
  • language - Language
Required Cookies:
  • sessionid - Your Steam session ID
  • steamLoginSecure - Your Steam login token
  • browserid (optional) - Browser identifier
  • steamCountry (optional) - Steam country code
Required Headers:
  • User-Agent - Browser user agent string
  • Referer - Steam market listing page URL

Choosing the Right Endpoint

Decision Matrix

Need current prices?priceoverview Need order book depth?itemordershistogram Need real-time trades?itemordersactivity Need historical trends?pricehistory

Combining Endpoints

For comprehensive market coverage, track the same item with multiple endpoints:
TRACKING_ITEMS:
  # Same item, different endpoints
  - market_hash_name: "AK-47 | Redline (Field-Tested)"
    apiid: 'priceoverview'
    polling-interval-in-seconds: 60
    
  - market_hash_name: "AK-47 | Redline (Field-Tested)"
    apiid: 'itemordershistogram'
    item_nameid: 176582392
    polling-interval-in-seconds: 30
    
  - market_hash_name: "AK-47 | Redline (Field-Tested)"
    apiid: 'itemordersactivity'
    item_nameid: 176582392
    polling-interval-in-seconds: 15
    
  - market_hash_name: "AK-47 | Redline (Field-Tested)"
    apiid: 'pricehistory'
    polling-interval-in-seconds: 3600
Each endpoint consumes separate rate limit tokens. Make sure your total request load stays within limits.

Rate Limiting Considerations

Endpoint impact on rate limits (requests per 60s with example intervals):
EndpointExample IntervalRequests/60s
priceoverview30s2
itemordershistogram15s4
itemordersactivity8s7.5
pricehistory3600s0.017
Total: 13.5 requests per 60s (within limit of 15)

Next Steps

Authentication

Setup cookies for pricehistory endpoint

Config Reference

Complete parameter reference

Build docs developers (and LLMs) love