Dev.to Webhooks API

The Dev.to Webhooks API allows developers to subscribe to real-time notifications for events occurring on the Dev.to platform. By creating webhook subscriptions, applications can receive HTTP callbacks when specific events happen, such as new articles being published. This enables event-driven integrations and automation workflows that respond immediately to activity on the platform without the need to continuously poll the REST API for changes.

AsyncAPI Specification

dev-to-webhooks-asyncapi.yml Raw ↑
asyncapi: 2.6.0
info:
  title: Dev.to Webhooks Events
  description: >-
    The Dev.to Webhooks event-driven interface allows applications to receive
    real-time HTTP POST callbacks when specific events occur on the Dev.to
    platform. Webhook subscriptions are managed via the Forem REST API, and
    once configured, the platform sends JSON payloads to the registered
    target URL whenever subscribed article lifecycle events are triggered.
    Supported events include article creation, updates, and deletion.
  version: '1.0.0'
  contact:
    name: Forem Support
    url: https://forem.com
servers:
  devToWebhookSource:
    url: dev.to
    protocol: https
    description: >-
      Dev.to platform server that dispatches webhook events to registered
      subscriber endpoints when article lifecycle events occur.
channels:
  /webhook:
    description: >-
      The subscriber's webhook endpoint URL that receives HTTP POST
      callbacks from Dev.to. This URL is registered via the Forem REST API
      when creating a webhook subscription. Dev.to sends a JSON payload to
      this URL whenever a subscribed event occurs.
    publish:
      operationId: receiveArticleEvent
      summary: Receive article lifecycle events
      description: >-
        Receives article lifecycle event notifications from the Dev.to
        platform. Each event includes the full article data as a JSON
        payload delivered via HTTP POST to the registered target URL.
      message:
        oneOf:
          - $ref: '#/components/messages/ArticleCreated'
          - $ref: '#/components/messages/ArticleUpdated'
          - $ref: '#/components/messages/ArticleDestroyed'
components:
  securitySchemes:
    apiKey:
      type: httpApiKey
      name: api-key
      in: header
      description: >-
        API key used to manage webhook subscriptions via the Forem REST API.
        Webhook callback payloads themselves do not include authentication
        headers from the sender.
  messages:
    ArticleCreated:
      name: article_created
      title: Article Created
      summary: >-
        Triggered when a new article is published on the platform.
      description: >-
        This event fires when a user publishes a new article on Dev.to.
        The payload contains the full article object including title, body,
        tags, author information, and publication metadata.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ArticleEventPayload'
    ArticleUpdated:
      name: article_updated
      title: Article Updated
      summary: >-
        Triggered when an existing published article is updated.
      description: >-
        This event fires when a previously published article is edited on
        Dev.to. The payload contains the updated article object reflecting
        the latest changes to the article's content and metadata.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ArticleEventPayload'
    ArticleDestroyed:
      name: article_destroyed
      title: Article Destroyed
      summary: >-
        Triggered when a published article is deleted from the platform.
      description: >-
        This event fires when an article is removed from Dev.to. The
        payload contains the article object as it existed before deletion,
        allowing subscribers to identify which article was removed and
        take appropriate action.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/ArticleEventPayload'
  schemas:
    ArticleEventPayload:
      type: object
      description: >-
        The webhook event payload sent by Dev.to when an article lifecycle
        event occurs. Contains the full article data along with author and
        organization information.
      properties:
        type_of:
          type: string
          description: >-
            The type of resource, always "article".
        id:
          type: integer
          description: >-
            The unique identifier of the article.
        title:
          type: string
          description: >-
            The title of the article.
        description:
          type: string
          description: >-
            A short description or subtitle for the article.
        slug:
          type: string
          description: >-
            The URL slug of the article.
        path:
          type: string
          description: >-
            The relative path to the article on DEV.
        url:
          type: string
          format: uri
          description: >-
            The full URL of the article.
        comments_count:
          type: integer
          description: >-
            The number of comments on the article.
        public_reactions_count:
          type: integer
          description: >-
            The total number of public reactions on the article.
        published_timestamp:
          type: string
          format: date-time
          description: >-
            The ISO 8601 timestamp when the article was published.
        positive_reactions_count:
          type: integer
          description: >-
            The count of positive reactions.
        cover_image:
          type: string
          format: uri
          nullable: true
          description: >-
            The URL of the article's cover image.
        social_image:
          type: string
          format: uri
          description: >-
            The URL of the social sharing image.
        canonical_url:
          type: string
          format: uri
          description: >-
            The canonical URL of the article.
        created_at:
          type: string
          format: date-time
          description: >-
            The ISO 8601 timestamp when the article was created.
        edited_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            The ISO 8601 timestamp when the article was last edited.
        published_at:
          type: string
          format: date-time
          description: >-
            The ISO 8601 timestamp when the article was published.
        reading_time_minutes:
          type: integer
          description: >-
            The estimated reading time in minutes.
        tag_list:
          type: array
          items:
            type: string
          description: >-
            A list of tags associated with the article.
        body_html:
          type: string
          description: >-
            The article body rendered as HTML.
        body_markdown:
          type: string
          description: >-
            The article body in the original Markdown format.
        user:
          $ref: '#/components/schemas/WebhookUser'
        organization:
          $ref: '#/components/schemas/WebhookOrganization'
    WebhookUser:
      type: object
      description: >-
        The author of the article included in webhook event payloads.
      properties:
        name:
          type: string
          description: >-
            The display name of the user.
        username:
          type: string
          description: >-
            The unique username of the user.
        twitter_username:
          type: string
          nullable: true
          description: >-
            The user's Twitter username.
        github_username:
          type: string
          nullable: true
          description: >-
            The user's GitHub username.
        website_url:
          type: string
          format: uri
          nullable: true
          description: >-
            The user's website URL.
        profile_image:
          type: string
          format: uri
          description: >-
            The URL of the user's profile image.
        profile_image_90:
          type: string
          format: uri
          description: >-
            The URL of the 90px profile image.
    WebhookOrganization:
      type: object
      nullable: true
      description: >-
        The organization the article was published under, if applicable.
        May be null if the article was not published under an organization.
      properties:
        name:
          type: string
          description: >-
            The display name of the organization.
        username:
          type: string
          description: >-
            The unique username (slug) of the organization.
        slug:
          type: string
          description: >-
            The URL slug of the organization.
        profile_image:
          type: string
          format: uri
          description: >-
            The URL of the organization's profile image.
        profile_image_90:
          type: string
          format: uri
          description: >-
            The URL of the 90px profile image.