Buy a lot

POST/v1/lots/{id}/buy

Holds the price from your balance and opens a deal. Send the price you saw: if the seller changed it, the purchase is refused. The Idempotency-Key makes a retry safe, as the same key answers with the same deal and buys nothing more. You need a trade link first.

Request

Path parameters

  • idstringrequired

    The lot's id.

Headers

  • Idempotency-Keystringrequired

    Any unique string for this purchase. Use a new one for each lot, and the same one when you retry.

Request body

  • price_centsintegerrequired

    The price in US cents: the new one for a lot, the one you saw for a purchase, the one you offer in a bargain.

curl -X POST 'https://api.rockvel.store/v1/lots/019a4b9d-2e17-7a58-b1c6-0d3f6a9e4b12/buy' \
  -H "Authorization: Bearer $ROCKVEL_KEY" \
  -H 'Idempotency-Key: 8f2c1d6e-4b7a-4e19-a3d5-6c0b9e27f114' \
  -H 'Content-Type: application/json' \
  -d '{"price_cents":3250}'

Answer 201

  • idstring

    The deal's id.

  • numberstring

    The deal's short number, the end of its id. Both sides see it, and the trade offer's message names it.

  • rolestring

    Your side of the deal.

    One ofbuyerseller

  • statusstring

    Where the deal stands.

    One ofpaidsentprotectedsettledcancelledfailedrolled_backdisputed

  • reasonstringoptional

    Why it ended up here, when there is a reason.

  • item_slugstring

    The item's slug.

  • itemobject

    The item as the lot showed it.

    Fields of item
    • asset_idstring

      Steam's id of this very item. It changes when the item changes hands.

    • namestring

      Name as Steam shows it.

    • market_hash_namestring

      Name on the Steam market. A market card has one for each.

    • image_urlstring

      Steam's icon of the item.

    • kindstring

      What sort of item it is.

      One ofweaponknifeglovesagentstickerpatchcharmgraffitimusic_kitcontainercollectibleother

    • raritystringoptional

      Rarity in Steam's words.

    • exteriorstringoptional

      Exterior as a code: FN, MW, FT, WW or BS.

    • stattrakbooleanoptional

      The item is StatTrak.

    • souvenirbooleanoptional

      The item is a Souvenir.

    • marketableboolean

      Steam lets this item be sold on its own market.

    • floatnumberoptional

      Float value, from 0 to 1. Left out for items without one.

    • paint_seedintegeroptional

      Paint seed, from 0 to 1000.

    • kill_countintegeroptional

      StatTrak's count of kills.

    • paint_indexintegeroptional

      The paint's number in the game.

    • def_indexintegeroptional

      The weapon's number in the game.

    • phasestringoptional

      The phase of a Doppler or Gamma Doppler.

    • name_tagstringoptional

      The name tag on the item.

    • inspect_linkstringoptional

      Opens the item in the game.

    • highlight_urlstringoptional

      Video of a souvenir charm's moment.

    • stickersobject[]optional

      Stickers on the item, and patches on an agent.

      Fields of stickers
      • idintegeroptional

        Its number in the game.

      • namestring

        Its name.

      • image_urlstringoptional

        Its picture.

      • slotinteger

        Which place on the item it takes.

      • wearnumberoptional

        How scraped it is, 0 for intact.

      • scalenumberoptional

        Its scale, as the game places it.

      • rotationnumberoptional

        Its rotation, as the game places it.

      • offset_xnumberoptional

        Its offset along x, as the game places it.

      • offset_ynumberoptional

        Its offset along y, as the game places it.

      • offset_znumberoptional

        Its offset along z, as the game places it.

      • tint_idintegeroptional

        Its tint's number in the game.

      • patternintegeroptional

        The pattern of a charm.

      • highlightintegeroptional

        The moment on a souvenir charm.

    • keychainsobject[]optional

      Charms on the item.

      Fields of keychains
      • idintegeroptional

        Its number in the game.

      • namestring

        Its name.

      • image_urlstringoptional

        Its picture.

      • slotinteger

        Which place on the item it takes.

      • wearnumberoptional

        How scraped it is, 0 for intact.

      • scalenumberoptional

        Its scale, as the game places it.

      • rotationnumberoptional

        Its rotation, as the game places it.

      • offset_xnumberoptional

        Its offset along x, as the game places it.

      • offset_ynumberoptional

        Its offset along y, as the game places it.

      • offset_znumberoptional

        Its offset along z, as the game places it.

      • tint_idintegeroptional

        Its tint's number in the game.

      • patternintegeroptional

        The pattern of a charm.

      • highlightintegeroptional

        The moment on a souvenir charm.

    • tagsobject[]optional

      All the labels Steam gives the item.

      Fields of tags
      • categorystring

        The label's kind, such as Collection.

      • namestring

        The label itself.

    • notesstring[]optional

      Steam's lines about this item: its match, its date of issue, what a container holds.

    • referenceobjectoptional

      A hint for your price: the cheapest lot of this name on lis-skins, of this phase for a Doppler. Float, pattern and stickers do not count in it. Only in your inventory and stall, and left out when lis-skins has no such lot.

      Fields of reference
      • price_centsinteger

        The price in US cents.

      • offersinteger

        How many lots of this name, or this phase, lis-skins has.

  • price_centsinteger

    The price in US cents.

  • fee_centsinteger

    The seller's fee: 1.5% of the price, rounded up to a cent.

  • offer_idstringoptional

    The Steam offer, once there is one.

  • groupstring

    The same for deals that go to the buyer in one trade offer: the offer's id once there is one, before that a key that says nothing of the two sides.

  • actionsstring[]

    What you can do with the deal now.

    One ofsendcancelclose_offerdispute

  • partnerobjectoptional

    The other side of the deal: its Steam ID always, and in the list of deals also what Steam shows of them.

    Fields of partner
    • steam_idstring

      Their SteamID64.

    • namestringoptional

      Their name on Steam now.

    • avatar_urlstringoptional

      Their avatar on Steam now.

    • member_sincedate-timeoptional

      When their Steam account was made, unless the profile is private.

    • levelintegeroptional

      Their Steam level now, for the other side of a deal under way, unless the profile is private. Check it in Steam Guard: an account made up to look like them cannot copy it.

    • service_yearsintegeroptional

      Their Years of Service badge on Steam, as Steam counts it, with the level.

    • service_xpintegeroptional

      The XP of that badge.

  • paid_atdate-time

    When the lot was bought.

  • sent_atdate-timeoptional

    When the buyer could first accept the offer.

  • accepted_atdate-timeoptional

    When the item changed hands.

  • finished_atdate-timeoptional

    When the deal ended.

  • deadline_atdate-timeoptional

    When the deal moves on by itself.

  • buyer_cancels_atdate-timeoptional

    When the buyer can cancel. Left out once that time has come.

{
  "id": "019a4c1e-6f3a-7c21-9d40-5b2e8f1a7c03",
  "number": "",
  "role": "buyer",
  "status": "paid",
  "item_slug": "ak-47-redline-field-tested",
  "item": {
    "asset_id": "54267934219",
    "name": "AK-47 | Redline (Field-Tested)",
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "image_url": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLwlcK3wiFO0POlPPNSI_-RHGavzOtyufRkASq2lkxx4W-HnNyqJC3FZwYoC5p0Q7FfthW6wdWxPu-371Pdit5HnyXgznQeHYY5wyA",
    "kind": "weapon",
    "rarity": "Classified Rifle",
    "exterior": "FT",
    "marketable": true,
    "float": 0.2613,
    "paint_seed": 412,
    "paint_index": 282,
    "def_index": 7,
    "inspect_link": "steam://run/730//+csgo_econ_action_preview%2006168DEAFD92CC071E0E26F0072E0536023EE1",
    "stickers": [
      {
        "id": 1693,
        "name": "Sticker | Crown (Foil)",
        "slot": 1,
        "wear": 0.08
      }
    ],
    "tags": [
      { "category": "Type", "name": "Rifle" },
      { "category": "Weapon", "name": "AK-47" },
      {
        "category": "Collection",
        "name": "The Phoenix Collection"
      },
      {
        "category": "Quality",
        "name": "Classified Rifle"
      },
      { "category": "Exterior", "name": "Field-Tested" }
    ]
  },
  "price_cents": 3250,
  "fee_cents": 49,
  "group": "b7e41c09d2a6",
  "actions": [],
  "paid_at": "2026-11-02T09:41:17Z",
  "deadline_at": "2026-11-02T21:41:17Z",
  "buyer_cancels_at": "2026-11-02T10:11:17Z"
}

Refusals

StatusCodeWhen
402not_enough_moneyThe balance doesn't cover the price.
403bannedThis account can't start anything new on Rockvel.
409lot_goneThe lot sold or was taken down.
409no_trade_urlSet your trade link first.
409own_lotThis is your own lot.
409price_changedThe seller changed the price. Read the lot and try again.

Any route can also answer with the statuses on the Errors page.