# Revocar (repetible)

> POST /api/configuracion/api-externa/credenciales/{id}/revocar

`POST /api/configuracion/api-externa/credenciales/{id}/revocar`

> Autenticación: sesión del panel de Turnova (dueña o administradora). No se llama con una clave de la API.

## Parámetros

| Nombre | En | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- | --- |
| `id` | path | string | Sí |  |

## Ejemplo

```js
// Desde el panel de Turnova, con la sesión iniciada (cookie).
const res = await fetch("/api/configuracion/api-externa/credenciales/cmh4k2n9x0001/revocar", {
  method: "POST",
});
const r = await res.json();
```

## Respuestas

| HTTP | Qué significa |
| --- | --- |
| 200 | Revocada (o ya lo estaba, `operacion.repetida`) |
| 401 | Clave faltante, inválida o revocada. |
| 403 | Origen no permitido, permiso faltante, clave secreta desde un navegador o plan sin la API (`PLAN_SIN_API`). |
| 404 | No existe o no es de este negocio. |

### Respuesta 200

```json
{
  "ok": true,
  "operacion": {
    "referencia": "cmh4k2n9x0001",
    "repetida": false
  },
  "datos": {
    "credencial": {
      "id": "cmh4k2n9x0001",
      "nombre": "Masaje descontracturante",
      "tipo": "PUBLICA",
      "prefijo": "tnv_pk_ab12cd34",
      "scopes": [
        "catalogo:leer",
        "disponibilidad:leer",
        "reservas:crear"
      ],
      "origenes": [
        "https://mi-spa.com"
      ],
      "createdAt": "2026-11-01T13:00:00.000Z",
      "ultimoUsoEn": "2026-11-01T13:05:00.000Z",
      "revocadaEn": null
    }
  }
}
```

| Campo | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `datos.credencial` | object | No |  |
| `datos.credencial.id` | string | No |  |
| `datos.credencial.nombre` | string | No |  |
| `datos.credencial.tipo` | `PUBLICA`, `SECRETA` | No |  |
| `datos.credencial.prefijo` | string | No |  |
| `datos.credencial.scopes` | array de string | No |  |
| `datos.credencial.origenes` | array de string | No |  |
| `datos.credencial.createdAt` | string (date-time) | No |  |
| `datos.credencial.ultimoUsoEn` | string (date-time) o null | No |  |
| `datos.credencial.revocadaEn` | string (date-time) o null | No |  |

Los errores siguen el formato común: ver [Errores](https://turnovapp.com/docs/errores.md).
