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

# Analytics WebSocket

> Protocol v2 — pools, orders, and user history streams

The **snekfun-api-provider** WebSocket uses **Protocol v2**: JSON text frames, explicit **subscribe** / **unsubscribe** envelopes (`messageType`, `clientId`, `requestId`, `topic`, optional `data`), plus **connect** / **ping** / **pong** for lifecycle.

**Auth:** Public for most topics. Restricted flows (e.g. per-address history) may require appropriate subscription data — follow product security guidance.

## Connection

* **Typical public URL:** `wss://analytics.snek.fun/websocket/ws`
* **Application path:** `GET /ws` on the WebSocket server port.

After connecting, send subscription messages. Outgoing frames wrap payloads in `DefaultOutgoingMessage` with `event`, `messageType`, and optional `data` (JSON mirrors server code: `MainPage`, `PoolsFeed`, `KOTH`, `LiveOrdersFeed`, `UserHistoryByAddress`, `UserHistoryByAddressAndAsset`).

## Topics (subscribe `topic` field)

| topic                          | `data`   | Purpose                                                                  |
| ------------------------------ | -------- | ------------------------------------------------------------------------ |
| `Latest`                       | omit     | Main page — latest-updated pools                                         |
| `New`                          | omit     | Main page — newest listings                                              |
| `MCapDesc`                     | omit     | Main page — market cap descending                                        |
| `CompletedCreateOn`            | omit     | Completed pools by creation time                                         |
| `CompletedMCap`                | omit     | Completed pools by market cap                                            |
| `KOTH`                         | omit     | King of the Hill updates                                                 |
| `PoolFeed`                     | required | Single pool: `{ "asset": "{policy}.{hex}", "pkhFilter": null \| ["…"] }` |
| `LiveOrdersFeed`               | required | Orders table: `{ "asset": "…", "pkhFilter": null \| ["…"] }`             |
| `UserHistoryByAddress`         | required | `{ "address": "addr1…" }`                                                |
| `UserHistoryByAddressAndAsset` | required | `{ "address": "addr1…", "asset": "policy.hex" }`                         |

`PoolFeed` data type is `FeedByAssetData`; live orders use the same shape.

## Subscribe example

```json theme={null}
{
  "messageType": "subscribe",
  "clientId": "app-1",
  "requestId": "sub-pool",
  "topic": "PoolFeed",
  "data": {
    "asset": "fbd4d3c334063ac19566f6ba39b6ec707ea91fa81d0c09201575c10b.44415645",
    "pkhFilter": null
  }
}
```

## Unsubscribe

```json theme={null}
{
  "messageType": "unsubscribe",
  "clientId": "app-1",
  "requestId": "sub-pool"
}
```

## Connect / heartbeat

Use **connect** (`messageType`: `connect`) with `clientId` and `requestId`, and **ping** / **pong** (`messageType`: `ping` | `pong`) per the shared protocol implementation.

## HTTP first

Fetch the matching **initial state** over HTTP (main page, pools feed, orders feed, or user history), then subscribe — see [Main page](/api-reference/snekfun-provider/http/main-page), [Pools feed](/api-reference/snekfun-provider/http/pools-feed), [Orders feed](/api-reference/snekfun-provider/http/orders-feed), [User history](/api-reference/snekfun-provider/http/user-history).


## AsyncAPI

````yaml api-reference/asyncapi.json analytics
id: analytics
title: Analytics (Protocol v2)
description: >-
  Subscribe with messageType subscribe, topic from IncomingSubscribeDataTopic,
  optional data for PoolFeed / LiveOrdersFeed / UserHistory*.
servers:
  - id: analytics
    protocol: wss
    host: analytics.snek.fun
    bindings: []
    variables: []
address: /websocket/ws
parameters: []
bindings: []
operations:
  - &ref_3
    id: sendAnalytics
    title: Send analytics
    type: send
    messages:
      - &ref_5
        id: Subscribe
        payload:
          - name: Subscribe
            description: Protocol v2 subscribe
            type: object
            properties:
              - name: messageType
                type: string
                description: subscribe
                required: true
              - name: clientId
                type: string
                required: true
              - name: requestId
                type: string
                required: true
              - name: topic
                type: string
                enumValues:
                  - Latest
                  - New
                  - MCapDesc
                  - CompletedCreateOn
                  - CompletedMCap
                  - KOTH
                  - PoolFeed
                  - LiveOrdersFeed
                  - UserHistoryByAddress
                  - UserHistoryByAddressAndAsset
                required: true
              - name: description
                type: string
                description: >-
                  Required for PoolFeed, LiveOrdersFeed, UserHistoryByAddress,
                  UserHistoryByAddressAndAsset — see server SubscribeMapper.
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - messageType
            - clientId
            - requestId
            - topic
          properties:
            messageType:
              type: string
              const: subscribe
              x-parser-schema-id: <anonymous-schema-1>
            clientId:
              type: string
              x-parser-schema-id: <anonymous-schema-2>
            requestId:
              type: string
              x-parser-schema-id: <anonymous-schema-3>
            topic:
              type: string
              enum:
                - Latest
                - New
                - MCapDesc
                - CompletedCreateOn
                - CompletedMCap
                - KOTH
                - PoolFeed
                - LiveOrdersFeed
                - UserHistoryByAddress
                - UserHistoryByAddressAndAsset
              x-parser-schema-id: <anonymous-schema-4>
            data:
              description: >-
                Required for PoolFeed, LiveOrdersFeed, UserHistoryByAddress,
                UserHistoryByAddressAndAsset — see server SubscribeMapper.
              x-parser-schema-id: <anonymous-schema-5>
          x-parser-schema-id: SubscribePayloadV2
        title: Subscribe
        description: Protocol v2 subscribe
        example: |-
          {
            "messageType": "subscribe",
            "clientId": "c1",
            "requestId": "r1",
            "topic": "Latest"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: Subscribe
      - &ref_6
        id: Unsubscribe
        payload:
          - name: Unsubscribe
            type: object
            properties:
              - name: messageType
                type: string
                description: unsubscribe
                required: true
              - name: clientId
                type: string
                required: true
              - name: requestId
                type: string
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - messageType
            - clientId
            - requestId
          properties:
            messageType:
              type: string
              const: unsubscribe
              x-parser-schema-id: <anonymous-schema-6>
            clientId:
              type: string
              x-parser-schema-id: <anonymous-schema-7>
            requestId:
              type: string
              x-parser-schema-id: <anonymous-schema-8>
          x-parser-schema-id: UnsubscribePayloadV2
        title: Unsubscribe
        example: |-
          {
            "messageType": "unsubscribe",
            "clientId": "c1",
            "requestId": "r1"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: Unsubscribe
      - &ref_7
        id: Connect
        payload:
          - name: Connect
            type: object
            properties:
              - name: messageType
                type: string
                description: connect
                required: true
              - name: clientId
                type: string
                required: true
              - name: requestId
                type: string
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - messageType
            - clientId
            - requestId
          properties:
            messageType:
              type: string
              const: connect
              x-parser-schema-id: <anonymous-schema-9>
            clientId:
              type: string
              x-parser-schema-id: <anonymous-schema-10>
            requestId:
              type: string
              x-parser-schema-id: <anonymous-schema-11>
          x-parser-schema-id: ConnectPayloadV2
        title: Connect
        example: |-
          {
            "messageType": "<string>",
            "clientId": "<string>",
            "requestId": "<string>"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: Connect
      - &ref_8
        id: Ping
        payload:
          - name: Ping
            type: object
            properties:
              - name: messageType
                type: string
                description: ping
                required: true
              - name: clientId
                type: string
                required: true
              - name: requestId
                type: string
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - messageType
            - clientId
            - requestId
          properties:
            messageType:
              type: string
              const: ping
              x-parser-schema-id: <anonymous-schema-12>
            clientId:
              type: string
              x-parser-schema-id: <anonymous-schema-13>
            requestId:
              type: string
              x-parser-schema-id: <anonymous-schema-14>
          x-parser-schema-id: PingPayloadV2
        title: Ping
        example: |-
          {
            "messageType": "<string>",
            "clientId": "<string>",
            "requestId": "<string>"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: Ping
    bindings: []
    extensions: &ref_1
      - id: x-parser-unique-object-id
        value: analytics
  - &ref_2
    id: receiveAnalytics
    title: Receive analytics
    type: receive
    messages:
      - &ref_4
        id: Outgoing
        payload:
          - name: Server message
            type: object
            properties:
              - name: requestId
                type: &ref_0
                  - string
                  - 'null'
                required: false
              - name: event
                type: string
                description: >-
                  OutgoingMessageType: MainPage, PoolsFeed, KOTH,
                  LiveOrdersFeed, UserHistoryByAddress,
                  UserHistoryByAddressAndAsset
                required: true
              - name: messageType
                type: string
                description: Usually Response
                required: true
              - name: data
                type: object
                required: false
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - event
            - messageType
          properties:
            requestId:
              type: *ref_0
              x-parser-schema-id: <anonymous-schema-18>
            event:
              type: string
              description: >-
                OutgoingMessageType: MainPage, PoolsFeed, KOTH, LiveOrdersFeed,
                UserHistoryByAddress, UserHistoryByAddressAndAsset
              x-parser-schema-id: <anonymous-schema-19>
            messageType:
              type: string
              description: Usually Response
              x-parser-schema-id: <anonymous-schema-20>
            data:
              type: object
              x-parser-schema-id: <anonymous-schema-21>
          x-parser-schema-id: DefaultOutgoingMessage
        title: Server message
        example: |-
          {
            "requestId": "r2",
            "event": "PoolsFeed",
            "messageType": "Response",
            "data": {
              "note": "Pool snapshot JSON (LiquidityPoolInfo)"
            }
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: Outgoing
    bindings: []
    extensions: *ref_1
sendOperations:
  - *ref_2
receiveOperations:
  - *ref_3
sendMessages:
  - *ref_4
receiveMessages:
  - *ref_5
  - *ref_6
  - *ref_7
  - *ref_8
extensions:
  - id: x-parser-unique-object-id
    value: analytics
securitySchemes: []

````