Skip to content
SkinPlata
Guide

Steam trade protection: what merchants need to know

Since July 2025 a CS2 trade is only final after seven days. Here is how that changes skin payments — and how to stay safe without slowing your users down.

Updated · SkinPlata team

What changed

Steam introduced trade protection for Counter-Strike 2 in July 2025. Items received in a trade stay protected for 7 days: they cannot be traded on, and the person who sent them can reverse the trade from their Steam trade history. A reversal undoes all protected trades of that account and puts it on a trade cooldown.

The goal is to help people whose accounts were stolen. For merchants it means a skin payment is not final the moment the trade is accepted.

How SkinPlata handles it

  • deposit.in_hold — the trade was accepted; the items are under protection. hold_until on the payment tells you when it ends.
  • deposit.hold_approved — you released the payment early from your side (webhook only, nothing is credited yet).
  • deposit.success — protection is over; the amount is final and credited to your balance.
  • deposit.hold_returned — the trade was reversed; if it was already credited, the amount is taken back.

Crediting your users safely

You can credit a user on deposit.in_hold so they can play or buy straight away, or wait for deposit.success. A common middle ground: credit at once for accounts with a history on your site, and wait for final status on new ones, or on large amounts.

Whatever you choose, re-read the payment from the API before crediting, and handle deposit.hold_returned by taking the balance back from the user.

Try it with test keysSign up, submit your project and take a simulated skin payment in minutes. No documents.
Create an account

FAQ

Does trade protection apply to Dota 2 and Rust?

Steam introduced it for CS2. We handle every payment the same way and report any reversal.

Can I shorten the 7 days?

No — Steam controls the window. You only choose when to credit your own user.

What happens to my balance on a reversal?

If the payment was credited, a deposit_reversal entry takes the amount back and you get deposit.hold_returned.