Skip to main content

Offer Status Codes

StatusMeaningDescription
0ActivePending offer, awaiting response
1AcceptedOffer was accepted and completed
2DeclinedOffer was declined by recipient
3Removed/CancelledOffer was cancelled by creator
-1Invalid BalanceBuyer has insufficient balance
-2ExpiredOffer expired (past expiration time)
-3Invalid ItemItem no longer available or not owned by recipient
Offers are automatically validated when retrieved via GET endpoints. Invalid offers (expired, insufficient balance, item unavailable) are automatically updated with negative status codes.

Get received offers

GET /offers/received
Permission: Connected + API Returns trade offers that the authenticated user has received from other users (where current user is the seller).

Response

{
  "err": false,
  "success": true,
  "content": {
    "offers": [
      {
        "id": 12345,
        "from": "76561198000000000",
        "to": "76561198111111111",
        "status": 0,
        "time": 1706832000,
        "price": 150000,
        "read": 0,
        "createdAt": 1706745600,
        "backpackid": 98765,
        "user": {
          "username": "BuyerName",
          "avatar": "https://avatars.steamstatic.com/..."
        },
        "item": {
          "name": "Team Captain",
          "effect": "Burning Flames",
          "url": "unusual_team_captain",
          "game": 440,
          "quality": "Unusual",
          "image": "https://...",
          "type": "Hat",
          "craftable": 1,
          "assetId": "987654321",
          "wear": null,
          "sheen": "",
          "killstreaker": "",
          "spell": "",
          "parts": null,
          "html": null,
          "user": "76561198111111111",
          "state": 1
        }
      }
    ]
  }
}

Response Fields

FieldTypeDescription
idintegerOffer ID
fromstringBuyer’s Steam ID
tostringSeller’s Steam ID (current user)
statusintegerOffer status code (see table above)
timeintegerExpiration timestamp (Unix time)
priceintegerOffer price in cents
readintegerRead status: 0 = unread, 1 = read
createdAtintegerCreation timestamp
backpackidintegerBackpack item ID
userobjectBuyer information (username, avatar)
itemobjectFull item details from backpack + items tables
The endpoint automatically validates offers and filters out those with status < 0 (invalid). Only active and completed offers are returned.

Get my offers

GET /offers/my
Permission: Connected + API Returns trade offers that the authenticated user has sent to other users (where current user is the buyer).

Response

{
  "err": false,
  "success": true,
  "content": [
    {
      "id": 12345,
      "from": "76561198000000000",
      "to": "76561198111111111",
      "status": 0,
      "time": 1706832000,
      "price": 150000,
      "read": 0,
      "createdAt": 1706745600,
      "backpackid": 98765,
      "user": {
        "username": "SellerName",
        "avatar": "https://avatars.steamstatic.com/..."
      },
      "item": {
        "name": "Team Captain",
        "effect": "Burning Flames",
        "url": "unusual_team_captain",
        "game": 440,
        "quality": "Unusual",
        "image": "https://...",
        "type": "Hat",
        "craftable": 1,
        "assetId": "987654321"
      }
    }
  ]
}
Note: GET /offers/my returns an array directly in content, while GET /offers/received wraps the array in {offers: [...]}.

Create offer

POST /offers/create
Permission: Connected + API Creates a new trade offer to purchase an item from another user.

Body Parameters

id
string
required
Item assetId (Steam asset identifier)
price
integer
required
Offer price in cents (must be >= 0 and < current item price)

Request Example

{
  "id": "987654321",
  "price": 145000
}

Response

Success
{
  "err": false,
  "success": true,
  "content": {
    "message": "Offer created successfully"
  }
}

Error Responses

Error MessageDescription
Missing required parameters: id and priceMissing required fields
Invalid pricePrice is negative
Too many active offersExceeds maximum active offers (default: 10)
Item not found or not availableItem doesn’t exist or not for sale (state != 1)
This item cannot be offeredItem is blacklisted
Offer already existsDuplicate offer for the same item
There is a buyorder for this item at a higher priceBuy order exists with better price
Cannot buy your own itemAttempting to create offer for own item
Price must be lower than or equal to current priceOffer price exceeds listing price
Insufficient balanceBuyer doesn’t have enough balance
Configuration:
  • maxOffer: Maximum active offers per user (default: 10)
  • maxDurationOffer: Offer expiration in seconds (86400 = 24 hours)

Accept offer

POST /offers/accept
Permission: Connected + API Accepts a received trade offer and completes the transaction (seller action).

Body Parameters

id
integer
required
The offer ID to accept

Request Example

{
  "id": 12345
}

Response

Success
{
  "err": false,
  "success": true,
  "content": {
    "message": "Offer accepted successfully"
  }
}
Error
{
  "err": true,
  "success": false,
  "content": {
    "message": "Failed to accept offer or offer not found"
  }
}

Decline offer

POST /offers/decline
Permission: Connected + API Declines a received trade offer (seller action).

Body Parameters

id
integer
required
The offer ID to decline

Request Example

{
  "id": 12345
}

Response

Success
{
  "err": false,
  "success": true,
  "content": {
    "message": "Offer declined successfully"
  }
}
Error
{
  "err": true,
  "success": false,
  "content": {
    "message": "Failed to decline offer or offer not found"
  }
}

Remove/Cancel offer

POST /offers/remove
Permission: Connected + API Cancels a sent offer (buyer action). Only the offer creator can remove it.

Body Parameters

id
integer
required
The offer ID to cancel

Request Example

{
  "id": 12345
}

Response

Success
{
  "err": false,
  "success": true,
  "content": {
    "message": "Offer removed successfully"
  }
}
Error
{
  "err": true,
  "success": false,
  "content": {
    "message": "Failed to remove offer or offer not found"
  }
}