Dev.to Webhooks Events
Version 1.0.0
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.
Channels
receiveArticleEventMessages
Servers
dev.to
AsyncAPI Specification
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.
Work with this as data
Every AsyncAPI spec 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 asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.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.
Call it yourself
curl for this page
curl "https://apis.io/api/v1/asyncapis/dev-to-webhooks-asyncapi"
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.
A second provider on the same verified email joins the account you already have.