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

# Pool Updates Stream

> Live refresh of a single market's mutable fields - price, market cap, liquidity, bonding progress, windowed stats. Instant price on every trade of the pool; fields you already parse from `/v1/pool/data`.

`WS channel: pool-updates`

Live refresh of a single market's mutable fields - price, market cap, liquidity, bonding progress, windowed stats. The price moves instantly on every trade of the pool; the full snapshot refreshes server-side every \~10s. Events are throttled to at most one per second per pool and deduplicated - you only receive an event when something actually changed.

<ParamField body="chain" type="string" required>
  Public chain id - `evm:<id>` or `solana`. Example: `solana`
</ParamField>

<ParamField body="pool" type="string" required>
  Pool (market) address. Example: `BqnpCdDLPV2pFdAaLnVidmn3G93RP2p5oRdGEY2sJGez`
</ParamField>

<Note>The refresh runs server-side through the same engine as [`/v1/pool/data`](/endpoints/market-data), so `stats` carries the identical `5m`/`1h`/`24h` windows and field names as the REST snapshot - re-parse events with the code you already wrote. On subscribe, the last known state is pushed immediately when available.</Note>

## Close codes

| Code | Meaning |
| - | - |
| `4401` | Auth - key missing, invalid, or revoked. Live connections are dropped the moment a key is revoked. |
| `4402` | Monthly credit quota exhausted (the WebSocket mirror of REST `402`). |
| `1008` | Policy - subscription limits, flooding, or a blocked socket. |
| `1001` | Idle timeout - no `ping` within the keepalive window. |

<RequestExample>
  ```json Subscribe theme={null}
  {
    "op": "subscribe",
    "channel": "pool-updates",
    "id": "pool-1",
    "params": {
      "chain": "solana",
      "pool": "BqnpCdDLPV2pFdAaLnVidmn3G93RP2p5oRdGEY2sJGez"
    }
  }
  ```
</RequestExample>

<ResponseExample>
  ```json Ack theme={null}
  {
    "op": "subscribed",
    "id": "pool-1",
    "channel": "pool-updates"
  }
  ```

  ```json Update theme={null}
  {
    "op": "event",
    "id": "pool-1",
    "channel": "pool-updates",
    "data": {
      "priceNative": "0.000000027894474571",
      "priceUsd": 0.00000288045,
      "marketCapUsd": 253463983.91,
      "liquidityNative": "722.161187853",
      "liquidityUsd": 74572.08,
      "bondingProgress": null,
      "migrated": false,
      "stats": {
        "5m": {
          "volumeNative": 0.489206931,
          "volumeUsd": 50.51,
          "buys": 6,
          "sells": 2,
          "buyVolumeNative": 0.400091205,
          "sellVolumeNative": 0.089115726,
          "txns": 8,
          "volumeOrganicNative": 0.489206931,
          "volumeOrganicUsd": 50.51,
          "buysOrganic": 6,
          "sellsOrganic": 2,
          "priceChangePct": 0.42,
          "traders": 7,
          "feesNative": 0.000704,
          "poolFeesNative": 0.004892069
        },
        "1h": {
          "volumeNative": 2.221187931,
          "volumeUsd": 229.36,
          "buys": 27,
          "sells": 0,
          "buyVolumeNative": 2.221187931,
          "sellVolumeNative": 0,
          "txns": 27,
          "volumeOrganicNative": 1.896568223,
          "volumeOrganicUsd": 195.84,
          "buysOrganic": 20,
          "sellsOrganic": 0,
          "priceChangePct": 1.58,
          "traders": 15,
          "feesNative": 0.002376526,
          "poolFeesNative": 0.022211894
        },
        "24h": {
          "volumeNative": 7.170081239,
          "volumeUsd": 740.39,
          "buys": 28,
          "sells": 48,
          "buyVolumeNative": 2.344647931,
          "sellVolumeNative": 4.825433308,
          "txns": 76,
          "volumeOrganicNative": 6.512701056,
          "volumeOrganicUsd": 672.51,
          "buysOrganic": 21,
          "sellsOrganic": 45,
          "priceChangePct": -1.78,
          "traders": 41,
          "feesNative": 0.006465399,
          "poolFeesNative": 0.072148996
        }
      }
    },
    "asOf": 1788168160758
  }
  ```
</ResponseExample>


## AsyncAPI

````yaml asyncapi.json pool-updates
id: pool-updates
title: Pool Updates Stream
description: >-
  Live refresh of a single market's mutable fields - price, market cap,
  liquidity, bonding progress, windowed stats. The price moves instantly on
  every trade of the pool; the full snapshot refreshes server-side every ~10s.
  Events are throttled to at most one per second per pool and deduplicated - you
  only receive an event when something actually changed. Same engine and field
  names as `/v1/pool/data`; on subscribe, the last known state is pushed
  immediately when available.
servers:
  - id: production
    protocol: wss
    host: api.serialized.xyz
    bindings: []
    variables: []
address: pool-updates
parameters: []
bindings: []
operations:
  - &ref_4
    id: subscribe-pool-updates
    title: Subscribe Pool Updates Stream
    type: send
    messages:
      - &ref_7
        id: subscribe
        payload:
          - name: Subscribe
            description: Client frame opening the subscription (additive, ack is explicit).
            type: object
            properties:
              - name: op
                type: string
                description: subscribe
                required: true
              - name: channel
                type: string
                description: pool-updates
                required: true
              - name: id
                type: string
                description: >-
                  Client-chosen subscription id, echoed on every frame of this
                  subscription.
                required: true
              - name: params
                type: object
                required: true
                properties:
                  - name: chain
                    type: string
                    description: Public chain id - `evm:<id>` or `solana`.
                    examples: &ref_0
                      - solana
                    required: true
                  - name: pool
                    type: string
                    description: Pool (market) address.
                    examples: &ref_1
                      - BqnpCdDLPV2pFdAaLnVidmn3G93RP2p5oRdGEY2sJGez
                    required: true
                  - name: maxUpdatesPerMinute
                    type: integer
                    description: >-
                      Optional cap on the events delivered per minute on this
                      subscription (and on its cost): the latest state of each
                      window is delivered. Omit for up to one event per second.
                    required: false
        headers: []
        jsonPayloadSchema:
          type: object
          properties:
            op:
              type: string
              const: subscribe
              x-parser-schema-id: <anonymous-schema-23>
            channel:
              type: string
              const: pool-updates
              x-parser-schema-id: <anonymous-schema-24>
            id:
              type: string
              description: >-
                Client-chosen subscription id, echoed on every frame of this
                subscription.
              x-parser-schema-id: <anonymous-schema-25>
            params:
              type: object
              properties:
                chain:
                  type: string
                  description: Public chain id - `evm:<id>` or `solana`.
                  examples: *ref_0
                  x-parser-schema-id: <anonymous-schema-27>
                pool:
                  type: string
                  description: Pool (market) address.
                  examples: *ref_1
                  x-parser-schema-id: <anonymous-schema-28>
                maxUpdatesPerMinute:
                  type: integer
                  minimum: 1
                  maximum: 6000
                  description: >-
                    Optional cap on the events delivered per minute on this
                    subscription (and on its cost): the latest state of each
                    window is delivered. Omit for up to one event per second.
                  x-parser-schema-id: <anonymous-schema-29>
              required:
                - chain
                - pool
              x-parser-schema-id: <anonymous-schema-26>
          required:
            - op
            - channel
            - id
            - params
          x-parser-schema-id: <anonymous-schema-22>
        title: Subscribe
        description: Client frame opening the subscription (additive, ack is explicit).
        example: |-
          {
            "op": "subscribe",
            "channel": "pool-updates",
            "id": "pool-1",
            "params": {
              "chain": "solana",
              "pool": "BqnpCdDLPV2pFdAaLnVidmn3G93RP2p5oRdGEY2sJGez"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: subscribe
          - id: x-parser-message-name
            value: subscribe
    bindings: []
    extensions: &ref_2
      - id: x-parser-unique-object-id
        value: pool-updates
  - &ref_3
    id: receive-pool-updates
    title: Pool Updates Stream frames
    type: receive
    messages:
      - &ref_5
        id: ack
        payload:
          - name: Ack
            description: 'Server acknowledgement: the subscription is live.'
            type: object
            properties:
              - name: type
                type: string
                description: object
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          x-parser-schema-id: <anonymous-schema-30>
        title: Ack
        description: 'Server acknowledgement: the subscription is live.'
        example: |-
          {
            "op": "subscribed",
            "id": "pool-1",
            "channel": "pool-updates"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: ack
          - id: x-parser-message-name
            value: ack
      - &ref_6
        id: update
        payload:
          - name: Update
            description: Server push frame (Update).
            type: object
            properties:
              - name: type
                type: string
                description: object
                required: false
              - name: description
                type: string
                description: >-
                  `data` is the exact same shape as the REST twin of this
                  channel; `asOf` is the server timestamp (ms).
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            `data` is the exact same shape as the REST twin of this channel;
            `asOf` is the server timestamp (ms).
          x-parser-schema-id: <anonymous-schema-31>
        title: Update
        description: Server push frame (Update).
        example: |-
          {
            "op": "event",
            "id": "pool-1",
            "channel": "pool-updates",
            "data": {
              "priceNative": "0.000000027894474571",
              "priceUsd": 0.00000288045,
              "marketCapUsd": 253463983.91,
              "liquidityNative": "722.161187853",
              "liquidityUsd": 74572.08,
              "bondingProgress": null,
              "migrated": false,
              "stats": {
                "5m": {
                  "volumeNative": 0.489206931,
                  "volumeUsd": 50.51,
                  "buys": 6,
                  "sells": 2,
                  "buyVolumeNative": 0.400091205,
                  "sellVolumeNative": 0.089115726,
                  "txns": 8,
                  "volumeOrganicNative": 0.489206931,
                  "volumeOrganicUsd": 50.51,
                  "buysOrganic": 6,
                  "sellsOrganic": 2,
                  "priceChangePct": 0.42,
                  "traders": 7,
                  "feesNative": 0.000704,
                  "poolFeesNative": 0.004892069
                },
                "1h": {
                  "volumeNative": 2.221187931,
                  "volumeUsd": 229.36,
                  "buys": 27,
                  "sells": 0,
                  "buyVolumeNative": 2.221187931,
                  "sellVolumeNative": 0,
                  "txns": 27,
                  "volumeOrganicNative": 1.896568223,
                  "volumeOrganicUsd": 195.84,
                  "buysOrganic": 20,
                  "sellsOrganic": 0,
                  "priceChangePct": 1.58,
                  "traders": 15,
                  "feesNative": 0.002376526,
                  "poolFeesNative": 0.022211894
                },
                "24h": {
                  "volumeNative": 7.170081239,
                  "volumeUsd": 740.39,
                  "buys": 28,
                  "sells": 48,
                  "buyVolumeNative": 2.344647931,
                  "sellVolumeNative": 4.825433308,
                  "txns": 76,
                  "volumeOrganicNative": 6.512701056,
                  "volumeOrganicUsd": 672.51,
                  "buysOrganic": 21,
                  "sellsOrganic": 45,
                  "priceChangePct": -1.78,
                  "traders": 41,
                  "feesNative": 0.006465399,
                  "poolFeesNative": 0.072148996
                }
              }
            },
            "asOf": 1788168160758
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: update
          - id: x-parser-message-name
            value: update
    bindings: []
    extensions: *ref_2
sendOperations:
  - *ref_3
receiveOperations:
  - *ref_4
sendMessages:
  - *ref_5
  - *ref_6
receiveMessages:
  - *ref_7
extensions:
  - id: x-parser-unique-object-id
    value: pool-updates
securitySchemes: []

````

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