Skip to content

Event Types and Subtypes Reference

This page provides a complete reference for all event types and subtypes in rotki. Understanding these categories is essential for reviewing your transaction history and ensuring your PnL reports are accurate.

How event types work

Every transaction in rotki is categorized with two fields:

  • Event Type: The broad category of what happened (e.g., Trade, Deposit, Spend)
  • Event Subtype: The specific action within that category (e.g., Fee, Reward, Airdrop)

Together, these determine how rotki treats the event in accounting — whether it's taxable, whether it counts as an acquisition or a spend, and how it affects your cost basis.

Not every combination of type and subtype is valid. The table in all valid type/subtype combinations below lists every combination that rotki recognizes.

Event Types

Trade

A trade is an exchange of one asset for another. In rotki, trades are represented as a pair of events with consecutive sequence_index values:

  • First event: Trade type with Spend subtype (what you gave up)
  • Second event: Trade type with Receive subtype (what you got)

Example: Swapping 1 ETH for 2000 USDC on Uniswap.

Default tax treatment: Taxable (Swap accounting treatment). The spend side triggers a cost basis calculation. The receive side is an acquisition at the current market value.

When to use: Any swap, trade, or exchange of one asset for another — whether on a CEX, a DEX, or OTC.

SubtypeUI CategoryDirectionExample
SpendswapOutSending 1 ETH in a swap
ReceiveswapInGetting 2000 USDC in swap
NoneinformationalNeutralInformational trade event
FeefeeOutTrading fee on an exchange

Multi-Trade

Similar to Trade but used when a single transaction involves multiple assets being swapped (e.g., aggregator routes through multiple pools).

SubtypeUI CategoryDirectionExample
SpendswapOutOutgoing side of a multi-hop swap
ReceiveswapInIncoming side of a multi-hop swap
FeefeeOutFee on a multi-asset swap

Deposit

Moving assets into an exchange, wallet, or protocol.

SubtypeUI CategoryDirectionExample
Deposit Assetaccount depositNeutralDepositing ETH to Kraken
Deposit For WrappeddepositOutDepositing DAI to receive cDAI
Deposit To Protocolprotocol depositNeutralDepositing into Aave lending pool
BridgebridgeOutSending ETH to the Arbitrum bridge
Place OrderdepositOutPlacing a limit order (e.g., CoW Swap)
FeefeeOutFee on a deposit

Withdrawal

Moving assets out of an exchange, wallet, or protocol.

SubtypeUI CategoryDirectionExample
Remove Assetaccount withdrawNeutralWithdrawing BTC from Binance
Redeem WrappedwithdrawInRedeeming cDAI back to DAI
Withdraw From Protocolprotocol withdrawalNeutralWithdrawing from Aave lending pool
BridgebridgeInReceiving ETH from the Optimism bridge
Cancel Ordercancel orderInCancelling a CoW Swap order
RefundrefundInGetting refunded from a failed order
Generate DebtborrowInBorrowing from a lending protocol
FeefeeOutFee on a withdrawal

Spend

A plain expenditure — you spent crypto and received nothing (or something non-crypto) in return.

SubtypeUI CategoryDirectionExampleNotes
NonesendOutPaying for a service with BTCTaxable (loss)
FeefeeOutPaying gas fees on EthereumDepends on "EVM Gas Costs" setting
Return WrappedreturnOutReturning aDAI to Aave to get DAI backNot taxable (protocol interaction)
Payback DebtrepayOutRepaying a loan on Aave
DonatedonateOutDonating crypto to a cause
PaymentpayOutMaking a payment
ClawbackclawbackOutAssets clawed back by protocol
BurnburnOutBurning tokens

Receive

You received assets — this is an acquisition event.

SubtypeUI CategoryDirectionExampleNotes
NonereceiveInReceiving a payment in cryptoTaxable (income)
Rewardclaim rewardInReceiving CRV rewards from CurveTaxable (income)
AirdropairdropInReceiving a governance token airdropTaxable (income)
Receive WrappedreceiveInGetting aDAI after depositing DAI to AaveNot taxable (receipt token)
Return WrappedreceiveInGetting back wrapped tokens
Generate DebtborrowInBorrowing assets from a lending protocol
Donatereceive donationInReceiving a donation
Liquidateliquidation rewardInReceiving assets from liquidating a position
Paymentreceive paymentInReceiving a payment
Grantreceive grantInReceiving a grant (e.g., Gitcoin)
Interestreceive interestInReceiving interest from a lending protocol
CashbackcashbackInReceiving cashback rewards
RefundrefundInGetting a refund
SpamspamInSpam/phishing tokens sent to your addressIgnored in accounting

Transfer

Moving assets between your own accounts. Not taxable.

SubtypeUI CategoryDirectionExample
NonetransferNeutralMoving ETH from one wallet to another
DonatedonateOutDonating via a transfer
FeefeeOutFee on a transfer

When to use: If rotki categorized a self-transfer as a spend or trade, change it to Transfer with subtype None to avoid it being counted as taxable.

Staking

Events related to staking assets.

SubtypeUI CategoryDirectionExampleNotes
Deposit AssetstakeOutStaking ETH in the Eth2 deposit contract
Deposit For WrappedstakeOutStaking and receiving a receipt token
Remove AssetunstakeInUnstaking and getting assets back
Redeem WrappedunstakeInRedeeming staked receipt tokens
Rewardstaking rewardInETH2 consensus layer rewardsDepends on "Omit ETH Staking Events" setting
Block Productionnew blockInETH block production reward
MEV RewardmevInMEV reward from block building
FeefeeOutFee related to staking

Migration (Migrate)

Moving assets from one version of a protocol to another, where you don't gain or lose value.

SubtypeUI CategoryDirectionExample
SpendmigrateOutSending SAI in a SAI→DAI migration
ReceivemigrateInReceiving DAI in a SAI→DAI migration

When to use: Protocol upgrades or token migrations where the economic value doesn't change. Both events should have type Migrate, with the outgoing side as Spend and the incoming side as Receive.

Loss

Events where you lost assets involuntarily.

SubtypeUI CategoryDirectionExample
NonelossOutGeneral loss of assets
Liquidateliquidation lossOutGetting liquidated on a loan
HackhackOutLosing assets in a protocol exploit
Liquidity Provision Lossliquidity provision lossOutImpermanent loss realized on exit

Informational

Events that contain useful information but have no financial impact.

SubtypeUI CategoryDirectionExample
NoneinformationalNeutralGeneral informational event
GovernancegovernanceNeutralCasting a governance vote
Deposit AssetinformationalNeutralInformational deposit event
Remove AssetwithdrawInInformational withdrawal event
Place Orderplace orderNeutralOrder placement notification
Createnew projectNeutralCreating a Maker vault or Gnosis Safe
UpdateupdateNeutralUpdating a protocol position
ApplyapplyNeutralApplying for something on-chain
ApproveapprovalNeutralToken approval (spending allowance)
AttestattestNeutralOn-chain attestation (e.g., EAS)
MEV RewardmevInMEV reward info
Block Productionnew blockInBlock production info
ConsolidatecombineNeutralConsolidating positions
DelegatedelegateNeutralDelegating voting power
MessagemessageNeutralOn-chain message

Renew

Renewal of a subscription or recurring service payment.

SubtypeUI CategoryDirectionExample
NonerenewOutPaying for an ENS domain renewal

Deploy

Deploying a smart contract.

SubtypeUI CategoryDirectionExample
NonedeployNeutralDeploying a smart contract
Spenddeploy with spendOutDeploying with an ETH spend
NFTmint nftInDeploying/minting an NFT

Mint

Minting tokens or NFTs.

SubtypeUI CategoryDirectionExample
NFTmint nftInMinting an NFT
FeefeeOutMinting fee

Burn

Burning tokens or NFTs.

SubtypeUI CategoryDirectionExample
NFTburnOutBurning an NFT

Fail

A failed transaction (you still pay gas).

SubtypeUI CategoryDirectionExample
FeefailedOutGas fee from a failed transaction

Adjustment

Forced adjustments by a system like a centralized exchange (e.g., exchange delisting a token and converting it).

SubtypeUI CategoryDirectionExample
SpendsendOutAsset removed by exchange adjustment
ReceivereceiveInAsset received from adjustment

Margin

Margin trading events.

SubtypeUI CategoryDirectionExample
ProfitprofitInProfit from margin trade
LosslossOutLoss from margin trade
FeefeeOutMargin trading fee

Transaction to Self

A transaction where you sent assets to yourself (same address).

SubtypeUI CategoryDirectionExample
Noneself transactionNeutralSending ETH to your own address

Exchange Adjustment

Adjustments made by exchanges to your balance.

SubtypeUI CategoryDirectionExample
SpendsendOutExchange debits your balance
ReceivereceiveInExchange credits your balance

Exchange Transfer

Transfers associated with exchange deposits/withdrawals that have both an on-chain and exchange side.

SubtypeUI CategoryDirectionExample
Spendaccount withdrawNeutralOn-chain side of an exchange withdrawal
Receiveaccount depositNeutralOn-chain side of an exchange deposit
FeefeeOutFee on the transfer

All valid type/subtype combinations

The following table lists every valid combination of event type and subtype recognized by rotki. Combinations not listed here are not valid.

Event TypeValid Subtypes
TradeSpend, Receive, None, Fee
StakingDeposit Asset, Deposit For Wrapped, Reward, Remove Asset, Redeem Wrapped, Block Production, MEV Reward, Fee
DepositDeposit Asset, Deposit For Wrapped, Deposit To Protocol, Bridge, Place Order, Fee
WithdrawalRemove Asset, Redeem Wrapped, Withdraw From Protocol, Bridge, Cancel Order, Refund, Generate Debt, Fee
TransferDonate, None, Fee
SpendReturn Wrapped, Payback Debt, Fee, Donate, Payment, None, Clawback, Burn
ReceiveReward, Receive Wrapped, Generate Debt, Return Wrapped, Airdrop, Donate, None, Liquidate, Payment, Grant, Interest, Cashback, Refund, Spam
AdjustmentSpend, Receive
InformationalNone, Governance, Deposit Asset, Remove Asset, Place Order, Create, Update, Apply, Approve, Attest, MEV Reward, Block Production, Consolidate, Delegate, Message
MigrateSpend, Receive
RenewNone
DeployNone, Spend, NFT
FailFee
LossLiquidate, Hack, Liquidity Provision Loss, None
MintNFT, Fee
BurnNFT
Multi TradeSpend, Receive, Fee
MarginProfit, Loss, Fee
Transaction To SelfNone
Exchange AdjustmentSpend, Receive
Exchange TransferSpend, Receive, Fee

Quick reference: common customizations

SituationEvent TypeEvent Subtype
Swap / trade on DEX or CEXTradeSpend + Receive (pair)
Moving assets to an exchangeDepositDeposit Asset
Moving assets from an exchangeWithdrawalRemove Asset
Depositing into DeFi (get receipt token)DepositDeposit For Wrapped
Depositing into DeFi (no receipt token)DepositDeposit To Protocol
Withdrawing from DeFi (return receipt)WithdrawalRedeem Wrapped
Withdrawing from DeFi (no receipt)WithdrawalWithdraw From Protocol
Receiving wrapped/receipt tokensReceiveReceive Wrapped
Returning wrapped/receipt tokensSpendReturn Wrapped
Sending assets across a bridgeDepositBridge
Receiving assets from a bridgeWithdrawalBridge
Transfer between own walletsTransferNone
Paying gas feesSpendFee
Receiving staking rewardsStakingReward
Claiming DeFi rewardsReceiveReward
Receiving an airdropReceiveAirdrop
Paying for a serviceSpendNone
Getting paid in cryptoReceiveNone
Borrowing from a protocolWithdrawalGenerate Debt
Repaying a loanSpendPayback Debt
Token migration (old→new)MigrateSpend + Receive (pair)
ENS renewal, subscriptionRenewNone
Token approval, governance voteInformationalApprove / Governance
Lost in hack / exploitLossHack
Liquidation (your position)LossLiquidate
Failed transaction (gas only)FailFee

Entry types

In addition to event type/subtype, rotki distinguishes between different entry types based on the source of the event:

Entry TypeDescription
History EventGeneric events from any source (exchanges, manual input, CSV import)
EVM EventDecoded on-chain events from EVM chains (Ethereum, Optimism, Polygon, Arbitrum, Base, Gnosis)
EVM Swap EventA specialized EVM event for swaps, supporting multiple spend/receive assets
ETH Withdrawal EventETH consensus layer withdrawal
ETH Block EventETH block production reward
ETH Deposit EventETH2 staking deposit
Asset Movement EventExchange deposit or withdrawal
Swap EventA trade/swap from non-EVM sources

The entry type determines which fields are available when editing an event. For example, EVM events have a Counterparty field (the protocol or address you interacted with), while generic history events do not.

Editing events

If an event is miscategorized, you can edit it directly from the History Events page. See the common customization guide for step-by-step instructions and examples.

Changes you make to event types/subtypes directly affect how they are processed in the PnL report.