Whop Realtime WebSocket API

Bidirectional realtime WebSocket for Whop apps - custom app messages and chat/feed updates - connected and authenticated through the @whop/react and @whop/api SDKs. Whop does not publish a raw wss:// endpoint URL; the base URL shown is a modeled placeholder (see the AsyncAPI document).

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/whop-realtime-websocket-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

AsyncAPI Specification

whop-asyncapi.yml Raw ↑
asyncapi: '2.6.0'
id: 'urn:com:whop:realtime:websocket'
info:
  title: Whop Realtime WebSocket
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 description of Whop's **realtime WebSocket** surface, used by
    Whop apps for bidirectional realtime messaging (custom app messages plus
    chat / feed updates) between connected clients and Whop's servers.

    Scope / grounding notes:

    - Whop documents a WebSocket feature for apps at
      docs.whop.com/apps/features/websocket-guide. It is a **real, documented,
      bidirectional** transport, which is why it is modeled here as AsyncAPI.
    - The connection is **established and authenticated through Whop's SDK**,
      not by hand-connecting to a published raw `wss://` URL. In React the
      `WhopWebsocketProvider` from `@whop/react` opens the connection; other
      runtimes use `connectToWebsocket` from `@whop/api`. Whop does **not**
      publish a standalone raw `wss://` endpoint string for arbitrary clients,
      so the `servers.whopRealtime.url` below is a **modeled placeholder**
      (`realtime.whop.com`) that documents where the SDK connects, not a
      verbatim documented URL. Verify on reconciliation.
    - Clients send messages with `useBroadcastWebsocketMessage` (React) and
      receive them with `useOnWebsocketMessage`; a trusted server can broadcast
      with `whopApi.websockets.sendMessage`. Messages carry a `target`
      (for example `everyone`, an experience, or a custom channel).
    - Connection lifecycle is observable via `connect`, `disconnect`, and
      `connectionStatus` events on the websocket instance.

    This document models the message shapes and channels at a transport level;
    exact payload schemas are modeled from the documented SDK surface and
    should be verified against the live guide.
  contact:
    name: API Evangelist
    email: kin@apievangelist.com
    url: https://apievangelist.com
  license:
    name: API documentation - Whop Terms of Service
    url: https://whop.com/terms-of-service/
  x-transport-notes:
    transport: WebSocket
    protocol: wss
    direction: bidirectional
    connection: Established via @whop/react WhopWebsocketProvider or @whop/api connectToWebsocket. No raw wss:// URL is published; SDK manages the handshake and auth.
    serverBroadcast: whopApi.websockets.sendMessage (trusted, server-to-clients)
    clientSend: useBroadcastWebsocketMessage (React) with a target field
    clientReceive: useOnWebsocketMessage (React)
    lifecycleEvents: [connect, disconnect, connectionStatus]
    urlIsModeled: true
    source: https://docs.whop.com/apps/features/websocket-guide
defaultContentType: application/json
servers:
  whopRealtime:
    url: realtime.whop.com
    protocol: wss
    description: |
      Whop realtime WebSocket server. The host shown here is a MODELED
      placeholder - Whop's docs establish the connection through the SDK
      (@whop/react / @whop/api) rather than publishing a raw wss:// URL.
      Authentication is handled by the SDK using the app/user context.
    security:
      - sdkManaged: []
channels:
  app/messages:
    description: |
      Custom application messages broadcast between clients. Clients publish
      with `useBroadcastWebsocketMessage` (setting a `target`) and subscribe
      with `useOnWebsocketMessage`. A trusted server broadcasts the same
      message shape with `whopApi.websockets.sendMessage`.
    publish:
      operationId: sendAppMessage
      summary: Send a custom app message to a target.
      message:
        $ref: '#/components/messages/AppMessage'
    subscribe:
      operationId: receiveAppMessage
      summary: Receive custom app messages for subscribed targets.
      message:
        $ref: '#/components/messages/AppMessage'
  chat/feed:
    description: |
      Realtime chat / feed messages delivered to connected clients (for example
      new chat messages in an experience the client is subscribed to). Modeled
      from the documented realtime feed behavior.
    subscribe:
      operationId: receiveFeedMessage
      summary: Receive realtime chat / feed updates.
      message:
        $ref: '#/components/messages/FeedMessage'
  connection/status:
    description: |
      Connection lifecycle updates surfaced by the SDK via the `connect`,
      `disconnect`, and `connectionStatus` events on the websocket instance.
    subscribe:
      operationId: receiveConnectionStatus
      summary: Observe websocket connection status changes.
      message:
        $ref: '#/components/messages/ConnectionStatus'
components:
  securitySchemes:
    sdkManaged:
      type: userPassword
      description: |
        Connection auth is handled by the Whop SDK using the app API key
        (server) or the signed-in user context (client). No bearer token is
        placed on a raw WebSocket URL by application code.
  messages:
    AppMessage:
      name: AppMessage
      title: Custom app websocket message
      summary: A custom message broadcast between app clients with a target.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/AppMessage'
      examples:
        - name: broadcastEveryone
          summary: Broadcast to everyone in the app
          payload:
            target: everyone
            channel: null
            json: '{"type":"cursor","x":120,"y":40}'
    FeedMessage:
      name: FeedMessage
      title: Realtime chat / feed message
      summary: A realtime chat or feed update delivered to subscribed clients.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/FeedMessage'
    ConnectionStatus:
      name: ConnectionStatus
      title: Connection status update
      summary: A websocket connection lifecycle event.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ConnectionStatus'
      examples:
        - name: connected
          summary: Connected
          payload:
            status: connected
  schemas:
    AppMessage:
      type: object
      description: Custom app message envelope broadcast over the websocket.
      required:
        - target
      properties:
        target:
          type: string
          description: 'Delivery target, for example "everyone", an experience ID, or a custom channel name.'
        channel:
          type: string
          nullable: true
          description: Optional custom channel name when not broadcasting to everyone.
        json:
          type: string
          description: Application-defined JSON-encoded string payload.
        isTrusted:
          type: boolean
          description: True when the message originated from a trusted server broadcast (whopApi.websockets.sendMessage).
    FeedMessage:
      type: object
      description: Realtime chat / feed message.
      properties:
        feedType:
          type: string
          description: 'The feed type, for example chat or dms.'
        feedId:
          type: string
        entityType:
          type: string
        entity:
          type: object
          additionalProperties: true
          description: The message/entity payload (for example a chat message).
    ConnectionStatus:
      type: object
      description: Websocket connection lifecycle status.
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - connecting
            - connected
            - disconnected
          description: Current connection status emitted via connect / disconnect / connectionStatus events.