To help reduce fraud, Valve requires all marketable items to also be temporarily untradable after purchase for a minimum of three days. While it is possible to also temporarily restrict the marketabiltiy of items, we have found that it is not necessary to do so, and that only restricting tradability is sufficient to reduce fraud.
Without restricting tradability after a purchase, fraudsters are able to monetize stolen credit cards by purchasing items using those stolen cards and then trade them to somebody who has agreed to purchase them for cash. Restricting tradability allows for our systems to catch that fraud for you while the items can still be recovered from the fraudster's account.
The Steam Inventory Service
automatically applies our recommended cooldowns as needed. This documentation applies primarily to those looking to create their own implementation of the Steam Asset API.
Implementing the temporary restriction requires four steps:
- Add the trade restriction to the item following a purchase
- Add something to the asset class to indicate that the temporary restriction is active
- Tell Steam and the user that the item is untradable
- Expose to Steam that this restriction will be added following a purchase
We've provided more detail for each of the four steps below.
Add the trade restriction to the item following a purchase
When an item is purchased on the Steam Community Market, you will need to record somewhere on your backend that the item is now untradable for three days (usually recorded with the item's database record or a new attribute associated with that item). You'll want to do this at the same time you change ownership of the item in your TradeSetOwned
implementation, but only when
is set to
is set to
Add something to the asset class to indicate that the temporary restriction is active
You'll need to add something to the item's asset class (in the GetContextContents
response) to indicate that the temporary restriction is active and when it expires. An item's asset class is a black box to Steam, so how you do this is completely up to you. We recommend adding a new class property with
set to true,
of something like
of the time/date the restriction ends, rounded to the nearest day boundary. Rounding to the nearest day boundary reduces the number of unique class combinations, and thus improves Steam's ability to cache your GetAssetClassInfo
Tell Steam and the user that the item is untradable
While the temporary restriction is active, you'll need to make sure the
field in your GetAssetClassInfo
response is false. Keep in mind that it is OK to have an item where
is false, but
You also need to make sure Steam refreshes this information once the temporary restriction passes. To do this, set
to the RFC 3339 UTC formatted time that the item will become tradable (or the time any part of the GetAssetClassInfo response will change). The time that the item will become tradable should have been passed in as part of the asset class as explained in the section above.
It's also nice to remind the user why the item is untradable. You can include a description under
that also includes when the restriction will be removed. To make sure the user sees the correct time in their timezone, you can set the
of the description to
and then place
somewhere in the
of the description where
is the Unix timestamp for the time the restriction will be removed. Alternatively, you can say something like "The item will become tradable in 3 days", but then you have to remember to set the
Expose to Steam that this restriction will be added following a purchase
To do this, you simply need to set the
(or however many days purchased items will be untradable) in your GetAssetClassInfo
response. This value is used to indicate to Steam and users that the item will be untradable for that many days if it were to be purchased on the market. Thus, this value has nothing to do with whether or not the restriction is currently active for an item, and should just always be a constant value of 3 or more for all marketable items.