Instant Sell
POST /v1/sell/quotes: Quote a Steam Inventory for Instant Sell
Price every CS2, Dota 2 or Rust item in a seller’s Steam inventory. Each item comes back with the exact USD amount your balance is credited, and the trade offer it would ship in.
POST
/
sell
/
quotes
Quote a Steam inventory
curl --request POST \
--url https://csboard.com/v1/sell/quotes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh",
"app_id": 730,
"split": true
}
'import requests
url = "https://csboard.com/v1/sell/quotes"
payload = {
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh",
"app_id": 730,
"split": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
trade_url: 'https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh',
app_id: 730,
split: true
})
};
fetch('https://csboard.com/v1/sell/quotes', 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/sell/quotes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'trade_url' => 'https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh',
'app_id' => 730,
'split' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://csboard.com/v1/sell/quotes"
payload := strings.NewReader("{\n \"trade_url\": \"https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh\",\n \"app_id\": 730,\n \"split\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://csboard.com/v1/sell/quotes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"trade_url\": \"https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh\",\n \"app_id\": 730,\n \"split\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/sell/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trade_url\": \"https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh\",\n \"app_id\": 730,\n \"split\": true\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"asset_id": "41165110534",
"app_id": 730,
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"price_usd": 48.3,
"float": 0.23,
"phase": null,
"icon_url": null,
"offer_group": "a"
},
{
"asset_id": "41165110599",
"app_id": 730,
"market_hash_name": "Glock-18 | Water Elemental (Minimal Wear)",
"price_usd": 13.12,
"float": 0.11,
"phase": null,
"icon_url": null,
"offer_group": "b"
}
],
"expires_at": "2026-10-06T14:04:11Z"
}{
"code": "invalid_trade_url",
"detail": "The trade URL is malformed or does not resolve to a Steam account."
}{
"code": "missing_api_key",
"detail": "Provide your API key via `Authorization: Bearer csb_pub_…`. Generate one at https://csboard.com/profile?tab=api"
}{
"code": "selling_not_enabled",
"detail": "Instant Sell API is granted per-account. Contact support@csboard.com to request access."
}{
"code": "unsupported_game",
"detail": "app_id 570 is not open for instant sell on this key. Supported: 730, 252490.",
"supported_app_ids": [
730,
252490
]
}{
"code": "rate_limit_exceeded",
"detail": "Rate limit of 100 requests/min exceeded."
}{
"code": "sell_disabled",
"detail": "Instant Sell API is temporarily disabled."
}Quote a seller’s inventory before you sell it. Every item the CSBoard network will buy right now comes back with
price_usd, the exact amount your balance is credited for it. Items nobody will buy are left out.
Authentication required. Send your key as Authorization: Bearer csb_pub_....
Selling capability required. Instant Sell is invite-only. Until it is enabled for your key this answers 403 selling_not_enabled. See the Instant Sell guide.
Request body
string
required
The seller’s Steam trade URL (20 to 300 characters). Their inventory is quoted, and the trade offers are later sent here.
integer
default:"730"
Steam app to quote:
730 CS2, 570 Dota 2, 252490 Rust. Leave it out for CS2. A game your key cannot sell answers 422 unsupported_game with the supported_app_ids it can.boolean
default:"false"
false: the whole sale ships as one trade offer. true: every item goes to the market that pays the most for it, which can mean several offers. Use the same value when you create the order. See one offer or several.Response fields
SellQuoteItem[]
required
Sellable items.
Show SellQuoteItem object
Show SellQuoteItem object
string
required
Steam asset id. Pass it back in
asset_ids to sell the item.integer
required
Steam app of the item.
string
required
number
required
Exactly what your balance is credited for this item, in USD. The order books this same price.
number | null
CS2 float, when known. Always
null for Dota 2 and Rust.string | null
Reserved. Always
null today.string | null
Reserved. Always
null today.string
required
The trade offer this item rides in if you sell the whole inventory:
a, b and so on, biggest offer first. Count the distinct letters to know how many offers the seller will get. Always a when split is false.datetime
required
Quotes are good for about two minutes. Re-quote before you create an order if this has passed.
Example request
curl -X POST https://csboard.com/v1/sell/quotes \
-H "Authorization: Bearer csb_pub_..." \
-H "Content-Type: application/json" \
-d '{
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh",
"app_id": 730,
"split": true
}'
Example response
{
"items": [
{
"asset_id": "41165110534",
"app_id": 730,
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"price_usd": 48.3,
"float": 0.23,
"phase": null,
"icon_url": null,
"offer_group": "a"
},
{
"asset_id": "41165110599",
"app_id": 730,
"market_hash_name": "Glock-18 | Water Elemental (Minimal Wear)",
"price_usd": 13.12,
"float": 0.11,
"phase": null,
"icon_url": null,
"offer_group": "b"
}
],
"expires_at": "2026-10-06T14:04:11Z"
}
Error codes
| HTTP status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Malformed body, or an app_id outside 730, 570, 252490. |
| 400 | invalid_trade_url | The trade URL does not resolve to a Steam account. |
| 400 | private_inventory | The seller’s Steam inventory is private. |
| 403 | selling_not_enabled | Instant Sell is not enabled for this key. |
| 422 | unsupported_game | The game is not open for instant sell on this key. Includes supported_app_ids. |
| 429 | rate_limited | More than 10 quotes per minute on this key. Wait Retry-After seconds. |
| 502 | inventory_unavailable | Steam did not return the inventory. Retry shortly. |
| 503 | sell_disabled | Instant Sell is switched off right now. |
Authorizations
Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.
Body
application/json
The seller's Steam trade URL. Their inventory is quoted and the offers are sent here.
Required string length:
20 - 300Steam app to quote: 730 CS2, 570 Dota 2, 252490 Rust. Leave it out for CS2. A game your key cannot sell answers 422 unsupported_game.
Available options:
730, 570, 252490 false: the whole sale ships as ONE trade offer. true: every item goes to the market that pays most for it, which can mean several offers. See the Instant Sell guide.
⌘I
Quote a Steam inventory
curl --request POST \
--url https://csboard.com/v1/sell/quotes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh",
"app_id": 730,
"split": true
}
'import requests
url = "https://csboard.com/v1/sell/quotes"
payload = {
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh",
"app_id": 730,
"split": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
trade_url: 'https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh',
app_id: 730,
split: true
})
};
fetch('https://csboard.com/v1/sell/quotes', 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/sell/quotes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'trade_url' => 'https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh',
'app_id' => 730,
'split' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://csboard.com/v1/sell/quotes"
payload := strings.NewReader("{\n \"trade_url\": \"https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh\",\n \"app_id\": 730,\n \"split\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://csboard.com/v1/sell/quotes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"trade_url\": \"https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh\",\n \"app_id\": 730,\n \"split\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/sell/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"trade_url\": \"https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh\",\n \"app_id\": 730,\n \"split\": true\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"asset_id": "41165110534",
"app_id": 730,
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"price_usd": 48.3,
"float": 0.23,
"phase": null,
"icon_url": null,
"offer_group": "a"
},
{
"asset_id": "41165110599",
"app_id": 730,
"market_hash_name": "Glock-18 | Water Elemental (Minimal Wear)",
"price_usd": 13.12,
"float": 0.11,
"phase": null,
"icon_url": null,
"offer_group": "b"
}
],
"expires_at": "2026-10-06T14:04:11Z"
}{
"code": "invalid_trade_url",
"detail": "The trade URL is malformed or does not resolve to a Steam account."
}{
"code": "missing_api_key",
"detail": "Provide your API key via `Authorization: Bearer csb_pub_…`. Generate one at https://csboard.com/profile?tab=api"
}{
"code": "selling_not_enabled",
"detail": "Instant Sell API is granted per-account. Contact support@csboard.com to request access."
}{
"code": "unsupported_game",
"detail": "app_id 570 is not open for instant sell on this key. Supported: 730, 252490.",
"supported_app_ids": [
730,
252490
]
}{
"code": "rate_limit_exceeded",
"detail": "Rate limit of 100 requests/min exceeded."
}{
"code": "sell_disabled",
"detail": "Instant Sell API is temporarily disabled."
}