> ## 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.

# Create article

> Lazily creates the organization's knowledge base if this is its first write. Accepts one or more locale translations.

Lazily creates the organization's knowledge base if this is its first write. Accepts one or more locale translations.

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

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

## Body

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

<ParamField body="status" type="string | null">
Defaults to draft

One of: `draft`, `published`.
</ParamField>

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

</ParamField>

## Request

<CodeGroup>

```bash cURL
curl --request POST \
  --url 'https://api.weav.com/v1/kb-articles' \
  --header "Authorization: Bearer ${WEAV_API_TOKEN}" \
  --header 'Content-Type: application/json' \
  --data '{
  "translations": [
    {
      "locale": "en",
      "title": "string",
      "content": "string"
    }
  ]
}'
```

```js JavaScript
const body = {
  "translations": [
    {
      "locale": "en",
      "title": "string",
      "content": "string"
    }
  ]
};
const response = await fetch("https://api.weav.com/v1/kb-articles", {
  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 = {"translations": [{"locale": "en", "title": "string", "content": "string"}]}
response = requests.post("https://api.weav.com/v1/kb-articles", 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', [
    'headers' => ['Authorization' => 'Bearer '.getenv('WEAV_API_TOKEN')],
    'json' => array (
  'translations' => 
  array (
    0 => 
    (object) array(
       'locale' => 'en',
       'title' => 'string',
       'content' => 'string',
    ),
  ),
),
]);
echo $response->getBody();
```

</CodeGroup>

## Response

<CodeGroup>

```json 201 Created
{
    "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"
}
```

```json 422 Unprocessable Content
{
    "error": "Error message",
    "code": "ERROR_CODE",
    "errors": {}
}
```

</CodeGroup>

- `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).
