How to Check a Solana Token for Transfer Fees and Transfer Hooks
Token-2022 mints can include a protocol-level transfer fee, a transfer hook, or both. A transfer fee withholds part of a transfer according to parameters stored on the mint. A transfer hook calls a designated on-chain program during a transfer, allowing application-specific validation. These extensions are inspectable, but a useful review must decode current parameters, authorities, program upgradeability, and the exact transfer path.
Editorial research by Coinatio, checked against the primary documentation cited below. Educational content only.

- Transfer fees are defined by basis points and a maximum fee, and configuration may include older and newer schedules tied to epochs.
- Withheld fees remain in token accounts or the mint until an authorized withdrawal process collects them.
- A transfer hook can approve or reject a transfer according to program logic, so the hook program and its extra account requirements need review.
- A quote or simulation is transaction-specific and can become stale after configuration, epoch, account, or program changes.
Confirm the mint and token program
Start with the exact mint address. Token symbols are easy to duplicate, and token accounts are often mistaken for mints. Read the mint account owner and verify that it is Token-2022. The original Token Program does not store these Token-2022 extensions, although applications can impose separate fees or restrictions outside the token program.
Use an explorer that exposes extensions or retrieve and decode the mint account through Solana RPC and Token-2022 libraries. Extension data is stored in a type-length-value area after the base mint data. A generic explorer may show supply and decimals correctly while omitting this additional data, so absence on one interface is weak evidence.
Read the transfer fee configuration
The Transfer Fee Config extension includes a fee in basis points and a maximum fee denominated in the token's smallest units. The calculated fee is constrained by that maximum. Decode decimals before presenting the cap in display units. Configuration can carry older and newer fee schedules so that a change activates according to epoch rules rather than appearing as one timeless percentage.
Record the transfer-fee configuration authority and withheld-withdraw authority. The first can update fee settings when active. The second can withdraw accumulated withheld tokens. Fees may be withheld in destination token accounts and later harvested to the mint before withdrawal. This differs from an immediate payment to an arbitrary recipient on every transfer.
Decode the transfer hook
The Transfer Hook extension identifies a program invoked as part of a transfer. That program can enforce rules based on the transfer and declared extra accounts. Common designs include allowlists, account-state checks, or application accounting. The hook can cause a transfer to fail, so reviewing only the mint's fee fields does not establish transfer behavior.
Record the hook program ID and the authority allowed to update the hook configuration. Then inspect the program's verification status, executable data, deployment history, and upgrade authority. Decode the extra-account-metas configuration used to resolve additional accounts. A user interface that cannot supply required accounts may fail even when another integration succeeds.
Estimate a real transfer without signing
For fees, calculate the expected amount using the active epoch schedule, mint decimals, basis points, and cap. For hooks, construct the exact instruction with source, mint, destination, authority, amount, and required extra accounts. Simulate it through RPC from a wallet-free or read-only environment. Do not approve a transaction merely to discover what it contains.
Inspect the complete message produced by the application. A token-level fee is only one possible cost. A swap can include price impact, pool fees, priority fees, and application instructions. Simulation shows how a particular transaction behaves against a particular recent state; it is not a permanent statement about all routes or transfer amounts.
- Verify the mint and Token-2022 owner.
- Record fee schedules, cap, decimals, and both fee authorities.
- Record hook program, update authority, extra accounts, and upgrade authority.
- Simulate the exact instruction and inspect every program invocation.
Limitations of extension checks
Configuration can change when an authority remains active. Epoch transitions can select a different fee schedule. Hook programs can read changing account state, and upgradeable programs can acquire new logic. RPC simulation can also differ from later execution because blockhashes, balances, account data, and network conditions change.
These checks cover token-program behavior, not every application surrounding the token. Routers, pools, custodians, and wallet interfaces add their own logic. State the slot, epoch, amount, route, and accounts used for an estimate, and avoid reducing several independent mechanisms to a single tax percentage.
Sources
This article explains technical and market-data concepts. It is not financial, legal, tax, or investment advice. Verify current chain state and primary documentation independently.


