> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainworks.co/llms.txt
> Use this file to discover all available pages before exploring further.

# SVM Token Information

> Fetch token metadata, Token-2022 extensions, liquidity, and market data for Solana tokens.

Look up on-chain token metadata and a fuller market report for Solana tokens.

## Get Token Metadata

Returns name, symbol, decimals, total supply, and Token-2022 extension data when present.

**Endpoint:** `/svm/token/meta`

| Parameter | Type   | Required | Description        |
| --------- | ------ | -------- | ------------------ |
| `chain`   | string | Yes      | Always `sol`       |
| `token`   | string | Yes      | Token mint address |

**Example:**

<Tabs>
  <Tab title="Socket.IO">
    ```typescript theme={null}
    socket.emit("/svm/token/meta", {
      chain: "sol",
      token: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
    });
    ```
  </Tab>

  <Tab title="HTTP">
    ```typescript theme={null}
    await fetch("https://api.chainworks.co/svm/token/meta", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: CHAINWORKS_API_AUTH_TOKEN,
      },
      body: JSON.stringify({
        chain: "sol",
        token: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
      }),
    });
    ```
  </Tab>
</Tabs>

**Response:**

```json theme={null}
{
  "success": true,
  "result": {
    "chain": "sol",
    "token": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
    "name": "Bonk",
    "symbol": "Bonk",
    "decimals": 5,
    "totalSupply": "88416809930247420",
    "slot": 318472901,
    "tokenType": "Token"
  }
}
```

| Field          | Type   | Description                                                                                     |
| -------------- | ------ | ----------------------------------------------------------------------------------------------- |
| `chain`        | string | Always `sol`                                                                                    |
| `token`        | string | Token mint address                                                                              |
| `name`         | string | Token name. Empty string if no metadata is found                                                |
| `symbol`       | string | Token ticker symbol. Empty string if no metadata is found                                       |
| `decimals`     | number | Token decimals                                                                                  |
| `totalSupply`  | string | Total supply in raw units (decimals not applied)                                                |
| `slot`         | number | Slot the metadata was read at                                                                   |
| `tokenType`    | string | `Token` (SPL Token) or `Token2022` (Token-2022 program)                                         |
| `transferFee`  | object | Token-2022 transfer fee extension. Present only on `Token2022` mints that enable it. See below  |
| `transferHook` | object | Token-2022 transfer hook extension. Present only on `Token2022` mints that enable it. See below |

### Token-2022 `transferFee`

Present only when `tokenType` is `Token2022` and the mint has the transfer fee extension enabled. The object reports the currently effective fee schedule.

```json theme={null}
{
  "transferFee": {
    "feeBps": 100,
    "maximumFee": "5000000000"
  }
}
```

| Field        | Type   | Description                                                        |
| ------------ | ------ | ------------------------------------------------------------------ |
| `feeBps`     | number | Transfer fee in basis points (100 = 1%, max 10000 = 100%)          |
| `maximumFee` | string | Maximum fee per transfer in raw token units (decimals not applied) |

### Token-2022 `transferHook`

Present only when `tokenType` is `Token2022` and the mint has an active transfer hook.

```json theme={null}
{
  "transferHook": {
    "authority": "HookAuthorityPublicKey",
    "programId": "HookProgramPublicKey",
    "extraAccountMetas": [
      {
        "pubkey": "ExtraAccountPublicKey",
        "isSigner": false,
        "isWritable": true
      }
    ]
  }
}
```

| Field                            | Type      | Description                                                           |
| -------------------------------- | --------- | --------------------------------------------------------------------- |
| `authority`                      | string    | Authority allowed to update the hook program                          |
| `programId`                      | string    | Transfer hook program address                                         |
| `extraAccountMetas`              | object\[] | Extra accounts the hook program requires on a transfer. May be absent |
| `extraAccountMetas[].pubkey`     | string    | Account address                                                       |
| `extraAccountMetas[].isSigner`   | boolean   | Whether the account signs                                             |
| `extraAccountMetas[].isWritable` | boolean   | Whether the account is writable                                       |

The request is rejected with `NOT_A_TOKEN` if the address is not found on chain or is not a valid token mint.

***

## Get Token Report

Returns the token metadata plus market data and the token's liquidity pools.

**Endpoint:** `/svm/token/report`

| Parameter | Type   | Required | Description        |
| --------- | ------ | -------- | ------------------ |
| `chain`   | string | Yes      | Always `sol`       |
| `token`   | string | Yes      | Token mint address |

**Example:**

<Tabs>
  <Tab title="Socket.IO">
    ```typescript theme={null}
    socket.emit("/svm/token/report", {
      chain: "sol",
      token: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
    });
    ```
  </Tab>

  <Tab title="HTTP">
    ```typescript theme={null}
    await fetch("https://api.chainworks.co/svm/token/report", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        Authorization: CHAINWORKS_API_AUTH_TOKEN,
      },
      body: JSON.stringify({
        chain: "sol",
        token: "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263", // BONK
      }),
    });
    ```
  </Tab>
</Tabs>

**Response:**

```json theme={null}
{
  "success": true,
  "result": {
    "chain": "sol",
    "token": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
    "name": "Bonk",
    "symbol": "Bonk",
    "decimals": 5,
    "totalSupply": "88416809930247420",
    "slot": 318472901,
    "tokenType": "Token",
    "marketCapUSD": 1284000000,
    "priceUSD": 0.00001452,
    "liquidity": {
      "deepestPool": {
        "type": "RaydiumV4",
        "lp": "8Qs4S2D7uQ4D9onb5N4hM9YtPGFCgvqB5jHPNSjxFM9k",
        "token": "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263",
        "backingToken": "So11111111111111111111111111111111111111112",
        "rawPrice": 0.00000156,
        "tokenReserve": "412000000000000",
        "backingReserve": "642720000000",
        "isTokenBase": true
      },
      "otherPools": []
    }
  }
}
```

The report carries every [Get Token Metadata](#get-token-metadata) field (including `transferFee` and `transferHook` on Token-2022 mints), plus:

| Field                   | Type           | Description                                                               |
| ----------------------- | -------------- | ------------------------------------------------------------------------- |
| `marketCapUSD`          | number \| null | Estimated market cap in USD. `null` when no priced pool is available      |
| `priceUSD`              | number \| null | Estimated price per token in USD. `null` when no priced pool is available |
| `liquidity`             | object \| null | Liquidity pools for the token. `null` when no pools are found             |
| `liquidity.deepestPool` | object         | The pool with the most liquidity. See pool fields below                   |
| `liquidity.otherPools`  | object\[]      | Remaining pools, deepest first. May be empty                              |

### Pool object

Each pool in `deepestPool` and `otherPools` has these base fields:

| Field            | Type    | Description                                                                                                                                                                                                                                                |
| ---------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`           | string  | DEX type. One of the [supported DEXes](/svm/overview) (`RaydiumV4`, `RaydiumCLMM`, `RaydiumCPMM`, `RaydiumLaunchLab`, `PumpFun`, `PumpSwap`, `MeteoraDLMM`, `MeteoraDYN`, `MeteoraDYN2`, `MeteoraDBC`, `Whirlpool`, `MetaplexGenesis`, `Humi`, `FluxBeam`) |
| `lp`             | string  | Pool (liquidity pair) address                                                                                                                                                                                                                              |
| `token`          | string  | The token mint this report is for                                                                                                                                                                                                                          |
| `backingToken`   | string  | The paired backing token mint (for example wrapped SOL)                                                                                                                                                                                                    |
| `rawPrice`       | number  | Price of the token in raw backing-token units (decimals not applied)                                                                                                                                                                                       |
| `tokenReserve`   | string  | Token reserve held by the pool, in raw units                                                                                                                                                                                                               |
| `backingReserve` | string  | Backing-token reserve held by the pool, in raw units                                                                                                                                                                                                       |
| `isTokenBase`    | boolean | Whether the token is the base side of the pair                                                                                                                                                                                                             |

Bonding-curve pools carry extra fields:

| Field              | Type    | Description                                                                                                 |
| ------------------ | ------- | ----------------------------------------------------------------------------------------------------------- |
| `bondingProgress`  | number  | Bonding curve progress. Present on `PumpFun`, `MetaplexGenesis`, `MeteoraDBC`, and `RaydiumLaunchLab` pools |
| `completedBonding` | boolean | Whether the curve has completed bonding. Present on the same pool types as `bondingProgress`                |
| `configAddress`    | string  | Launchpad config address. Present on `MeteoraDBC` and `RaydiumLaunchLab` pools only                         |

The request is rejected with `NOT_A_TOKEN` if the address is not found on chain or is not a valid token mint. When the token exists but liquidity or pricing cannot be resolved, the failure response may include a `partialResult` carrying the fields that were available.
