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

# CLMM markets

> Returns CLMM (Concentrated Liquidity Market Maker) markets with farm data and yield rates.

export const ApiResponse = ({children, errors = {}}) => {
  const [status, setStatus] = useState("200");
  const statuses = ["200", ...Object.keys(errors)];
  return <section className="api-response" aria-label="Response">
      <div className="api-response-header not-prose">
        <h2>Response</h2>
        <div className="api-response-format">
          {statuses.length > 1 ? <select aria-label="Response status" value={status} onChange={event => setStatus(event.target.value)}>
              {statuses.map(code => <option key={code} value={code}>{code}</option>)}
            </select> : <span>200</span>}
          <span className="api-response-mime">application/json</span>
        </div>
      </div>
      <div hidden={status !== "200"}>{children}</div>
      {status !== "200" && <div aria-live="polite">
          {Object.entries(errors[status]).map(([name, value]) => <ResponseField key={name} name={name} type={value === null ? "null" : Array.isArray(value) ? "array" : typeof value}>
              {name === "error" ? "Error message describing why the request failed." : "Additional error details."}
            </ResponseField>)}
        </div>}
    </section>;
};

## Query parameters

<ParamField query="vault_address" type="string">
  Filter by vault address.
</ParamField>

<ParamField query="refresh" type="boolean">
  Force cache refresh.
</ParamField>

<ParamField query="include_frontend_hidden" type="boolean" default="false">
  Include vaults hidden from the production frontend.
</ParamField>

<RequestExample dropdown>
  ```bash cURL theme={null}
  curl https://api.exponent.finance/clmm
  ```

  ```python Python theme={null}
  import requests

  response = requests.get("https://api.exponent.finance/clmm", timeout=30)
  response.raise_for_status()
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.exponent.finance/clmm");
  if (!response.ok) {
    throw new Error(`Request failed: ${response.status}`);
  }
  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

<ApiResponse errors={{"500": {"error": "<message>"}}}>
  <ResponseField name="address" type="string">
    CLMM market public key.
  </ResponseField>

  <ResponseField name="vault_address" type="string">
    Associated yield vault public key.
  </ResponseField>

  <ResponseField name="id" type="number">
    Indexed market ID.
  </ResponseField>

  <ResponseField name="is_active" type="boolean">
    Whether the market is active.
  </ResponseField>

  <ResponseField name="current_spot_price" type="number">
    Multiplicative annual rate: `1.07` corresponds to 7% implied APY.
  </ResponseField>

  <ResponseField name="current_implied_apy" type="number | null">
    Implied APY as a decimal: `0.07` means 7%.
  </ResponseField>

  <ResponseField name="tick_space" type="number">
    Spacing between ticks in the market’s rate representation.
  </ResponseField>

  <ResponseField name="liquidity_balance" type="number">
    Raw CLMM liquidity units.
  </ResponseField>

  <ResponseField name="sy_balance" type="number">
    Raw SY token balance in the pool.
  </ResponseField>

  <ResponseField name="pt_balance" type="number">
    Raw PT token balance in the pool.
  </ResponseField>

  <ResponseField name="treasury_fee_bps" type="number">
    Treasury fee in basis points.
  </ResponseField>

  <ResponseField name="ln_fee_rate_root" type="number">
    Logarithmic fee-rate parameter used by the CLMM.
  </ResponseField>

  <ResponseField name="admin_address" type="string | null">
    Market administrator.
  </ResponseField>

  <ResponseField name="additional_address_lookup_table" type="string | null">
    Additional Solana address lookup table for transaction construction.
  </ResponseField>

  <ResponseField name="created_at" type="string">
    Indexed creation timestamp.
  </ResponseField>

  <ResponseField name="updated_at" type="string">
    Latest indexed update timestamp.
  </ResponseField>

  <ResponseField name="emissions" type="object | null">
    Indexed emission state.
  </ResponseField>

  <ResponseField name="lp_farm" type="object | null">
    Indexed LP farm state.
  </ResponseField>

  <ResponseField name="farms" type="object[]">
    Indexed farms, including expired farms.

    <Expandable title="child attributes">
      <ResponseField name="id" type="number">
        Indexed farm ID.
      </ResponseField>

      <ResponseField name="farm_index" type="number">
        Farm slot within the CLMM market.
      </ResponseField>

      <ResponseField name="emission_mint" type="string">
        Reward token mint.
      </ResponseField>

      <ResponseField name="token_rate" type="number">
        Raw reward token rate. The pools endpoint serializes this field as a string.
      </ResponseField>

      <ResponseField name="start_timestamp" type="number">
        Farm start time, Unix seconds.
      </ResponseField>

      <ResponseField name="expiry_timestamp" type="number">
        Farm expiry time, Unix seconds.
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="yield_rates" type="object | null">
    Yield breakdown, or `null` when unavailable.

    <Expandable title="child attributes">
      <ResponseField name="ptApyWeighted" type="number">
        PT yield contribution, weighted by pool composition; decimal APY.
      </ResponseField>

      <ResponseField name="syApyWeighted" type="number">
        SY yield contribution, weighted by pool composition; decimal APY.
      </ResponseField>

      <ResponseField name="tradingFeeRate" type="number">
        Indexed trading fee rate. Use `tradingFeeApy` for the annualized APY display.
      </ResponseField>

      <ResponseField name="tradingFeeApy" type="number">
        Trading fee APY as a decimal, when available.
      </ResponseField>

      <ResponseField name="tradingFeePeriodLabel" type="string">
        Lookback label for trading fee APY, when available.
      </ResponseField>
    </Expandable>
  </ResponseField>
</ApiResponse>

<ResponseExample>
  ```json 200 theme={null}
  [
    {
      "id": 49996,
      "address": "9cD4nKmLuM8FMj8Ur1ozbv7C1onZbeavQaJC7uM72eiq",
      "vault_address": "7f1PgxY3kGsPqLAKpwcduZkcBEhpjMz7U1iJ4pcCCzDy",
      "current_spot_price": 1.12623508746926,
      "tick_space": 2500,
      "liquidity_balance": 65046662409647230,
      "treasury_fee_bps": 3500,
      "ln_fee_rate_root": 0.00199800266267306,
      "created_at": "2026-08-24T11:36:14.800372+00:00",
      "updated_at": "2026-10-15T11:34:44.305+00:00",
      "current_implied_apy": 0.126235087469263,
      "is_active": true,
      "admin_address": "DheMp3RPekY4sfym67RrvHoCnyS1sMv8D23AR8tqweW7",
      "sy_balance": 1801971646481953,
      "pt_balance": 795887294945161,
      "emissions": {
        "trackers": []
      },
      "lp_farm": {
        "farmEmissions": [],
        "lastSeenTimestamp": 1792064084
      },
      "additional_address_lookup_table": null,
      "farms": [],
      "yield_rates": {
        "ptApyWeighted": 0.03412478807370301,
        "syApyWeighted": 0.08041099292742648,
        "tradingFeeRate": 3.042062145589337e-17,
        "tradingFeeApy": 0.004184915363891761,
        "tradingFeePeriodLabel": "Last 7d"
      }
    }
  ]
  ```

  ```json 500 theme={null}
  {
    "error": "<message>"
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.