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

# Subir adjunto

> Subir una imagen o un PDF para enviarlo luego a un agente en un mensaje de chat.

# Subir adjunto

Sube un archivo (imagen o PDF) para adjuntarlo a un mensaje. La respuesta devuelve un objeto `{ url, name, type }` que se pasa tal cual en el campo `attachment` de [Enviar mensaje](/api-referencia/agentes/chat). El archivo no se envía en el cuerpo del chat: primero se sube con este endpoint y después se referencia por su URL.

Subir un archivo no consume créditos. El costo se cobra al enviar el mensaje.

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

**Scope requerido:** `chat:write`

***

## Path parameters

| Parámetro | Tipo | Descripción |
| - | - | - |
| `chatbot_id` | string | ID del agente al que se le enviará el adjunto |

***

## Cuerpo de la request

El cuerpo debe ser `multipart/form-data` con un solo campo:

| Campo | Tipo | Requerido | Descripción |
| - | - | - | - |
| `file` | archivo | ✅ | El archivo a subir. El tipo se toma del `Content-Type` de la parte del formulario. |

### Tipos y tamaños permitidos

| Tipo | `Content-Type` | Tamaño máximo |
| - | - | - |
| Imagen PNG | `image/png` | 5 MB |
| Imagen JPEG | `image/jpeg` | 5 MB |
| Imagen WebP | `image/webp` | 5 MB |
| Imagen GIF | `image/gif` | 5 MB |
| PDF | `application/pdf` | 15 MB |

***

## Respuesta

**Código:** `201 Created`

```json theme={null}
{
  "status": "success",
  "data": {
    "url": "https://<proyecto>.supabase.co/storage/v1/object/public/chat-attachments/...",
    "name": "factura.pdf",
    "type": "application/pdf"
  }
}
```

### Campos de respuesta

| Campo | Tipo | Descripción |
| - | - | - |
| `url` | string | URL del archivo subido. Pásala en `attachment.url` al enviar el mensaje. |
| `name` | string | Nombre original del archivo (máx. 200 caracteres). Se omite si el archivo no tiene nombre. |
| `type` | string | Tipo del archivo normalizado (por ejemplo, `image/jpg` se devuelve como `image/jpeg`). |

***

## Ejemplo completo: subir y enviar

**1. Subir el archivo**

```bash theme={null}
curl -X POST "https://app.chatnorris.ai/api/v2/chatbots/{chatbot_id}/attachments" \
  -H "Authorization: Bearer <tu_api_key>" \
  -F "file=@factura.pdf;type=application/pdf"
```

**2. Enviar el mensaje con el adjunto**

Usa el objeto `data` de la respuesta anterior como `attachment`. El campo `message` sigue siendo obligatorio.

```bash theme={null}
curl -X POST "https://app.chatnorris.ai/api/v2/chatbots/{chatbot_id}/chat" \
  -H "Authorization: Bearer <tu_api_key>" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "¿Me puedes decir cuál es el total de esta factura?",
    "attachment": {
      "url": "https://<proyecto>.supabase.co/storage/v1/object/public/chat-attachments/...",
      "name": "factura.pdf",
      "type": "application/pdf"
    }
  }'
```

<Note>
  Solo se procesan adjuntos subidos con este endpoint. Si `attachment.url` apunta a otro sitio, el agente no puede ver el archivo.
</Note>

***

## Errores comunes

| HTTP | Code | Descripción |
| - | - | - |
| 400 | `INVALID_INPUT` | El cuerpo no es `multipart/form-data` o falta el campo `file` |
| 400 | `INVALID_FILE_TYPE` | El tipo de archivo no es PNG, JPEG, WebP, GIF ni PDF |
| 400 | `FILE_TOO_LARGE` | El archivo supera el límite de su tipo (5 MB imágenes, 15 MB PDF) |
| 403 | `INSUFFICIENT_SCOPE` | La API key no tiene el scope `chat:write` |
| 404 | `NOT_FOUND` | El agente no existe, está inactivo o no pertenece a tu organización |
| 429 | `RATE_LIMIT_EXCEEDED` | Se superó el límite de requests por minuto de la API key |
| 500 | `INTERNAL_ERROR` | No se pudo guardar el archivo |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.