Discord · AsyncAPI Specification

Discord Gateway API

Version 10

The Discord Gateway API provides persistent, stateful WebSocket connections between your client and Discord servers. These connections are used for sending and receiving real-time events your client can use to track and update local state, including message creation, guild updates, presence changes, and voice state updates.

View Spec View on GitHub ChatCommunicationGamingMessagingSocialVideoVoiceAsyncAPIWebhooksEvents

Channels

/
publish sendGatewayMessage
Send message to Gateway

Messages

Identify
Identify (Opcode 2)
Sent to trigger the initial handshake with the gateway
Resume
Resume (Opcode 6)
Sent to resume a disconnected session
Heartbeat
Heartbeat (Opcode 1)
Sent periodically to maintain the connection
RequestGuildMembers
Request Guild Members (Opcode 8)
Request guild members for a guild
UpdateVoiceState
Update Voice State (Opcode 4)
Sent to join, move, or disconnect from a voice channel
UpdatePresence
Update Presence (Opcode 3)
Sent to update the client's presence
Hello
Hello (Opcode 10)
Received after connecting, contains heartbeat interval
HeartbeatAck
Heartbeat ACK (Opcode 11)
Acknowledgment of a heartbeat
Ready
Ready
Dispatched after a successful Identify
Resumed
Resumed
Dispatched after a successful Resume
Reconnect
Reconnect (Opcode 7)
Server requests the client to reconnect
InvalidSession
Invalid Session (Opcode 9)
Session is invalid, d indicates if resumable
ChannelCreate
CHANNEL_CREATE
New channel created
ChannelUpdate
CHANNEL_UPDATE
Channel was updated
ChannelDelete
CHANNEL_DELETE
Channel was deleted
ChannelPinsUpdate
CHANNEL_PINS_UPDATE
Message was pinned or unpinned
ThreadCreate
THREAD_CREATE
Thread created or current user added to thread
ThreadUpdate
THREAD_UPDATE
Thread was updated
ThreadDelete
THREAD_DELETE
Thread was deleted
ThreadListSync
THREAD_LIST_SYNC
Sent when gaining access to a channel with active threads
GuildCreate
GUILD_CREATE
Lazy-loaded guild available or user joined a new guild
GuildUpdate
GUILD_UPDATE
Guild was updated
GuildDelete
GUILD_DELETE
Guild became unavailable or user left/was removed from guild
GuildBanAdd
GUILD_BAN_ADD
User was banned from a guild
GuildBanRemove
GUILD_BAN_REMOVE
User was unbanned from a guild
GuildEmojisUpdate
GUILD_EMOJIS_UPDATE
Guild emojis were updated
GuildStickersUpdate
GUILD_STICKERS_UPDATE
Guild stickers were updated
GuildMemberAdd
GUILD_MEMBER_ADD
New user joined a guild
GuildMemberRemove
GUILD_MEMBER_REMOVE
User was removed from a guild
GuildMemberUpdate
GUILD_MEMBER_UPDATE
Guild member was updated
GuildMembersChunk
GUILD_MEMBERS_CHUNK
Response to Request Guild Members
GuildRoleCreate
GUILD_ROLE_CREATE
Guild role was created
GuildRoleUpdate
GUILD_ROLE_UPDATE
Guild role was updated
GuildRoleDelete
GUILD_ROLE_DELETE
Guild role was deleted
GuildScheduledEventCreate
GUILD_SCHEDULED_EVENT_CREATE
Guild scheduled event was created
GuildScheduledEventUpdate
GUILD_SCHEDULED_EVENT_UPDATE
Guild scheduled event was updated
GuildScheduledEventDelete
GUILD_SCHEDULED_EVENT_DELETE
Guild scheduled event was deleted
InteractionCreate
INTERACTION_CREATE
User used an interaction
InviteCreate
INVITE_CREATE
Invite to a channel was created
InviteDelete
INVITE_DELETE
Invite to a channel was deleted
MessageCreate
MESSAGE_CREATE
Message was created
MessageUpdate
MESSAGE_UPDATE
Message was edited
MessageDelete
MESSAGE_DELETE
Message was deleted
MessageDeleteBulk
MESSAGE_DELETE_BULK
Multiple messages were deleted at once
MessageReactionAdd
MESSAGE_REACTION_ADD
User reacted to a message
MessageReactionRemove
MESSAGE_REACTION_REMOVE
User removed a reaction from a message
MessageReactionRemoveAll
MESSAGE_REACTION_REMOVE_ALL
All reactions were explicitly removed from a message
PresenceUpdate
PRESENCE_UPDATE
User's presence or info was updated
TypingStart
TYPING_START
User started typing in a channel
UserUpdate
USER_UPDATE
Properties about the current user changed
VoiceStateUpdate
VOICE_STATE_UPDATE
Someone joined, left, or moved a voice channel
VoiceServerUpdate
VOICE_SERVER_UPDATE
Guild's voice server was updated
WebhooksUpdate
WEBHOOKS_UPDATE
Guild channel webhook was created, updated, or deleted

Servers

wss
gateway wss://gateway.discord.gg/?v=10&encoding=json
Discord Gateway WebSocket server

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Discord Gateway API
  version: '10'
  description: >-
    The Discord Gateway API provides persistent, stateful WebSocket
    connections between your client and Discord servers. These connections
    are used for sending and receiving real-time events your client can use
    to track and update local state, including message creation, guild
    updates, presence changes, and voice state updates.
  contact:
    name: Discord Support
    url: https://support-dev.discord.com/hc/en-us
    email: [email protected]
  license:
    name: MIT
  externalDocs:
    description: Discord Gateway Documentation
    url: https://discord.com/developers/docs/events/gateway
servers:
  gateway:
    url: wss://gateway.discord.gg/?v=10&encoding=json
    protocol: wss
    description: Discord Gateway WebSocket server
channels:
  /:
    publish:
      operationId: sendGatewayMessage
      summary: Send message to Gateway
      description: Messages sent from the client to the Discord Gateway
      message:
        oneOf:
          - $ref: '#/components/messages/Identify'
          - $ref: '#/components/messages/Resume'
          - $ref: '#/components/messages/Heartbeat'
          - $ref: '#/components/messages/RequestGuildMembers'
          - $ref: '#/components/messages/UpdateVoiceState'
          - $ref: '#/components/messages/UpdatePresence'
    subscribe:
      operationId: receiveGatewayEvent
      summary: Receive events from Gateway
      description: Events received from the Discord Gateway
      message:
        oneOf:
          - $ref: '#/components/messages/Hello'
          - $ref: '#/components/messages/HeartbeatAck'
          - $ref: '#/components/messages/Ready'
          - $ref: '#/components/messages/Resumed'
          - $ref: '#/components/messages/Reconnect'
          - $ref: '#/components/messages/InvalidSession'
          - $ref: '#/components/messages/ChannelCreate'
          - $ref: '#/components/messages/ChannelUpdate'
          - $ref: '#/components/messages/ChannelDelete'
          - $ref: '#/components/messages/ChannelPinsUpdate'
          - $ref: '#/components/messages/ThreadCreate'
          - $ref: '#/components/messages/ThreadUpdate'
          - $ref: '#/components/messages/ThreadDelete'
          - $ref: '#/components/messages/ThreadListSync'
          - $ref: '#/components/messages/GuildCreate'
          - $ref: '#/components/messages/GuildUpdate'
          - $ref: '#/components/messages/GuildDelete'
          - $ref: '#/components/messages/GuildBanAdd'
          - $ref: '#/components/messages/GuildBanRemove'
          - $ref: '#/components/messages/GuildEmojisUpdate'
          - $ref: '#/components/messages/GuildStickersUpdate'
          - $ref: '#/components/messages/GuildMemberAdd'
          - $ref: '#/components/messages/GuildMemberRemove'
          - $ref: '#/components/messages/GuildMemberUpdate'
          - $ref: '#/components/messages/GuildMembersChunk'
          - $ref: '#/components/messages/GuildRoleCreate'
          - $ref: '#/components/messages/GuildRoleUpdate'
          - $ref: '#/components/messages/GuildRoleDelete'
          - $ref: '#/components/messages/GuildScheduledEventCreate'
          - $ref: '#/components/messages/GuildScheduledEventUpdate'
          - $ref: '#/components/messages/GuildScheduledEventDelete'
          - $ref: '#/components/messages/InteractionCreate'
          - $ref: '#/components/messages/InviteCreate'
          - $ref: '#/components/messages/InviteDelete'
          - $ref: '#/components/messages/MessageCreate'
          - $ref: '#/components/messages/MessageUpdate'
          - $ref: '#/components/messages/MessageDelete'
          - $ref: '#/components/messages/MessageDeleteBulk'
          - $ref: '#/components/messages/MessageReactionAdd'
          - $ref: '#/components/messages/MessageReactionRemove'
          - $ref: '#/components/messages/MessageReactionRemoveAll'
          - $ref: '#/components/messages/PresenceUpdate'
          - $ref: '#/components/messages/TypingStart'
          - $ref: '#/components/messages/UserUpdate'
          - $ref: '#/components/messages/VoiceStateUpdate'
          - $ref: '#/components/messages/VoiceServerUpdate'
          - $ref: '#/components/messages/WebhooksUpdate'
components:
  messages:
    Identify:
      name: Identify
      title: Identify (Opcode 2)
      summary: Sent to trigger the initial handshake with the gateway
      payload:
        type: object
        required:
          - op
          - d
        properties:
          op:
            type: integer
            const: 2
          d:
            type: object
            required:
              - token
              - intents
              - properties
            properties:
              token:
                type: string
                description: Authentication token
              intents:
                type: integer
                description: Gateway Intents bitfield
              properties:
                type: object
                properties:
                  os:
                    type: string
                  browser:
                    type: string
                  device:
                    type: string
              compress:
                type: boolean
              large_threshold:
                type: integer
                minimum: 50
                maximum: 250
              shard:
                type: array
                items:
                  type: integer
                minItems: 2
                maxItems: 2
              presence:
                type: object
                properties:
                  since:
                    type: integer
                    nullable: true
                  activities:
                    type: array
                    items:
                      $ref: '#/components/schemas/Activity'
                  status:
                    type: string
                    enum:
                      - online
                      - dnd
                      - idle
                      - invisible
                      - offline
                  afk:
                    type: boolean
    Resume:
      name: Resume
      title: Resume (Opcode 6)
      summary: Sent to resume a disconnected session
      payload:
        type: object
        required:
          - op
          - d
        properties:
          op:
            type: integer
            const: 6
          d:
            type: object
            required:
              - token
              - session_id
              - seq
            properties:
              token:
                type: string
              session_id:
                type: string
              seq:
                type: integer
    Heartbeat:
      name: Heartbeat
      title: Heartbeat (Opcode 1)
      summary: Sent periodically to maintain the connection
      payload:
        type: object
        required:
          - op
          - d
        properties:
          op:
            type: integer
            const: 1
          d:
            type: integer
            nullable: true
            description: Last sequence number received
    RequestGuildMembers:
      name: RequestGuildMembers
      title: Request Guild Members (Opcode 8)
      summary: Request guild members for a guild
      payload:
        type: object
        required:
          - op
          - d
        properties:
          op:
            type: integer
            const: 8
          d:
            type: object
            required:
              - guild_id
            properties:
              guild_id:
                type: string
              query:
                type: string
              limit:
                type: integer
              presences:
                type: boolean
              user_ids:
                oneOf:
                  - type: string
                  - type: array
                    items:
                      type: string
              nonce:
                type: string
    UpdateVoiceState:
      name: UpdateVoiceState
      title: Update Voice State (Opcode 4)
      summary: Sent to join, move, or disconnect from a voice channel
      payload:
        type: object
        required:
          - op
          - d
        properties:
          op:
            type: integer
            const: 4
          d:
            type: object
            required:
              - guild_id
              - channel_id
              - self_mute
              - self_deaf
            properties:
              guild_id:
                type: string
              channel_id:
                type: string
                nullable: true
              self_mute:
                type: boolean
              self_deaf:
                type: boolean
    UpdatePresence:
      name: UpdatePresence
      title: Update Presence (Opcode 3)
      summary: Sent to update the client's presence
      payload:
        type: object
        required:
          - op
          - d
        properties:
          op:
            type: integer
            const: 3
          d:
            type: object
            required:
              - since
              - activities
              - status
              - afk
            properties:
              since:
                type: integer
                nullable: true
              activities:
                type: array
                items:
                  $ref: '#/components/schemas/Activity'
              status:
                type: string
                enum:
                  - online
                  - dnd
                  - idle
                  - invisible
                  - offline
              afk:
                type: boolean
    Hello:
      name: Hello
      title: Hello (Opcode 10)
      summary: Received after connecting, contains heartbeat interval
      payload:
        type: object
        properties:
          op:
            type: integer
            const: 10
          d:
            type: object
            properties:
              heartbeat_interval:
                type: integer
                description: Interval in milliseconds to send heartbeats
    HeartbeatAck:
      name: HeartbeatAck
      title: Heartbeat ACK (Opcode 11)
      summary: Acknowledgment of a heartbeat
      payload:
        type: object
        properties:
          op:
            type: integer
            const: 11
    Ready:
      name: Ready
      title: Ready
      summary: Dispatched after a successful Identify
      payload:
        type: object
        properties:
          op:
            type: integer
            const: 0
          t:
            type: string
            const: READY
          s:
            type: integer
          d:
            type: object
            properties:
              v:
                type: integer
              user:
                $ref: '#/components/schemas/User'
              guilds:
                type: array
                items:
                  type: object
              session_id:
                type: string
              resume_gateway_url:
                type: string
              shard:
                type: array
                items:
                  type: integer
              application:
                type: object
                properties:
                  id:
                    type: string
                  flags:
                    type: integer
    Resumed:
      name: Resumed
      title: Resumed
      summary: Dispatched after a successful Resume
      payload:
        type: object
        properties:
          op:
            type: integer
            const: 0
          t:
            type: string
            const: RESUMED
          s:
            type: integer
    Reconnect:
      name: Reconnect
      title: Reconnect (Opcode 7)
      summary: Server requests the client to reconnect
      payload:
        type: object
        properties:
          op:
            type: integer
            const: 7
    InvalidSession:
      name: InvalidSession
      title: Invalid Session (Opcode 9)
      summary: Session is invalid, d indicates if resumable
      payload:
        type: object
        properties:
          op:
            type: integer
            const: 9
          d:
            type: boolean
            description: Whether the session is resumable
    ChannelCreate:
      name: ChannelCreate
      title: CHANNEL_CREATE
      summary: New channel created
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ChannelUpdate:
      name: ChannelUpdate
      title: CHANNEL_UPDATE
      summary: Channel was updated
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ChannelDelete:
      name: ChannelDelete
      title: CHANNEL_DELETE
      summary: Channel was deleted
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ChannelPinsUpdate:
      name: ChannelPinsUpdate
      title: CHANNEL_PINS_UPDATE
      summary: Message was pinned or unpinned
      description: Requires GUILDS or DIRECT_MESSAGES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ThreadCreate:
      name: ThreadCreate
      title: THREAD_CREATE
      summary: Thread created or current user added to thread
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ThreadUpdate:
      name: ThreadUpdate
      title: THREAD_UPDATE
      summary: Thread was updated
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ThreadDelete:
      name: ThreadDelete
      title: THREAD_DELETE
      summary: Thread was deleted
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    ThreadListSync:
      name: ThreadListSync
      title: THREAD_LIST_SYNC
      summary: Sent when gaining access to a channel with active threads
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildCreate:
      name: GuildCreate
      title: GUILD_CREATE
      summary: Lazy-loaded guild available or user joined a new guild
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildUpdate:
      name: GuildUpdate
      title: GUILD_UPDATE
      summary: Guild was updated
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildDelete:
      name: GuildDelete
      title: GUILD_DELETE
      summary: Guild became unavailable or user left/was removed from guild
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildBanAdd:
      name: GuildBanAdd
      title: GUILD_BAN_ADD
      summary: User was banned from a guild
      description: Requires GUILD_MODERATION intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildBanRemove:
      name: GuildBanRemove
      title: GUILD_BAN_REMOVE
      summary: User was unbanned from a guild
      description: Requires GUILD_MODERATION intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildEmojisUpdate:
      name: GuildEmojisUpdate
      title: GUILD_EMOJIS_UPDATE
      summary: Guild emojis were updated
      description: Requires GUILD_EMOJIS_AND_STICKERS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildStickersUpdate:
      name: GuildStickersUpdate
      title: GUILD_STICKERS_UPDATE
      summary: Guild stickers were updated
      description: Requires GUILD_EMOJIS_AND_STICKERS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildMemberAdd:
      name: GuildMemberAdd
      title: GUILD_MEMBER_ADD
      summary: New user joined a guild
      description: Requires GUILD_MEMBERS privileged intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildMemberRemove:
      name: GuildMemberRemove
      title: GUILD_MEMBER_REMOVE
      summary: User was removed from a guild
      description: Requires GUILD_MEMBERS privileged intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildMemberUpdate:
      name: GuildMemberUpdate
      title: GUILD_MEMBER_UPDATE
      summary: Guild member was updated
      description: Requires GUILD_MEMBERS privileged intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildMembersChunk:
      name: GuildMembersChunk
      title: GUILD_MEMBERS_CHUNK
      summary: Response to Request Guild Members
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildRoleCreate:
      name: GuildRoleCreate
      title: GUILD_ROLE_CREATE
      summary: Guild role was created
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildRoleUpdate:
      name: GuildRoleUpdate
      title: GUILD_ROLE_UPDATE
      summary: Guild role was updated
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildRoleDelete:
      name: GuildRoleDelete
      title: GUILD_ROLE_DELETE
      summary: Guild role was deleted
      description: Requires GUILDS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildScheduledEventCreate:
      name: GuildScheduledEventCreate
      title: GUILD_SCHEDULED_EVENT_CREATE
      summary: Guild scheduled event was created
      description: Requires GUILD_SCHEDULED_EVENTS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildScheduledEventUpdate:
      name: GuildScheduledEventUpdate
      title: GUILD_SCHEDULED_EVENT_UPDATE
      summary: Guild scheduled event was updated
      description: Requires GUILD_SCHEDULED_EVENTS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    GuildScheduledEventDelete:
      name: GuildScheduledEventDelete
      title: GUILD_SCHEDULED_EVENT_DELETE
      summary: Guild scheduled event was deleted
      description: Requires GUILD_SCHEDULED_EVENTS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    InteractionCreate:
      name: InteractionCreate
      title: INTERACTION_CREATE
      summary: User used an interaction
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    InviteCreate:
      name: InviteCreate
      title: INVITE_CREATE
      summary: Invite to a channel was created
      description: Requires GUILD_INVITES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    InviteDelete:
      name: InviteDelete
      title: INVITE_DELETE
      summary: Invite to a channel was deleted
      description: Requires GUILD_INVITES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageCreate:
      name: MessageCreate
      title: MESSAGE_CREATE
      summary: Message was created
      description: Requires GUILD_MESSAGES or DIRECT_MESSAGES intent. MESSAGE_CONTENT privileged intent required for content in guilds.
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageUpdate:
      name: MessageUpdate
      title: MESSAGE_UPDATE
      summary: Message was edited
      description: Requires GUILD_MESSAGES or DIRECT_MESSAGES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageDelete:
      name: MessageDelete
      title: MESSAGE_DELETE
      summary: Message was deleted
      description: Requires GUILD_MESSAGES or DIRECT_MESSAGES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageDeleteBulk:
      name: MessageDeleteBulk
      title: MESSAGE_DELETE_BULK
      summary: Multiple messages were deleted at once
      description: Requires GUILD_MESSAGES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageReactionAdd:
      name: MessageReactionAdd
      title: MESSAGE_REACTION_ADD
      summary: User reacted to a message
      description: Requires GUILD_MESSAGE_REACTIONS or DIRECT_MESSAGE_REACTIONS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageReactionRemove:
      name: MessageReactionRemove
      title: MESSAGE_REACTION_REMOVE
      summary: User removed a reaction from a message
      description: Requires GUILD_MESSAGE_REACTIONS or DIRECT_MESSAGE_REACTIONS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    MessageReactionRemoveAll:
      name: MessageReactionRemoveAll
      title: MESSAGE_REACTION_REMOVE_ALL
      summary: All reactions were explicitly removed from a message
      description: Requires GUILD_MESSAGE_REACTIONS or DIRECT_MESSAGE_REACTIONS intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    PresenceUpdate:
      name: PresenceUpdate
      title: PRESENCE_UPDATE
      summary: User's presence or info was updated
      description: Requires GUILD_PRESENCES privileged intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    TypingStart:
      name: TypingStart
      title: TYPING_START
      summary: User started typing in a channel
      description: Requires GUILD_MESSAGE_TYPING or DIRECT_MESSAGE_TYPING intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    UserUpdate:
      name: UserUpdate
      title: USER_UPDATE
      summary: Properties about the current user changed
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    VoiceStateUpdate:
      name: VoiceStateUpdate
      title: VOICE_STATE_UPDATE
      summary: Someone joined, left, or moved a voice channel
      description: Requires GUILD_VOICE_STATES intent
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    VoiceServerUpdate:
      name: VoiceServerUpdate
      title: VOICE_SERVER_UPDATE
      summary: Guild's voice server was updated
      payload:
        $ref: '#/components/schemas/DispatchEvent'
    WebhooksUpdate:
      name: WebhooksUpdate
      title: WEBHOOKS_UPDATE
      summary: Guild channel webhook was created, updated, or deleted
      payload:
        $ref: '#/components/schemas/DispatchEvent'
  schemas:
    DispatchEvent:
      type: object
      properties:
        op:
          type: integer
          const: 0
          description: Opcode 0 for Dispatch events
        s:
          type: integer
          description: Sequence number for resuming
        t:
          type: string
          description: Event name
        d:
          type: object
          description: Event data payload
      required:
        - op
        - s
        - t
        - d
    User:
      type: object
      properties:
        id:
          type: string
        username:
          type: string
        discriminator:
          type: string
        global_name:
          type: string
          nullable: true
        avatar:
          type: string
          nullable: true
        bot:
          type: boolean
        flags:
          type: integer
      required:
        - id
        - username
    Activity:
      type: object
      properties:
        name:
          type: string
        type:
          type: integer
          description: 0=Playing, 1=Streaming, 2=Listening, 3=Watching, 4=Custom, 5=Competing
        url:
          type: string
          nullable: true
        state:
          type: string
          nullable: true
      required:
        - name
        - type