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

# Create Article

> Add a new article to your knowledge base.

Creates a new knowledge base article for your organization. After creation, the article is automatically indexed for semantic search so Theo AI can reference it when responding to customer conversations.

**Method**: `POST`  **URL**: `/api/v1/kb/articles`

<Note>
  Articles are automatically embedded and indexed into Theo AI's vector search. This happens asynchronously — if indexing fails, the article is still saved and you can recreate it to retry indexing.
</Note>

### Plan limits

| Plan | Max articles |
| ---- | ------------ |
| Free | 5            |
| Mini | 25           |
| Pro  | 1,000        |

### Headers

| Header        | Value            |
| ------------- | ---------------- |
| Authorization | Bearer {token}   |
| Content-Type  | application/json |

### Body

<ParamField body="title" type="string" required>
  The title of the article. Used as context when Theo AI performs semantic search.
</ParamField>

<ParamField body="content" type="string" required>
  The full text content of the article. Write this in plain language — the AI reads it as-is to answer customer questions.
</ParamField>

<ParamField body="tags" type="string[]" default="[]">
  Optional array of tag strings to categorize the article (e.g., `["billing", "refunds"]`).
</ParamField>

### Response

<ResponseField name="id" type="integer" required>
  Unique integer ID of the created article.
</ResponseField>

<ResponseField name="business_id" type="integer" required>
  ID of the business that owns the article.
</ResponseField>

<ResponseField name="title" type="string" required>
  Title of the article.
</ResponseField>

<ResponseField name="content" type="string" required>
  Full text content of the article.
</ResponseField>

<ResponseField name="tags" type="string[]" required>
  Array of tags associated with the article.
</ResponseField>

<ResponseField name="created_at" type="string" required>
  ISO 8601 timestamp of when the article was created.
</ResponseField>

### Example

<CodeGroup>
  ```bash curl theme={null}
  curl --request POST \
    --url https://api.pingback.live/api/v1/kb/articles \
    --header 'Authorization: Bearer {token}' \
    --header 'Content-Type: application/json' \
    --data '{
      "title": "How to cancel your subscription",
      "content": "You can cancel your subscription at any time from the Billing page in your account settings. Cancellations take effect at the end of the current billing period. No refunds are issued for partial months.",
      "tags": ["billing", "cancellation", "subscription"]
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.pingback.live/api/v1/kb/articles', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer {token}',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      title: 'How to cancel your subscription',
      content: 'You can cancel your subscription at any time from the Billing page in your account settings. Cancellations take effect at the end of the current billing period. No refunds are issued for partial months.',
      tags: ['billing', 'cancellation', 'subscription']
    })
  });

  const article = await response.json();
  ```
</CodeGroup>

### Response example

```json theme={null}
{
  "id": 43,
  "business_id": 7,
  "title": "How to cancel your subscription",
  "content": "You can cancel your subscription at any time from the Billing page in your account settings. Cancellations take effect at the end of the current billing period. No refunds are issued for partial months.",
  "tags": ["billing", "cancellation", "subscription"],
  "created_at": "2024-01-20T15:45:00Z"
}
```

### Errors

| Status | Meaning                                                        |
| ------ | -------------------------------------------------------------- |
| 400    | User does not belong to an organization                        |
| 401    | Unauthorized — missing or invalid token                        |
| 402    | Article limit reached — upgrade your plan to add more articles |
