DEV Community

Cover image for Read Posts using Dev.to API: A Guide
Yoan Gilliand
Yoan Gilliand

Posted on

2 1 1 1 1

Read Posts using Dev.to API: A Guide

The Dev.to API is a fantastic resource for developers who want to programmatically access and display posts from the platform. Whether you're building a personal blog aggregator, a portfolio, or just exploring the API, this guide will show you how to read posts from Dev.to using JavaScript and TypeScript with the axios library.

In this article, we’ll focus exclusively on reading posts—fetching lists of posts, retrieving individual posts by ID or slug, and using query parameters to filter and paginate results.


Table of Contents


1. Introduction to Reading Posts

The Dev.to API provides several endpoints for reading posts:

  • Fetch a list of posts: Retrieve multiple posts, optionally filtered by username, tags, or pagination.
  • Fetch a single post: Retrieve a specific post by its ID or slug.

All these endpoints return data in JSON format, making it easy to work with in JavaScript or TypeScript.


2. Setting Up Axios

Before we start, ensure you have axios installed. You can install it using npm or yarn:

npm install axios
# or
yarn add axios
Enter fullscreen mode Exit fullscreen mode

3. Fetching a List of Posts

Without an API Key

You can fetch posts without an API key using the /articles endpoint. Here’s how to do it in JavaScript and TypeScript:

JavaScript Example:

const axios = require('axios');

const username = 'your_username'; // Replace with the desired username
const url = `https://dev.to/api/articles?username=${username}&page=1&per_page=3`;

axios.get(url)
  .then(response => {
    const posts = response.data;
    posts.forEach(post => {
      console.log(`Title: ${post.title}`);
      console.log(`Author: ${post.user.name}`);
      console.log(`Published: ${post.readable_publish_date}`);
      console.log(`URL: ${post.url}`);
      console.log('---');
    });
  })
  .catch(error => {
    console.error('Error fetching posts:', error);
  });
Enter fullscreen mode Exit fullscreen mode

TypeScript Example:

import axios from 'axios';

interface Post {
  title: string;
  user: {
    name: string;
  };
  readable_publish_date: string;
  url: string;
}

const username = 'your_username'; // Replace with the desired username
const url = `https://dev.to/api/articles?username=${username}&page=1&per_page=3`;

axios.get<Post[]>(url)
  .then(response => {
    const posts = response.data;
    posts.forEach(post => {
      console.log(`Title: ${post.title}`);
      console.log(`Author: ${post.user.name}`);
      console.log(`Published: ${post.readable_publish_date}`);
      console.log(`URL: ${post.url}`);
      console.log('---');
    });
  })
  .catch(error => {
    console.error('Error fetching posts:', error);
  });
Enter fullscreen mode Exit fullscreen mode

With Pagination (page and per_page)

The Dev.to API supports pagination using the page and per_page parameters:

  • page: The page number to fetch (default is 1).
  • per_page: The number of posts per page (default is 30, maximum is 1000).

Example URL:

https://dev.to/api/articles?username=your_username&page=2&per_page=5
Enter fullscreen mode Exit fullscreen mode

4. Fetching a Single Post

By Post ID

To fetch a single post by its ID, use the /articles/{id} endpoint.

JavaScript Example:

const axios = require('axios');

const postId = 123456; // Replace with the actual post ID
const url = `https://dev.to/api/articles/${postId}`;

axios.get(url)
  .then(response => {
    const post = response.data;
    console.log(`Title: ${post.title}`);
    console.log(`Author: ${post.user.name}`);
    console.log(`Published: ${post.readable_publish_date}`);
    console.log(`URL: ${post.url}`);
  })
  .catch(error => {
    console.error('Error fetching post:', error);
  });
Enter fullscreen mode Exit fullscreen mode

TypeScript Example:

import axios from 'axios';

interface Post {
  title: string;
  user: {
    name: string;
  };
  readable_publish_date: string;
  url: string;
}

const postId = 123456; // Replace with the actual post ID
const url = `https://dev.to/api/articles/${postId}`;

axios.get<Post>(url)
  .then(response => {
    const post = response.data;
    console.log(`Title: ${post.title}`);
    console.log(`Author: ${post.user.name}`);
    console.log(`Published: ${post.readable_publish_date}`);
    console.log(`URL: ${post.url}`);
  })
  .catch(error => {
    console.error('Error fetching post:', error);
  });
Enter fullscreen mode Exit fullscreen mode

By Post Slug

To fetch a single post by its slug, use the /articles/{username}/{slug} endpoint.

JavaScript Example:

const axios = require('axios');

const username = 'your_username'; // Replace with the desired username
const slug = 'your-post-slug'; // Replace with the actual post slug
const url = `https://dev.to/api/articles/${username}/${slug}`;

axios.get(url)
  .then(response => {
    const post = response.data;
    console.log(`Title: ${post.title}`);
    console.log(`Author: ${post.user.name}`);
    console.log(`Published: ${post.readable_publish_date}`);
    console.log(`URL: ${post.url}`);
  })
  .catch(error => {
    console.error('Error fetching post:', error);
  });
Enter fullscreen mode Exit fullscreen mode

TypeScript Example:

import axios from 'axios';

interface Post {
  title: string;
  user: {
    name: string;
  };
  readable_publish_date: string;
  url: string;
}

const username = 'your_username'; // Replace with the desired username
const slug = 'your-post-slug'; // Replace with the actual post slug
const url = `https://dev.to/api/articles/${username}/${slug}`;

axios.get<Post>(url)
  .then(response => {
    const post = response.data;
    console.log(`Title: ${post.title}`);
    console.log(`Author: ${post.user.name}`);
    console.log(`Published: ${post.readable_publish_date}`);
    console.log(`URL: ${post.url}`);
  })
  .catch(error => {
    console.error('Error fetching post:', error);
  });
Enter fullscreen mode Exit fullscreen mode

5. Using Query Parameters

Filtering by Username

To fetch posts by a specific user, use the username parameter:

https://dev.to/api/articles?username=your_username
Enter fullscreen mode Exit fullscreen mode

Filtering by Tags

To fetch posts with specific tags, use the tag parameter:

https://dev.to/api/articles?tag=javascript
Enter fullscreen mode Exit fullscreen mode

You can combine multiple parameters for more specific queries:

https://dev.to/api/articles?username=your_username&tag=webdev&page=1&per_page=5
Enter fullscreen mode Exit fullscreen mode

6. Conclusion

Reading posts from Dev.to using the API is straightforward and powerful. Whether you’re fetching a list of posts, retrieving a single post by ID or slug, or filtering results using query parameters, the Dev.to API provides all the tools you need.

By using axios in JavaScript or TypeScript, you can easily integrate Dev.to posts into your applications. This guide should give you a solid foundation to start exploring the API and building your own projects.

Happy coding! 🚀

Hot sauce if you're wrong - web dev trivia for staff engineers

Hot sauce if you're wrong · web dev trivia for staff engineers (Chris vs Jeremy, Leet Heat S1.E4)

  • Shipping Fast: Test your knowledge of deployment strategies and techniques
  • Authentication: Prove you know your OAuth from your JWT
  • CSS: Demonstrate your styling expertise under pressure
  • Acronyms: Decode the alphabet soup of web development
  • Accessibility: Show your commitment to building for everyone

Contestants must answer rapid-fire questions across the full stack of modern web development. Get it right, earn points. Get it wrong? The spice level goes up!

Watch Video 🌶️🔥

Top comments (2)

Collapse
 
kc900201 profile image
KC

This is interesting. Thank you so much for the guide

Collapse
 
yoan-gilliand profile image
Yoan Gilliand

If needed, don't hesitate to ask questions, and I will respond as soon as possible. You can also suggest modifications or improvements to the article.

The best way to debug slow web pages cover image

The best way to debug slow web pages

Tools like Page Speed Insights and Google Lighthouse are great for providing advice for front end performance issues. But what these tools can’t do, is evaluate performance across your entire stack of distributed services and applications.

Watch video

👋 Kindness is contagious

Engage with a wealth of insights in this thoughtful article, valued within the supportive DEV Community. Coders of every background are welcome to join in and add to our collective wisdom.

A sincere "thank you" often brightens someone’s day. Share your gratitude in the comments below!

On DEV, the act of sharing knowledge eases our journey and fortifies our community ties. Found value in this? A quick thank you to the author can make a significant impact.

Okay