---
title: "Scan Token"
method: POST
path: "/v0/token/scan"
tags: ["Token"]
---

# Scan Token

`POST /v0/token/scan`

Gets a token address and scan the token to identify any indication of malicious behavior

## Request body

- TokenValidationRequest
  - `metadata` TokenMetadata
    - `domain` string, nullable — cross reference transaction against the domain.
  - `chain` 'arbitrum' | 'avalanche' | 'base' | 'bsc' | 'ethereum' | 'optimism' | 'polygon' | 'zora' | 'solana' | 'starknet' | 'starknet-sepolia' | 'stellar' | 'linea' | 'degen' | 'zksync' | 'scroll' | 'blast' | 'soneium-minato' | 'base-sepolia' | 'bitcoin' | 'abstract' | 'soneium' | 'ink' | 'berachain' | 'unichain' | 'ronin' | 'sui' | 'hedera' | 'hyperevm' | 'xlayer' | 'monad' | 'megaeth' | 'tempo' | 'sei' | 'kaia' | 'tron' | 'robinhood' | 'flare', required — The chain name
  - `address` string, required — Token address to validate (EVM / Solana / Stellar / Starknet)
  - `token_id` integer, nullable — The ID of the specific NFT within an ERC-721 or ERC-1155 collection.

## Response `200`

Successful Response

- TokenValidationResponse
  - `result_type` 'Benign' | 'Warning' | 'Malicious' | 'Spam', required
  - `malicious_score` string, required — Score between 0 to 1 (double)
  - `attack_types` object, required — Dictionary of detected attacks found during the scan
  - `chain` 'arbitrum' | 'avalanche' | 'base' | 'bsc' | 'ethereum' | 'optimism' | 'polygon' | 'zora' | 'solana' | 'starknet' | 'starknet-sepolia' | 'stellar' | 'linea' | 'degen' | 'zksync' | 'scroll' | 'blast' | 'soneium-minato' | 'base-sepolia' | 'bitcoin' | 'abstract' | 'soneium' | 'ink' | 'berachain' | 'unichain' | 'ronin' | 'sui' | 'hedera' | 'hyperevm' | 'xlayer' | 'monad' | 'megaeth' | 'tempo' | 'sei' | 'kaia' | 'tron' | 'robinhood' | 'flare', required — The chain name
  - `address` string, required — Token address to validate (EVM / Solana)
  - `metadata` union, required — Metadata of the token
    - SolanaMetadata
      - `type` string, nullable — Type of the token
      - `name` string, nullable — Name of the token
      - `symbol` string, nullable — Symbol of the token
      - `decimals` integer, nullable — Decimals of the token
      - `image_url` string, nullable — URL of the token image
      - `description` string, nullable — Description of the token
      - `deployer` string, nullable — Address of the deployer of the fungible token
      - `deployer_balance` Amount
        - `amount` number, nullable
        - `amount_wei` string, nullable
      - `contract_balance` Amount
        - `amount` number, nullable
        - `amount_wei` string, nullable
      - `owner_balance` Amount
        - `amount` number, nullable
        - `amount_wei` string, nullable
      - `owner` string, nullable — Contract owner address
      - `creation_timestamp` string, nullable — Contract deploy date
      - `external_links` ExternalLinks
        - `homepage` string, nullable
        - `twitter_page` string, nullable
        - `telegram_channel_id` string, nullable
      - `urls` string[], nullable — Urls associated with the token
      - `malicious_urls` string[], nullable — Malicious urls associated with the token
      - `token_creation_initiator` string, nullable — Address of the token creation initiator, only set if the tokens was created by a well known token launch platform
      - `impersonation_targets` ImpersonationTarget[], nullable — List of tokens that this token is impersonating, if detected as an impersonator
        - `chain` string, required — Blockchain network of the target token
        - `address` string, required — Address of the token being impersonated
        - `name` string, nullable — Name of the token being impersonated
        - `symbol` string, nullable — Symbol of the token being impersonated
        - `source` 'TOP_TOKEN' | 'USER_DEFINED' — Source of the impersonation match
      - `mint_authority` string, nullable — Solana token mint authority account
      - `update_authority` string, nullable — Solana token update authority account
      - `freeze_authority` string, nullable — Solana token freeze authority account
      - `permanent_delegate` string, nullable — Solana token permanent delegate account
    - BitcoinMetadataToken
      - `type` string, nullable — Type of the token
      - `name` string, nullable — Name of the token
      - `symbol` string, nullable — Symbol of the token
      - `decimals` integer, nullable — Decimals of the token
      - `id` string, nullable — The unique ID for the Rune
      - `number` integer, nullable — The rune's unique sequential number.
      - `formatted_name` string, nullable — The formatted name of the rune, with spacers
    - EvmMetadataToken
      - `type` string, nullable — Type of the token
      - `name` string, nullable — Name of the token
      - `symbol` string, nullable — Symbol of the token
      - `decimals` integer, nullable — Decimals of the token
      - `image_url` string, nullable — URL of the token image
      - `description` string, nullable — Description of the token
      - `deployer` string, nullable — Address of the deployer of the fungible token
      - `deployer_balance` Amount
        - `amount` number, nullable
        - `amount_wei` string, nullable
      - `contract_balance` Amount
        - `amount` number, nullable
        - `amount_wei` string, nullable
      - `owner_balance` Amount
        - `amount` number, nullable
        - `amount_wei` string, nullable
      - `owner` string, nullable — Contract owner address
      - `creation_timestamp` string, nullable — Contract deploy date
      - `external_links` ExternalLinks
        - `homepage` string, nullable
        - `twitter_page` string, nullable
        - `telegram_channel_id` string, nullable
      - `urls` string[], nullable — Urls associated with the token
      - `malicious_urls` string[], nullable — Malicious urls associated with the token
      - `token_creation_initiator` string, nullable — Address of the token creation initiator, only set if the tokens was created by a well known token launch platform
      - `impersonation_targets` ImpersonationTarget[], nullable — List of tokens that this token is impersonating, if detected as an impersonator
        - `chain` string, required — Blockchain network of the target token
        - `address` string, required — Address of the token being impersonated
        - `name` string, nullable — Name of the token being impersonated
        - `symbol` string, nullable — Symbol of the token being impersonated
        - `source` 'TOP_TOKEN' | 'USER_DEFINED' — Source of the impersonation match
  - `fees` Fees, required
    - `transfer` number, nullable — Transfer fee of the token
    - `transfer_fee_max_amount` integer, nullable — The maximum value that a transfer fee will cost
    - `buy` number, nullable — Buy fee of the token
    - `sell` number, nullable — Sell fee of the token
  - `features` Feature[] — List of features associated with the token
    - `feature_id` 'VERIFIED_CONTRACT' | 'UNVERIFIED_CONTRACT' | 'HIGH_TRADE_VOLUME' | 'MARKET_PLACE_SALES_HISTORY' | 'HIGH_REPUTATION_TOKEN' | 'ONCHAIN_ACTIVITY_VALIDATOR' | 'STATIC_CODE_SIGNATURE' | 'KNOWN_MALICIOUS' | 'IS_EOA' | 'IS_CONTRACT' | 'ERC20_CONTRACT' | 'TRUSTED_CONTRACT' | 'BENIGN_CREATOR' | 'METADATA' | 'AIRDROP_PATTERN' | 'IMPERSONATOR' | 'INORGANIC_VOLUME' | 'DYNAMIC_ANALYSIS' | 'CONCENTRATED_SUPPLY_DISTRIBUTION' | 'HONEYPOT' | 'INSUFFICIENT_LOCKED_LIQUIDITY' | 'UNSTABLE_TOKEN_PRICE' | 'RUGPULL' | 'WASH_TRADING' | 'CONSUMER_OVERRIDE' | 'INAPPROPRIATE_CONTENT' | 'HIGH_TRANSFER_FEE' | 'HIGH_BUY_FEE' | 'HIGH_SELL_FEE' | 'UNSELLABLE_TOKEN' | 'IS_MINTABLE' | 'REBASE_TOKEN' | 'LIQUID_STAKING_TOKEN' | 'MODIFIABLE_TAXES' | 'CAN_BLACKLIST' | 'CAN_WHITELIST' | 'HAS_TRADING_COOLDOWN' | 'EXTERNAL_FUNCTIONS' | 'HIDDEN_OWNER' | 'TRANSFER_PAUSEABLE' | 'OWNERSHIP_RENOUNCED' | 'OWNER_CAN_CHANGE_BALANCE' | 'PROXY_CONTRACT' | 'SIMILAR_MALICIOUS_CONTRACT' | 'IMPERSONATOR_SENSITIVE_ASSET' | 'IMPERSONATOR_HIGH_CONFIDENCE' | 'IMPERSONATOR_MEDIUM_CONFIDENCE' | 'IMPERSONATOR_LOW_CONFIDENCE' | 'IMPERSONATION_PROTECTED' | 'FAKE_VOLUME' | 'HIDDEN_SUPPLY_BY_KEY_HOLDER' | 'FAKE_TRADE_MAKER_COUNT' | 'TRANSFER_FROM_REVERTS' | 'OFFENSIVE_TOKEN_METADATA' | 'LISTED_ON_CENTRALIZED_EXCHANGE' | 'SANCTIONED_CREATOR' | 'SPAM_TEXT' | 'BONDING_CURVE_TOKEN' | 'HEAVILY_SNIPED' | 'SOLANA_TOKEN_2022' | 'POST_DUMP' | 'DEX_PAID' | 'LOW_REPUTATION_CREATOR' | 'SNIPE_AT_MINT' | 'TRANSFER_HOOK_ENABLED' | 'CONFIDENTIAL_TRANSFERS_ENABLED' | 'NON_TRANSERABLE' | 'TOKEN_BACKDOOR' | 'CREATED_VIA_LAUNCHPAD' | 'COMPROMISED_TOKEN' | 'LONG_FUND_TRAIL', required
    - `type` 'Benign' | 'Info' | 'Warning' | 'Malicious', required
    - `description` string, required — Description of the feature
  - `trading_limits` TradingLimits, required
    - `max_buy` Amount
      - `amount` number, nullable
      - `amount_wei` string, nullable
    - `max_sell` Amount
      - `amount` number, nullable
      - `amount_wei` string, nullable
    - `max_holding` Amount
      - `amount` number, nullable
      - `amount_wei` string, nullable
    - `sell_limit_per_block` Amount
      - `amount` number, nullable
      - `amount_wei` string, nullable
  - `financial_stats` FinancialStats, required
    - `supply` integer, nullable — token supply
    - `holders_count` integer, nullable — Amount of token holders
    - `usd_price_per_unit` number, nullable — token price in USD
    - `burned_liquidity_percentage` number, nullable — Token liquidity burned percentage
    - `locked_liquidity_percentage` number, nullable — Token liquidity locked percentage
    - `top_holders` TopHolder[] — Top token holders
      - `label` 'market' | 'locker' | 'wallet' | 'contract' | 'program'
      - `name` string, nullable
      - `address` string, nullable — Address
      - `holding_percentage` number, nullable — Holding position out of total token liquidity
    - `total_reserve_in_usd` number, nullable — Total reserve in USD
    - `dev_holding_percentage` number, nullable — Percentage of token's supply held in known developer wallets (0.0 to 100.0)
    - `initial_snipers_holding_percentage` number, nullable — Percentage of token's supply _currently_ held by sniper bots (0.0 to 100.0). Currently available for Solana only.
    - `snipers_holding_percentage` number, nullable — Percentage of token's supply _initially_ held by sniper bots (0.0 to 100.0). Currently available for Solana only.
    - `bundlers_holding_percentage` number, nullable — Percentage of token currently held by bundlers - wallets that bought in the exact same Solana slot, at any point in the token's life-cycle. Currently available for Solana only.
    - `insiders_holding_percentage` number, nullable — Percentage of supply that is currently held by insiders - defined as wallets exhibiting early acquisition behaviors typically associated with insider activity.
    - `markets` TokenMarket[] — Token markets/pools
      - `market_type` 'BONDING_CURVE' | 'AMM' | 'UNKNOWN', required
      - `market_name` string, required
      - `pair_name` string, required
      - `address` string, required
      - `base_token` string, required
      - `quote_token` string, required
      - `reserve_in_usd` number, required

## Other responses

- `404` — Token scan result is not available. This can occur when: 1. The token scan result is not yet available — try again later 2. The address is not a token 3. For cache-only requests: the token has never been scanned (cache miss); a backend rescan is triggered — retry later or wait for webhook updates.
- `422` — Validation Error

---

[API](https://skmtc.net/blockaid-official/apis/blockaid-api.md) · [All operations](https://skmtc.net/blockaid-official/apis/blockaid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/blockaid-official/blockaid-api/revisions/17c41f337b2e/schema)
