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.
View SpecView on GitHubMembershipPaymentsCheckoutCreator EconomyMarketplaceDigital ProductsAccess ControlCommerceReal-TimeAsyncAPIEventsWebSockets
Channels
app/messages
publishsendAppMessage
Send a custom app message to a target.
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`.
chat/feed
subscribereceiveFeedMessage
Receive realtime chat / feed updates.
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.
connection/status
subscribereceiveConnectionStatus
Observe websocket connection status changes.
Connection lifecycle updates surfaced by the SDK via the `connect`, `disconnect`, and `connectionStatus` events on the websocket instance.
Messages
✉
AppMessage
Custom app websocket message
A custom message broadcast between app clients with a target.
✉
FeedMessage
Realtime chat / feed message
A realtime chat or feed update delivered to subscribed clients.
✉
ConnectionStatus
Connection status update
A websocket connection lifecycle event.
Servers
wss
whopRealtimerealtime.whop.com
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.
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.
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.