Update an article
Partially update an article, preserve or replace tags, and follow slug changes.
Update one or more fields on an article you own. PUT /articles/{slug} accepts a partial article object, preserves omitted fields, and returns the updated resource in the article envelope.
Before you begin
You need the article’s current slug and a token belonging to its author. Send the token as Authorization: Token <jwt>; see Authentication and token usage. The hosted demo base URL is https://api.realworld.show/api.
title changes the generated slug. Always use the slug returned by the update response for subsequent reads, favorites, comments, and links.Update and verify the article
Build an article object containing the fields you want to update. The supported optional fields are title, description, body, and tagList.
For example, this payload changes only the body, so the existing title, description, and tags remain unchanged.
{
"article": {
"body": "Updated body content"
}
}Send the partial payload to the current slug with the author’s token.
curl --request PUT \
--url 'https://api.realworld.show/api/articles/building-a-conduit-client' \
--header 'Authorization: Token demo-jwt-token' \
--header 'Content-Type: application/json' \
--data '{"article":{"body":"Updated body content"}}'The server returns HTTP 200 and the updated article in the article property.
Read article.slug from the response. If the title was unchanged, it remains the current slug. If the title changed, replace the old slug in your local link or state with the new returned value.
Omit tagList when you want to preserve the current tags. Send a string array to replace the tag set, or send "tagList": [] to remove every tag.
Do not send tagList: null; the conformance suite verifies that a null tag list returns HTTP 422.
Request the returned slug with Read an article by slug. Confirm the changed fields, the preserved or replaced tags, and a changed updatedAt timestamp. The createdAt value remains the article’s original creation timestamp.
Endpoint contract
Partially updates an article owned by the authenticated user.
/articles/{slug}Token header for the article author.
The request body is JSON.
Current slug of the article. If the title changes, the response can contain a new slug.
Object with any supported combination of optional `title`, `description`, `body`, and `tagList` fields.
curl --request PUT \
--url https://api.realworld.show/api/articles/building-a-conduit-client \
--header 'Authorization: Token demo-jwt-token' \
--header 'Content-Type: application/json' \
--header 'Content-Type: application/json' \
--data '{
"article": "title?, description?, body?, tagList?"
}'{
"article": {
"slug": "building-a-conduit-client",
"title": "Building a Conduit client",
"description": "Patterns for calling the article API",
"body": "Updated body content",
"tagList": ["api", "javascript"],
"createdAt": "2026-09-25T09:00:00Z",
"updatedAt": "2026-09-25T10:00:00Z",
"favorited": false,
"favoritesCount": 0,
"author": {"username": "demo-author", "bio": null, "image": null, "following": false}
}
}Troubleshoot rejected updates
If the server returns 401, check that the Authorization header uses the exact Token scheme. A 403 means the authenticated user does not own the article. A 404 means the path slug does not identify an article; check that you are using the latest slug after a title change. A 422 means the submitted values failed validation, including a null tagList. See Error envelope and HTTP status behavior for the shared error structure.
Next step
After updating an article, use Delete an article when you need to remove it, or Favorite and unfavorite articles to change the reader’s favorite state.