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

# Crear documentos

> Con una frase o con tu texto, en el formato que necesites.

`documents.create` espera a que el documento esté listo y lo devuelve, como una llamada a un LLM. Si tarda más de
120 segundos, el SDK sigue esperándolo por ti.

## Con una frase

Doconda lo escribe con IA. El estilo que pidas en la frase ("títulos azules", "con índice") también se aplica.

```ts theme={null}
const doc = await doconda.documents.create({
  format: "docx",
  prompt: "Contrato de alquiler de vivienda de 900 € al mes, con títulos azules",
})
```

## Con tu texto

Si ya tienes el contenido en Markdown, Doconda solo lo maqueta. Es más rápido y más barato.

```ts theme={null}
const doc = await doconda.documents.create({
  format: "docx",
  content: { markdown: "# Nota interna\n\nLa reunión del lunes pasa a las 10:00." },
  style: "letra Lora, títulos azules, con números de página",
})
```

## Qué formato sale

El `format` decide el fichero. Word, PowerPoint y Excel vienen también con su PDF.

| Quieres | `format` |
| - | - |
| Word (+ PDF) | `docx` |
| Solo el PDF | `pdf` |
| PowerPoint (+ PDF) | `pptx` |
| Excel (+ PDF) | `xlsx` |
| Una página web con datos | `artifact` (ver [artifacts](/sdk/artifacts)) |

Si no lo pones, Doconda lo deduce de `prompt` (y si no está claro, falla con `format_unclear` sin cobrar). Dentro de
un Word o un PDF, Doconda decide solo si es un informe, una carta, un contrato, un memo o un acta, y le da su
maquetación base; tú lo describes en `prompt` y ajustas el aspecto con `style`. `doc.type` dice qué decidió.

## Con fuentes

En `sources` van tus ficheros: documentos que la IA lee antes de escribir (hasta 5) e imágenes que pone dentro del
documento (hasta 10), juntos:

```ts theme={null}
import { readFile } from "node:fs/promises"

const law = await doconda.files.upload(await readFile("ley-vivienda.pdf"), "ley-vivienda.pdf")
const photo = await doconda.files.upload(await readFile("fachada.jpg"), "fachada.jpg")
const doc = await doconda.documents.create({
  format: "docx",
  prompt: "Resume las medidas principales para un cliente",
  sources: [law.id, photo.id],
})
```

Con tu propio Markdown (`content`), `sources` solo lleva imágenes, y las pones con `![Pie](img:1)`.

## Descargar el resultado

```ts theme={null}
import { writeFile } from "node:fs/promises"

await writeFile("contrato.docx", await doconda.documents.download(doc.id, "docx"))
await writeFile("contrato.pdf", await doconda.documents.download(doc.id, "pdf"))
```

`doc.outputs` trae también los enlaces directos (caducan a los 5 minutos; `documents.outputs(id)` da otros nuevos).

## Comprueba cómo ha quedado

```ts theme={null}
if (doc.status === "needs_review") {
  const report = await doconda.documents.report(doc.id)
  console.log(report.issues) // lo que no se pudo arreglar solo
}
console.log(doc.style_unsupported) // lo que pediste y no se pudo aplicar, nunca se ignora en silencio
```

| `status` | Qué significa |
| - | - |
| `ready` | Listo, sin problemas. |
| `ready_with_warnings` | Listo; el informe tiene avisos menores. |
| `needs_review` | Listo, pero hay algo que conviene mirar (está en el informe). |
| `failed` | No se pudo hacer. No se cobra. `doc.error` dice por qué. |

## En segundo plano

Para no esperar en la misma llamada (por ejemplo, desde una cola de trabajos):

```ts theme={null}
const doc = await doconda.documents.createInBackground({ format: "docx", prompt: "Informe trimestral" })
// guarda doc.id y sigue con lo tuyo…
const done = await doconda.documents.wait(doc.id)
```

`wait` sigue los eventos del documento y se reconecta solo si la conexión se corta.


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