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

# Cancelar una operación masiva

> Detén un trabajo masivo que no haya terminado. Los elementos que aún no han comenzado se cancelan; a los elementos que ya se están ejecutando se les permite finalizar.

`cancelBulkOperation` detiene un trabajo que [enviaste](/submit-bulk-operation). Es **de mejor esfuerzo e irreversible**: los elementos que aún están `QUEUED` se cancelan, mientras que a los elementos que ya están `RUNNING` se les permite finalizar y registrar sus resultados. No revierte el trabajo que ya haya finalizado.

## Requisitos

* `Authorization: Basic <API_KEY>`
* La capacidad de API masiva en tu aplicación.
* El trabajo debe pertenecer a tu aplicación: un id de trabajo desconocido o de otra aplicación devuelve not-found.

## Mutación

```graphql theme={null}
mutation CancelBulkOperation($bulkJobId: UUID!) {
  cancelBulkOperation(bulkJobId: $bulkJobId) {
    jobId
    status
    succeededItemCount
    failedItemCount
    skippedItemCount
  }
}
```

```json theme={null}
{
  "bulkJobId": "9c1e6f2a-1d4b-4a2e-8f0c-2b7e5a9d1234"
}
```

## Respuesta

```json theme={null}
{
  "data": {
    "cancelBulkOperation": {
      "jobId": "9c1e6f2a-1d4b-4a2e-8f0c-2b7e5a9d1234",
      "status": "CANCELLED",
      "succeededItemCount": 4,
      "failedItemCount": 0,
      "skippedItemCount": 0
    }
  }
}
```

## Argumentos

| Parámetro   | Tipo    | Descripción                                          |
| ----------- | ------- | ---------------------------------------------------- |
| `bulkJobId` | `UUID!` | El id de trabajo devuelto por `submitBulkOperation`. |

## Campos de la respuesta

| Campo                                                         | Descripción                                                                                                                                       |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`                                                      | `CANCELLED` una vez que el trabajo ha dejado de aceptar nuevo trabajo. Los elementos que ya habían tenido éxito o fallado mantienen su resultado. |
| `succeededItemCount` / `failedItemCount` / `skippedItemCount` | Contadores finales por elemento, incluyendo cualquier elemento que haya terminado después de que se realizó la cancelación.                       |

## Errores

| Error                 | HTTP | Cuándo                                                                                              |
| --------------------- | ---- | --------------------------------------------------------------------------------------------------- |
| `BulkApiAccessDenied` | 403  | Tu aplicación no tiene la capacidad de API masiva.                                                  |
| `BulkJobNotFound`     | 404  | El id de trabajo es desconocido **o** pertenece a otra aplicación (deliberadamente indistinguible). |

Cancelar un trabajo ya terminado o ya cancelado **no** es un error: devuelve el trabajo sin cambios (ver abajo).

<Note>
  Cancelar es **idempotente y seguro para reintentar**. Llamarlo sobre un trabajo que ya está finalizado (`COMPLETED`, `COMPLETED_WITH_ERRORS`, `FAILED`) o ya `CANCELLED` devuelve el trabajo sin cambios: nunca arroja error y nunca revierte elementos completados. Debido a que se permite que los elementos en curso terminen, consulta el trabajo con [Rastrear un trabajo masivo](/track-bulk-job) si necesitas los conteos finales después de cancelar.
</Note>
