Trading
POST /v1/orders/:id/claim — Release a Held Order
Release delivery of a held (escrow) order once its hold has cleared. Some held orders deliver automatically; others require this explicit claim.
POST
/
orders
/
{id}
/
claim
Claim a held order
curl --request POST \
--url https://csboard.com/v1/orders/{id}/claim \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/orders/{id}/claim"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://csboard.com/v1/orders/{id}/claim', 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/{id}/claim",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/{id}/claim"
req, _ := http.NewRequest("POST", 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.post("https://csboard.com/v1/orders/{id}/claim")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/orders/{id}/claim")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"order_id": "ord_01J9Z3K8Q2",
"status": "delivering",
"claimed": true,
"steam_trade_offer_id": "5512345678"
}Some orders land in a held state: the item sits under a marketplace escrow window and cannot be delivered until that window clears. A held order shows
status: "hold" and a hold_until timestamp in GET /v1/orders and GET /v1/orders/{id}.
Once hold_until has passed:
- Some held orders deliver automatically — you do nothing, and calling this endpoint returns
claimed: falseas a harmless no-op. - Other held orders must be claimed — you call this endpoint to release the trade. Without a claim they stay held indefinitely.
hold_until passes, call claim once. If the order was the auto-delivering kind, you get a no-op. If it needed a claim, it is released.
Prefer not to poll and claim per order? Set the account-wide
autoclaim flag to true and every held order is released automatically the moment its hold clears — no claim calls needed.Recommended flow
- Place a buy with
POST /v1/ordersorPOST /v1/market/buy. - Poll
GET /v1/orders/{id}. While the order readsstatus: "hold", checkhold_until. - Once
hold_untilis in the past,POST /v1/orders/{id}/claim. - On
claimed: true, the marketplace sends a Steam trade offer to your trade URL. Your bot must accept it within ~15 minutes or the trade is cancelled and your balance refunded.
Responses at a glance
| Status | Meaning |
|---|---|
200 claimed: true | Trade released now; steam_trade_offer_id returned. Accept within ~15 min. |
200 claimed: false | This order delivers automatically; nothing to do. |
409 not_claimable | Order is not in a held state (already delivering/completed/failed). |
425 hold_not_cleared | Still inside the hold window — retry after the returned hold_until. |
502 delivery_failed | Marketplace rejected the release. If the hold was cancelled upstream, refunded: true. |
404 order_not_found | No such order on this account. |
The claim is idempotent while a release is in flight — a duplicate call returns a conflict, never a double delivery. Retrying after a network timeout is safe.
Authorizations
Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.
Path Parameters
CSBoard order id of the held order to claim.
Response
Claim accepted. claimed: true means the trade was released now; claimed: false means this order delivers automatically and no action was needed.
⌘I
Claim a held order
curl --request POST \
--url https://csboard.com/v1/orders/{id}/claim \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/orders/{id}/claim"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://csboard.com/v1/orders/{id}/claim', 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/{id}/claim",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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/{id}/claim"
req, _ := http.NewRequest("POST", 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.post("https://csboard.com/v1/orders/{id}/claim")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/orders/{id}/claim")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"order_id": "ord_01J9Z3K8Q2",
"status": "delivering",
"claimed": true,
"steam_trade_offer_id": "5512345678"
}