# Forem API V1 API

> Forem API V1 API on Apizie: 40 endpoints (Invite a User, Published articles, Publish article, Published articles sorted by published date, …) returned as clean JSON through one API key. Send your own provider key in the x-upstream-key header. Call it over REST at https://zieapi.vercel.app/v1/social-media:dev-to/{endpoint} or from Claude, ChatGPT and Cursor through the Apizie MCP server. Free plan: 1,000 requests a month.

- Project key: `social-media:dev-to`
- Category: Social Media
- Status: byok
- Source: https://dev.to
- Page: https://zieapi.vercel.app/api/social-media/dev-to
- OpenAPI: https://zieapi.vercel.app/api/social-media/dev-to/openapi.json

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,…

## Endpoints

### Invite a User
`POST https://zieapi.vercel.app/v1/social-media:dev-to/post-admin-users-create` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| body | object | no | JSON request body |

### Published articles
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |
| tag | string | no | Using this parameter will retrieve articles that contain the requested tag. Articles will be ordered by descending popularity.This… |
| tags | string | no | Using this parameter will retrieve articles with any of the comma-separated tags. Articles will be ordered by descending popularity. |
| tags_exclude | string | no | Using this parameter will retrieve articles that do _not_ contain _any_ of comma-separated tags. Articles will be ordered by descending… |
| username | string | no | Using this parameter will retrieve articles belonging to a User or Organization ordered by descending publication date. If `state=all` the… |
| state | string | no | Using this parameter will allow the client to check which articles are fresh or rising. If `state=fresh` the server will return fresh… |
| top | integer | no | Using this parameter will allow the client to return the most popular articles in the last `N` days. `top` indicates the number of days… |
| collection_id | integer | no | Adding this will allow the client to return the list of articles belonging to the requested collection, ordered by ascending publication… |

### Publish article
`POST https://zieapi.vercel.app/v1/social-media:dev-to/create-article` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| body | object | no | JSON request body |

### Published articles sorted by published date
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-latest-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### User's articles
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-user-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### User's all articles
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-user-all-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### User's published articles
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-user-published-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### User's unpublished articles
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-user-unpublished-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### Published article by id
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-article-by-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes |  |

### Update an article by id
`POST https://zieapi.vercel.app/v1/social-media:dev-to/update-article` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the user to unpublish. |
| body | object | no | JSON request body |

### Unpublish an article
`POST https://zieapi.vercel.app/v1/social-media:dev-to/unpublish-article` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the article to unpublish. |
| note | string | no | Content for the note that's created along with unpublishing |

### Published article by path
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-article-by-path` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | yes |  |
| slug | string | yes |  |

### Comments
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-comments-by-article-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| a_id | string | no | Article identifier. |
| p_id | string | no | Podcast Episode identifier. |

### Comment by id
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-comment-by-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | Comment identifier. |

### display ads
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-api-display-ads` (byok)

### display ads
`POST https://zieapi.vercel.app/v1/social-media:dev-to/post-api-display-ads` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| body | object | no | JSON request body |

### display ad
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-api-display-ads-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the display ad. |

### display ads
`POST https://zieapi.vercel.app/v1/social-media:dev-to/put-api-display-ads-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the display ad. |
| body | object | no | JSON request body |

### unpublish
`POST https://zieapi.vercel.app/v1/social-media:dev-to/put-api-display-ads-id-unpublish` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the display ad to unpublish. |

### Followers
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-followers` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |
| sort | string | no | Default is 'created_at'. Specifies the sort order for the created_at param of the follow relationship. To sort by newest followers first… |

### Followed Tags
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-followed-tags` (byok)

### An organization
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-organization` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | yes |  |

### Organization's Articles
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-org-articles` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | yes |  |
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### Organization's users
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-org-users` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | yes |  |
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### show details for all pages
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-api-pages` (byok)

### pages
`POST https://zieapi.vercel.app/v1/social-media:dev-to/post-api-pages` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| body | object | no | JSON request body |

### show details for a page
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-api-pages-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the page. |

### update details for a page
`POST https://zieapi.vercel.app/v1/social-media:dev-to/put-api-pages-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the page. |
| body | object | no | JSON request body |

### remove a page
`POST https://zieapi.vercel.app/v1/social-media:dev-to/delete-api-pages-id` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the page. |

### Podcast Episodes
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-podcast-episodes` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |
| username | string | no | Using this parameter will retrieve episodes belonging to a specific podcast. |

### A Users or organizations profile image
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-profile-image` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| username | string | yes | The parameter is the username of the user or the username of the organization. |

### create reaction
`POST https://zieapi.vercel.app/v1/social-media:dev-to/post-api-reactions` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| category | string | yes |  |
| reactable_id | integer | yes |  |
| reactable_type | string | yes |  |

### toggle reaction
`POST https://zieapi.vercel.app/v1/social-media:dev-to/post-api-reactions-toggle` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| category | string | yes |  |
| reactable_id | integer | yes |  |
| reactable_type | string | yes |  |

### Readinglist
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-readinglist` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### Tags
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-tags` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

### The authenticated user
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-user-me` (byok)

### A User
`GET https://zieapi.vercel.app/v1/social-media:dev-to/get-user` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | yes |  |

### Suspend a User
`POST https://zieapi.vercel.app/v1/social-media:dev-to/suspend-user` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the user to suspend. |

### Unpublish a User's Articles and Comments
`POST https://zieapi.vercel.app/v1/social-media:dev-to/unpublish-user` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| id | integer | yes | The ID of the user to unpublish. |

### Articles with a video
`GET https://zieapi.vercel.app/v1/social-media:dev-to/videos` (byok)

| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | no | Pagination page |
| per_page | integer | no | Page size (the number of items to return per page). The default maximum value can be overridden by "API_PER_PAGE_MAX" environment variable. |

## Example
```
curl "https://zieapi.vercel.app/v1/social-media:dev-to/post-admin-users-create" \
  -H "x-api-key: $APIZIE_KEY" \
  -H "x-upstream-key: $PROVIDER_KEY"
```

## FAQ

### How do I call the Forem API V1 API?
Create a free Apizie key, then send POST https://zieapi.vercel.app/v1/social-media:dev-to/post-admin-users-create with the header x-api-key. Every endpoint returns { project, data, timestamp }.

### Is the Forem API V1 API free on Apizie?
Yes. The Free plan includes 1,000 requests a month at 100 requests a minute, no credit card. Forem API V1 itself also needs your own key from dev.to.

### Can AI agents use the Forem API V1 API?
Yes. Add the Apizie MCP server (https://zieapi.vercel.app/mcp) to Claude, ChatGPT, Cursor or VS Code, then ask in plain language. The agent calls run_scraper with project key social-media:dev-to.

### What is the status of the Forem API V1 API?
Needs your own provider key (bring your own key)
