Sync with Waxpeer session to auto-fill API key

Buy items using item_id and send to specific tradelink

GET/v1/buy-one-p2p

Notes about trades and frequently asked questions

The duration of the trade in different situations:

If seller's info is invalid then it can be cancelled immediately and status 6 is set;

If seller's details are valid, but no trade is created, then it will auto-cancel after 6 minutes;

if created or waiting for mobile confirmation then it will auto-cancel after 11 to 15 min (depends on when created);

if trade is waiting for mobile confirmation and connection with the seller was lost then it will auto-cancel after 6 hours.

We recommend adding project_id to purchase so that you can track a trade in case of a timeout or break of purchase request using the /check-many-project-id GET method one minute after the request.

An array of possible messages with purchase errors and other information, such as status, can be seen by opening the response scheme, where:

System busy - trade is cancelled due to tradelink check timeout or heavy load;

buy_csgo - CS:GO purchases are deactivated on the market;

buy_rust - RUST purchases are deactivated on the market.

A trade-locked listing can be bought only by exact item_id and only with allow_trade_locked. The opt-in confirms that you saw unlock_at and accept delayed delivery. Without it the purchase is refused: "trade-locked listing: pass allow_trade_locked=1 to confirm delayed delivery". You are charged in full at purchase time. There is no endpoint to cancel a reservation. A successful hold purchase adds purchase_status "reserved", unlock_at, and send_until (RFC 3339 UTC). Regular purchases omit those fields. GET /v1/buy-one-p2p-name never sells hold items.

Trade link errors

Before buying we validate the buyer's trade link with Steam. These errors are on the buyer's side: no purchase is created and nothing is charged. Once the buyer fixes the problem, the next purchase goes through.

Most of these come as msg: "Your tradelink is incorect, please update it", with the reason from Steam in error_msg:

error_msg contains Reason
...'s inventory privacy is set to "Private" Inventory is private
... because they have a trade ban Steam trade ban
This Trade URL is no longer valid ... The trade link was regenerated; use the new one
... is not available to trade The account cannot trade. Steam shows the exact reason only to the account owner

If error_msg equals msg, Steam returned no details: the trade link is missing or malformed, or the reason is in msg itself (Please set your steam inventory public, Trade banned, User has VACBAN or Game Ban, You're banned for not accepting trades).

double purchase

double purchase: the same item_id (with the same project_id) was already received in the last 5 seconds. The duplicate is rejected and nothing is charged for it; the first request is processed normally. Usually caused by a client-side retry. To find the result of the first request, use /v1/check-many-project-id.

Prices are integers. 1000 = $1.00 USD.

Parameters

NameLocationTypeDescription
api
required
querystring
project_id
optional
querystring

Custom order identifier (project_id)

item_id
required
querystring

Unique Waxpeer item identifier (item_id)

token
required
querystring

Steam trade link token or access token

price
required
querynumber

Item price in integer format (1000 = $1.00 USD)

partner
required
querystring

Steam partner ID64

allow_trade_locked
optional
querystring

allow_trade_locked

Responses

200 Successful operation

NameTypeDescription
success
optional
boolean

Whether the operation succeeded

id
optional
number

Identifier

msg
optional
enum

Reason message when success is false

enum: We couldn't validate your trade link, either your inventory is private or you can't trade, There was an error while sending your trade offer, try again later, Please set your steam inventory public, Your tradelink is incorect, please update it, Item price has increased or item is no longer available, Please enter your trade link, System busy, buy_csgo, buy_tf2, buy_rust, buy_dota2, Buy request with projectId: <project_id> already exists, trade-locked listing: pass allow_trade_locked=1 to confirm delayed delivery, double purchase, noFunds, Item price has increased, Trade banned, User has VACBAN or Game Ban, You're banned for not accepting trades, We couldn't validate your trade link, you have trade restrictions

price
optional
number

Item price in integer format (1000 = $1.00 USD)

purchase_status
optional
string

reserved on successful trade-locked purchase

unlock_at
optional
string

RFC 3339 UTC time when the Steam trade lock ends and item can be sent. null for regular items

send_until
optional
string

RFC 3339 UTC delivery deadline

error_msg
optional
string

Detailed reason when success is false. For trade link errors it carries the reason returned by Steam (see Trade link errors below). If there is no extra detail, it equals msg.

Response
{
  "success": true,
  "id": 1,
  "msg": "buy_csgo",
  "price": 1000,
  "purchase_status": "reserved",
  "unlock_at": "2026-08-04T12:00:00Z",
  "send_until": "2026-08-05T12:00:00Z",
  "error_msg": "string"
}