GET /v1/prices — CS2 minAsk Price List by Item Group
Retrieve a paginated minAsk price snapshot grouped by market hash name, wear, and Doppler phase, with cheapest ask and listing count per row.
curl --request GET \
--url https://csboard.com/v1/prices \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/prices"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://csboard.com/v1/prices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://csboard.com/v1/prices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://csboard.com/v1/prices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://csboard.com/v1/prices")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/prices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodymarket_hash_name, wear, and doppler_phase, and carries the cheapest current asking price together with how many copies are listed. This makes it efficient for building price comparison tables, alerting pipelines, or portfolio valuation — you can retrieve pricing for thousands of items without pulling individual listings.
Authentication required. Send your key as Authorization: Bearer csb_pub_....
appId=570 for Dota 2 or appId=252490 for Rust. For those games each row is one market_hash_name, with wear and doppler_phase set to null. See Games. Only need one number per name? GET /v1/public/prices works without a key.Query parameters
730 = CS2, 570 = Dota 2, 252490 = Rust. Omit it for CS2. See GET /v1/games for the games your key can use.market_hash_name — splits the query into words and substring-matches each. A name that is a word-subset of a longer item’s name (e.g. Spectrum Case vs Spectrum 2 Case) cannot be isolated this way; use name for an exact lookup.market_hash_name (case-insensitive) — the precise single-item lookup. name=Spectrum Case returns only the Spectrum Case group, never Spectrum 2 Case. Takes precedence over search.Rifle, Knife, Gloves.Factory New, Minimal Wear, Field-Tested, Well-Worn, Battle-Scarred. CS2 only — with another appId it answers 400 invalid_param.Classified, Covert.min_price_usd in USD (inclusive).min_price_usd in USD (inclusive).next_cursor value from the previous response.1, maximum 500.Response fields
Show PriceRow object
Show PriceRow object
AK-47 | Redline (Field-Tested).null for items without a wear tier."Phase 2", "Ruby". null for non-Doppler items.cursor on the next request. null on the last page.Example request
curl "https://csboard.com/v1/prices?category=Rifle&wear=Field-Tested&limit=50" \
-H "Authorization: Bearer csb_pub_..."
Example response
{
"items": [
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"wear": "Field-Tested",
"doppler_phase": null,
"min_price_usd": 11.92,
"qty": 73
}
],
"next_cursor": null
}
Error codes
| HTTP status | Code | Meaning |
|---|---|---|
| 400 | invalid_param | wear sent with a Dota 2 or Rust appId. |
| 400 | unsupported_game | Your key cannot use this appId. supported_app_ids lists the ones it can. |
| 401 | missing_api_key, invalid_api_key | Missing or invalid API key. |
| 429 | rate_limit_exceeded | Over 30 requests/min. Wait for the Retry-After header value before retrying. |
GET /v1/listings for the authoritative, real-time asking price of a specific item before placing an order.Authorizations
Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.
Query Parameters
Steam appId of the game. 730 = CS2 (the default), 570 = Dota 2, 252490 = Rust. Omit it and the endpoint answers for CS2 exactly as before. An appId this key may not use answers 400 unsupported_game, whose supported_app_ids lists the ones it may — see GET /games.
730, 570, 252490 Full-text match on market hash name.
Exact market_hash_name (case-insensitive) — the precise single-item lookup. Unlike fuzzy search, it isolates one item even when its name is a word-subset of a longer one (e.g. Spectrum Case vs Spectrum 2 Case). Takes precedence over search.
e.g. Rifle, Knife, Gloves.
Item wear bucket. CS2 only — sent with another appId it answers 400 invalid_param.
Factory New, Minimal Wear, Field-Tested, Well-Worn, Battle-Scarred e.g. Classified, Covert.
Minimum price in USD.
Maximum price in USD.
Keyset cursor from next_cursor.
1–500. Default 100.
1 <= x <= 500curl --request GET \
--url https://csboard.com/v1/prices \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/prices"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://csboard.com/v1/prices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://csboard.com/v1/prices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://csboard.com/v1/prices"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://csboard.com/v1/prices")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/prices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body