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

# Pair

> Metadata for a token pair.

### TypeScript shape

```ts theme={null}
interface Pair {
  address: string;
  exchangeHash: string;
  fee: number | null;
  id: string;
  networkId: number;
  protocol: string | null;
  tickSpacing: number | null;
  token0: string;
  token1: string;
  createdAt: number | null;
  token0Data: EnhancedToken | null;
  token1Data: EnhancedToken | null;
  pooled: PooledTokenValues | null;
  virtualPooled: PooledTokenValues | null;
  protocolData: ProtocolData | null;
  protocolCustomData: PairProtocolCustomData | null;
  mobula: MobulaPoolData | null;
}
```

<ResponseField name="address" type="String!">
  The contract address of the pair.
</ResponseField>

<ResponseField name="exchangeHash" type="String!">
  The address for the exchange factory contract.
</ResponseField>

<ResponseField name="fee" type="Int">
  The exchange fee for swaps.
</ResponseField>

<ResponseField name="id" type="String!">
  The ID for the pair (address:networkId).
</ResponseField>

<ResponseField name="networkId" type="Int!">
  The network ID the pair is deployed on.
</ResponseField>

<ResponseField name="protocol" type="String">
  The protocol of the pair. E.g. UniswapV4, RaydiumV4, PumpV1, etc.
</ResponseField>

<ResponseField name="tickSpacing" type="Int">
  The amount of required tick separation. Only applicable for pairs on UniswapV3.
</ResponseField>

<ResponseField name="token0" type="String!">
  The contract address of token0.
</ResponseField>

<ResponseField name="token1" type="String!">
  The contract address of token1.
</ResponseField>

<ResponseField name="createdAt" type="Int">
  The unix timestamp for the creation of the pair.
</ResponseField>

<ResponseField name="token0Data" type="EnhancedToken">
  Metadata for the first token in the pair. See [EnhancedToken](/api-reference/graphql/types/EnhancedToken).
</ResponseField>

<ResponseField name="token1Data" type="EnhancedToken">
  Metadata for the second token in the pair. See [EnhancedToken](/api-reference/graphql/types/EnhancedToken).
</ResponseField>

<ResponseField name="pooled" type="PooledTokenValues">
  The pooled amounts of each token in the pair. See [PooledTokenValues](/api-reference/graphql/types/PooledTokenValues).
</ResponseField>

<ResponseField name="protocolData" type="ProtocolData">
  Custom data for the pair, only certain protocols have this (e.g. uniswapv4, arenatrade). Union type: see [ProtocolData](/api-reference/graphql/types/ProtocolData) (UniswapV4Data, ArenaTradeData, PumpData).
</ResponseField>

<ResponseField name="virtualPooled" type="PooledTokenValues">
  The virtual pooled amounts of each token in the pair (for protocols with virtual reserves). See [PooledTokenValues](/api-reference/graphql/types/PooledTokenValues).
</ResponseField>

<Warning>
  The following field is deprecated — use `protocolData` instead. It remains in the schema for backwards compatibility and may be removed in a future version.
</Warning>

<ResponseField name="protocolCustomData" type="PairProtocolCustomData" deprecated>Deprecated — use [`protocolData`](/api-reference/graphql/types/ProtocolData) instead. See [PairProtocolCustomData](/api-reference/graphql/types/PairProtocolCustomData).</ResponseField>
