Unaffiliated

Home Documentation & Help
Steamworks Documentation
Restricting Tradability After Market Purchases

Overview

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.

Implementation

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_market is set to 1 and audit_action is set to 101 (Trade Commit).

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 and GetAssetClass 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 instance set to true, name of something like tradable_after, and value 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 responses.

Tell Steam and the user that the item is untradable

While the temporary restriction is active, you'll need to make sure the tradable field in your GetAssetClassInfo response is false. Keep in mind that it is OK to have an item where tradable is false, but marketable is true.

You also need to make sure Steam refreshes this information once the temporary restriction passes. To do this, set cache_expiration 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 owner_descriptions 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 type of the description to bbcode and then place [date]####[/date] somewhere in the value 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 cache_expiration appropriately.

Expose to Steam that this restriction will be added following a purchase

To do this, you simply need to set the market_tradable_restriction field to 3 (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.