# Propose an edit

> POST /articles/{id}/drafts: Propose an edit

`POST https://usedocs.app/v1/articles/{id}/drafts`

Proposes the article's full new text for review, without changing the live article. It shows up in Drafts → To review and in GET /drafts.

```bash
curl -X POST "https://usedocs.app/v1/articles/export-invoices/drafts" \
  -H "Authorization: Bearer $USEDOCS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentMarkdown":"…the whole article, edited…","reason":"CSV export moved under Reports"}'
```

## Authentication

Bearer token (`content:write`): A workspace API key: ud_live_…

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | `string` | Yes | Article id or slug. |
| `format` | query | `string` |  | contentMarkdown (default) or contentHtml. |
| `bot_id` | query | `string` |  | Only for a key that covers several bots (see GET /bots). Or send the Usedocs-Bot header. |

## Request body

Required, `application/json`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `contentMarkdown` | `string` | Yes |  |
| `title` | `string` |  |  |
| `reason` | `string` |  |  |
| `sourceUrl` | `string` |  | The PR, issue, or page behind the edit. |

## Responses

| Status | Description |
| --- | --- |
| `201` | The proposed edit. |
| `400` | The request is missing something or has a bad value. |
| `401` | No API key, or the key is revoked. |
| `402` | The workspace is paused; reads still work. |
| `403` | A read key on a write, or a key for another bot. |
| `404` | Not found. |
| `429` | Rate limited: 120 requests a minute per key, 30 tasks an hour. See Retry-After. |

## Response fields

| Field | Type | Description |
| --- | --- | --- |
| `id` | `string` |  |
| `type` | `string` |  |
| `status` | `string` | One of: `pending`, `accepted`, `dismissed`. |
| `articleId` | `string | null` |  |
| `title` | `string` |  |
| `contentMarkdown` | `string` |  |
| `diff` | `string` | Edits: a unified diff from the live article to the proposal. |
| `linesAdded` | `integer` |  |
| `linesRemoved` | `integer` |  |
| `reason` | `string` |  |
| `evidence` | `object` |  |
| `conflict` | `boolean` |  |
| `createdAt` | `string (date-time)` |  |