*MCP › Referencia › Catálogo e inventario › Disponibilidad*

# Corregir o cerrar una indisponibilidad

> Con `action: "edit"` corrige las fechas o el tipo; con `action: "finish_now"` la cierra en este instante, que es el caso de "volvió antes".

`expectedUpdatedAt` es el bloqueo optimista: cópialo de la lectura y, si alguien la tocó entretanto, la petición se rechaza con 409 `conflict` y no se escribe nada; léela de nuevo y reintenta. `edit` solo se aplica a una indisponibilidad manual que aún no ha empezado: la creada por una tarea o por un horario se cambia desde su origen, y una que ya empezó solo se puede cerrar; ambas responden 409. Su nuevo inicio tiene que ser posterior a ahora y su fin posterior a su inicio (400 `validation_error` con `errors[0].path` en el campo, igual que con un `absenceType` de otro tipo de recurso), y en un espacio la nueva ventana no puede caer sobre sus reservas (409). `finish_now` solo cierra una indisponibilidad en curso —`unavailable`, ya empezada y aún no terminada—, también una que viene de un horario; cualquier otra responde 409, y también la creada por una tarea. `warningCount` es siempre 0 aquí: los compromisos que se solapan se cuentan cuando se declara la indisponibilidad. En un espacio responde 503 `service_unavailable` mientras las indisponibilidades de espacios estén desactivadas para la cuenta.

HERRAMIENTA `filmo_unavailabilities_update` · `availability:write` · 120/min · Anotación del servidor: Idempotente

## Argumentos

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `unavailabilityId` | string | Sí | Identificador de la indisponibilidad. |
| `action` | string | Sí | "edit" corrige la indisponibilidad; "finish_now" la cierra ahora mismo. `edit`, `finish_now` |
| `expectedUpdatedAt` | string<date-time> | Sí | Fecha de la última modificación que leíste. Si no coincide, se rechaza la petición. |
| `startDate` | string<date-time> | No | Nuevo inicio. |
| `endDate` | string<date-time> | No | Nuevo fin. |
| `absenceType` | string | No | Nuevo tipo de ausencia; null lo borra. `vacation`, `sick`, `personal`, `training`, `maintenance`, `inspection`, `repair`, `reserved`, `academic`, `event`, `closure`, `other` |
| `reason` | string | No | Nuevo motivo; null lo borra. La API no lo devuelve. |
| `idempotencyKey` | string | No | Clave de idempotencia elegida por el cliente (se recomienda un UUID). Repetir la misma clave con los mismos argumentos en 24 h devuelve la respuesta almacenada sin volver a ejecutar; con argumentos distintos responde 422. Es la forma segura de reintentar tras un fallo de red. |

## Resultado

En un éxito el resultado lleva `structuredContent` con `data` y `meta`. Estos son los atributos de `data`.

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `availability` | object | La indisponibilidad tal como queda ahora. |
| `availability.id` | string | Identificador único de la indisponibilidad. |
| `availability.resourceType` | string | Qué recurso: staff, vehicle o space. |
| `availability.resourceId` | string | Identificador de ese recurso. |
| `availability.resourceName` | string | Nombre del recurso; null si no consta. |
| `availability.startDate` | string<date-time> | Inicio de la indisponibilidad en ISO 8601 UTC. |
| `availability.endDate` | string<date-time> | Fin de la indisponibilidad en ISO 8601 UTC. |
| `availability.state` | string | Estado declarado. Este listado solo devuelve ventanas `unavailable` que aún no han terminado, así que aquí siempre es `unavailable`; `available` y `unknown` existen como declaraciones pero no se listan. |
| `availability.absenceType` | string | Tipo de ausencia. Solo se emite para vehículos y espacios, donde es operativo; para el personal es un dato de salud y se devuelve como null. |
| `availability.updatedAt` | string<date-time> | Última modificación en ISO 8601 UTC; null si no está registrada. |
| `warningCount` | integer | Compromisos del recurso que se solapan con esta indisponibilidad. |

*Llamada · filmo_unavailabilities_update*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_unavailabilities_update",
    "arguments": {
      "unavailabilityId": "unav_8f2a1c",
      "action": "edit",
      "expectedUpdatedAt": "2026-09-01T08:00:00Z"
    }
  }
}
```

*Resultado (generado desde el esquema)*

```json
{
  "structuredContent": {
    "data": {
      "availability": {
        "id": "id_8f2a1c",
        "resourceType": "<resourceType>",
        "resourceId": "reso_8f2a1c",
        "resourceName": "Example",
        "startDate": "2026-09-01T08:00:00Z",
        "endDate": "2026-09-01T08:00:00Z",
        "state": "<state>",
        "absenceType": "<absenceType>",
        "updatedAt": "2026-09-01T08:00:00Z"
      },
      "warningCount": 1
    },
    "meta": {
      "idempotencyKey": "<the key you sent, or the one the server generated>",
      "rateLimit": {
        "limit": 120,
        "remaining": 119,
        "reset": 42
      }
    }
  }
}
```

## La misma operación por REST

Esta herramienta ejecuta [`PATCH /api/v1/availability/unavailabilities/{unavailabilityId}`](https://docs.filmo.io/es/rest-api/endpoint-reference/availability/correct-or-close-an-unavailability).

---

URL canónica: https://docs.filmo.io/es/mcp/tools/availability/filmo-unavailabilities-update  
Última actualización: 2026-10-25