---
title: "Update an article"
url: https://docs.gleap.ai/en/reference/rest-api/update-helpcenter-article-item
method: PUT
path: "/helpcenter/collections/{helpcenterCollectionId}/articles/{helpcenterArticleId}"
api: "API Reference"
tag: "Help center articles"
operationId: "UpdateHelpcenterArticleItem"
updatedAt: "2026-11-01T19:40:01.089Z"
language: en
---

# Update an article

`PUT https://api.gleap.io/v3/helpcenter/collections/{helpcenterCollectionId}/articles/{helpcenterArticleId}`

Update a help center article. `content` is TipTap JSON; images are `image` nodes referencing a hosted image URL (`{ "type": "image", "attrs": { "src": "<url>" } }`) — upload files via `POST /v3/uploads` first and use the returned `fileUrl` as the `src`.

## Authorization

- `Authorization` (header, required): `Bearer <token>`

## Path parameters

- `helpcenterArticleId` (string, required)

## Request body (`application/json`, required)

- `title` (any)
- `navigationTitle` (any): Short localized label in Docs navigation. Empty uses the article title.
- `description` (any)
- `content` (any)
- `plainContent` (any)
- `helpcenterCollection` (string)
- `author` (string)
- `project` (string)
- `isDraft` (boolean): `true` keeps the article unpublished. New articles are drafts unless `false` is sent; an update that leaves it out keeps the current state.
- `docId` (number<double>)
- `expectedVersion` (number<double>): Optimistic-concurrency token. When provided, the update is applied only if the article's current `version` still equals this value; otherwise the server rejects the write with 409 (and preserves the rejected content as a 'conflict' version). When omitted, the save falls back to last-write-wins (keeps the existing editor working until it is updated to send the token).
- `lexorank` (string)
- `upvotes` (any)
- `targetAudience` (string): Who can read the article. New articles default to `all`; an update that leaves it out keeps the current audience.
- `externalId` (string)
- `baseAudienceFilter` (any)
- `extendedAudienceFilter` (any)
- `tags` (string[])
- `newCollectionId` (string): Deprecated here. Only read by PUT .../articles/{id}/move (which has its own body); ignored on create/update.

## Example request

```bash
curl --request PUT \
  --url 'https://api.gleap.io/v3/helpcenter/collections/{helpcenterCollectionId}/articles/{helpcenterArticleId}' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "helpcenterCollection": "<helpcenterCollection>",
  "author": "<author>",
  "project": "<project>",
  "isDraft": true
}'
```

## Responses

### 200 (`application/json`)

Ok
