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

# Agregar fuente

> Agregar una nueva fuente a la base de conocimiento de un agente.

# Agregar fuente de conocimiento

Agrega una nueva fuente a la base de conocimiento de un agente. La fuente se encola para procesamiento inmediatamente después de crearse.

<RequestExample>
  ```http theme={null}
  POST https://app.chatnorris.ai/api/v2/chatbots/{chatbot_id}/knowledge
  Authorization: Bearer <tu_api_key>
  Content-Type: application/json
  ```
</RequestExample>

**Scope requerido:** `chatbots:write`

***

## Path parameters

| Parámetro    | Tipo   | Descripción   |
| ------------ | ------ | ------------- |
| `chatbot_id` | string | ID del agente |

***

## Cuerpo de la request

El campo `type` determina qué otros campos son requeridos.

### Tipo `url` — página web o documento en línea

| Campo        | Tipo   | Requerido | Descripción                         |
| ------------ | ------ | --------- | ----------------------------------- |
| `type`       | string | ✅         | `"url"`                             |
| `name`       | string | ✅         | Nombre descriptivo de la fuente     |
| `source_url` | string | ✅         | URL completa de la página a indexar |

```json theme={null}
{
  "type": "url",
  "name": "Preguntas frecuentes",
  "source_url": "https://empresa.com/faq"
}
```

### Tipo `text` — texto libre

| Campo         | Tipo   | Requerido | Descripción                     |
| ------------- | ------ | --------- | ------------------------------- |
| `type`        | string | ✅         | `"text"`                        |
| `name`        | string | ✅         | Nombre descriptivo de la fuente |
| `raw_content` | string | ✅         | Contenido de texto a indexar    |

```json theme={null}
{
  "type": "text",
  "name": "Políticas de devolución",
  "raw_content": "Las devoluciones se aceptan dentro de los 30 días de la compra..."
}
```

### Tipo `faq` — preguntas y respuestas

| Campo         | Tipo   | Requerido | Descripción                                            |
| ------------- | ------ | --------- | ------------------------------------------------------ |
| `type`        | string | ✅         | `"faq"`                                                |
| `name`        | string | ✅         | Nombre descriptivo                                     |
| `raw_content` | string | ✅         | Texto con preguntas y respuestas (mínimo 2 caracteres) |

```json theme={null}
{
  "type": "faq",
  "name": "FAQ de envíos",
  "raw_content": "¿Cuánto tarda el envío?\nEl envío estándar tarda 3-5 días hábiles.\n\n¿Hacen envíos al exterior?\nSí, enviamos a todo Latinoamérica."
}
```

***

## Respuesta `201 Created`

La fuente se crea con `status: "pending"` y el procesamiento inicia en segundo plano.

```json theme={null}
{
  "status": "success",
  "data": {
    "id": "src_xyz789",
    "name": "Preguntas frecuentes",
    "type": "url",
    "status": "pending",
    "created_at": "2026-06-30T18:00:00.000Z"
  }
}
```

<Tip>
  El procesamiento es asíncrono. Consultá el estado de la fuente con [Listar fuentes](/api-referencia/knowledge/listar) hasta que `status` sea `ready` o `error`.
</Tip>

***

## Errores comunes

| Code            | Descripción                                                                                  |
| --------------- | -------------------------------------------------------------------------------------------- |
| `INVALID_INPUT` | `type` inválido, falta `name`, `source_url` no es una URL válida, o `raw_content` está vacío |
| `NOT_FOUND`     | El agente no existe o no pertenece a tu organización                                         |
