dev-to website screenshot

dev-to

Access Forem articles, users and other resources via API. For a real-world example of Forem in action, check out [DEV](https://www.dev.to). All endpoints can be accessed with the 'api-key' header and a accept header, but some of them are accessible publicly without authentication. Dates and date times, unless otherwise specified, must be in the [RFC 3339](https://tools.ietf.org/html/rfc3339) format.

2 APIs 0 Features

APIs

Dev.to Forem API

The Dev.to Forem API (v1) is a RESTful API that provides programmatic access to the Dev.to developer community platform, which is built on the open-source Forem framework. The A...

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 ca...

Collections

Pricing Plans

Dev To Plans Pricing

3 plans

PLANS

Rate Limits

Dev To Rate Limits

5 limits

RATE LIMITS

FinOps

Dev To Finops

FINOPS

Event Specifications

Dev.to Webhooks Events

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 ...

ASYNCAPI

Semantic Vocabularies

Dev To Context

0 classes · 7 properties

JSON-LD

Resources

👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
JSONLD
JSONLD
🔗
JSONSchema
JSONSchema

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Dev.to Forem API
  version: 1.0.0
request:
  auth:
    type: apikey
    key: api-key
    value: '{{api-key}}'
    placement: header
items:
- info:
    name: Articles
    type: folder
  items:
  - info:
      name: Published articles
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
      - name: tag
        value: ''
        type: query
        description: Filter articles by a single tag name.
      - name: tags
        value: ''
        type: query
        description: Filter articles by a comma-separated list of tag names (articles must have all specified tags).
      - name: tags_exclude
        value: ''
        type: query
        description: Exclude articles with these comma-separated tag names.
      - name: username
        value: ''
        type: query
        description: Filter articles by the author's username.
      - name: state
        value: ''
        type: query
        description: Filter articles by state. Defaults to the most popular articles.
      - name: top
        value: ''
        type: query
        description: Return the most popular articles published in the last N days.
      - name: collection_id
        value: ''
        type: query
        description: Return articles belonging to the specified collection.
    docs: Retrieves a list of published articles, ordered by descending popularity. This endpoint is publicly accessible and
      can be filtered by tag, username, state, and other parameters.
  - info:
      name: Publish article
      type: http
    http:
      method: POST
      url: https://dev.to/api/articles
      body:
        type: json
        data: '{}'
    docs: Creates a new article. The authenticated user will be the author of the article. The article can be published immediately
      or saved as a draft by setting the published field.
  - info:
      name: Published articles sorted by published date
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/latest
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves a list of published articles sorted by publication date in descending order.
  - info:
      name: Published article by id
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/:id
      params:
      - name: id
        value: ''
        type: path
        description: The numeric ID of the article.
    docs: Retrieves a single published article by its numeric ID.
  - info:
      name: Update an article by id
      type: http
    http:
      method: PUT
      url: https://dev.to/api/articles/:id
      params:
      - name: id
        value: ''
        type: path
        description: The numeric ID of the article.
      body:
        type: json
        data: '{}'
    docs: Updates an existing article. Only the article's author or an admin can update the article.
  - info:
      name: Published article by path
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/:username/:slug
      params:
      - name: username
        value: ''
        type: path
        description: The username of the article's author.
      - name: slug
        value: ''
        type: path
        description: The slug of the article.
    docs: Retrieves a single published article by the author's username and the article's slug.
  - info:
      name: User's articles
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/me
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves all articles authored by the authenticated user.
  - info:
      name: User's published articles
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/me/published
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves only published articles authored by the authenticated user.
  - info:
      name: User's unpublished articles
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/me/unpublished
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves only unpublished (draft) articles authored by the authenticated user.
  - info:
      name: User's all articles
      type: http
    http:
      method: GET
      url: https://dev.to/api/articles/me/all
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves all articles (both published and unpublished) authored by the authenticated user.
  - info:
      name: Unpublish an article
      type: http
    http:
      method: PUT
      url: https://dev.to/api/articles/:id/unpublish
      params:
      - name: id
        value: ''
        type: path
        description: The numeric ID of the article.
    docs: Unpublishes an article by its ID. Requires admin-level API key.
  - info:
      name: Organization's Articles
      type: http
    http:
      method: GET
      url: https://dev.to/api/organizations/:username/articles
      params:
      - name: username
        value: ''
        type: path
        description: The username (slug) of the organization.
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves a list of articles published under the specified organization.
- info:
    name: Comments
    type: folder
  items:
  - info:
      name: Comments
      type: http
    http:
      method: GET
      url: https://dev.to/api/comments
      params:
      - name: a_id
        value: ''
        type: query
        description: The article ID to retrieve comments for.
      - name: p_id
        value: ''
        type: query
        description: The podcast episode ID to retrieve comments for.
    docs: Retrieves all comments belonging to an article or podcast episode, returned as threaded conversations. Provide either
      a_id for articles or p_id for podcast episodes.
  - info:
      name: Comment by id
      type: http
    http:
      method: GET
      url: https://dev.to/api/comments/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the comment.
    docs: Retrieves a single comment and its descendants by the comment ID.
- info:
    name: DisplayAds
    type: folder
  items:
  - info:
      name: Display ads
      type: http
    http:
      method: GET
      url: https://dev.to/api/display_ads
    docs: Retrieves all display ads. Requires admin-level API key.
  - info:
      name: Create display ad
      type: http
    http:
      method: POST
      url: https://dev.to/api/display_ads
      body:
        type: json
        data: '{}'
    docs: Creates a new display ad. Requires admin-level API key.
  - info:
      name: Display ad
      type: http
    http:
      method: GET
      url: https://dev.to/api/display_ads/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the display ad.
    docs: Retrieves a single display ad by ID. Requires admin-level API key.
  - info:
      name: Update display ad
      type: http
    http:
      method: PUT
      url: https://dev.to/api/display_ads/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the display ad.
      body:
        type: json
        data: '{}'
    docs: Updates an existing display ad. Requires admin-level API key.
  - info:
      name: Unpublish display ad
      type: http
    http:
      method: PUT
      url: https://dev.to/api/display_ads/:id/unpublish
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the display ad.
    docs: Unpublishes a display ad by ID. Requires admin-level API key.
- info:
    name: FollowedTags
    type: folder
  items:
  - info:
      name: Followed Tags
      type: http
    http:
      method: GET
      url: https://dev.to/api/follows/tags
    docs: Retrieves a list of tags followed by the authenticated user.
- info:
    name: Followers
    type: folder
  items:
  - info:
      name: Followers
      type: http
    http:
      method: GET
      url: https://dev.to/api/followers/users
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
      - name: sort
        value: ''
        type: query
        description: Sort order for followers.
    docs: Retrieves a list of users who follow the authenticated user.
- info:
    name: Organizations
    type: folder
  items:
  - info:
      name: An organization
      type: http
    http:
      method: GET
      url: https://dev.to/api/organizations/:username
      params:
      - name: username
        value: ''
        type: path
        description: The username (slug) of the organization.
    docs: Retrieves a single organization by its username (slug).
  - info:
      name: Organization's users
      type: http
    http:
      method: GET
      url: https://dev.to/api/organizations/:username/users
      params:
      - name: username
        value: ''
        type: path
        description: The username (slug) of the organization.
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves a list of users belonging to the specified organization.
- info:
    name: Pages
    type: folder
  items:
  - info:
      name: Show details for all pages
      type: http
    http:
      method: GET
      url: https://dev.to/api/pages
    docs: Retrieves all static pages on the platform. Requires admin-level API key.
  - info:
      name: Create a new page
      type: http
    http:
      method: POST
      url: https://dev.to/api/pages
      body:
        type: json
        data: '{}'
    docs: Creates a new static page. Requires admin-level API key.
  - info:
      name: Show details for a page
      type: http
    http:
      method: GET
      url: https://dev.to/api/pages/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the page.
    docs: Retrieves a single static page by ID. Requires admin-level API key.
  - info:
      name: Update details for a page
      type: http
    http:
      method: PUT
      url: https://dev.to/api/pages/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the page.
      body:
        type: json
        data: '{}'
    docs: Updates an existing static page. Requires admin-level API key.
  - info:
      name: Remove a page
      type: http
    http:
      method: DELETE
      url: https://dev.to/api/pages/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the page.
    docs: Deletes a static page by ID. Requires admin-level API key.
- info:
    name: PodcastEpisodes
    type: folder
  items:
  - info:
      name: Podcast Episodes
      type: http
    http:
      method: GET
      url: https://dev.to/api/podcast_episodes
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 10).
      - name: username
        value: ''
        type: query
        description: Filter podcast episodes by the podcast owner's username.
    docs: Retrieves a list of published podcast episodes. Can be filtered by username.
- info:
    name: ProfileImages
    type: folder
  items:
  - info:
      name: A Users or organizations profile image
      type: http
    http:
      method: GET
      url: https://dev.to/api/profile_images/:username
      params:
      - name: username
        value: ''
        type: path
        description: The username of the user or organization.
    docs: Retrieves the profile image URL for a user or organization by username.
- info:
    name: Reactions
    type: folder
  items:
  - info:
      name: Toggle reaction
      type: http
    http:
      method: POST
      url: https://dev.to/api/reactions/toggle
      params:
      - name: category
        value: ''
        type: query
        description: The category of reaction.
      - name: reactable_id
        value: ''
        type: query
        description: The ID of the reactable entity.
      - name: reactable_type
        value: ''
        type: query
        description: The type of entity being reacted to.
    docs: Toggles a reaction on or off for an article, comment, or user. If the reaction already exists it will be removed;
      otherwise it will be created.
  - info:
      name: Create reaction
      type: http
    http:
      method: POST
      url: https://dev.to/api/reactions
      body:
        type: json
        data: '{}'
    docs: Creates a new reaction on an article, comment, or user.
- info:
    name: ReadingList
    type: folder
  items:
  - info:
      name: Readinglist
      type: http
    http:
      method: GET
      url: https://dev.to/api/readinglist
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 30).
    docs: Retrieves the authenticated user's reading list (bookmarked articles).
- info:
    name: Default
    type: folder
  items:
  - info:
      name: Tags
      type: http
    http:
      method: GET
      url: https://dev.to/api/tags
      params:
      - name: page
        value: ''
        type: query
        description: Pagination page number.
      - name: per_page
        value: ''
        type: query
        description: Number of items per page (max 1000, default 10).
    docs: Retrieves a list of available tags on the platform, ordered by popularity.
- info:
    name: Users
    type: folder
  items:
  - info:
      name: The authenticated user
      type: http
    http:
      method: GET
      url: https://dev.to/api/users/me
    docs: Retrieves the profile of the currently authenticated user.
  - info:
      name: A User
      type: http
    http:
      method: GET
      url: https://dev.to/api/users/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the user.
    docs: Retrieves a single user by their numeric ID.
  - info:
      name: Unpublish a User's Articles and Comments
      type: http
    http:
      method: PUT
      url: https://dev.to/api/users/:id/unpublish
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the user.
    docs: Unpublishes all articles and comments for the specified user. Requires admin-level API key.
  - info:
      name: Suspend a User
      type: http
    http:
      method: PUT
      url: https://dev.to/api/users/:id/suspend
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the user.
    docs: Suspends a user account. Requires admin-level API key.
- info:
    name: Webhooks
    type: folder
  items:
  - info:
      name: Webhooks
      type: http
    http:
      method: GET
      url: https://dev.to/api/webhooks
    docs: Retrieves a list of webhook subscriptions for the authenticated user.
  - info:
      name: Create a webhook
      type: http
    http:
      method: POST
      url: https://dev.to/api/webhooks
      body:
        type: json
        data: '{}'
    docs: Creates a new webhook subscription. The webhook will receive HTTP POST callbacks at the specified target URL when
      subscribed events occur.
  - info:
      name: A webhook endpoint
      type: http
    http:
      method: GET
      url: https://dev.to/api/webhooks/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the webhook.
    docs: Retrieves a single webhook subscription by ID.
  - info:
      name: Delete a webhook endpoint
      type: http
    http:
      method: DELETE
      url: https://dev.to/api/webhooks/:id
      params:
      - name: id
        value: ''
        type: path
        description: The ID of the webhook.
    docs: Deletes a webhook subscription by ID.
bundled: true