---
title: "Update an article by id"
method: PUT
path: "/api/articles/{id}"
tags: ["articles"]
---

# Update an article by id

`PUT /api/articles/{id}`

This endpoint allows the client to update an existing article by its unique numerical `id`.

### Authorization Constraints:
- The API key provided must belong to the author of the article.
- Supports updating individual fields such as `title`, `body_markdown`, `published`, `tags`, `ai_disclosure_level`, etc.
- Setting `published: false` on an already published article will revert it to draft status.

## Path parameters

- `id` integer, required

## Request body

- Article — Representation of an Article to be created/updated
  - `article` object
    - `title` string
    - `body_markdown` string
    - `published` boolean
    - `series` string, nullable
    - `main_image` string, nullable
    - `canonical_url` string, nullable
    - `description` string
    - `tags` string
    - `organization_id` integer, nullable
    - `ai_disclosure_level` 'not_disclosed' | 'no_ai' | 'some_ai' | 'fully_autonomous' — Level of AI tooling usage disclosure

## Response `200`

An Article

## Other responses

- `401` — Unauthorized
- `404` — Article Not Found
- `422` — Unprocessable Entity

## Changes

> 59 revisions in range; 8 could not be searched.

- **2026-07-13** (v1) `189b62b952ea` — 4 breaking
  - removed the media type `application/json` for the response with the status `200`
  - removed the media type `application/json` for the response with the status `401`
  - removed the media type `application/json` for the response with the status `404`
  - removed the media type `application/json` for the response with the status `422`
- **2026-07-13** (v1) `7db6ba099285` — 4 breaking
  - removed the media type `application/json` for the response with the status `200`
  - removed the media type `application/json` for the response with the status `401`
  - removed the media type `application/json` for the response with the status `404`
  - removed the media type `application/json` for the response with the status `422`
- **2026-05-28** (v1) `6550ad7be94f` — 4 info
  - added the media type `application/json` for the response with the status `200`
  - added the media type `application/json` for the response with the status `401`
  - added the media type `application/json` for the response with the status `404`
  - added the media type `application/json` for the response with the status `422`
- …earlier changes not shown

[Full history](https://skmtc.dev/forem/apis/forem-api-v1/changes/api/articles/:id/put.md)

---

[API](https://skmtc.dev/forem/apis/forem-api-v1.md) · [All operations](https://skmtc.dev/forem/apis/forem-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/forem/forem-api-v1/revisions/1f64f71fc2a7/schema)
