Skip to main content
The offers system allows users to make price offers on items listed by other users, similar to a bidding mechanism.

Get received offers

GET /offers/received
GET /offers/received/{userid}
Permission: Connected (admin for {userid} variant)
userid
string
SteamID of user (admin only)
Returns all active offers received by the user. The API automatically invalidates offers where:
  • The buyer has insufficient balance (status → -1)
  • The offer has expired (status → -2)
  • The item is no longer owned by the seller or not on sale (status → -3)

Offer type

FieldTypeDescription
idintegerOffer ID
fromstringBuyer SteamID
tostringSeller SteamID
statusintegerOffer status
timeintegerExpiration timestamp
priceintegerOffered price in cents
readintegerWhether the offer has been read
createdAtintegerCreation timestamp
backpackidintegerBackpack entry ID
userobjectBuyer info (username, avatar)
itemobjectItem details (see below)

Offer item type

FieldTypeDescription
namestringItem name
effectstringUnusual effect
urlstringItem URL slug
gameintegerGame App ID
qualitystringItem quality
imagestringItem image URL
typestringItem type
craftableintegerCraftable status
assetIdstringAsset ID
wearfloat|nullWear value
sheenstringKillstreak sheen
killstreakerstringKillstreaker
spellstringSpells
partsstringStrange parts
stateintegerItem state

Offer statuses

StatusDescription
0Active / Pending
1Accepted
2Declined by seller
3Removed by buyer
-1Auto-cancelled: buyer insufficient balance
-2Auto-cancelled: offer expired
-3Auto-cancelled: item unavailable

Get my offers

GET /offers/my
GET /offers/my/{userid}
Permission: Connected (admin for {userid} variant) Returns all active offers made by the user. Same response structure as received offers, with user containing the seller’s info instead.

Create offer

POST /offers/create
Permission: Connected Creates a new price offer on an item.

Request body

id
integer
required
Asset ID of the item (backpack assetId)
price
number
required
Offered price in cents (must be ≤ current listing price)
{
  "id": 12345678,
  "price": 10000
}

Validation rules

  • Maximum 10 active offers per user (configurable)
  • Offer price must be ≤ current listing price
  • Cannot offer on your own items
  • Cannot create duplicate offers on the same item
  • If a buy order exists at a higher price, the offer is rejected
  • User must have sufficient balance
  • Offers expire after 24 hours (configurable)

Response

{
  "success": true,
  "message": "Offer created successfully"
}

Decline offer

POST /offers/decline
Permission: Connected Declines a received offer. Only the seller can decline.
id
integer
required
Offer ID
{
  "id": 123
}

Remove offer

POST /offers/remove
Permission: Connected Removes/cancels an offer you made. Only the buyer can remove.
id
integer
required
Offer ID
{
  "id": 123
}

Accept offer

POST /offers/accept
Permission: Connected Accepts a received offer. This triggers the full transaction:
  1. Buyer’s balance is deducted by the offer price
  2. Item ownership is transferred to the buyer (state set to 0)
  3. Seller receives 95% of the offer price (5% marketplace fee)
  4. Transaction is recorded in history for both parties
  5. Daily stats are updated
id
integer
required
Offer ID
{
  "id": 123
}
The 5% marketplace fee is automatically applied. The seller receives ceil(price × 0.95).