---
title: "Multimodal RAG for PDFs, images, and web pages | Calypso Context"
canonical_url: "https://www.calypso.so/es/context/sources"
last_updated: "2026-09-18T05:10:43.406Z"
meta:
  description: "What Calypso Context reads: PDFs as text and page images, PNG and JPEG for content, DOCX, Markdown, CSV, JSON, code, and living web pages. Upload one file, import by URL, or batch up to 100, then wait for one ready bit."
  keywords: "multimodal RAG for PDFs and images, chat with PDFs and images, ingest website into knowledge base, RAG for screenshots and diagrams, RAG ingestion API"
  "og:description": "What Calypso Context reads: PDFs as text and page images, PNG and JPEG for content, DOCX, Markdown, CSV, JSON, code, and living web pages. Upload one file, import by URL, or batch up to 100, then wait for one ready bit."
  "og:title": "Multimodal RAG for PDFs, images, and web pages | Calypso Context"
  "twitter:description": "What Calypso Context reads: PDFs as text and page images, PNG and JPEG for content, DOCX, Markdown, CSV, JSON, code, and living web pages. Upload one file, import by URL, or batch up to 100, then wait for one ready bit."
  "twitter:title": "Multimodal RAG for PDFs, images, and web pages | Calypso Context"
---

Consigue tu API key

**Calypso Context · Fuentes**

# PDFs, imágenes, páginas y datos. Leídos, no solo guardados.

Una fuente se acepta si Calypso puede leerla y se rechaza al subirla si no. Los PDFs se leen como texto y como imágenes de página, las imágenes por lo que muestran y las páginas web como fuentes vivas. Cada fuente cae en un bucket y reporta un único bit de listo cuando ya se puede buscar.

[**Leer la documentación de ingesta**](https://docs.calypso.so/context/ingest) [**Prueba gratis 14 días**](https://context.calypso.so/join)

**El ejemplo**

## Una llamada para entrar. Un bit que esperar.

Sube un archivo con una petición multipart, o pásale una URL a Calypso. En ambos casos el resultado es una fuente en un bucket, y ready te dice cuándo un agente puede citarla.

**CALYPSO_API_KEY**

```
curl -X POST "https://api.calypso.so/v1/buckets/support-handbook/files" \
  -H "Authorization: Bearer $CALYPSO_API_KEY" \
  -H "Idempotency-Key: crm-doc-123" \
  -F "file=@refund_policy_2026.pdf" \
  -F "title=Refund policy 2026" \
  -F "tags=policy,returns"

# 202 → { "id": "src_…", "ready": false, "status": "queued", … }
```

**Qué lee**

## Los tipos aceptados y a qué apunta cada cita.

La modalidad decide cómo se lee una fuente. A dónde apunta la cita decide qué pueden comprobar tus usuarios.

| Familia | Tipos | Modalidad | La cita apunta a |
| --- | --- | --- | --- |
| **PDF** | .pdf | Multimodal: texto e imágenes de página | La página |
| **Imágenes** | .png .jpg .jpeg | Imagen, leída por su contenido, no por el nombre | La imagen |
| **Documentos** | .docx | Texto | El documento |
| **Texto** | .md .txt y otros text/* | Texto | El documento |
| **Datos** | .csv .json | Texto | El documento |
| **Código** | .py .ts .tsx .js .jsx .java .go .rs .sql .html .css .scss .yml .yaml .toml .ini .env .sh | Texto | El documento |

El PDF es el único tipo de documento que se lee de forma visual además de textual, y por eso es el único que puede citar una página concreta. Los archivos de Excel no se aceptan: exporta la hoja a CSV antes de subirla.

**Una URL**

## Dos puertas, una decisión.

Tienes una URL. Hay dos cosas distintas que puedes estar pidiéndole a Calypso, y son promesas diferentes.

### **Importar un archivo por URL**

<dl>

<dt>**Estás pidiendo**</dt>
<dd>Copia este documento exacto.</dd>

<dt>**Endpoint**</dt>
<dd>POST /v1/buckets//files/import</dd>

<dt>**Identidad**</dt>
<dd>Cada importación crea una fuente nueva.</dd>

<dt>**Ciclo de vida**</dt>
<dd>Una instantánea, congelada al importar.</dd></dl>

### **Añadir una página web**

<dl>

<dt>**Estás pidiendo**</dt>
<dd>Haz que Calypso conozca esta página.</dd>

<dt>**Endpoint**</dt>
<dd>POST /v1/buckets//pages</dd>

<dt>**Identidad**</dt>
<dd>La URL normalizada es la identidad: una por equipo.</dd>

<dt>**Ciclo de vida**</dt>
<dd>Una fuente viva, rastreada y analizada.</dd></dl>

Si eliges la puerta equivocada, la API te lo dice: una importación de archivo que recibe HTML devuelve url_is_web_page, y una ingesta de página que recibe un documento devuelve url_is_file. Ambos señalan la otra puerta; force: true lo anula.

**Cómo funciona**

## Primero el bucket, luego enviar, luego esperar a ready.

1. 01 ### **Provisiona el bucket**

   PUT /v1/buckets/ es idempotente: crea el bucket o devuelve el que ya existe. Los scripts pueden llamarlo en cada ejecución.
2. 02 ### **Envía la fuente**

   Una llamada multipart para un archivo, una sesión directa a almacenamiento para lo grande, un cuerpo JSON para una URL o un lote de hasta 100 archivos.
3. 03 ### **Espera a ready**

   Finalizar significa aceptado de forma duradera, no buscable. Consulta GET /v1/sources/ hasta que ready sea true y entonces prueba la recuperación.

**Disponibilidad**

## Listo significa buscable, no solo subido.

Una subida aceptada aún no es una fuente que responda. El bit ready cubre el indexado y la sincronización con el bucket, así que es el único estado que una prueba necesita.

1. 1 / 4 ### **Aceptado**

   Los bytes están guardados y la petición es duradera. Un 202 aquí no es disponibilidad de recuperación.
2. 2 / 4 ### **Indexado**

   La fuente se ha leído según su modalidad: texto extraído, páginas renderizadas, imágenes descritas.
3. 3 / 4 ### **Bucket activo**

   El almacén del bucket que buscan los agentes ya tiene la fuente. bucket_sync_status muestra la escalera si la necesitas.
4. 4 / 4 ### **Listo**

   ready: true. Un agente vinculado a este bucket puede recuperar y citar la fuente.

**De la documentación**

## Los números que importan.

| **Tamaño máximo de archivo** | 25 MB |
| --- | --- |
| **Archivos por lote** | De 1 a 100, sesiones directas a almacenamiento, una sola finalización |
| **Límite de tasa** | 5 peticiones de creación por segundo por equipo |
| **Metadatos** | 8 KB por fuente, hasta 20 etiquetas |
| **Comprobación de disponibilidad** | GET /v1/sources/{id} → ready: true |
| **Identidad de una página web** | La URL normalizada, una por equipo; un duplicado devuelve 409 con el id de la fuente existente |
| **Excel** | No se acepta. Exporta a CSV primero. |

**Preguntas y respuestas**

## Antes de subir.

**Sigue leyendo**

[<h3>**Buckets **</h3>Memoria de fuentes acotada y duradera. Provisiona por slug, vincula a agentes.](https://www.calypso.so/context/buckets) [<h3>**Agentes **</h3>Uno por defecto y los agentes con nombre que quieras, cada uno con su alcance y política.](https://www.calypso.so/context/agents) [<h3>**Citas **</h3>Una fuente en cada respuesta: anotaciones por posición, lista estructurada de fuentes, modo nativo.](https://www.calypso.so/context/citations) [<h3>**Búsqueda **</h3>Recuperación sin generación: los pasajes que una respuesta citaría, ordenados.](https://www.calypso.so/context/search) [<h3>**Privacidad **</h3>Tuyo, aislado: sin entrenar con tus datos, exporta o borra cuando quieras, claves con permisos explícitos.](https://www.calypso.so/context/privacy) [<h3>**Ingesta en la documentación **</h3>La referencia desde la que está escrita esta página, con cada endpoint y campo.](https://docs.calypso.so/context/ingest)

**Empieza hoy**

## **Carga tu primer bucket hoy.**

Crea una clave de API del proyecto, sube un PDF y haz una pregunta que cite la página.

[**Prueba gratis 14 días**](https://context.calypso.so/join) [**Leer la documentación para desarrolladores**](https://docs.calypso.so/context/ingest)