Offer a price

POST/v1/lots/{id}/bargains

Offers the seller a price below the lot's, no lower than its max_discount allows: price_cents × (100 − max_discount) / 100, rounded up to a cent. The seller has 24 hours to accept, counter or decline. No money is held, but you need it on your balance now. If the seller accepts, the lot is sold to you at that price as a deal of its own, and if you no longer have the money then, the bargain ends. A new price for the same lot takes the place of your earlier one, and you can keep 100 waiting at once. You need a trade link first.

Request

Path parameters

  • idstringrequired

    The lot's id.

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/bargains' \
  -H "Authorization: Bearer $ROCKVEL_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"price_cents":3000}'

Answer 201

  • idstring

    The bargain's id.

  • rolestring

    Your side of the bargain.

    One ofbuyerseller

  • statusstring

    Where the bargain stands. One whose time ran out reads expired.

    One ofopencounteredaccepteddeclinedcancelledexpired

  • lot_idstring

    The lot it is for.

  • item_slugstring

    The item's slug.

  • itemobject

    The item as the lot shows 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.

  • lot_price_centsinteger

    What the lot costs now, in US cents.

  • price_centsinteger

    The buyer's price, in US cents.

  • counter_centsintegeroptional

    The seller's answer to it, in US cents. Left out until there is one.

  • order_idstringoptional

    The deal an accepted bargain became.

  • actionsstring[]

    What you can do with the bargain now.

    One ofacceptcounterdeclinecancel

  • created_atdate-time

    When the buyer offered the price.

  • expires_atdate-time

    When the side whose turn it is runs out of time.

{
  "id": "019a4d3f-5a72-7b19-8c0e-2f6d1b9a4e57",
  "role": "buyer",
  "status": "open",
  "lot_id": "019a4b9d-2e17-7a58-b1c6-0d3f6a9e4b12",
  "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" }
    ]
  },
  "lot_price_cents": 3250,
  "price_cents": 3000,
  "actions": ["cancel"],
  "created_at": "2026-11-02T07:41:17Z",
  "expires_at": "2026-11-03T07:41: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.
409too_many_bargainsYou already have 100 prices waiting for an answer. Take one back first.
422bad_bargainThe lot takes no bargains, the price isn't below the lot's and within its max_discount, or a counter isn't between the buyer's price and the lot's.

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