Торговля
POST /v1/orders/:id/cancel — отменить недоставленный заказ
Отменяет заказ, который ещё никто не отправил, и возвращает деньги на баланс. Доступна через 31 минуту после покупки при ручной доставке, через 15 минут — в остальных случаях.
POST
/
orders
/
{id}
/
cancel
Cancel an undelivered order
curl --request POST \
--url https://csboard.com/v1/orders/{id}/cancel \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/orders/{id}/cancel"
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}/cancel', 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}/cancel",
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}/cancel"
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}/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/orders/{id}/cancel")
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",
"cancelled": true,
"refunded": true
}Часть заказов доставляется вручную: Steam-трейд отправляет человек (или медленный деск), и это может занять до 12 часов. Такой заказ виден как
delivery_type: "manual" в GET /v1/orders и GET /v1/orders/{id} и может долго висеть в delivering без трейд-оффера. delivery_deadline_at показывает, когда у продавца кончается время. Если продавец не успел, заказ отменяется и деньги возвращаются автоматически.
Если ждать больше не хотите — отмените заказ сами. Тело запроса не нужно. Отмена доступна для:
- Заказа с ручной доставкой, по которому продавец ничего не отправил за 31 минуту после покупки.
- Заказа в холде до снятия блокировки, если источник это позволяет.
- Любого другого заказа, который не доставлен через 15 минут после покупки: трейд-оффера нет и на стороне маркета ничего не в процессе.
delivery_deadline_at.
Рекомендуемый флоу
- Создайте покупку через
POST /v1/ordersилиPOST /v1/market/buy. - Поллите
GET /v1/orders/{id}(или слушайте вебхукorder.updated). Смотритеdelivery_typeиdelivery_deadline_at. - Если у заказа
manualвсё ещё нет трейд-оффера и он вам больше не нужен — через 31 минуту вызовитеPOST /v1/orders/{id}/cancel. - При
425 too_earlyповторите черезretry_after_sec. При200деньги уже на балансе. При202они придут в течение нескольких минут вместе со следующим обновлением заказа.
Ответы кратко
| Статус | Значение |
|---|---|
200 refunded: true | Заказ отменён, деньги вернулись на баланс. Для уже отменённого заказа ответ тот же. |
202 refunded: false | Отмена принята. Возврат придёт в течение нескольких минут со следующим обновлением заказа (вебхук или GET /v1/orders/{id}). |
425 too_early | Отмена ещё не открыта (31 мин при ручной доставке, 15 мин в остальных случаях). Повторить через возвращённый retry_after_sec. |
409 offer_sent | Steam-трейд уже отправлен. Примите или отклоните его в Steam. |
409 in_progress | Доставка или отмена уже идёт. Если доставка сорвётся, деньги вернутся автоматически. |
409 not_cancellable | Заказ больше нельзя отменить: доставлен, завершён, это P2P-лот или не подходит под условия. |
429 cancel_limit_reached | Слишком много отмен за последнее время. Попробуйте позже. |
503 cancel_unavailable | Сейчас не удалось проверить заказ на стороне маркета. Ничего не изменено, повторите чуть позже. |
404 order_not_found | Такого заказа на этом аккаунте нет. |
Отмена идемпотентна: повторный вызов для отменённого заказа вернёт тот же
200, а не второй возврат. Ретрай после сетевого таймаута или 503 безопасен.Авторизации
Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.
Параметры пути
CSBoard order id of the order to cancel.
Ответ
Cancelled and refunded to your balance. Also the answer for an order that was already cancelled.
⌘I
Cancel an undelivered order
curl --request POST \
--url https://csboard.com/v1/orders/{id}/cancel \
--header 'Authorization: Bearer <token>'import requests
url = "https://csboard.com/v1/orders/{id}/cancel"
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}/cancel', 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}/cancel",
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}/cancel"
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}/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://csboard.com/v1/orders/{id}/cancel")
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",
"cancelled": true,
"refunded": true
}