---
title: "Profile of one token or crypto project (name, description, website, tags, contracts, supply), by symbol or by contract address."
method: POST
path: "/v2/ops/crypto.token.info"
tags: ["crypto"]
---

# Profile of one token or crypto project (name, description, website, tags, contracts, supply), by symbol or by contract address.

`POST /v2/ops/crypto.token.info`

## Request

- Base URL: `https://api.agentkey.app`
- URL: `https://api.agentkey.app/v2/ops/crypto.token.info`
- Auth: HTTP bearer

Returns the static profile of one token. Pass symbol (BTC, ETH) for coins and listed tokens, or address + chain for any on-chain token contract. Exactly one of symbol / address is accepted per call.

Fixed price: 0.6 credits per successful call, whichever provider serves it.

## Request body

- object
  - `address` string: Token contract address (0x… on EVM chains). Routes to on-chain providers; pair it with chain.
  - `chain` 'ethereum' | 'polygon' | 'bsc' | 'arbitrum' | 'optimism' | 'base' | 'avalanche': Chain the contract lives on. Only used with address.
  - `fields` string[]: Projection: keep only these dotted paths of data, e.g. ["items.id", "items.text"].
  - `include_raw` boolean: Attach the raw upstream payload as `raw` (not a stable contract; truncated above 256 KB).
  - `provider` string: Shorthand for routing.only = [provider].
  - `routing` Routing: Provider routing override. order: try these providers first; only: restrict to these (equivalent to pinning); allow_fallbacks: false tries only the first eligible provider.
    - `allow_fallbacks` boolean: false = try only the first eligible provider.
    - `only` string[]: Restrict to these providers.
    - `order` string[]: Providers to try first, in order.
    - `strategy` 'auto': How eligible providers are ordered. auto = the method's curated order. fastest / stable / popular are specified but not implemented yet (400 until then). The price is fixed whatever the strategy; mutually exclusive with order.
  - `symbol` string: Ticker symbol (BTC, ETH, UNI). Routes to market-data providers. Case-insensitive.

## Response `200`

Success envelope

- TokenInfoEnvelope: Success envelope whose data is a TokenInfo.
  - `attempts` Attempt[], required
    - `error_type` string: validation | not_found | rate_limit | timeout | upstream_unauthorized | upstream_unavailable | provider_error
    - `provider` string, required: Provider slug.
    - `refunded` boolean: true when the reservation for this attempt was refunded.
    - `status` integer, required: HTTP status AgentKey mapped this attempt to (200 on success).
    - `took_ms` integer, required
    - `tool` string, required: Registry tool name (Provider/operation) that was called.
    - `upstream_status` integer: The provider's real HTTP status; absent when nothing was received.
  - `credits_charged` number, required: Credits charged for this call (the method's fixed price).
  - `data` object, required: Static profile of a token / crypto project.
    - `contracts` object[], nullable, required: Known contract deployments. null when the provider does not expose contracts.
      - `address` string, required: Contract address.
      - `chain` string, nullable, required: Chain name as the provider spells it.
      - `decimals` integer, nullable, required: Token decimals when reported.
    - `date_added` string, date-time, nullable, required: When the provider first listed the token, RFC 3339 UTC.
    - `description` string, nullable, required: Short project description as plain text.
    - `id` string, nullable, required: Provider-native identifier (CoinMarketCap id, Surf project UUID); null when the lookup key itself is the identity (contract address).
    - `logo_url` string, nullable, required: Logo image URL.
    - `name` string, nullable, required: Token / project name.
    - `slug` string, nullable, required: URL slug on the provider (bitcoin).
    - `supply` object, required: Supply figures as far as the profile provider reports them. No maximum supply here (none of the crypto.token.info bindings has one); crypto.market.list's Token carries supply.max.
      - `circulating` number, nullable, required: Circulating supply, decimal-adjusted.
      - `total` number, nullable, required: Total supply, decimal-adjusted.
    - `symbol` string, nullable, required: Ticker symbol.
    - `tags` string[], nullable, required: Category tags as the provider assigns them (defi, layer-1, …). null when the provider has no tagging.
    - `website` string, nullable, required: Official website URL.
  - `op` string, required: Method name.
  - `op_version` integer, required: Method version that served the call.
  - `provider` string, required: Provider that actually served the call.
  - `raw` unknown
  - `raw_truncated` boolean
  - `request_id` string, required: Correlation id; quote it in support requests.
  - `took_ms` integer, required
  - `unsupported_fields` string[], required: Output paths this provider structurally does not supply; such fields are null for a different reason than 'missing on this record'.

## Other responses

- `400`: Validation error (unknown field, bad cursor, bad routing)
- `402`: Insufficient credits
- `404`: Not found (method, or upstream object)
- `429`: Rate limited upstream
- `502`: All providers failed
- `504`: Timed out

---

[API](https://skmtc.dev/agentkey/apis/agentkey-scenario-methods.md) - [All operations](https://skmtc.dev/agentkey/apis/agentkey-scenario-methods/llms.txt) - [OpenAPI document](https://skmtc.dev/agentkey/apis/agentkey-scenario-methods/revisions/a7cf5b682fdd?raw)
