> ## 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 termine y lo devuelve, como una llamada a un LLM. Si tarda más de
120 segundos, el SDK sigue esperándolo por ti. En Python las respuestas son diccionarios: `doc.id` es `doc["id"]`.

## Con una frase

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

<CodeGroup>
  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  const doc = await doconda.documents.create({
    format: "docx",
    prompt: "Contrato de alquiler de vivienda de 900 € al mes, con títulos azules",
  })
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  doc = doconda.documents.create(
      format="docx",
      prompt="Contrato de alquiler de vivienda de 900 € al mes, con títulos azules",
  )
  ```
</CodeGroup>

## Con tu texto

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

<CodeGroup>
  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  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",
  })
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  doc = 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",
  )
  ```
</CodeGroup>

## 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](/es/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:

<CodeGroup>
  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  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],
  })
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  law = doconda.files.upload("ley-vivienda.pdf")
  photo = doconda.files.upload("fachada.jpg")
  doc = doconda.documents.create(
      format="docx",
      prompt="Resume las medidas principales para un cliente",
      sources=[law["id"], photo["id"]],
  )
  ```
</CodeGroup>

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

## Descargar el resultado

<CodeGroup>
  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  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"))
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  from pathlib import Path

  Path("contrato.docx").write_bytes(doconda.documents.download(doc["id"], "docx"))
  Path("contrato.pdf").write_bytes(doconda.documents.download(doc["id"], "pdf"))
  ```
</CodeGroup>

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

## Comprueba cómo ha quedado

<CodeGroup>
  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  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
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  if doc["status"] == "needs_review":
      report = doconda.documents.report(doc["id"])
      print(report["issues"])  # lo que no se pudo arreglar solo
  print(doc["style_unsupported"])  # lo que pediste y no se pudo aplicar, nunca se ignora en silencio
  ```
</CodeGroup>

`create` vuelve cuando el documento llega a un estado final: `ready`, `ready_with_warnings`, `needs_review`, `failed` o
`canceled`. Un documento `failed` o `canceled` no es una excepción: mira `status`.

| `status` | Qué significa |
| - | - |
| `queued` | En cola. Lo ves con `createInBackground`, `get` o `list`; `create` nunca lo devuelve. |
| `running` | Haciéndose. Tampoco lo devuelve `create`. |
| `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é. |
| `canceled` | Se canceló (`documents.cancel`) antes de terminar. No se cobra. |

## En segundo plano

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

<CodeGroup>
  ```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  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)
  ```

  ```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
  doc = doconda.documents.create_in_background(format="docx", prompt="Informe trimestral")
  # guarda doc["id"] y sigue con lo tuyo…
  done = doconda.documents.wait(doc["id"])
  ```
</CodeGroup>

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