Discord Messages API

Operations on messages within channels

OpenAPI Specification

discord-messages-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Discord Interactions Application Commands Messages API
  description: The Discord Interactions API enables applications to create and respond to application commands (slash commands), message components, and modals. It supports both Gateway-based and webhook-based interaction handling, allowing bots to build rich, interactive user experiences within Discord.
  version: '10'
  contact:
    name: Discord Support
    url: https://support-dev.discord.com/hc/en-us
    email: support@discord.com
  termsOfService: https://discord.com/developers/docs/policies-and-agreements/developer-terms-of-service
servers:
- url: https://discord.com/api/v10
  description: Discord API v10
security:
- BotToken: []
tags:
- name: Messages
  description: Operations on messages within channels
paths:
  /channels/{channel_id}/messages:
    get:
      operationId: getChannelMessages
      summary: Discord List channel messages
      description: Returns messages for a channel. Requires READ_MESSAGE_HISTORY.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - name: around
        in: query
        schema:
          type: string
      - name: before
        in: query
        schema:
          type: string
      - name: after
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
      responses:
        '200':
          description: List of message objects
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Message'
        4XX:
          $ref: '#/components/responses/ClientError'
    post:
      operationId: createMessage
      summary: Discord Create message
      description: Post a message to a guild text or DM channel.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateMessageRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CreateMessageRequest'
      responses:
        '200':
          description: Message object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        4XX:
          $ref: '#/components/responses/ClientError'
  /channels/{channel_id}/messages/{message_id}:
    get:
      operationId: getMessage
      summary: Discord Get message
      description: Returns a specific message in a channel.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      responses:
        '200':
          description: Message object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        4XX:
          $ref: '#/components/responses/ClientError'
    patch:
      operationId: editMessage
      summary: Discord Edit message
      description: Edit a previously sent message.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EditMessageRequest'
      responses:
        '200':
          description: Updated message object
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        4XX:
          $ref: '#/components/responses/ClientError'
    delete:
      operationId: deleteMessage
      summary: Discord Delete message
      description: Delete a message. Requires MANAGE_MESSAGES for others' messages.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      responses:
        '204':
          description: Message deleted
        4XX:
          $ref: '#/components/responses/ClientError'
  /channels/{channel_id}/messages/bulk-delete:
    post:
      operationId: bulkDeleteMessages
      summary: Discord Bulk delete messages
      description: Delete multiple messages in a single request. Requires MANAGE_MESSAGES.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - messages
              properties:
                messages:
                  type: array
                  items:
                    type: string
                  minItems: 2
                  maxItems: 100
      responses:
        '204':
          description: Messages deleted
        4XX:
          $ref: '#/components/responses/ClientError'
  /channels/{channel_id}/messages/{message_id}/reactions/{emoji_name}/@me:
    put:
      operationId: createReaction
      summary: Discord Create reaction
      description: Create a reaction for the message.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      - name: emoji_name
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Reaction added
        4XX:
          $ref: '#/components/responses/ClientError'
    delete:
      operationId: deleteOwnReaction
      summary: Discord Delete own reaction
      description: Delete a reaction the current user has made.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      - name: emoji_name
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Reaction removed
        4XX:
          $ref: '#/components/responses/ClientError'
  /channels/{channel_id}/messages/{message_id}/crosspost:
    post:
      operationId: crosspostMessage
      summary: Discord Crosspost message
      description: Crosspost a message in an Announcement Channel to following channels.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      responses:
        '200':
          description: Crossposted message
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Message'
        4XX:
          $ref: '#/components/responses/ClientError'
  /channels/{channel_id}/pins:
    get:
      operationId: getPinnedMessages
      summary: Discord Get pinned messages
      description: Returns all pinned messages in the channel.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      responses:
        '200':
          description: List of pinned message objects
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Message'
        4XX:
          $ref: '#/components/responses/ClientError'
  /channels/{channel_id}/pins/{message_id}:
    put:
      operationId: pinMessage
      summary: Discord Pin message
      description: Pin a message in a channel. Max 50 pins per channel.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      responses:
        '204':
          description: Message pinned
        4XX:
          $ref: '#/components/responses/ClientError'
    delete:
      operationId: unpinMessage
      summary: Discord Unpin message
      description: Unpin a message in a channel.
      tags:
      - Messages
      parameters:
      - $ref: '#/components/parameters/channelId'
      - $ref: '#/components/parameters/messageId'
      responses:
        '204':
          description: Message unpinned
        4XX:
          $ref: '#/components/responses/ClientError'
components:
  schemas:
    Message:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Snowflake'
        channel_id:
          $ref: '#/components/schemas/Snowflake'
        author:
          $ref: '#/components/schemas/User'
        content:
          type: string
        timestamp:
          type: string
          format: date-time
        edited_timestamp:
          type: string
          format: date-time
          nullable: true
        tts:
          type: boolean
        mention_everyone:
          type: boolean
        mentions:
          type: array
          items:
            $ref: '#/components/schemas/User'
        mention_roles:
          type: array
          items:
            type: string
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/Attachment'
        embeds:
          type: array
          items:
            $ref: '#/components/schemas/Embed'
        reactions:
          type: array
          items:
            $ref: '#/components/schemas/Reaction'
        pinned:
          type: boolean
        webhook_id:
          $ref: '#/components/schemas/Snowflake'
        type:
          type: integer
        flags:
          type: integer
        referenced_message:
          nullable: true
        thread:
          $ref: '#/components/schemas/Channel'
        components:
          type: array
          items:
            $ref: '#/components/schemas/Component'
      required:
      - id
      - channel_id
      - author
      - content
      - timestamp
      - tts
      - mention_everyone
      - mentions
      - mention_roles
      - attachments
      - embeds
      - pinned
      - type
    CreateMessageRequest:
      type: object
      properties:
        content:
          type: string
          maxLength: 2000
        nonce:
          oneOf:
          - type: string
          - type: integer
        tts:
          type: boolean
        embeds:
          type: array
          items:
            $ref: '#/components/schemas/Embed'
          maxItems: 10
        allowed_mentions:
          type: object
          properties:
            parse:
              type: array
              items:
                type: string
            roles:
              type: array
              items:
                type: string
            users:
              type: array
              items:
                type: string
            replied_user:
              type: boolean
        message_reference:
          type: object
          properties:
            message_id:
              $ref: '#/components/schemas/Snowflake'
            channel_id:
              $ref: '#/components/schemas/Snowflake'
            guild_id:
              $ref: '#/components/schemas/Snowflake'
            fail_if_not_exists:
              type: boolean
        components:
          type: array
          items:
            $ref: '#/components/schemas/Component'
        sticker_ids:
          type: array
          items:
            $ref: '#/components/schemas/Snowflake'
          maxItems: 3
        flags:
          type: integer
    Overwrite:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Snowflake'
        type:
          type: integer
          description: 0=role, 1=member
        allow:
          type: string
        deny:
          type: string
    Channel:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Snowflake'
        type:
          type: integer
          description: 0=GUILD_TEXT, 1=DM, 2=GUILD_VOICE, 3=GROUP_DM, 4=GUILD_CATEGORY, 5=GUILD_ANNOUNCEMENT, 10=ANNOUNCEMENT_THREAD, 11=PUBLIC_THREAD, 12=PRIVATE_THREAD, 13=GUILD_STAGE_VOICE, 14=GUILD_DIRECTORY, 15=GUILD_FORUM, 16=GUILD_MEDIA
        guild_id:
          $ref: '#/components/schemas/Snowflake'
        position:
          type: integer
        permission_overwrites:
          type: array
          items:
            $ref: '#/components/schemas/Overwrite'
        name:
          type: string
          nullable: true
        topic:
          type: string
          nullable: true
        nsfw:
          type: boolean
        last_message_id:
          $ref: '#/components/schemas/Snowflake'
        bitrate:
          type: integer
        user_limit:
          type: integer
        rate_limit_per_user:
          type: integer
        recipients:
          type: array
          items:
            $ref: '#/components/schemas/User'
        icon:
          type: string
          nullable: true
        owner_id:
          $ref: '#/components/schemas/Snowflake'
        parent_id:
          $ref: '#/components/schemas/Snowflake'
        last_pin_timestamp:
          type: string
          format: date-time
          nullable: true
        rtc_region:
          type: string
          nullable: true
        video_quality_mode:
          type: integer
        message_count:
          type: integer
        member_count:
          type: integer
        thread_metadata:
          $ref: '#/components/schemas/ThreadMetadata'
        default_auto_archive_duration:
          type: integer
        flags:
          type: integer
        total_message_sent:
          type: integer
      required:
      - id
      - type
    ThreadMetadata:
      type: object
      properties:
        archived:
          type: boolean
        auto_archive_duration:
          type: integer
        archive_timestamp:
          type: string
          format: date-time
        locked:
          type: boolean
        invitable:
          type: boolean
        create_timestamp:
          type: string
          format: date-time
          nullable: true
    EditMessageRequest:
      type: object
      properties:
        content:
          type: string
          nullable: true
          maxLength: 2000
        embeds:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/Embed'
          maxItems: 10
        flags:
          type: integer
          nullable: true
        allowed_mentions:
          type: object
          nullable: true
        components:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/Component'
    User:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Snowflake'
        username:
          type: string
        discriminator:
          type: string
        global_name:
          type: string
          nullable: true
        avatar:
          type: string
          nullable: true
        bot:
          type: boolean
        system:
          type: boolean
        mfa_enabled:
          type: boolean
        banner:
          type: string
          nullable: true
        accent_color:
          type: integer
          nullable: true
        locale:
          type: string
        verified:
          type: boolean
        email:
          type: string
          nullable: true
        flags:
          type: integer
        premium_type:
          type: integer
        public_flags:
          type: integer
        avatar_decoration_data:
          type: object
          nullable: true
      required:
      - id
      - username
    Component:
      type: object
      properties:
        type:
          type: integer
          description: 1=ActionRow, 2=Button, 3=StringSelect, 4=TextInput, 5=UserSelect, 6=RoleSelect, 7=MentionableSelect, 8=ChannelSelect
        components:
          type: array
          items:
            $ref: '#/components/schemas/Component'
        style:
          type: integer
        label:
          type: string
        emoji:
          $ref: '#/components/schemas/Emoji'
        custom_id:
          type: string
        url:
          type: string
          format: uri
        disabled:
          type: boolean
        options:
          type: array
          items:
            $ref: '#/components/schemas/SelectOption'
        placeholder:
          type: string
        min_values:
          type: integer
        max_values:
          type: integer
      required:
      - type
    Embed:
      type: object
      properties:
        title:
          type: string
        type:
          type: string
        description:
          type: string
        url:
          type: string
          format: uri
        timestamp:
          type: string
          format: date-time
        color:
          type: integer
        footer:
          type: object
          properties:
            text:
              type: string
            icon_url:
              type: string
              format: uri
        image:
          type: object
          properties:
            url:
              type: string
              format: uri
            height:
              type: integer
            width:
              type: integer
        thumbnail:
          type: object
          properties:
            url:
              type: string
              format: uri
            height:
              type: integer
            width:
              type: integer
        author:
          type: object
          properties:
            name:
              type: string
            url:
              type: string
              format: uri
            icon_url:
              type: string
              format: uri
        fields:
          type: array
          items:
            type: object
            required:
            - name
            - value
            properties:
              name:
                type: string
              value:
                type: string
              inline:
                type: boolean
    Snowflake:
      type: string
      description: Discord unique ID represented as a string
      pattern: ^[0-9]+$
    Reaction:
      type: object
      properties:
        count:
          type: integer
        count_details:
          type: object
          properties:
            burst:
              type: integer
            normal:
              type: integer
        me:
          type: boolean
        me_burst:
          type: boolean
        emoji:
          $ref: '#/components/schemas/Emoji'
    Attachment:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Snowflake'
        filename:
          type: string
        description:
          type: string
        content_type:
          type: string
        size:
          type: integer
        url:
          type: string
          format: uri
        proxy_url:
          type: string
          format: uri
        height:
          type: integer
          nullable: true
        width:
          type: integer
          nullable: true
        ephemeral:
          type: boolean
      required:
      - id
      - filename
      - size
      - url
      - proxy_url
    SelectOption:
      type: object
      properties:
        label:
          type: string
        value:
          type: string
        description:
          type: string
        emoji:
          $ref: '#/components/schemas/Emoji'
        default:
          type: boolean
      required:
      - label
      - value
    Emoji:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Snowflake'
        name:
          type: string
          nullable: true
        roles:
          type: array
          items:
            type: string
        user:
          $ref: '#/components/schemas/User'
        require_colons:
          type: boolean
        managed:
          type: boolean
        animated:
          type: boolean
        available:
          type: boolean
  parameters:
    messageId:
      name: message_id
      in: path
      required: true
      schema:
        type: string
      description: The ID of the message (Snowflake)
    channelId:
      name: channel_id
      in: path
      required: true
      schema:
        type: string
      description: The ID of the channel (Snowflake)
  responses:
    ClientError:
      description: Client error response
      content:
        application/json:
          schema:
            type: object
            properties:
              code:
                type: integer
              message:
                type: string
              errors:
                type: object
  securitySchemes:
    BotToken:
      type: http
      scheme: bearer
      description: Bot token authentication
externalDocs:
  description: Discord Interactions Documentation
  url: https://discord.com/developers/docs/interactions/overview