devto
GitHub通过 Forem API v1 在 DEV Community 发布、更新和读取文章。支持草稿与公开发布、交叉发布(含 SEO 规范)、列表查看及数据统计,需验证 API Key 并处理标签与限流限制。
Trigger Scenarios
Install
npx skills add NeverSight/learn-skills.dev --skill devto -g -y
SKILL.md
Frontmatter
{
"name": "devto",
"license": "Apache-2.0",
"metadata": {
"author": "acedatacloud",
"version": "1.0"
},
"connections": [
"devto"
],
"description": "Publish, update and read articles on DEV (dev.to) via the Forem API v1. Use when the user mentions dev.to \/ DEV Community, publishing a blog post to dev.to, cross-posting an article, updating a published post, or listing their dev.to articles and stats.",
"when_to_use": "Trigger when the user wants to publish a Markdown article to their\ndev.to account, update a previously published article, or list \/\ninspect their own dev.to articles (views, reactions, comments). The\nconnector stores a DEV API Key with full account access — confirm\nbefore publishing publicly (you can publish as a draft with\npublished=false first).\n",
"allowed_tools": [
"Bash"
]
}
Call the Forem API v1 (dev.to) with curl + jq. The user's API key is in
$DEVTO_API_KEY; every call needs the headers api-key: $DEVTO_API_KEY and
Accept: application/vnd.forem.api-v1+json. Base URL: https://dev.to/api.
Errors come back as JSON with an error / status field — show them verbatim.
401 means the API key is invalid → the user must re-connect the DEV connector.
Always start by confirming the key and learning the account:
curl -sS -H "api-key: $DEVTO_API_KEY" -H "Accept: application/vnd.forem.api-v1+json" \
"https://dev.to/api/users/me" | jq '{username, name}'
Publish an article
Confirm with the user before publishing publicly. Default to a draft
(published:false) unless they explicitly say publish/now.
TITLE="My title"
BODY_MD="$(cat article.md)" # full Markdown body
jq -n --arg t "$TITLE" --arg b "$BODY_MD" \
'{article:{title:$t, body_markdown:$b, published:false, tags:["ai","webdev"]}}' \
| curl -sS -X POST "https://dev.to/api/articles" \
-H "api-key: $DEVTO_API_KEY" \
-H "Accept: application/vnd.forem.api-v1+json" \
-H "Content-Type: application/json" \
-d @- \
| jq '{id, url, published}'
To publish a draft later (or edit), PUT /api/articles/{id} with the same
shape (set published:true). Front-matter inside body_markdown (a ---
block) can also carry title, tags, series, canonical_url, cover_image.
- Canonical URL: when cross-posting, set
"canonical_url":"https://your-blog/original"so DEV points SEO back to the source — important for the article→video / cross-publishing flow.
List / inspect my articles
# My published + draft articles (paginated; per_page max 1000).
curl -sS -H "api-key: $DEVTO_API_KEY" -H "Accept: application/vnd.forem.api-v1+json" \
"https://dev.to/api/articles/me/all?per_page=30" \
| jq '.[] | {id, title, published, page_views_count, public_reactions_count, comments_count}'
# A single article's full content + stats.
curl -sS -H "api-key: $DEVTO_API_KEY" -H "Accept: application/vnd.forem.api-v1+json" \
"https://dev.to/api/articles/ARTICLE_ID" | jq '{title, url, reactions: .public_reactions_count, views: .page_views_count}'
Gotchas
- Tags: max 4, lowercase, no spaces (e.g.
webdev,machinelearning). - Rate limit: article create/update is throttled (a few per 30s); space out
bulk publishes or you'll get
429. body_markdownis the source of truth — if you put a---front-matter block at the top, its fields override the JSONarticlefields.
Version History
- e0220ca Current 2026-07-05 22:53


