用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/rawveg/skillsforge-marketplace --skill forem-api命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | forem-api |
| description | Forem API |
Comprehensive assistance with Forem API (v1) development. Forem is the platform that powers DEV.to and other online communities. This skill provides guidance on interacting with articles, users, comments, organizations, tags, and more through the Forem REST API.
This skill should be triggered when:
Set up authentication headers for Forem API v1 requests:
# Required headers for authenticated requests
curl -X GET "https://dev.to/api/articles/me" \
-H "api-key: YOUR_API_KEY" \
-H "accept: application/vnd.forem.api-v1+json"
Key points:
dev.to/settings/extensionsapi-key header (not Authorization)accept: application/vnd.forem.api-v1+json header# Retrieve current user's profile information
curl -X GET "https://dev.to/api/users/me" \
-H "api-key: YOUR_API_KEY" \
-H "accept: application/vnd.forem.api-v1+json"
Response:
{
"type_of": "user",
"id": 1431,
"username": "username480",
"name": "User Name",
"twitter_username": "twitter_handle",
"github_username": "github_handle",
"joined_at": "Apr 14, 2023",
"profile_image": "/uploads/user/profile_image/..."
}
// Create and publish an article with tags
const response = await fetch('https://dev.to/api/articles', {
method: 'POST',
headers: {
'api-key': 'YOUR_API_KEY',
'accept': 'application/vnd.forem.api-v1+json',
'content-type': 'application/json'
},
body: JSON.stringify({
article: {
title: "Getting Started with Forem API",
description: "Learn how to integrate with Forem",
body_markdown: "## Introduction\n\n**Forem** is amazing!",
published: true,
tags: ["webdev", "api", "tutorial"]
}
})
});
const data = await response.json();
console.log(data.url); // https://dev.to/username/getting-started-...
Returns: Article object with id, slug, path, url, and published_timestamp
import requests
# Get JavaScript articles from the last 7 days
params = {
'tag': 'javascript',
'top': 7,
'per_page': 10,
'page': 1
}
response = requests.get(
'https://dev.to/api/articles',
params=params,
headers={'accept': 'application/vnd.forem.api-v1+json'}
)
articles = response.json()
for article in articles:
print(f"{article['title']} by {article['user']['name']}")
Query parameters:
tag - Filter by single tagtags - Multiple tags (comma-separated)username - Filter by authortop - Days since publicationper_page - Results per page (30-1000)page - Page number for pagination# Retrieve your unpublished articles
curl -X GET "https://dev.to/api/articles/me/unpublished" \
-H "api-key: YOUR_API_KEY" \
-H "accept: application/vnd.forem.api-v1+json"
Other endpoints:
/articles/me - All your articles/articles/me/published - Published only/articles/me/unpublished - Drafts only/articles/me/all - Everything including hiddenPUT /articles/{id}
Content-Type: application/json
Headers: api-key, accept
{
"article": {
"title": "Updated Title",
"body_markdown": "Updated content with **bold** text",
"published": true
}
}
# Get comments by article ID
response = requests.get(
'https://dev.to/api/comments',
params={'a_id': 123456},
headers={'accept': 'application/vnd.forem.api-v1+json'}
)
comments = response.json()
for comment in comments:
print(f"{comment['user']['name']}: {comment['body_html']}")
Query parameters:
a_id - Article IDp_id - Podcast episode ID# Add a "like" reaction to an article
curl -X POST "https://dev.to/api/reactions" \
-H "api-key: YOUR_API_KEY" \
-H "accept: application/vnd.forem.api-v1+json" \
-H "content-type: application/json" \
-d '{
"category": "like",
"reactable_id": 123456,
"reactable_type": "Article"
}'
Categories: like, unicorn, readinglist, thinking
# Fetch organization information and articles
curl -X GET "https://dev.to/api/organizations/forem" \
-H "accept: application/vnd.forem.api-v1+json"
# Get organization's published articles
curl -X GET "https://dev.to/api/organizations/forem/articles" \
-H "accept: application/vnd.forem.api-v1+json"
// Fetch popular tags from the platform
const response = await fetch('https://dev.to/api/tags', {
headers: { 'accept': 'application/vnd.forem.api-v1+json' }
});
const tags = await response.json();
tags.forEach(tag => {
console.log(`${tag.name} - ${tag.bg_color_hex}`);
});
application/vnd.forem.api-v1+json)All responses use JSON format with consistent structure:
type_of - Resource type (article, user, comment, etc.)id - Unique identifierFollow best practices to avoid rate limits:
Most list endpoints support pagination:
page - Page number (starts at 1)per_page - Items per page (typically 30-1000, default 30)200 - Success (GET, PUT)201 - Created (POST)204 - No Content (DELETE, unpublish)401 - Unauthorized (invalid API key)404 - Not Found422 - Unprocessable Entity (validation errors)This skill includes comprehensive documentation in references/:
Use view or read the reference file directly when you need:
dev.to/settings/extensionsGET /articles or GET /users/{username} without authapi-key and accept headerspublished: false), review, then update to publishbody_markdown field with full Markdown syntaxPOST /articles - Publish new articleGET /articles - Get published articles (paginated)GET /articles/{id} - Get specific articlePUT /articles/{id} - Update articleGET /articles/me - Your articlesPUT /articles/{id}/unpublish - Unpublish articleGET /users/me - Current user infoGET /users/{id} - User by ID/usernameGET /comments - Get comments by article/episodeGET /comments/{id} - Specific comment with descendantsGET /organizations/{username} - Organization detailsGET /organizations/{username}/articles - Organization's articlesGET /organizations/{username}/users - Organization membersGET /tags - Available tagsGET /follows/tags - User's followed tagsGET /followers/users - User's followersPOST /reactions - Create reactionPOST /reactions/toggle - Toggle reactionGET /readinglist - User's reading listdev.to/settings/extensions or your Forem instance settingsapplication/vnd.forem.api-v1+json accept headerapi-key and accept)body_markdown for rich content