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

# Inicio rápido

> Su primer controlador de ruta de conversión con @markpdf/nextjs en menos de 15 líneas.

# Inicio rápido

## Controlador de ruta que recibe una carga y devuelve Markdown

```ts app/api/convert/route.ts theme={null}
import { createConvertRouteHandler } from "@markpdf/nextjs";

export const { POST } = createConvertRouteHandler({
  apiKey: process.env.MARKPDF_API_KEY!,
  defaultOptions: { mode: "fast" },
});
```

Esto expone `POST /api/convert` listo para recibir `multipart/form-data` con un campo `file` de su formulario, sin que usted tenga que escribir el análisis usted mismo.

```tsx app/upload-form.tsx theme={null}
"use client";

export function UploadForm() {
  async function handleSubmit(formData: FormData) {
    const res = await fetch("/api/convert", { method: "POST", body: formData });
    const markdown = await res.text();
    console.log(markdown);
  }

  return (
    <form action={handleSubmit}>
      <input type="file" name="file" accept=".pdf,.docx" />
      <button type="submit">Convertir</button>
    </form>
  );
}
```

## Acción del servidor equivalente

```ts app/actions.ts theme={null}
"use server";

import { convertFormData } from "@markpdf/nextjs";

export async function convertAction(formData: FormData) {
  const markdown = await convertFormData(formData, {
    apiKey: process.env.MARKPDF_API_KEY!,
    fileField: "file",
    mode: "fast",
  });
  return markdown;
}
```

```tsx app/upload-form.tsx theme={null}
"use client";
import { convertAction } from "./actions";

export function UploadForm() {
  return (
    <form action={async (formData) => {
      const markdown = await convertAction(formData);
      console.log(markdown);
    }}>
      <input type="file" name="file" accept=".pdf,.docx" />
      <button type="submit">Convertir</button>
    </form>
  );
}
```

<Note>
  En ambos casos, la clave API reside solo en el servidor (variable de entorno sin prefijo `NEXT_PUBLIC_`). El navegador nunca lo ve.
</Note>

## Siguiente paso

* [Guía de marco: controladores de ruta y acciones del servidor](/docs/public/es/sdks/nextjs/framework-guide)
* [Referencia completa](/docs/public/es/sdks/nextjs/reference)
