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

# Editar tu archivo

> Sube un documento y deja que Doconda lo cambie como le pidas, sin tocar lo demás.

> [!NOTE]
>
> Da por hecho que ya tienes instalado un SDK: [TypeScript](https://docs.doconda.com/es/sdk/introduction.md) o [Python](https://docs.doconda.com/es/sdk/python.md).

Esta guía cubre cómo subir un archivo, editarlo con una frase, leer qué ha cambiado, guardar una versión editada a mano
y borrar lo que subiste.

## Sube el archivo

`files.upload` guarda un archivo en el proyecto y devuelve su ID `file_…`. El límite es de 20 MB; un archivo mayor se
rechaza con `413 file_too_large`, y un formato que Doconda no lee, con `422 file_rejected`.

```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
file = doconda.files.upload("contrato.docx")
print(file["id"], file["bytes"])
```

```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
import { readFile } from "node:fs/promises"

const file = await doconda.files.upload(await readFile("contrato.docx"), "contrato.docx")
console.log(file.id, file.bytes)
```

```
file_01JC8Z9X2Y3Z4A5B6C7D8E9F0G 48213
```

En Python, `upload` acepta una ruta, `bytes` con `filename` o un archivo binario abierto. En TypeScript acepta un `Blob`,
un `File` o bytes (`Uint8Array`, `Buffer`), con el nombre del archivo como segundo argumento; la extensión le dice a
Doconda el formato.

## Edita con una frase

Llama a `documents.create` con `operation: "edit"`, el `file` y un `prompt` que diga qué cambiar. Doconda cambia solo eso
y deja el resto del documento como estaba.

```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
edited = doconda.documents.create(
    operation="edit",
    file=file["id"],
    prompt="Títulos en azul y una cláusula de confidencialidad después de la cláusula 7",
)
print(edited["id"], edited["status"])
```

```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
const edited = await doconda.documents.create({
  operation: "edit",
  file: file.id,
  prompt: "Títulos en azul y una cláusula de confidencialidad después de la cláusula 7",
})
console.log(edited.id, edited.status)
```

El resultado es un documento nuevo con su propio ID `doc_…`; el archivo subido no se modifica. `file` también puede ser
un `doc_…` que haya hecho Doconda, `{ url }` o `{ data, filename }`, así que puedes saltarte la subida.

El archivo tiene que ser Word, PowerPoint, Excel o PDF (un PDF de hasta 50 páginas). `.doc`, `.ppt` y `.xls` vuelven como
`.docx`, `.pptx` y `.xlsx`. Una edición cuesta 0,10 € en `fast`, 0,30 € en `standard` y 1,00 € en `best`; con
`quality: "auto"`, una edición que pide comentarios o control de cambios usa `best`. Ver
[precios](https://docs.doconda.com/es/guides/account.md#precios).

## Lee qué ha cambiado

`documents.report` devuelve `changes`: cada párrafo, celda o texto de diapositiva `added`, `changed` o `removed`, con su
texto antes y después.

```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
for change in doconda.documents.report(edited["id"])["changes"]:
    print(change["change"], change["before"], change["after"])
```

```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
const { changes } = await doconda.documents.report(edited.id)
for (const c of changes) console.log(c.change, c.before, c.after)
```

```
added [] ['Cláusula 8. Confidencialidad', 'Ambas partes se comprometen a…']
```

Antes de que el documento termine, `report` falla con `409 report_not_ready`; cuando acaba su retención, con
`410 content_deleted`. En un documento creado, `changes` está vacío.

## Guarda un archivo editado a mano

`documents.updateFile` (en Python, `update_file`) guarda un archivo que alguien editó a mano sobre el mismo documento, y
espera a su nuevo PDF, previews e informe. Es gratis. Pasa la `revision` que abriste para que nadie pise lo guardado.

```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
doc = doconda.documents.get(edited["id"])
saved = doconda.documents.update_file(doc["id"], "contrato-revisado.docx", revision=doc["revision"])
print(saved["revision"])  # 2
```

```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
const doc = await doconda.documents.get(edited.id)
const saved = await doconda.documents.updateFile(doc.id, "contrato-revisado.docx", { revision: doc.revision })
console.log(saved.revision) // 2
```

El archivo tiene que tener el formato del documento. Si alguien guardó entretanto, la llamada falla con
`409 revision_conflict` y no se sobrescribe nada. Ver
[guardar un archivo editado a mano](https://docs.doconda.com/es/guides/edit.md#guardar-un-archivo-editado-a-mano).

## Borra lo que subiste

```python Python theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
doconda.files.delete(file["id"])
```

```ts TypeScript theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
await doconda.files.delete(file.id)
```

Para leer un archivo como Markdown o pasarlo a otro formato sin IA, usa [`convert`](https://docs.doconda.com/es/guides/convert#desde-el-sdk) en
vez de una edición.

## Siguientes pasos

> **[Guía de edición](https://docs.doconda.com/es/guides/edit.md)**
>
> Qué conserva una edición y qué puede cambiar.

> **[Crear documentos](https://docs.doconda.com/es/sdk/create.md)**
>
> Con una frase o con tu Markdown.

> **[Gestionar errores](https://docs.doconda.com/es/sdk/errors.md)**
>
> Códigos, reintentos e idempotencia.

> **[Referencia del SDK](https://docs.doconda.com/es/sdk/reference.md)**
>
> Cada método y lo que devuelve.


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