Appearance
Limits & timing
Beyond the holds, a handful of practical limits shape what LootFi can do and how fast. Most come from Steam; a few are protocol limits with fixed, checkable values. None of them affect custody of your item — they affect visibility and throughput.
Steam throttles automated requests
Steam rate-limits programmatic access to inventories, trade offers, and trade history. When it decides it has seen too much traffic from an account, it stops answering for a while.
While that is in effect:
- New deposits pause. The protocol declines to contact Steam rather than sending requests it knows will be refused.
- Deposits already in flight are unaffected in custody terms. Your item is where it was; only the reads that advance the state are deferred.
- Progress resumes on its own once the block clears. No action is needed.
Retrying makes it worse, not better
Every fresh request during a throttle extends it. This is Steam's behaviour, not a policy of ours: the limit is refreshed by the attempt, so a user tapping a button repeatedly keeps their own deposit blocked for longer than if they had waited.
If an action fails with a message about Steam being temporarily unavailable, the correct response is to stop and come back later.
For this reason the protocol refuses locally during a known throttle instead of forwarding the request to Steam — retrying cannot deepen a block that never reaches Steam.
Inventory listings are cached
Your inventory is cached for a short period rather than re-read on every page load. Three consequences:
- An item you just acquired may not appear immediately. Use the refresh control on the deposit page, or wait briefly.
- The cache is dropped after you create a deposit, because your inventory demonstrably just changed. The next read is fresh.
- During a provider outage you may be served a slightly older copy, marked as such, rather than an empty page. A stale list cannot cause a bad deposit — the deposit itself re-validates against Steam — only a failed one.
Batch limits
| Operation | Limit | Where it comes from |
|---|---|---|
| Steam trade offers per deposit | 1 | The protocol requests every item in one offer, so you confirm once. |
Token ids per mintBatch call | 50 | MAX_BATCH in LootSkins. |
Token ids per deTokenize call | 50 | MAX_BATCH in LootSkins. |
A deposit of several items is therefore a single Steam confirmation, not one per skin. A withdrawal of more than 50 tokens has to be split across more than one deTokenize transaction — the contract rejects a longer array outright rather than silently truncating it.
The batch cap is a contract constant, readable on-chain; see LootSkins for the exact interface and Deployments for addresses.
Very large inventories
Steam serves inventories in pages, and the protocol walks those pages to build your list. There is a hard stop on how far it will walk, so an extremely large CS2 inventory can be truncated in the picker: items past that point are not shown and therefore cannot be selected.
If you own an unusually large inventory and a specific item does not appear even after a refresh, this is the likely cause. Everything else — privacy settings, tradability — is worth checking first, since those explain far more missing items than truncation does. See Troubleshooting.
Item stats fill in after the deposit, sometimes after the mint
Float, paint seed, pattern, and sticker data come from inspecting the item, and an item can only be inspected by an account that physically holds it. During the protection window nobody holds it — see Trade protection — so those values cannot be read yet.
The consequence:
deposit accepted ....... stats unknown
protection ends ........ custody account holds the item -> stats can be read
mint ................... token may exist before enrichment completes
shortly after .......... float / pattern / stickers appear on the tokenA token is never delayed waiting for cosmetic data. If you see a freshly minted token with no float, the value has not been looked up yet; it is not a claim that the item has no float.
Missing is not zero
Absent metadata renders as absent, never as 0. This matters for exactly one field in particular: paintSeed: 0 is a real, sometimes valuable pattern seed, not a placeholder for "unknown". Any tool you build on top of the metadata should distinguish "no value yet" from a genuine zero. See Metadata format.
Third-party data can be unavailable
Item stats and reference prices come from third-party providers. Those providers have their own quotas and their own outages.
When one is unavailable, the protocol shows nothing rather than a guess. A reference price that could not be fetched is an absent line, not a zero and not a stale figure presented as current. A float that could not be read is blank until it can be read.
This is deliberate. A wrong number on a page about a valuable item is worse than no number, because people act on it. Reference prices in particular are decoration for judging a listing, never a settlement value — settlement is always the signed order's on-chain price. See Reference prices.
What none of this affects
- Custody. Throttles, cache staleness, and provider outages do not move your item.
- The chain. Listing, buying, and burning are on-chain operations against LootMarket and LootSkins; they do not depend on Steam being reachable.
- Your unlock time. It is computed from Steam's own trade-init time, so a read that arrives late does not push it out.
Related
- Steam rules & limits — every restriction on one page
- Escrow & holds — why some deposits take longer
- Reference prices — where price data comes from and what it is not
- Troubleshooting — symptoms and their causes