Trading
GET /v1/orders — List Your Purchase History
Page through your CSBoard purchase history with keyset pagination. Filter by time window and status; each order includes per-item delivery details.
GET
/
orders
List purchase history
curl --request GET \
--url https://csboard.com/v1/orders \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/orders"
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/orders', 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/orders",
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/orders"
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/orders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/orders")
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{
"data": [
{
"order_id": "ord_01J9Z3K8Q2",
"steam_id": "76561198000000000",
"status": "completed",
"custom_id": "batch-2026-06-29-01",
"currency": "USD",
"charged_total_usd": 26.47,
"item_count": 2,
"hold_until": null,
"created_at": "2026-06-29T17:12:04Z",
"updated_at": "2026-06-29T17:15:40Z",
"items": [
{
"market_hash_name": "AK-47 | Redline (Minimal Wear)",
"price_usd": 14.37,
"status": "delivered",
"tradable_at": "2026-07-06T12:00:00Z",
"return_reason": null,
"steam_trade_offer_id": "5512345678",
"steam_trade_offer_finished_at": "2026-06-29T17:15:40Z"
}
]
}
],
"meta": {
"next_cursor": "eyJpZCI6Im9yZF8wMUo5WjNLOFEyIn0=",
"per_page": 50
}
}{
"code": "missing_api_key",
"detail": "Provide your API key via `Authorization: Bearer csb_pub_…`. Generate one at https://csboard.com/profile?tab=api"
}{
"code": "invalid_request",
"detail": "limit must be between 1 and 100."
}{
"code": "rate_limit_exceeded",
"detail": "Rate limit of 100 requests/min exceeded."
}The orders endpoint returns your purchase history, newest first, using keyset pagination. Filter by a time window and by status, then walk older pages by passing
meta.next_cursor back as cursor. Each order carries a per-item breakdown with delivery status.
Authentication required. Send your key as Authorization: Bearer csb_pub_....
A
cancelled or failed order is always refunded — and the refund object is the receipt. An item can disappear from its source between the moment you read it and the moment we buy it; when that happens the order ends cancelled and the money is credited straight back, usually within seconds. Read refund.amount_usd / refund.refunded_at instead of inferring “refund pending” from the status. The full money trail lives at GET /v1/transactions.Query parameters
integer
default:"50"
Results per page. Minimum
1, maximum 100.integer
Only return orders created at or after this Unix timestamp (seconds).
integer
Only return orders created at or before this Unix timestamp (seconds).
string
Filter by order status. One of:
completed, hold, delivering, pending, cancelled, failed.string
Keyset cursor from a previous response’s
meta.next_cursor. Pass it to fetch the next page.Response fields
Order[]
required
Array of orders for this page.
Show Order object
Show Order object
string
required
CSBoard order id.
string | null
Steam ID the items were delivered to, if known.
string
required
One of:
completed, hold, delivering, pending, cancelled, failed.string | null
Your own id, if you set one at purchase time.
string
required
Always
"USD".number
required
Total charged for the order in USD.
integer
required
Number of items in the order.
datetime | null
When the order’s held items clear, or
null.Refund | null
Money credited back for this order, or
null if none was.datetime
required
ISO 8601 creation timestamp.
datetime | null
ISO 8601 timestamp of the last update, or
null.OrderItem[]
required
Per-item breakdown.
Show OrderItem object
Show OrderItem object
string | null
number | null
string
required
One of:
hold, delivering, delivered, returned.datetime | null
When the item leaves Steam trade hold, or
null.string | null
Why the item was returned, if
status is returned. One of: trade_timeout, declined, expired, rolled_back, unavailable.string | null
datetime | null
object
required
Example request
curl "https://csboard.com/v1/orders?status=completed&limit=50" \
-H "Authorization: Bearer csb_pub_..."
Example response
{
"data": [
{
"order_id": "ord_01J9Z3K8Q2",
"steam_id": "76561198000000000",
"status": "completed",
"custom_id": "batch-2026-06-29-01",
"currency": "USD",
"charged_total_usd": 26.47,
"item_count": 2,
"hold_until": null,
"refund": null,
"created_at": "2026-06-29T17:12:04Z",
"updated_at": "2026-06-29T17:15:40Z",
"items": [
{
"market_hash_name": "AK-47 | Redline (Minimal Wear)",
"price_usd": 14.37,
"status": "delivered",
"tradable_at": "2026-07-06T12:00:00Z",
"return_reason": null,
"steam_trade_offer_id": "5512345678",
"steam_trade_offer_finished_at": "2026-06-29T17:15:40Z"
}
]
},
{
"order_id": "ord_01J9Z3M0F1",
"steam_id": "76561198000000000",
"status": "cancelled",
"custom_id": "batch-2026-06-29-02",
"currency": "USD",
"charged_total_usd": 1.28,
"item_count": 1,
"hold_until": null,
"refund": {
"amount_usd": 1.28,
"refunded_at": "2026-06-29T17:20:11Z",
"partial": false
},
"created_at": "2026-06-29T17:20:10Z",
"updated_at": "2026-06-29T17:20:11Z",
"items": [
{
"market_hash_name": "Prisma Case",
"price_usd": 1.28,
"status": "returned",
"tradable_at": null,
"return_reason": "unavailable",
"steam_trade_offer_id": null,
"steam_trade_offer_finished_at": null
}
]
}
],
"meta": { "next_cursor": "eyJpZCI6Im9yZF8wMUo5WjNLOFEyIn0=", "per_page": 50 }
}
Error codes
| HTTP status | Code | Meaning |
|---|---|---|
| 401 | missing_api_key / invalid_api_key | Missing or invalid API key. |
| 422 | invalid_request | Invalid query parameters (e.g. limit out of range). |
| 429 | rate_limit_exceeded | Too many requests. Back off for the Retry-After header value. |
Authorizations
Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.
Query Parameters
Results per page. 1–100. Default 50.
Required range:
1 <= x <= 100Only orders created at or after this Unix timestamp (seconds).
Only orders created at or before this Unix timestamp (seconds).
Filter by order status.
Available options:
completed, hold, delivering, pending, cancelled, failed Keyset cursor from a previous response's meta.next_cursor.
⌘I
List purchase history
curl --request GET \
--url https://csboard.com/v1/orders \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/orders"
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/orders', 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/orders",
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/orders"
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/orders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/orders")
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{
"data": [
{
"order_id": "ord_01J9Z3K8Q2",
"steam_id": "76561198000000000",
"status": "completed",
"custom_id": "batch-2026-06-29-01",
"currency": "USD",
"charged_total_usd": 26.47,
"item_count": 2,
"hold_until": null,
"created_at": "2026-06-29T17:12:04Z",
"updated_at": "2026-06-29T17:15:40Z",
"items": [
{
"market_hash_name": "AK-47 | Redline (Minimal Wear)",
"price_usd": 14.37,
"status": "delivered",
"tradable_at": "2026-07-06T12:00:00Z",
"return_reason": null,
"steam_trade_offer_id": "5512345678",
"steam_trade_offer_finished_at": "2026-06-29T17:15:40Z"
}
]
}
],
"meta": {
"next_cursor": "eyJpZCI6Im9yZF8wMUo5WjNLOFEyIn0=",
"per_page": 50
}
}{
"code": "missing_api_key",
"detail": "Provide your API key via `Authorization: Bearer csb_pub_…`. Generate one at https://csboard.com/profile?tab=api"
}{
"code": "invalid_request",
"detail": "limit must be between 1 and 100."
}{
"code": "rate_limit_exceeded",
"detail": "Rate limit of 100 requests/min exceeded."
}