> ## Documentation Index
> Fetch the complete documentation index at: https://docs.weav.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Reorder articles

> Assign display positions 0..n-1 for every article in one category group. Pass `category_id: null` for the uncategorized group.

Assign display positions 0..n-1 for every article in one category group. Pass `category_id: null` for the uncategorized group.

```http
POST https://api.weav.com/v1/kb-articles/reorder
```

Requires a token with the `external-api:write` ability.

## Body

<ParamField body="category_id" type="string | null" required>
Format: `uuid`.
</ParamField>

<ParamField body="ids" type="array&lt;string&gt;" required>

</ParamField>

## Request

<CodeGroup>

```bash cURL
curl --request POST \
  --url 'https://api.weav.com/v1/kb-articles/reorder' \
  --header "Authorization: Bearer ${WEAV_API_TOKEN}" \
  --header 'Content-Type: application/json' \
  --data '{
  "category_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
  "ids": [
    "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d"
  ]
}'
```

```js JavaScript
const body = {
  "category_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
  "ids": [
    "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d"
  ]
};
const response = await fetch("https://api.weav.com/v1/kb-articles/reorder", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.WEAV_API_TOKEN}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(body)
});
console.log(await response.json());
```

```python Python
import os
import requests

headers = {"Authorization": f"Bearer {os.environ['WEAV_API_TOKEN']}"}
body = {"category_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d", "ids": ["9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d"]}
response = requests.post("https://api.weav.com/v1/kb-articles/reorder", headers=headers, json=body)
print(response.json())
```

```php PHP
use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('POST', 'https://api.weav.com/v1/kb-articles/reorder', [
    'headers' => ['Authorization' => 'Bearer '.getenv('WEAV_API_TOKEN')],
    'json' => array (
  'category_id' => '9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d',
  'ids' => 
  array (
    0 => '9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d',
  ),
),
]);
echo $response->getBody();
```

</CodeGroup>

## Response

<CodeGroup>

```json 200 OK
{
    "data": [
        {
            "id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
            "category_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
            "position": 0,
            "status": "draft",
            "published_at": "2026-01-01T00:00:00Z",
            "source": "manual",
            "translations": [
                {
                    "locale": "en",
                    "title": "string",
                    "slug": "string",
                    "content": "string",
                    "excerpt": "string",
                    "seo_title": "string",
                    "noindex": false,
                    "canonical_url": "https://example.com",
                    "og_image_url": "https://example.com",
                    "created_at": "2026-01-01T00:00:00Z",
                    "updated_at": "2026-01-01T00:00:00Z"
                }
            ],
            "created_at": "2026-01-01T00:00:00Z",
            "updated_at": "2026-01-01T00:00:00Z"
        }
    ]
}
```

</CodeGroup>

- `422` Unprocessable Content
- `401` Unauthorized

## Response fields

<ParamField body="id" type="string">
Format: `uuid`.
</ParamField>

<ParamField body="category_id" type="string | null">
Format: `uuid`.
</ParamField>

<ParamField body="position" type="integer | null">

</ParamField>

<ParamField body="status" type="string">
One of: `draft`, `published`.
</ParamField>

<ParamField body="published_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="source" type="string">
One of: `manual`, `auto_generated`, `github`, `mcp`.
</ParamField>

<ParamField body="translations" type="array&lt;object&gt;">

</ParamField>

<ParamField body="created_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="updated_at" type="string | null">
Format: `date-time`.
</ParamField>

---

This knowledge base is built and hosted on [Weav](https://weav.com).
