# Referencia

Cada operación de la API de Lockpick, su permiso, sus entradas y su respuesta, generados desde la propia API. Versión 1, en beta.

{/* Generated by scripts/docs-generate.mts. Do not edit; run `pnpm docs:generate`. */}

Versión 1, en beta. Cada ruta empieza con `/api/cli/v1`, cada solicitud lleva una clave como token bearer, y cada respuesta es `{ data, error }`. Toda la descripción también está en [OpenAPI 3.1](/openapi.json).

## API de agentes

Las operaciones del servidor detrás de las herramientas MCP alojadas. Las nuevas integraciones deberían usar estas. `lockpick_wait_for_scan` consulta `GET /agent/scans/{scanId}`; `lockpick_evaluate_scan` lee ese mismo escaneo y aplica la política de evaluación en el cliente. Estas dos herramientas compuestas no tienen un endpoint HTTP propio. Los scripts pueden consultar el estado del escaneo y evaluar su hora de finalización, cobertura y número de hallazgos abiertos según su política.

### GET /agent/me

La persona, el espacio de trabajo, los ámbitos y la caducidad de esta credencial, y lo que puede iniciar.

* Permiso: `read`
* Herramienta MCP: [`lockpick_whoami`](/es/docs/mcp/tools#lockpick_whoami)

**data**

| Campo          | Tipo   | Siempre presente |
| -------------- | ------ | ---------------- |
| `user`         | objeto | Sí               |
| `workspace`    | objeto | Sí               |
| `credential`   | objeto | Sí               |
| `capabilities` | objeto | Sí               |

### GET /agent/allowance

Escaneos gratuitos que quedan este mes, sus fechas de reinicio y créditos.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_allowance`](/es/docs/mcp/tools#lockpick_get_allowance)

**data**

| Campo               | Tipo                                                                                       | Siempre presente |
| ------------------- | ------------------------------------------------------------------------------------------ | ---------------- |
| `accessSource`      | `community`, `stripe` (valor de facturación heredado), `pilot` (heredado, interno), `none` | Sí               |
| `accountingMode`    | `pilot` (heredado, interno), `credits` (heredado, interno), `unmetered`                    | Sí               |
| `pulse`             | objeto                                                                                     | Sí               |
| `deep`              | objeto                                                                                     | Sí               |
| `creditBalance`     | entero o null                                                                              | Sí               |
| `freeSiteId`        | cadena o null                                                                              | Sí               |
| `freeSiteVisible`   | booleano                                                                                   | Sí               |
| `canSwitchFreeSite` | booleano                                                                                   | Sí               |

### GET /agent/monitor

Explora la inteligencia de seguridad actual y explica las coincidencias de los sitios autorizados.

* Permiso: `read`
* Herramienta MCP: [`lockpick_monitor`](/es/docs/mcp/tools#lockpick_monitor)

**Consulta**

| Campo        | Tipo                                                  | Obligatorio |
| ------------ | ----------------------------------------------------- | ----------- |
| `view`       | `latest`, `sites`, `exploited`, `following`           | No          |
| `kind`       | `all`, `vulnerability`, `malicious_package`           | No          |
| `q`          | string                                                | No          |
| `ecosystem`  | `all`, `npm`, `pypi`, `composer`, `wordpress`         | No          |
| `severity`   | `all`, `critical`, `high`, `medium`, `low`, `unknown` | No          |
| `days`       | number                                                | No          |
| `cursor`     | string                                                | No          |
| `limit`      | integer                                               | No          |
| `siteId`     | string                                                | No          |
| `advisoryId` | string                                                | No          |

**data**

| Campo         | Tipo             | Siempre presente |
| ------------- | ---------------- | ---------------- |
| `items`       | lista de objetos | Sí               |
| `nextCursor`  | cadena o null    | Sí               |
| `limitations` | lista de cadenas | Sí               |

**Cada elemento**

| Campo         | Tipo                                           | Siempre presente |
| ------------- | ---------------------------------------------- | ---------------- |
| `id`          | cadena                                         | Sí               |
| `title`       | cadena                                         | Sí               |
| `source`      | cadena                                         | Sí               |
| `kind`        | `vulnerability`, `malicious_package`           | Sí               |
| `severity`    | `critical`, `high`, `medium`, `low`, `unknown` | Sí               |
| `provenance`  | lista de objetos                               | Sí               |
| `withdrawnAt` | cadena o null                                  | No               |
| `publishedAt` | cadena                                         | Sí               |
| `exploited`   | booleano                                       | Sí               |
| `ids`         | lista de cadenas                               | Sí               |
| `tech`        | lista de objetos                               | Sí               |
| `epss`        | objeto o null                                  | No               |
| `cvss`        | objeto o null                                  | No               |
| `attribution` | cadena o null                                  | Sí               |
| `references`  | lista de cadenas                               | Sí               |
| `packages`    | lista de objetos                               | Yes              |
| `sites`       | lista de objetos                               | Sí               |

### GET /agent/sites

Una página de sitios con sus últimos escaneos.

* Permiso: `read`
* Herramienta MCP: [`lockpick_list_sites`](/es/docs/mcp/tools#lockpick_list_sites)

**Consulta**

| Campo    | Tipo    | Obligatorio |
| -------- | ------- | ----------- |
| `limit`  | integer | No          |
| `cursor` | string  | No          |

**data**

| Campo        | Tipo             | Siempre presente |
| ------------ | ---------------- | ---------------- |
| `items`      | lista de objetos | Sí               |
| `nextCursor` | cadena o null    | Sí               |

**Cada elemento**

| Campo         | Tipo          | Siempre presente |
| ------------- | ------------- | ---------------- |
| `id`          | cadena        | Sí               |
| `name`        | cadena        | Sí               |
| `status`      | cadena        | Sí               |
| `baseDomain`  | cadena o null | Sí               |
| `latestPulse` | objeto o null | Sí               |
| `latestDeep`  | objeto o null | Sí               |
| `latestBox`   | objeto o null | Sí               |
| `webPath`     | cadena        | Sí               |
| `webUrl`      | cadena        | Sí               |

### POST /agent/sites

Añade un sitio, o devuelve el que tiene esa dirección.

* Permiso: `sites`
* Herramienta MCP: [`lockpick_add_site`](/es/docs/mcp/tools#lockpick_add_site)

**Cuerpo**

| Campo            | Tipo   | Obligatorio |
| ---------------- | ------ | ----------- |
| `url`            | string | Sí          |
| `name`           | string | No          |
| `idempotencyKey` | string | Sí          |

**data**

| Campo     | Tipo     | Siempre presente |
| --------- | -------- | ---------------- |
| `site`    | objeto   | Sí               |
| `created` | booleano | Sí               |

### GET /agent/sites/\{siteId}/status

El estado de un sitio: sus últimos escaneos y qué hacer después.

* Permiso: `read`
* Herramienta MCP: [`lockpick_site_status`](/es/docs/mcp/tools#lockpick_site_status)

**data**

| Campo            | Tipo             | Siempre presente |
| ---------------- | ---------------- | ---------------- |
| `site`           | objeto           | Sí               |
| `latestPulse`    | objeto o null    | Sí               |
| `latestDeep`     | objeto o null    | Sí               |
| `latestBox`      | objeto o null    | Sí               |
| `lastComparison` | objeto o null    | Sí               |
| `caveats`        | lista de cadenas | Sí               |
| `relevant`       | lista de objetos | No               |
| `relevantTotal`  | entero           | No               |

### POST /agent/sites/\{siteId}/dependencies

Envía los nombres y las versiones exactas de los paquetes que fija un sitio, nunca código, y consulta qué avisos los afectan.

* Permiso: `sites`
* Herramienta MCP: [`lockpick_send_dependencies`](/es/docs/mcp/tools#lockpick_send_dependencies)

**Cuerpo**

| Campo            | Tipo                                                                                                                  | Obligatorio |
| ---------------- | --------------------------------------------------------------------------------------------------------------------- | ----------- |
| `inventory`      | object                                                                                                                | No          |
| `packages`       | lista de objetos                                                                                                      | Yes         |
| `sources`        | lista de `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `poetry.lock` | Yes         |
| `idempotencyKey` | string                                                                                                                | Sí          |

**data**

| Campo             | Tipo                                                                                                                  | Siempre presente |
| ----------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `siteId`          | string                                                                                                                | Sí               |
| `receivedAt`      | cadena o null                                                                                                         | Sí               |
| `sources`         | lista de `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `poetry.lock` | Yes              |
| `packageCount`    | entero                                                                                                                | Sí               |
| `affectsYouCount` | entero                                                                                                                | Sí               |
| `affectsYou`      | lista de objetos                                                                                                      | Sí               |
| `webUrl`          | cadena                                                                                                                | Sí               |

### POST /agent/sites/\{siteId}/pulse

Inicia un Pulse en un sitio.

* Permiso: `pulse`
* Herramienta MCP: [`lockpick_start_pulse`](/es/docs/mcp/tools#lockpick_start_pulse)

**Cuerpo**

| Campo            | Tipo   | Obligatorio |
| ---------------- | ------ | ----------- |
| `idempotencyKey` | string | Sí          |
| `baselineScanId` | string | No          |

**data**

| Campo       | Tipo     | Siempre presente |
| ----------- | -------- | ---------------- |
| `scan`      | objeto   | Sí               |
| `charged`   | objeto   | Sí               |
| `allowance` | objeto   | Sí               |
| `replayed`  | booleano | Sí               |

### POST /agent/sites/\{siteId}/deep-verifications

Emite una prueba de propiedad por DNS o por archivo antes de un escaneo Deep.

* Permiso: `deep`
* Herramienta MCP: [`lockpick_start_deep_verification`](/es/docs/mcp/tools#lockpick_start_deep_verification)

**Cuerpo**

| Campo            | Tipo                  | Obligatorio |
| ---------------- | --------------------- | ----------- |
| `method`         | `dns`, `file`, `meta` | Sí          |
| `idempotencyKey` | string                | Sí          |

**data**

| Campo               | Tipo                                                     | Siempre presente |
| ------------------- | -------------------------------------------------------- | ---------------- |
| `verificationId`    | string                                                   | Sí               |
| `siteId`            | string                                                   | Sí               |
| `origin`            | cadena                                                   | Sí               |
| `method`            | `dns`, `file`, `meta`                                    | Sí               |
| `state`             | `pending`, `verified`, `expired`, `exhausted`, `revoked` | Sí               |
| `expiresAt`         | cadena                                                   | Sí               |
| `verifiedUntil`     | cadena o null                                            | Sí               |
| `attemptsRemaining` | entero                                                   | Sí               |
| `retryAfterSeconds` | entero o null                                            | Sí               |
| `value`             | cadena                                                   | Sí               |
| `location`          | cadena                                                   | Sí               |

### POST /agent/sites/\{siteId}/deep-verifications/\{verificationId}/verify

Comprueba una prueba de propiedad publicada. Cada comprobación usa uno de sus intentos.

* Permiso: `deep`
* Herramienta MCP: [`lockpick_check_deep_verification`](/es/docs/mcp/tools#lockpick_check_deep_verification)

**data**

| Campo               | Tipo                                                     | Siempre presente |
| ------------------- | -------------------------------------------------------- | ---------------- |
| `verificationId`    | string                                                   | Sí               |
| `siteId`            | string                                                   | Sí               |
| `origin`            | cadena                                                   | Sí               |
| `method`            | `dns`, `file`, `meta`                                    | Sí               |
| `state`             | `pending`, `verified`, `expired`, `exhausted`, `revoked` | Sí               |
| `expiresAt`         | cadena                                                   | Sí               |
| `verifiedUntil`     | cadena o null                                            | Sí               |
| `attemptsRemaining` | entero                                                   | Sí               |
| `retryAfterSeconds` | entero o null                                            | Sí               |

### POST /agent/sites/\{siteId}/deep-operations

Prepara un escaneo Deep y obtiene el enlace donde la persona lo aprueba.

* Permiso: `deep`
* Herramienta MCP: [`lockpick_prepare_deep`](/es/docs/mcp/tools#lockpick_prepare_deep)

**Cuerpo**

| Campo            | Tipo   | Obligatorio |
| ---------------- | ------ | ----------- |
| `verificationId` | string | Sí          |
| `idempotencyKey` | string | Sí          |

**data**

| Campo             | Tipo                                       | Siempre presente |
| ----------------- | ------------------------------------------ | ---------------- |
| `operationId`     | string                                     | Sí               |
| `siteId`          | string                                     | Sí               |
| `origin`          | cadena                                     | Sí               |
| `assessmentLevel` | cadena                                     | Sí               |
| `verificationId`  | string                                     | Sí               |
| `cost`            | objeto                                     | Sí               |
| `allowance`       | objeto                                     | Sí               |
| `approvalState`   | `pending`, `approved`, `expired`, `denied` | Sí               |
| `approvalUrl`     | cadena                                     | Sí               |
| `expiresAt`       | cadena                                     | Sí               |

### POST /agent/deep-operations/\{operationId}/start

Inicia un escaneo Deep que la persona aprobó.

* Permiso: `deep`
* Herramienta MCP: [`lockpick_start_deep`](/es/docs/mcp/tools#lockpick_start_deep)

**data**

| Campo       | Tipo     | Siempre presente |
| ----------- | -------- | ---------------- |
| `scan`      | objeto   | Sí               |
| `charged`   | objeto   | Sí               |
| `allowance` | objeto   | Sí               |
| `replayed`  | booleano | Sí               |

### POST /agent/free-site-switch

Elimina un sitio para que el Pulse gratuito de este mes pase a otro.

* Permiso: `sites` y `pulse`
* Herramienta MCP: [`lockpick_switch_free_site`](/es/docs/mcp/tools#lockpick_switch_free_site)

**Cuerpo**

| Campo            | Tipo    | Obligatorio |
| ---------------- | ------- | ----------- |
| `removeSiteId`   | string  | Sí          |
| `checkId`        | string  | No          |
| `idempotencyKey` | string  | Sí          |
| `confirmRemoval` | boolean | Sí          |

**data**

| Campo               | Tipo          | Siempre presente |
| ------------------- | ------------- | ---------------- |
| `removedSiteId`     | cadena        | Sí               |
| `removedSiteHost`   | cadena        | Sí               |
| `replacementSiteId` | cadena o null | Sí               |
| `allowance`         | objeto        | Sí               |
| `restoreUrl`        | cadena        | Sí               |
| `startedScanId`     | cadena o null | Sí               |
| `charged`           | objeto        | Sí               |
| `replayed`          | booleano      | Sí               |

### GET /agent/scans

Una página de escaneos, del más reciente al más antiguo, con filtros.

* Permiso: `read`
* Herramienta MCP: [`lockpick_list_scans`](/es/docs/mcp/tools#lockpick_list_scans)

**Consulta**

| Campo             | Tipo                                                                                | Obligatorio |
| ----------------- | ----------------------------------------------------------------------------------- | ----------- |
| `siteId`          | string                                                                              | No          |
| `kind`            | `pulse`, `box` (Deep, nombre heredado)                                              | No          |
| `assessmentLevel` | `pulse`, `standard`, `deep`                                                         | No          |
| `status`          | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | No          |
| `limit`           | integer                                                                             | No          |
| `cursor`          | string                                                                              | No          |

**data**

| Campo        | Tipo             | Siempre presente |
| ------------ | ---------------- | ---------------- |
| `items`      | lista de objetos | Sí               |
| `nextCursor` | cadena o null    | Sí               |

**Cada elemento**

| Campo                       | Tipo                                                                                | Siempre presente |
| --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
| `id`                        | cadena                                                                              | Sí               |
| `kind`                      | `pulse`, `box` (Deep, nombre heredado)                                              | Sí               |
| `projectId`                 | cadena                                                                              | Sí               |
| `target`                    | cadena                                                                              | Sí               |
| `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Sí               |
| `mode`                      | `autonomous`, `authenticated`, `active` o null                                      | Sí               |
| `createdAt`                 | cadena o null                                                                       | Sí               |
| `finishedAt`                | cadena o null                                                                       | Sí               |
| `webPath`                   | cadena                                                                              | Sí               |
| `assessmentLevel`           | `pulse`, `standard`, `deep` o null                                                  | Sí               |
| `headline`                  | objeto                                                                              | Sí               |
| `webUrl`                    | cadena                                                                              | Sí               |
| `suggestedPollAfterSeconds` | entero o null                                                                       | Sí               |

### GET /agent/scans/\{scanId}

Un escaneo con su estado y su resumen.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_scan`](/es/docs/mcp/tools#lockpick_get_scan)

**data**

| Campo                       | Tipo                                                                                | Siempre presente |
| --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
| `id`                        | cadena                                                                              | Sí               |
| `kind`                      | `pulse`, `box` (Deep, nombre heredado)                                              | Sí               |
| `projectId`                 | cadena                                                                              | Sí               |
| `target`                    | cadena                                                                              | Sí               |
| `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Sí               |
| `mode`                      | `autonomous`, `authenticated`, `active` o null                                      | Sí               |
| `createdAt`                 | cadena o null                                                                       | Sí               |
| `finishedAt`                | cadena o null                                                                       | Sí               |
| `webPath`                   | cadena                                                                              | Sí               |
| `assessmentLevel`           | `pulse`, `standard`, `deep` o null                                                  | Sí               |
| `headline`                  | objeto                                                                              | Sí               |
| `webUrl`                    | cadena                                                                              | Sí               |
| `suggestedPollAfterSeconds` | entero o null                                                                       | Sí               |
| `baselineRunId`             | cadena o null                                                                       | Sí               |
| `open`                      | objeto                                                                              | Sí               |
| `findingCount`              | entero                                                                              | Sí               |
| `progress`                  | objeto o null                                                                       | Sí               |
| `coverage`                  | objeto                                                                              | Sí               |
| `caveats`                   | lista de cadenas                                                                    | Sí               |
| `outcome`                   | objeto o null                                                                       | Sí               |
| `exposureCheck`             | objeto                                                                              | No               |

### GET /agent/scans/\{scanId}/findings

Una página de hallazgos de un escaneo.

* Permiso: `read`
* Herramienta MCP: [`lockpick_list_findings`](/es/docs/mcp/tools#lockpick_list_findings)
* Envía `x-lockpick-agent-features: finding-code` para recibir el `code` de cada hallazgo (`LP-` y seis caracteres, como lo muestra el informe web). Sin el encabezado, la respuesta no incluye `code`, la forma que esperan los clientes antiguos.

**Consulta**

| Campo      | Tipo                                          | Obligatorio |
| ---------- | --------------------------------------------- | ----------- |
| `state`    | `attention`, `information`, `unknown`, `pass` | No          |
| `severity` | `critical`, `high`, `medium`, `low`, `info`   | No          |
| `all`      | booleano o `true`, `false`                    | No          |
| `limit`    | integer                                       | No          |
| `cursor`   | string                                        | No          |

**data**

| Campo        | Tipo             | Siempre presente |
| ------------ | ---------------- | ---------------- |
| `items`      | lista de objetos | Sí               |
| `nextCursor` | cadena o null    | Sí               |

**Cada elemento**

| Campo               | Tipo                                                 | Siempre presente |
| ------------------- | ---------------------------------------------------- | ---------------- |
| `id`                | cadena                                               | Sí               |
| `code`              | string                                               | No               |
| `runId`             | cadena                                               | Sí               |
| `kind`              | `pulse`, `box` (Deep, nombre heredado)               | Sí               |
| `severity`          | `critical`, `high`, `medium`, `low`, `info`          | Sí               |
| `state`             | `attention`, `information`, `unknown`, `pass`        | Sí               |
| `category`          | cadena                                               | Sí               |
| `title`             | cadena                                               | Sí               |
| `meaning`           | cadena                                               | Sí               |
| `fix`               | cadena o null                                        | Sí               |
| `confidence`        | cadena                                               | Sí               |
| `evidence`          | lista de cadenas                                     | Sí               |
| `sources`           | lista de string                                      | Yes              |
| `steps`             | lista de cadenas                                     | Sí               |
| `webPath`           | cadena                                               | Sí               |
| `webUrl`            | cadena                                               | Sí               |
| `evidenceTrust`     | cadena                                               | Sí               |
| `evidenceTruncated` | booleano                                             | Sí               |
| `verdict`           | `confirmed`, `needs_review`, `not_actionable` o null | No               |
| `certainty`         | `high`, `medium`, `low` o null                       | No               |
| `exploitability`    | `direct`, `conditional`, `hygiene`, `none` o null    | No               |
| `proof`             | objeto o null                                        | No               |
| `proofGap`          | cadena o null                                        | No               |
| `urgency`           | `now`, `week`, `later`, `none`                       | No               |
| `howSure`           | `confirmed`, `likely`, `possible` o null             | No               |

### GET /agent/scans/\{scanId}/findings/\{findingId}

Un hallazgo con su evidencia anonimizada.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_finding`](/es/docs/mcp/tools#lockpick_get_finding)
* Envía `x-lockpick-agent-features: finding-code` para recibir el `code` de cada hallazgo (`LP-` y seis caracteres, como lo muestra el informe web). Sin el encabezado, la respuesta no incluye `code`, la forma que esperan los clientes antiguos.

**data**

| Campo               | Tipo                                                 | Siempre presente |
| ------------------- | ---------------------------------------------------- | ---------------- |
| `id`                | cadena                                               | Sí               |
| `code`              | string                                               | No               |
| `runId`             | cadena                                               | Sí               |
| `kind`              | `pulse`, `box` (Deep, nombre heredado)               | Sí               |
| `severity`          | `critical`, `high`, `medium`, `low`, `info`          | Sí               |
| `state`             | `attention`, `information`, `unknown`, `pass`        | Sí               |
| `category`          | cadena                                               | Sí               |
| `title`             | cadena                                               | Sí               |
| `meaning`           | cadena                                               | Sí               |
| `fix`               | cadena o null                                        | Sí               |
| `confidence`        | cadena                                               | Sí               |
| `evidence`          | lista de cadenas                                     | Sí               |
| `sources`           | lista de string                                      | Yes              |
| `steps`             | lista de cadenas                                     | Sí               |
| `webPath`           | cadena                                               | Sí               |
| `webUrl`            | cadena                                               | Sí               |
| `evidenceTrust`     | cadena                                               | Sí               |
| `evidenceTruncated` | booleano                                             | Sí               |
| `verdict`           | `confirmed`, `needs_review`, `not_actionable` o null | No               |
| `certainty`         | `high`, `medium`, `low` o null                       | No               |
| `exploitability`    | `direct`, `conditional`, `hygiene`, `none` o null    | No               |
| `proof`             | objeto o null                                        | No               |
| `proofGap`          | cadena o null                                        | No               |
| `urgency`           | `now`, `week`, `later`, `none`                       | No               |
| `howSure`           | `confirmed`, `likely`, `possible` o null             | No               |

### GET /agent/scans/\{scanId}/repair-brief

Una parte del resumen de corrección de un escaneo.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_repair_brief`](/es/docs/mcp/tools#lockpick_get_repair_brief)

**Consulta**

| Campo       | Tipo                                                                                      | Obligatorio |
| ----------- | ----------------------------------------------------------------------------------------- | ----------- |
| `findingId` | string                                                                                    | No          |
| `agent`     | `claude-code`, `codex`, `cursor`, `vscode`, `opencode`, `lovable`, `bolt`, `replit`, `v0` | No          |
| `cursor`    | string                                                                                    | No          |

**data**

| Campo        | Tipo             | Siempre presente |
| ------------ | ---------------- | ---------------- |
| `scanId`     | string           | Sí               |
| `findingIds` | lista de cadenas | Sí               |
| `saved`      | booleano         | Sí               |
| `markdown`   | cadena           | Sí               |
| `nextCursor` | cadena o null    | Sí               |
| `complete`   | booleano         | Sí               |
| `webUrl`     | cadena           | Sí               |

### GET /agent/scans/\{scanId}/comparison

Qué cambió entre un escaneo y el que vuelve a revisar.

* Permiso: `read`
* Herramienta MCP: [`lockpick_compare_scans`](/es/docs/mcp/tools#lockpick_compare_scans)
* Envía `x-lockpick-agent-features: finding-code` para recibir el `code` de cada hallazgo (`LP-` y seis caracteres, como lo muestra el informe web). Sin el encabezado, la respuesta no incluye `code`, la forma que esperan los clientes antiguos.

**data**

| Campo           | Tipo             | Siempre presente |
| --------------- | ---------------- | ---------------- |
| `runId`         | cadena           | Sí               |
| `baselineRunId` | cadena           | Sí               |
| `error`         | cadena o null    | Sí               |
| `changes`       | lista de objetos | Sí               |
| `webUrl`        | cadena           | Sí               |

### POST /agent/scans/\{scanId}/dns-rechecks

Vuelve a ejecutar la comprobación DNS gratuita de un escaneo. No envía nada al sitio.

* Permiso: `pulse`
* Herramienta MCP: [`lockpick_recheck_dns`](/es/docs/mcp/tools#lockpick_recheck_dns)

**Cuerpo**

| Campo            | Tipo   | Obligatorio |
| ---------------- | ------ | ----------- |
| `findingId`      | string | Sí          |
| `idempotencyKey` | string | Sí          |

**data**

| Campo                    | Tipo             | Siempre presente |
| ------------------------ | ---------------- | ---------------- |
| `scanId`                 | string           | Sí               |
| `findingIds`             | lista de cadenas | Sí               |
| `pending`                | objeto o null    | Sí               |
| `checkedAt`              | cadena o null    | Sí               |
| `outcomes`               | lista de objetos | Sí               |
| `nextAllowedAt`          | cadena o null    | Sí               |
| `failedAt`               | cadena o null    | Sí               |
| `originalGradeUnchanged` | booleano         | Sí               |

### GET /agent/scans/\{scanId}/dns-rechecks/latest

La última comprobación DNS de un escaneo.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_dns_recheck`](/es/docs/mcp/tools#lockpick_get_dns_recheck)

**data**

| Campo                    | Tipo             | Siempre presente |
| ------------------------ | ---------------- | ---------------- |
| `scanId`                 | string           | Sí               |
| `findingIds`             | lista de cadenas | Sí               |
| `pending`                | objeto o null    | Sí               |
| `checkedAt`              | cadena o null    | Sí               |
| `outcomes`               | lista de objetos | Sí               |
| `nextAllowedAt`          | cadena o null    | Sí               |
| `failedAt`               | cadena o null    | Sí               |
| `originalGradeUnchanged` | booleano         | Sí               |

### POST /agent/quick-checks

Inicia una comprobación rápida gratuita de una página de inicio.

* Permiso: `pulse`
* Herramienta MCP: [`lockpick_quick_check`](/es/docs/mcp/tools#lockpick_quick_check)

**Cuerpo**

| Campo            | Tipo   | Obligatorio |
| ---------------- | ------ | ----------- |
| `url`            | string | Sí          |
| `idempotencyKey` | string | Sí          |

**data**

| Campo                       | Tipo                                       | Siempre presente |
| --------------------------- | ------------------------------------------ | ---------------- |
| `checkId`                   | string                                     | Sí               |
| `status`                    | `queued`, `running`, `succeeded`, `failed` | Sí               |
| `reused`                    | booleano                                   | Sí               |
| `headline`                  | objeto                                     | Sí               |
| `summary`                   | cadena o null                              | Sí               |
| `checks`                    | lista de objetos                           | Sí               |
| `webUrl`                    | cadena                                     | Sí               |
| `suggestedPollAfterSeconds` | entero o null                              | Sí               |

### POST /agent/repository-checks

Comprueba un repositorio público de GitHub (una skill, un plugin, un servidor MCP o una app) antes de instalarlo.

* Permiso: `pulse`
* Herramienta MCP: [`lockpick_check_repository`](/es/docs/mcp/tools#lockpick_check_repository)

**Cuerpo**

| Campo            | Tipo           | Obligatorio |
| ---------------- | -------------- | ----------- |
| `url`            | string         | Sí          |
| `mode`           | `skill`, `app` | No          |
| `depth`          | `free`, `deep` | No          |
| `idempotencyKey` | string         | Sí          |

**data**

| Campo                       | Tipo                                                                                                                | Siempre presente |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `checkId`                   | string                                                                                                              | Sí               |
| `status`                    | `queued`, `running`, `succeeded`, `failed`                                                                          | Sí               |
| `reused`                    | booleano                                                                                                            | Sí               |
| `repository`                | objeto                                                                                                              | Sí               |
| `mode`                      | `skill`, `app` o null                                                                                               | Sí               |
| `kind`                      | cadena o null                                                                                                       | Sí               |
| `verdict`                   | `safe`, `caution`, `do_not_install` o null                                                                          | Sí               |
| `appRisk`                   | `low`, `elevated`, `high` o null                                                                                    | Sí               |
| `score`                     | entero o null                                                                                                       | Sí               |
| `summary`                   | cadena o null                                                                                                       | Sí               |
| `plainSummary`              | cadena o null                                                                                                       | Sí               |
| `findings`                  | lista de objetos                                                                                                    | Sí               |
| `moreFindings`              | entero                                                                                                              | Sí               |
| `coverage`                  | objeto o null                                                                                                       | Sí               |
| `failure`                   | `not-found`, `ref-not-found`, `empty`, `too-large`, `rate-limited`, `unavailable`, `timeout`, `engine-error` o null | Sí               |
| `webUrl`                    | cadena                                                                                                              | Sí               |
| `suggestedPollAfterSeconds` | entero o null                                                                                                       | Sí               |

### GET /agent/repository-checks/\{checkId}

Una comprobación de repositorio y sus hallazgos.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_repository_check`](/es/docs/mcp/tools#lockpick_get_repository_check)

**data**

| Campo                       | Tipo                                                                                                                | Siempre presente |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `checkId`                   | string                                                                                                              | Sí               |
| `status`                    | `queued`, `running`, `succeeded`, `failed`                                                                          | Sí               |
| `reused`                    | booleano                                                                                                            | Sí               |
| `repository`                | objeto                                                                                                              | Sí               |
| `mode`                      | `skill`, `app` o null                                                                                               | Sí               |
| `kind`                      | cadena o null                                                                                                       | Sí               |
| `verdict`                   | `safe`, `caution`, `do_not_install` o null                                                                          | Sí               |
| `appRisk`                   | `low`, `elevated`, `high` o null                                                                                    | Sí               |
| `score`                     | entero o null                                                                                                       | Sí               |
| `summary`                   | cadena o null                                                                                                       | Sí               |
| `plainSummary`              | cadena o null                                                                                                       | Sí               |
| `findings`                  | lista de objetos                                                                                                    | Sí               |
| `moreFindings`              | entero                                                                                                              | Sí               |
| `coverage`                  | objeto o null                                                                                                       | Sí               |
| `failure`                   | `not-found`, `ref-not-found`, `empty`, `too-large`, `rate-limited`, `unavailable`, `timeout`, `engine-error` o null | Sí               |
| `webUrl`                    | cadena                                                                                                              | Sí               |
| `suggestedPollAfterSeconds` | entero o null                                                                                                       | Sí               |

### GET /agent/quick-checks/\{checkId}

Una comprobación rápida y su resultado.

* Permiso: `read`
* Herramienta MCP: [`lockpick_get_quick_check`](/es/docs/mcp/tools#lockpick_get_quick_check)

**data**

| Campo                       | Tipo                                       | Siempre presente |
| --------------------------- | ------------------------------------------ | ---------------- |
| `checkId`                   | string                                     | Sí               |
| `status`                    | `queued`, `running`, `succeeded`, `failed` | Sí               |
| `reused`                    | booleano                                   | Sí               |
| `headline`                  | objeto                                     | Sí               |
| `summary`                   | cadena o null                              | Sí               |
| `checks`                    | lista de objetos                           | Sí               |
| `webUrl`                    | cadena                                     | Sí               |
| `suggestedPollAfterSeconds` | entero o null                              | Sí               |

### GET /agent/docs/search

Busca en la documentación pública de Lockpick.

* Permiso: `read`
* Herramienta MCP: [`lockpick_search_docs`](/es/docs/mcp/tools#lockpick_search_docs)

**Consulta**

| Campo   | Tipo    | Obligatorio |
| ------- | ------- | ----------- |
| `query` | string  | Sí          |
| `limit` | integer | No          |

**data**

| Campo     | Tipo             | Siempre presente |
| --------- | ---------------- | ---------------- |
| `query`   | string           | Sí               |
| `results` | lista de objetos | Sí               |

### GET /agent/docs/page

Una página pública de la documentación en Markdown, por partes si es larga.

* Permiso: `read`
* Herramienta MCP: [`lockpick_read_doc`](/es/docs/mcp/tools#lockpick_read_doc)

**Consulta**

| Campo    | Tipo   | Obligatorio |
| -------- | ------ | ----------- |
| `path`   | string | No          |
| `cursor` | string | No          |

**data**

| Campo         | Tipo          | Siempre presente |
| ------------- | ------------- | ---------------- |
| `path`        | string        | Sí               |
| `title`       | cadena        | Sí               |
| `description` | cadena o null | Sí               |
| `url`         | string        | Sí               |
| `markdownUrl` | cadena        | Sí               |
| `markdown`    | cadena        | Sí               |
| `nextCursor`  | cadena o null | Sí               |
| `complete`    | booleano      | Sí               |

## Inicio de sesión del dispositivo

Cómo `lockpick login` obtiene una clave: pide un código, la persona lo aprueba en el navegador y el sondeo devuelve la clave.

### POST /device/code

Inicia un inicio de sesión del dispositivo y obtiene un código que la persona aprueba en el navegador.

* Permiso: ninguno, forma parte del inicio de sesión

**Cuerpo**

| Campo        | Tipo                                       | Obligatorio |
| ------------ | ------------------------------------------ | ----------- |
| `clientName` | cadena                                     | No          |
| `hostname`   | cadena                                     | No          |
| `platform`   | cadena                                     | No          |
| `version`    | cadena                                     | No          |
| `scopes`     | lista de `pulse`, `sites`, `deep`, `local` | No          |

**data**

| Campo                     | Tipo   | Siempre presente |
| ------------------------- | ------ | ---------------- |
| `deviceCode`              | cadena | Sí               |
| `userCode`                | cadena | Sí               |
| `verificationUri`         | cadena | Sí               |
| `verificationUriComplete` | cadena | Sí               |
| `expiresIn`               | entero | Sí               |
| `interval`                | entero | Sí               |

### POST /device/token

Consulta un inicio de sesión del dispositivo hasta que la persona lo apruebe, y luego recibe la clave.

* Permiso: ninguno, forma parte del inicio de sesión

**Cuerpo**

| Campo        | Tipo   | Obligatorio |
| ------------ | ------ | ----------- |
| `deviceCode` | cadena | Sí          |

## Heredado

Las rutas originales de la CLI, que usa la CLI 0.2. Se mantienen como están, y las nuevas integraciones deberían usar la API de agentes de arriba.

<details>
  <summary>
    Rutas originales de la CLI
  </summary>

  **POST /projects/\{projectId}/local-assessments/authorize**

  Autorizar una evaluación local antes de inspeccionar el repositorio. No se suben el código fuente ni los resultados.

  * Permiso: `local`

  **Cuerpo**

  | Campo                 | Tipo                                                                                                                                                                                                | Obligatorio |
  | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
  | `cliVersion`          | cadena                                                                                                                                                                                              | Sí          |
  | `scannerVersion`      | cadena                                                                                                                                                                                              | Sí          |
  | `rulesetVersion`      | cadena                                                                                                                                                                                              | Sí          |
  | `reportSchemaVersion` | cadena                                                                                                                                                                                              | Sí          |
  | `checks`              | lista de `tracked-secrets`, `public-environment`, `browser-artifacts`, `supabase-client`, `supabase-migrations`, `git-history`, `docker-files`, `docker-values`, `actions-injection`, `source-maps` | Sí          |

  **data**

  | Campo           | Tipo             | Siempre presente |
  | --------------- | ---------------- | ---------------- |
  | `admissionId`   | cadena           | Sí               |
  | `projectId`     | cadena           | Sí               |
  | `workspaceId`   | cadena           | Sí               |
  | `policyVersion` | cadena           | Sí               |
  | `startBy`       | cadena           | Sí               |
  | `checks`        | lista de objetos | Sí               |

  **GET /me**

  La persona, el espacio de trabajo y la clave detrás de esta credencial.

  * Permiso: `read`

  **data**

  | Campo       | Tipo   | Siempre presente |
  | ----------- | ------ | ---------------- |
  | `user`      | objeto | Sí               |
  | `workspace` | objeto | Sí               |
  | `key`       | objeto | Sí               |

  **DELETE /me**

  Revoca la clave presentada.

  * Permiso: cualquier clave válida

  **data**

  | Campo     | Tipo     | Siempre presente |
  | --------- | -------- | ---------------- |
  | `revoked` | booleano | Sí               |

  **GET /projects**

  Sitios (proyectos) con sus últimos escaneos Pulse y Deep.

  * Permiso: `read`

  **Cada elemento de data**

  | Campo         | Tipo          | Siempre presente |
  | ------------- | ------------- | ---------------- |
  | `id`          | cadena        | Sí               |
  | `name`        | cadena        | Sí               |
  | `status`      | cadena        | Sí               |
  | `baseDomain`  | cadena o null | Sí               |
  | `latestPulse` | objeto o null | Sí               |
  | `latestDeep`  | objeto o null | No               |
  | `latestBox`   | objeto o null | Sí               |
  | `webPath`     | cadena        | Sí               |
  | `webUrl`      | cadena        | No               |

  **GET /projects/\{projectId}/status**

  Los últimos resultados de un sitio y lo que cambió.

  * Permiso: `read`

  **data**

  | Campo            | Tipo             | Siempre presente |
  | ---------------- | ---------------- | ---------------- |
  | `project`        | objeto           | Sí               |
  | `latestPulse`    | objeto o null    | Sí               |
  | `latestDeep`     | objeto o null    | No               |
  | `latestBox`      | objeto o null    | Sí               |
  | `lastComparison` | objeto o null    | Sí               |
  | `caveats`        | lista de cadenas | Sí               |

  **POST /projects/\{projectId}/pulse**

  Inicia un Pulse en un sitio, o una revisión de su último Pulse.

  * Permiso: `pulse`
  * Responde 201 cuando funciona

  **Cuerpo**

  | Campo            | Tipo   | Obligatorio |
  | ---------------- | ------ | ----------- |
  | `idempotencyKey` | string | Sí          |

  **data**

  | Campo                       | Tipo                                                                                | Siempre presente |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | cadena                                                                              | Sí               |
  | `kind`                      | `pulse`, `box` (Deep, nombre heredado)                                              | Sí               |
  | `projectId`                 | cadena                                                                              | Sí               |
  | `target`                    | cadena                                                                              | Sí               |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Sí               |
  | `mode`                      | `autonomous`, `authenticated`, `active` o null                                      | Sí               |
  | `createdAt`                 | cadena o null                                                                       | Sí               |
  | `finishedAt`                | cadena o null                                                                       | Sí               |
  | `webPath`                   | cadena                                                                              | Sí               |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` o null                                                  | No               |
  | `headline`                  | objeto                                                                              | No               |
  | `webUrl`                    | cadena                                                                              | No               |
  | `suggestedPollAfterSeconds` | entero o null                                                                       | No               |
  | `baselineRunId`             | cadena o null                                                                       | Sí               |
  | `open`                      | objeto                                                                              | Sí               |
  | `findingCount`              | entero                                                                              | Sí               |
  | `progress`                  | objeto o null                                                                       | Sí               |
  | `coverage`                  | objeto                                                                              | Sí               |
  | `caveats`                   | lista de cadenas                                                                    | Sí               |
  | `outcome`                   | objeto o null                                                                       | No               |
  | `exposureCheck`             | objeto o null                                                                       | No               |

  **POST /projects/\{projectId}/deep**

  Inicia el escaneo Deep de una versión con una clave de CI creada para este sitio con Deep permitido.

  * Permiso: `deep`
  * Responde 201 cuando funciona

  **Cuerpo**

  | Campo            | Tipo   | Obligatorio |
  | ---------------- | ------ | ----------- |
  | `idempotencyKey` | string | Sí          |

  **data**

  | Campo                       | Tipo                                                                                | Siempre presente |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | cadena                                                                              | Sí               |
  | `kind`                      | `pulse`, `box` (Deep, nombre heredado)                                              | Sí               |
  | `projectId`                 | cadena                                                                              | Sí               |
  | `target`                    | cadena                                                                              | Sí               |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Sí               |
  | `mode`                      | `autonomous`, `authenticated`, `active` o null                                      | Sí               |
  | `createdAt`                 | cadena o null                                                                       | Sí               |
  | `finishedAt`                | cadena o null                                                                       | Sí               |
  | `webPath`                   | cadena                                                                              | Sí               |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` o null                                                  | No               |
  | `headline`                  | objeto                                                                              | No               |
  | `webUrl`                    | cadena                                                                              | No               |
  | `suggestedPollAfterSeconds` | entero o null                                                                       | No               |
  | `baselineRunId`             | cadena o null                                                                       | Sí               |
  | `open`                      | objeto                                                                              | Sí               |
  | `findingCount`              | entero                                                                              | Sí               |
  | `progress`                  | objeto o null                                                                       | Sí               |
  | `coverage`                  | objeto                                                                              | Sí               |
  | `caveats`                   | lista de cadenas                                                                    | Sí               |
  | `outcome`                   | objeto o null                                                                       | No               |
  | `exposureCheck`             | objeto o null                                                                       | No               |

  **GET /runs**

  Escaneos Pulse y Deep, del más reciente al más antiguo.

  * Permiso: `read`

  **Consulta**

  | Campo             | Tipo                                                                                | Obligatorio |
  | ----------------- | ----------------------------------------------------------------------------------- | ----------- |
  | `projectId`       | cadena                                                                              | No          |
  | `kind`            | `pulse`, `box` (Deep, nombre heredado)                                              | No          |
  | `assessmentLevel` | `pulse`, `standard`, `deep`                                                         | No          |
  | `status`          | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | No          |
  | `limit`           | integer                                                                             | No          |

  **Cada elemento de data**

  | Campo                       | Tipo                                                                                | Siempre presente |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | cadena                                                                              | Sí               |
  | `kind`                      | `pulse`, `box` (Deep, nombre heredado)                                              | Sí               |
  | `projectId`                 | cadena                                                                              | Sí               |
  | `target`                    | cadena                                                                              | Sí               |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Sí               |
  | `mode`                      | `autonomous`, `authenticated`, `active` o null                                      | Sí               |
  | `createdAt`                 | cadena o null                                                                       | Sí               |
  | `finishedAt`                | cadena o null                                                                       | Sí               |
  | `webPath`                   | cadena                                                                              | Sí               |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` o null                                                  | No               |
  | `headline`                  | objeto                                                                              | No               |
  | `webUrl`                    | cadena                                                                              | No               |
  | `suggestedPollAfterSeconds` | entero o null                                                                       | No               |

  **GET /runs/\{runId}**

  Un escaneo con su resumen y sus recuentos.

  * Permiso: `read`

  **data**

  | Campo                       | Tipo                                                                                | Siempre presente |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | cadena                                                                              | Sí               |
  | `kind`                      | `pulse`, `box` (Deep, nombre heredado)                                              | Sí               |
  | `projectId`                 | cadena                                                                              | Sí               |
  | `target`                    | cadena                                                                              | Sí               |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Sí               |
  | `mode`                      | `autonomous`, `authenticated`, `active` o null                                      | Sí               |
  | `createdAt`                 | cadena o null                                                                       | Sí               |
  | `finishedAt`                | cadena o null                                                                       | Sí               |
  | `webPath`                   | cadena                                                                              | Sí               |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` o null                                                  | No               |
  | `headline`                  | objeto                                                                              | No               |
  | `webUrl`                    | cadena                                                                              | No               |
  | `suggestedPollAfterSeconds` | entero o null                                                                       | No               |
  | `baselineRunId`             | cadena o null                                                                       | Sí               |
  | `open`                      | objeto                                                                              | Sí               |
  | `findingCount`              | entero                                                                              | Sí               |
  | `progress`                  | objeto o null                                                                       | Sí               |
  | `coverage`                  | objeto                                                                              | Sí               |
  | `caveats`                   | lista de cadenas                                                                    | Sí               |
  | `outcome`                   | objeto o null                                                                       | No               |
  | `exposureCheck`             | objeto o null                                                                       | No               |

  **GET /runs/\{runId}/findings**

  Hallazgos de un escaneo.

  * Permiso: `read`

  **Consulta**

  | Campo      | Tipo                                          | Obligatorio |
  | ---------- | --------------------------------------------- | ----------- |
  | `severity` | `critical`, `high`, `medium`, `low`, `info`   | No          |
  | `state`    | `attention`, `information`, `unknown`, `pass` | No          |
  | `all`      | `true`, `false`                               | No          |

  **Cada elemento de data**

  | Campo            | Tipo                                                 | Siempre presente |
  | ---------------- | ---------------------------------------------------- | ---------------- |
  | `id`             | cadena                                               | Sí               |
  | `code`           | string                                               | No               |
  | `runId`          | cadena                                               | Sí               |
  | `kind`           | `pulse`, `box` (Deep, nombre heredado)               | Sí               |
  | `severity`       | `critical`, `high`, `medium`, `low`, `info`          | Sí               |
  | `state`          | `attention`, `information`, `unknown`, `pass`        | Sí               |
  | `category`       | cadena                                               | Sí               |
  | `title`          | cadena                                               | Sí               |
  | `meaning`        | cadena                                               | Sí               |
  | `fix`            | cadena o null                                        | Sí               |
  | `confidence`     | cadena                                               | Sí               |
  | `evidence`       | lista de cadenas                                     | Sí               |
  | `sources`        | lista de string                                      | Yes              |
  | `steps`          | lista de cadenas                                     | Sí               |
  | `webPath`        | cadena                                               | Sí               |
  | `webUrl`         | cadena                                               | No               |
  | `verdict`        | `confirmed`, `needs_review`, `not_actionable` o null | No               |
  | `certainty`      | `high`, `medium`, `low` o null                       | No               |
  | `exploitability` | `direct`, `conditional`, `hygiene`, `none` o null    | No               |
  | `proof`          | objeto o null                                        | No               |
  | `proofGap`       | cadena o null                                        | No               |
  | `urgency`        | `now`, `week`, `later`, `none`                       | No               |
  | `howSure`        | `confirmed`, `likely`, `possible` o null             | No               |

  **GET /runs/\{runId}/findings/\{findingId}**

  Un hallazgo con su evidencia anonimizada.

  * Permiso: `read`

  **data**

  | Campo            | Tipo                                                 | Siempre presente |
  | ---------------- | ---------------------------------------------------- | ---------------- |
  | `id`             | cadena                                               | Sí               |
  | `code`           | string                                               | No               |
  | `runId`          | cadena                                               | Sí               |
  | `kind`           | `pulse`, `box` (Deep, nombre heredado)               | Sí               |
  | `severity`       | `critical`, `high`, `medium`, `low`, `info`          | Sí               |
  | `state`          | `attention`, `information`, `unknown`, `pass`        | Sí               |
  | `category`       | cadena                                               | Sí               |
  | `title`          | cadena                                               | Sí               |
  | `meaning`        | cadena                                               | Sí               |
  | `fix`            | cadena o null                                        | Sí               |
  | `confidence`     | cadena                                               | Sí               |
  | `evidence`       | lista de cadenas                                     | Sí               |
  | `sources`        | lista de string                                      | Yes              |
  | `steps`          | lista de cadenas                                     | Sí               |
  | `webPath`        | cadena                                               | Sí               |
  | `webUrl`         | cadena                                               | No               |
  | `verdict`        | `confirmed`, `needs_review`, `not_actionable` o null | No               |
  | `certainty`      | `high`, `medium`, `low` o null                       | No               |
  | `exploitability` | `direct`, `conditional`, `hygiene`, `none` o null    | No               |
  | `proof`          | objeto o null                                        | No               |
  | `proofGap`       | cadena o null                                        | No               |
  | `urgency`        | `now`, `week`, `later`, `none`                       | No               |
  | `howSure`        | `confirmed`, `likely`, `possible` o null             | No               |

  **GET /runs/\{runId}/repair-brief**

  Las correcciones de un escaneo en un único resumen en Markdown.

  * Permiso: `read`

  **Consulta**

  | Campo       | Tipo                                                                                      | Obligatorio |
  | ----------- | ----------------------------------------------------------------------------------------- | ----------- |
  | `findingId` | string                                                                                    | No          |
  | `agent`     | `claude-code`, `codex`, `cursor`, `vscode`, `opencode`, `lovable`, `bolt`, `replit`, `v0` | No          |

  **data**

  | Campo        | Tipo             | Siempre presente |
  | ------------ | ---------------- | ---------------- |
  | `runId`      | cadena           | Sí               |
  | `findingIds` | lista de cadenas | Sí               |
  | `saved`      | booleano         | Sí               |
  | `markdown`   | cadena           | Sí               |
  | `webUrl`     | cadena           | No               |

  **GET /runs/\{runId}/comparison**

  Qué cambió entre un escaneo y el anterior.

  * Permiso: `read`

  **data**

  | Campo           | Tipo             | Siempre presente |
  | --------------- | ---------------- | ---------------- |
  | `runId`         | cadena           | Sí               |
  | `baselineRunId` | cadena           | Sí               |
  | `error`         | cadena o null    | Sí               |
  | `changes`       | lista de objetos | Sí               |
  | `webUrl`        | cadena           | No               |
</details>