# List chains

URL: https://docs.hanzo.ai/docs/openapi/market/get-market-chains

> Answers every chain this deployment can read, what is deployed on each, and what its automated market maker amounts to.

`GET /v1/market/chains`

> [Market →](https://docs.hanzo.ai/docs/openapi/market) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                         |
| ------------- | --------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/market/chains` |
| **Method**    | `GET`                                   |
| **Operation** | `get_market_chains`                     |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`  |

Answers every chain this deployment can read, what is deployed on each, and what
its automated market maker amounts to.

One call. It reads the chain registry, then every chain's indexer for its figures
and its most recent active day, all at once — where a client doing it itself makes
one registry request and two more per chain.

THE ROW IS THE UNIT OF TRUTH. Each carries its own reach, so one indexer being
unreachable costs one row its figures and leaves the rest answered. A chain with no
market maker deployed — the registry names no factory for it — answers `read` with
totals of nothing, which is a fact about that chain and is not the same as a chain
nobody could ask.

## Request

`GET /v1/market/chains` takes no parameters and no body — the credential is the whole request.

## Response

| Status    | Body            | Meaning |
| --------- | --------------- | ------- |
| `200`     | market.Roster   | ok      |
| `default` | problem-details | refused |

`200` body — 31 fields.

| Field                     | In   | Type             | Always | Description                                                                                                                                                                                                   |
| ------------------------- | ---- | ---------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `chains`                  | body | market.Market\[] | —      | Chains is `[]` where the registry answered and named none, and `null` where it did not answer — never absent, because a missing key and an empty list read alike and only one of them means "there are none". |
| `chains[].amm`            | body | boolean          | —      | Amm reports whether an automated market maker is deployed on this chain, which is the registry's factory addresses being present and not the indexer having rows.                                             |
| `chains[].coin`           | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day`            | body | market.Day       | —      |                                                                                                                                                                                                               |
| `chains[].day.close`      | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day.count`      | body | integer (int64)  | —      | Count is transactions in the day, where the table keeps one.                                                                                                                                                  |
| `chains[].day.date`       | body | integer (int64)  | —      | Date is the day's start, unix seconds.                                                                                                                                                                        |
| `chains[].day.high`       | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day.locked`     | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day.low`        | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day.open`       | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day.price`      | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].day.volume`     | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].factory`        | body | object           | —      | Factory is the AMM's factory contracts, by generation, omitted where none is deployed.                                                                                                                        |
| `chains[].factory.*`      | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].figures`        | body | market.Figures   | —      |                                                                                                                                                                                                               |
| `chains[].figures.count`  | body | integer (int64)  | —      |                                                                                                                                                                                                               |
| `chains[].figures.locked` | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].figures.pools`  | body | integer (int64)  | —      |                                                                                                                                                                                                               |
| `chains[].figures.volume` | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].graph`          | body | string           | —      | Graph is where this chain's indexer answers, empty where it has none.                                                                                                                                         |
| `chains[].id`             | body | integer (int64)  | —      | ID is the EVM chain id, which is what a wallet must agree with.                                                                                                                                               |
| `chains[].name`           | body | string           | —      |                                                                                                                                                                                                               |
| `chains[].reach`          | body | market.Reach     | —      |                                                                                                                                                                                                               |
| `chains[].reach.at`       | body | string           | —      | At is `read`, `unconfigured`, `unreachable` or `refused`.                                                                                                                                                     |
| `chains[].reach.why`      | body | string           | —      | Why is the upstream's own words, on Unreachable and Refused, and empty otherwise.                                                                                                                             |
| `chains[].rpc`            | body | string           | —      | RPC is the chain's PUBLIC JSON-RPC, empty where the registry names only a route this process happens to have.                                                                                                 |
| `chains[].slug`           | body | string           | —      | Slug is the chain's word in every indexer path — `cchain`, `zoo`.                                                                                                                                             |
| `reach`                   | body | market.Reach     | —      |                                                                                                                                                                                                               |
| `reach.at`                | body | string           | —      | At is `read`, `unconfigured`, `unreachable` or `refused`.                                                                                                                                                     |
| `reach.why`               | body | string           | —      | Why is the upstream's own words, on Unreachable and Refused, and empty otherwise.                                                                                                                             |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo market chains
```

**SDK**

**.ts**

```ts
import { Configuration, MarketApi } from 'hanzoai';

const api = new MarketApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getMarketChains();
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import MarketApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = MarketApi(client).get_market_chains()
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.MarketAPI.GetMarketChains(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, market_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = market_api::get_market_chains(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.MarketApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new MarketApi(client).getMarketChains();
```

**HTTP**

```bash
curl https://api.hanzo.ai/v1/market/chains \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **market** through the `market` tool, which names its 3 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_market_chains"
         }
       }
     }'
```

---

[Market API](https://docs.hanzo.ai/docs/openapi/market) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
