is_trash boolean in the response, which you can use to filter out spam without building your own detection logic.
How is_trash is determined depends on the data type: for positions, it’s a per-asset classification that applies the same way for every wallet. For transactions, it’s computed dynamically based on the querying wallet’s history — the same transaction can be spam for one wallet and not for another.
How it works
Positions: per-asset classification
For positions,is_trash is a property of the asset itself. The same token is classified the same way for every wallet. The classification is based on multiple signals:
- Heuristics — Analysis of on-chain behaviors including mass airdrops, impersonation of popular assets (e.g., mimicking name/symbol), and suspicious transfer patterns.
- External intelligence — Multiple third-party data providers to assess token quality.
- Community feedback — Users and partners can report false positives or unflagged spam for review.
- Internal rules — Proprietary logic applied across the system to ensure consistent filtering across APIs and frontend views.
Transactions: context-aware classification
For transactions,is_trash is computed dynamically per request based on the querying wallet’s history. The same transaction can be is_trash: true for one wallet and is_trash: false for another. The evaluation runs through multiple layers:
- User-initiated check — If the wallet owner sent the transaction themselves, it’s never flagged as spam.
- Interaction history — Even if a transaction looks spammy (e.g., a low-value airdrop of an unverified asset), it’s overridden to non-spam if the wallet has previously interacted with that asset.
- Address poisoning detection — Incoming transfers are checked against the wallet’s known legitimate recipients. If the sender address visually resembles a real address the user has sent to (matching first and last few characters), it’s flagged as a poisoning attempt — a scam where attackers send tiny transfers from look-alike addresses to trick users into copying the wrong recipient.
- Rule-based checks — Spam scores, mass transfer detection, blacklisted contracts, and spam NFT mint patterns.
Because transaction spam classification depends on the querying wallet’s context, the same airdrop transaction might be hidden for a wallet that has never interacted with the token, but visible for a wallet that has traded it before.
NFT collections
Spam NFT collections are filtered out by default — no spam collections are returned in API responses. Unlike fungible positions, there is nofilter[trash] toggle for NFT collections.
Using the filter[trash] parameter
The filter[trash] parameter controls spam filtering on supported endpoints:
| Value | Behavior |
|---|---|
only_non_trash | Only return non-spam assets (hides spam) |
only_trash | Only return spam assets |
no_filter | Return everything, spam included |
Default behavior
Defaults differ by endpoint:
- Positions: defaults to
only_non_trash(spam hidden) - Transactions: defaults to
no_filter(spam included) — because transaction spam is context-aware, returning everything by default lets you apply your own filtering logic on top