# DexScreener adapter

DEX Screener does not index Uniswap v4 on HyperEVM by itself, so Signal runs an adapter in DEX Screener's own format for every pool on Signal's v4 hooks:

**`https://dexscreener.signal.family`**

It is public and needs no key. It was built for one consumer. Anyone who already ingests DEX Screener-style adapters can read it, with the limits below.

## Endpoints

| Endpoint | Returns |
| --- | --- |
| `GET /latest-block` | `{"block": {"blockNumber", "blockTimestamp"}}`: the newest block the adapter has fully processed |
| `GET /asset?id=<token address>` | `{"asset": {"id", "name", "symbol", "totalSupply", "metadata"?}}` |
| `GET /pair?id=<pool id>` | `{"pair": {"id", "dexKey", "asset0Id", "asset1Id", "createdAtBlockNumber", "createdAtBlockTimestamp", "createdAtTxnId", "creator", "metadata": {"hooks", "tickSpacing", "poolManager"}}}` |
| `GET /events?fromBlock=&toBlock=` | `{"events": [...]}` for an inclusive block range: swaps, and the liquidity placed at launch |
| `GET /health` | The adapter's own state: newest block, lag in seconds, pool and event counts, the hooks it covers |

Page it the way the format intends: read `/latest-block`, then `/events` for the blocks you have not seen.

## What it covers

Pools whose hook is one of Signal's: releases 2, 4.1 and 4.2, and a release with no pools. On 12 October 2026 it reported 39 pools. A new Signal hook is covered once Signal adds it; `/health` lists the current set.

- **The pair id is the Uniswap v4 pool id** (`0x` + 64 hex), the same value as `pool` and `v4_launch.pool_id` in Signal's API and as the first topic of the PoolManager's `Initialize` log.
- `asset0Id` and `asset1Id` are `currency0` and `currency1`. v4 sorts them, so the order never changes.
- `dexKey` is `signal`.
- There is no `feeBps` on these pairs: the pool's own LP fee is zero and Signal's fees are charged by the hook.

## Read this before you use its numbers

- **Amounts and prices are the pool's**, taken from the PoolManager's `Swap` log. The hook's fee is not in them. During a launch's opening window the difference is large. For what a trader paid or received, pair each swap with the hook's `FeeTaken` as in [events and accounting](v4-events.md).
- **The hook's own buybacks are swaps too.** They move the pool and so they appear, but they are burns paid from fees, not trades by a user.
- `asset.metadata` is best effort. It can be absent for a token whose words `/api/meta/<token>` serves.
- It reads each block once after one confirmation. It has no further reorganisation handling.
- It makes no availability promise. If it is down, read the chain. For a production integration, build from chain logs and use this as a cross-check.
