# Subir un PDF

URL base `https://api.accessful.de/api/v1/upload-service`. Cada petición necesita la cabecera `X-API-Key` — consulta [Autenticación](https://docs.accessful.de/es/authentication/).

```http
POST /pdf/upload
Content-Type: multipart/form-data
```

| Campo | Tipo | Obligatorio | Notas |
| --- | --- | --- | --- |
| `files` | file | **sí** | Uno o más PDFs (`application/pdf`). |
| `webhookUrl` | string | no | URL de callback para eventos de [webhook](https://docs.accessful.de/es/webhooks/). |
| `secret` | string | no | Tu secreto de firma HMAC (obligatorio para webhooks). |
| `folder-name` | string | no | Carpeta opcional para agrupar el caso. |

**`200 OK`**

```json
{
  "successfulUploads": ["7c2f1e4a-9b0d-4a1e-8f3c-2d6b5a9e1c40"],
  "duplicateFiles": [{ "fileName": "documento.pdf", "fileHash": "ab12cd34…" }],
  "message": "Upload completed successfully. Uploaded 1 files. 1 duplicates found.",
  "callbackUrl": "https://tu-app.example.com/hooks/accessful"
}
```

- `successfulUploads` — un **`caseId`** por cada archivo aceptado. Haz el seguimiento y la descarga con este ID.
- `duplicateFiles` — archivos omitidos porque el mismo contenido ya se había subido con tu clave.

Errores: `400` (archivo no PDF o URL de webhook no válida), `413` ([demasiado grande](https://docs.accessful.de/es/limits/)).
La cuota se comprueba **después** de la subida — una cuota agotada no hace fallar esta llamada;
en su lugar, el trabajo termina en el [estado](https://docs.accessful.de/es/reference/job-status/) `quota_exceeded`. Consulta
[Límites](https://docs.accessful.de/es/limits/).