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

# Save an article draft

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

Create or update the staged draft of an article. The live article is never modified by this call; use the draft publish endpoint to promote it.

## Authorization

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

## Path parameters

- `helpcenterArticleId` (string, required)

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

- `title` (any)
- `navigationTitle` (any)
- `description` (any)
- `content` (any)
- `plainContent` (any)
- `targetAudience` (string)
- `tags` (string[])
- `author` (any)
- `expectedDraftVersion` (number<double>): Optimistic-concurrency token for the draft itself. When provided, the upsert only applies if the stored draft's `draftVersion` still matches; otherwise 409 (mirrors the live-article guard) so two people editing the same draft don't clobber each other.
- `expectedArticleVersion` (number<double>): The live article `version` the sending editor session loaded. Guards draft CREATION: a tab that loaded the article before someone else's publishes would otherwise seed a brand-new draft from its outdated editor state — that stale draft overlays everyone's editor (the article looks "reverted" in the dashboard) and, because `baseVersion` used to be stamped from the then-current live version, it also publishes without tripping the staleness guard. When provided and it no longer matches the live version, the save is rejected with 409 instead (the rejected state is kept as a 'conflict' version).

## Example request

```bash
curl --request PUT \
  --url 'https://api.gleap.io/v3/helpcenter/collections/{helpcenterCollectionId}/articles/{helpcenterArticleId}/draft' \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "targetAudience": "<targetAudience>",
  "expectedDraftVersion": 0,
  "expectedArticleVersion": 0
}'
```

## Responses

### 200 (`application/json`)

Ok
