# Référence

Chaque opération de l’API Lockpick, son autorisation, ses entrées et sa réponse, générées à partir de l’API elle-même. Version 1, en bêta.

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

Version 1, en bêta. Chaque chemin commence par `/api/cli/v1`, chaque requête transporte une clé sous forme de jeton bearer, et chaque réponse est `{ data, error }`. L’ensemble de cette description est aussi disponible en [OpenAPI 3.1](/openapi.json).

## API de l’agent

Les opérations serveur derrière les outils MCP hébergés. Les nouvelles intégrations doivent les utiliser. `lockpick_wait_for_scan` interroge `GET /agent/scans/{scanId}` ; `lockpick_evaluate_scan` lit cette même analyse et applique la politique d’évaluation côté client. Ces deux outils composés n’ont pas de point de terminaison HTTP distinct. Les scripts peuvent interroger l’état de l’analyse et évaluer son heure de fin, sa couverture et le nombre de points à corriger ouverts selon leur politique.

### GET /agent/me

La personne, l’espace de travail, les portées et l’expiration de cet identifiant, et ce qu’il peut lancer.

* Autorisation : `read`
* Outil MCP : [`lockpick_whoami`](/fr/docs/mcp/tools#lockpick_whoami)

**data**

| Champ          | Type  | Toujours présent |
| -------------- | ----- | ---------------- |
| `user`         | objet | Oui              |
| `workspace`    | objet | Oui              |
| `credential`   | objet | Oui              |
| `capabilities` | objet | Oui              |

### GET /agent/allowance

Analyses gratuites restant ce mois-ci, leurs dates de réinitialisation et leurs crédits.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_allowance`](/fr/docs/mcp/tools#lockpick_get_allowance)

**data**

| Champ               | Type                                                                                      | Toujours présent |
| ------------------- | ----------------------------------------------------------------------------------------- | ---------------- |
| `accessSource`      | `community`, `stripe` (valeur de facturation héritée), `pilot` (héritée, interne), `none` | Oui              |
| `accountingMode`    | `pilot` (héritée, interne), `credits` (héritée, interne), `unmetered`                     | Oui              |
| `pulse`             | objet                                                                                     | Oui              |
| `deep`              | objet                                                                                     | Oui              |
| `creditBalance`     | entier ou null                                                                            | Oui              |
| `freeSiteId`        | chaîne ou null                                                                            | Oui              |
| `freeSiteVisible`   | booléen                                                                                   | Oui              |
| `canSwitchFreeSite` | booléen                                                                                   | Oui              |

### GET /agent/monitor

Parcourir les avis de sécurité actuels et expliquer les correspondances pour les sites autorisés.

* Autorisation : `read`
* Outil MCP : [`lockpick_monitor`](/fr/docs/mcp/tools#lockpick_monitor)

**Paramètres de requête**

| Champ        | Type                                                  | Requis |
| ------------ | ----------------------------------------------------- | ------ |
| `view`       | `latest`, `sites`, `exploited`, `following`           | Non    |
| `kind`       | `all`, `vulnerability`, `malicious_package`           | Non    |
| `q`          | chaîne                                                | Non    |
| `ecosystem`  | `all`, `npm`, `pypi`, `composer`, `wordpress`         | Non    |
| `severity`   | `all`, `critical`, `high`, `medium`, `low`, `unknown` | Non    |
| `days`       | nombre                                                | Non    |
| `cursor`     | chaîne                                                | Non    |
| `limit`      | entier                                                | Non    |
| `siteId`     | chaîne                                                | Non    |
| `advisoryId` | chaîne                                                | Non    |

**data**

| Champ         | Type             | Toujours présent |
| ------------- | ---------------- | ---------------- |
| `items`       | liste d’objets   | Oui              |
| `nextCursor`  | chaîne ou null   | Oui              |
| `limitations` | liste de chaînes | Oui              |

**Chaque élément**

| Champ         | Type                                           | Toujours présent |
| ------------- | ---------------------------------------------- | ---------------- |
| `id`          | chaîne                                         | Oui              |
| `title`       | chaîne                                         | Oui              |
| `source`      | chaîne                                         | Oui              |
| `kind`        | `vulnerability`, `malicious_package`           | Oui              |
| `severity`    | `critical`, `high`, `medium`, `low`, `unknown` | Oui              |
| `provenance`  | liste d’objets                                 | Oui              |
| `withdrawnAt` | chaîne ou null                                 | Non              |
| `publishedAt` | chaîne                                         | Oui              |
| `exploited`   | booléen                                        | Oui              |
| `ids`         | liste de chaînes                               | Oui              |
| `tech`        | liste d’objets                                 | Oui              |
| `epss`        | objet ou null                                  | Non              |
| `cvss`        | objet ou null                                  | Non              |
| `attribution` | chaîne ou null                                 | Oui              |
| `references`  | liste de chaînes                               | Oui              |
| `packages`    | liste d’objets                                 | Oui              |
| `sites`       | liste d’objets                                 | Oui              |

### GET /agent/sites

Une page de sites avec leurs dernières analyses.

* Autorisation : `read`
* Outil MCP : [`lockpick_list_sites`](/fr/docs/mcp/tools#lockpick_list_sites)

**Paramètres de requête**

| Champ    | Type   | Requis |
| -------- | ------ | ------ |
| `limit`  | entier | Non    |
| `cursor` | chaîne | Non    |

**data**

| Champ        | Type           | Toujours présent |
| ------------ | -------------- | ---------------- |
| `items`      | liste d’objets | Oui              |
| `nextCursor` | chaîne ou null | Oui              |

**Chaque élément**

| Champ         | Type           | Toujours présent |
| ------------- | -------------- | ---------------- |
| `id`          | chaîne         | Oui              |
| `name`        | chaîne         | Oui              |
| `status`      | chaîne         | Oui              |
| `baseDomain`  | chaîne ou null | Oui              |
| `latestPulse` | objet ou null  | Oui              |
| `latestDeep`  | objet ou null  | Oui              |
| `latestBox`   | objet ou null  | Oui              |
| `webPath`     | chaîne         | Oui              |
| `webUrl`      | chaîne         | Oui              |

### POST /agent/sites

Ajouter un site, ou renvoyer celui qui porte cette adresse.

* Autorisation : `sites`
* Outil MCP : [`lockpick_add_site`](/fr/docs/mcp/tools#lockpick_add_site)

**Corps**

| Champ            | Type   | Requis |
| ---------------- | ------ | ------ |
| `url`            | chaîne | Oui    |
| `name`           | chaîne | Non    |
| `idempotencyKey` | chaîne | Oui    |

**data**

| Champ     | Type    | Toujours présent |
| --------- | ------- | ---------------- |
| `site`    | objet   | Oui              |
| `created` | booléen | Oui              |

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

L’état d’un site : ses dernières analyses et la marche à suivre.

* Autorisation : `read`
* Outil MCP : [`lockpick_site_status`](/fr/docs/mcp/tools#lockpick_site_status)

**data**

| Champ            | Type             | Toujours présent |
| ---------------- | ---------------- | ---------------- |
| `site`           | objet            | Oui              |
| `latestPulse`    | objet ou null    | Oui              |
| `latestDeep`     | objet ou null    | Oui              |
| `latestBox`      | objet ou null    | Oui              |
| `lastComparison` | objet ou null    | Oui              |
| `caveats`        | liste de chaînes | Oui              |
| `relevant`       | liste d’objets   | Non              |
| `relevantTotal`  | entier           | Non              |

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

Envoyer les noms et les versions exactes des paquets épinglés par un site, jamais le code, et lire les avis qui les touchent.

* Autorisation : `sites`
* Outil MCP : [`lockpick_send_dependencies`](/fr/docs/mcp/tools#lockpick_send_dependencies)

**Corps**

| Champ            | Type                                                                                                                  | Requis |
| ---------------- | --------------------------------------------------------------------------------------------------------------------- | ------ |
| `inventory`      | objet                                                                                                                 | Non    |
| `packages`       | liste d’objets                                                                                                        | Oui    |
| `sources`        | liste de `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `poetry.lock` | Oui    |
| `idempotencyKey` | chaîne                                                                                                                | Oui    |

**data**

| Champ             | Type                                                                                                                  | Toujours présent |
| ----------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `siteId`          | chaîne                                                                                                                | Oui              |
| `receivedAt`      | chaîne ou null                                                                                                        | Oui              |
| `sources`         | liste de `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `poetry.lock` | Oui              |
| `packageCount`    | entier                                                                                                                | Oui              |
| `affectsYouCount` | entier                                                                                                                | Oui              |
| `affectsYou`      | liste d’objets                                                                                                        | Oui              |
| `webUrl`          | chaîne                                                                                                                | Oui              |

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

Lancer une analyse Pulse sur un site.

* Autorisation : `pulse`
* Outil MCP : [`lockpick_start_pulse`](/fr/docs/mcp/tools#lockpick_start_pulse)

**Corps**

| Champ            | Type   | Requis |
| ---------------- | ------ | ------ |
| `idempotencyKey` | chaîne | Oui    |
| `baselineScanId` | chaîne | Non    |

**data**

| Champ       | Type    | Toujours présent |
| ----------- | ------- | ---------------- |
| `scan`      | objet   | Oui              |
| `charged`   | objet   | Oui              |
| `allowance` | objet   | Oui              |
| `replayed`  | booléen | Oui              |

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

Émettre une preuve de propriété par DNS ou par fichier avant une analyse Deep.

* Autorisation : `deep`
* Outil MCP : [`lockpick_start_deep_verification`](/fr/docs/mcp/tools#lockpick_start_deep_verification)

**Corps**

| Champ            | Type                  | Requis |
| ---------------- | --------------------- | ------ |
| `method`         | `dns`, `file`, `meta` | Oui    |
| `idempotencyKey` | chaîne                | Oui    |

**data**

| Champ               | Type                                                     | Toujours présent |
| ------------------- | -------------------------------------------------------- | ---------------- |
| `verificationId`    | chaîne                                                   | Oui              |
| `siteId`            | chaîne                                                   | Oui              |
| `origin`            | chaîne                                                   | Oui              |
| `method`            | `dns`, `file`, `meta`                                    | Oui              |
| `state`             | `pending`, `verified`, `expired`, `exhausted`, `revoked` | Oui              |
| `expiresAt`         | chaîne                                                   | Oui              |
| `verifiedUntil`     | chaîne ou null                                           | Oui              |
| `attemptsRemaining` | entier                                                   | Oui              |
| `retryAfterSeconds` | entier ou null                                           | Oui              |
| `value`             | chaîne                                                   | Oui              |
| `location`          | chaîne                                                   | Oui              |

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

Vérifier une preuve de propriété publiée. Chaque vérification utilise une de ses tentatives.

* Autorisation : `deep`
* Outil MCP : [`lockpick_check_deep_verification`](/fr/docs/mcp/tools#lockpick_check_deep_verification)

**data**

| Champ               | Type                                                     | Toujours présent |
| ------------------- | -------------------------------------------------------- | ---------------- |
| `verificationId`    | chaîne                                                   | Oui              |
| `siteId`            | chaîne                                                   | Oui              |
| `origin`            | chaîne                                                   | Oui              |
| `method`            | `dns`, `file`, `meta`                                    | Oui              |
| `state`             | `pending`, `verified`, `expired`, `exhausted`, `revoked` | Oui              |
| `expiresAt`         | chaîne                                                   | Oui              |
| `verifiedUntil`     | chaîne ou null                                           | Oui              |
| `attemptsRemaining` | entier                                                   | Oui              |
| `retryAfterSeconds` | entier ou null                                           | Oui              |

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

Préparer une analyse Deep et obtenir le lien où la personne l’autorise.

* Autorisation : `deep`
* Outil MCP : [`lockpick_prepare_deep`](/fr/docs/mcp/tools#lockpick_prepare_deep)

**Corps**

| Champ            | Type   | Requis |
| ---------------- | ------ | ------ |
| `verificationId` | chaîne | Oui    |
| `idempotencyKey` | chaîne | Oui    |

**data**

| Champ             | Type                                       | Toujours présent |
| ----------------- | ------------------------------------------ | ---------------- |
| `operationId`     | chaîne                                     | Oui              |
| `siteId`          | chaîne                                     | Oui              |
| `origin`          | chaîne                                     | Oui              |
| `assessmentLevel` | chaîne                                     | Oui              |
| `verificationId`  | chaîne                                     | Oui              |
| `cost`            | objet                                      | Oui              |
| `allowance`       | objet                                      | Oui              |
| `approvalState`   | `pending`, `approved`, `expired`, `denied` | Oui              |
| `approvalUrl`     | chaîne                                     | Oui              |
| `expiresAt`       | chaîne                                     | Oui              |

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

Lancer une analyse Deep autorisée par la personne.

* Autorisation : `deep`
* Outil MCP : [`lockpick_start_deep`](/fr/docs/mcp/tools#lockpick_start_deep)

**data**

| Champ       | Type    | Toujours présent |
| ----------- | ------- | ---------------- |
| `scan`      | objet   | Oui              |
| `charged`   | objet   | Oui              |
| `allowance` | objet   | Oui              |
| `replayed`  | booléen | Oui              |

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

Retirer un site pour que le Pulse gratuit du mois puisse passer à un autre.

* Autorisation : `sites` et `pulse`
* Outil MCP : [`lockpick_switch_free_site`](/fr/docs/mcp/tools#lockpick_switch_free_site)

**Corps**

| Champ            | Type    | Requis |
| ---------------- | ------- | ------ |
| `removeSiteId`   | chaîne  | Oui    |
| `checkId`        | chaîne  | Non    |
| `idempotencyKey` | chaîne  | Oui    |
| `confirmRemoval` | booléen | Oui    |

**data**

| Champ               | Type           | Toujours présent |
| ------------------- | -------------- | ---------------- |
| `removedSiteId`     | chaîne         | Oui              |
| `removedSiteHost`   | chaîne         | Oui              |
| `replacementSiteId` | chaîne ou null | Oui              |
| `allowance`         | objet          | Oui              |
| `restoreUrl`        | chaîne         | Oui              |
| `startedScanId`     | chaîne ou null | Oui              |
| `charged`           | objet          | Oui              |
| `replayed`          | booléen        | Oui              |

### GET /agent/scans

Une page d’analyses, les plus récentes en premier, avec des filtres.

* Autorisation : `read`
* Outil MCP : [`lockpick_list_scans`](/fr/docs/mcp/tools#lockpick_list_scans)

**Paramètres de requête**

| Champ             | Type                                                                                | Requis |
| ----------------- | ----------------------------------------------------------------------------------- | ------ |
| `siteId`          | chaîne                                                                              | Non    |
| `kind`            | `pulse`, `box` (Deep, nom hérité)                                                   | Non    |
| `assessmentLevel` | `pulse`, `standard`, `deep`                                                         | Non    |
| `status`          | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Non    |
| `limit`           | entier                                                                              | Non    |
| `cursor`          | chaîne                                                                              | Non    |

**data**

| Champ        | Type           | Toujours présent |
| ------------ | -------------- | ---------------- |
| `items`      | liste d’objets | Oui              |
| `nextCursor` | chaîne ou null | Oui              |

**Chaque élément**

| Champ                       | Type                                                                                | Toujours présent |
| --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
| `id`                        | chaîne                                                                              | Oui              |
| `kind`                      | `pulse`, `box` (Deep, nom hérité)                                                   | Oui              |
| `projectId`                 | chaîne                                                                              | Oui              |
| `target`                    | chaîne                                                                              | Oui              |
| `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Oui              |
| `mode`                      | `autonomous`, `authenticated`, `active` ou null                                     | Oui              |
| `createdAt`                 | chaîne ou null                                                                      | Oui              |
| `finishedAt`                | chaîne ou null                                                                      | Oui              |
| `webPath`                   | chaîne                                                                              | Oui              |
| `assessmentLevel`           | `pulse`, `standard`, `deep` ou null                                                 | Oui              |
| `headline`                  | objet                                                                               | Oui              |
| `webUrl`                    | chaîne                                                                              | Oui              |
| `suggestedPollAfterSeconds` | entier ou null                                                                      | Oui              |

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

Une analyse avec son statut et son résumé.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_scan`](/fr/docs/mcp/tools#lockpick_get_scan)

**data**

| Champ                       | Type                                                                                | Toujours présent |
| --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
| `id`                        | chaîne                                                                              | Oui              |
| `kind`                      | `pulse`, `box` (Deep, nom hérité)                                                   | Oui              |
| `projectId`                 | chaîne                                                                              | Oui              |
| `target`                    | chaîne                                                                              | Oui              |
| `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Oui              |
| `mode`                      | `autonomous`, `authenticated`, `active` ou null                                     | Oui              |
| `createdAt`                 | chaîne ou null                                                                      | Oui              |
| `finishedAt`                | chaîne ou null                                                                      | Oui              |
| `webPath`                   | chaîne                                                                              | Oui              |
| `assessmentLevel`           | `pulse`, `standard`, `deep` ou null                                                 | Oui              |
| `headline`                  | objet                                                                               | Oui              |
| `webUrl`                    | chaîne                                                                              | Oui              |
| `suggestedPollAfterSeconds` | entier ou null                                                                      | Oui              |
| `baselineRunId`             | chaîne ou null                                                                      | Oui              |
| `open`                      | objet                                                                               | Oui              |
| `findingCount`              | entier                                                                              | Oui              |
| `progress`                  | objet ou null                                                                       | Oui              |
| `coverage`                  | objet                                                                               | Oui              |
| `caveats`                   | liste de chaînes                                                                    | Oui              |
| `outcome`                   | objet ou null                                                                       | Oui              |
| `exposureCheck`             | objet                                                                               | Non              |

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

Une page de points à corriger d’une analyse.

* Autorisation : `read`
* Outil MCP : [`lockpick_list_findings`](/fr/docs/mcp/tools#lockpick_list_findings)
* Envoyez `x-lockpick-agent-features: finding-code` pour recevoir le `code` de chaque constat (`LP-` et six caractères, tel que le rapport web l'affiche). Sans l'en-tête, la réponse n'a pas de `code`, la forme qu'attendent les anciens clients.

**Paramètres de requête**

| Champ      | Type                                          | Requis |
| ---------- | --------------------------------------------- | ------ |
| `state`    | `attention`, `information`, `unknown`, `pass` | Non    |
| `severity` | `critical`, `high`, `medium`, `low`, `info`   | Non    |
| `all`      | booléen ou `true`, `false`                    | Non    |
| `limit`    | entier                                        | Non    |
| `cursor`   | chaîne                                        | Non    |

**data**

| Champ        | Type           | Toujours présent |
| ------------ | -------------- | ---------------- |
| `items`      | liste d’objets | Oui              |
| `nextCursor` | chaîne ou null | Oui              |

**Chaque élément**

| Champ               | Type                                                  | Toujours présent |
| ------------------- | ----------------------------------------------------- | ---------------- |
| `id`                | chaîne                                                | Oui              |
| `code`              | chaîne                                                | Non              |
| `runId`             | chaîne                                                | Oui              |
| `kind`              | `pulse`, `box` (Deep, nom hérité)                     | Oui              |
| `severity`          | `critical`, `high`, `medium`, `low`, `info`           | Oui              |
| `state`             | `attention`, `information`, `unknown`, `pass`         | Oui              |
| `category`          | chaîne                                                | Oui              |
| `title`             | chaîne                                                | Oui              |
| `meaning`           | chaîne                                                | Oui              |
| `fix`               | chaîne ou null                                        | Oui              |
| `confidence`        | chaîne                                                | Oui              |
| `evidence`          | liste de chaînes                                      | Oui              |
| `sources`           | liste de chaînes                                      | Oui              |
| `steps`             | liste de chaînes                                      | Oui              |
| `webPath`           | chaîne                                                | Oui              |
| `webUrl`            | chaîne                                                | Oui              |
| `evidenceTrust`     | chaîne                                                | Oui              |
| `evidenceTruncated` | booléen                                               | Oui              |
| `verdict`           | `confirmed`, `needs_review`, `not_actionable` ou null | Non              |
| `certainty`         | `high`, `medium`, `low` ou null                       | Non              |
| `exploitability`    | `direct`, `conditional`, `hygiene`, `none` ou null    | Non              |
| `proof`             | objet ou null                                         | Non              |
| `proofGap`          | chaîne ou null                                        | Non              |
| `urgency`           | `now`, `week`, `later`, `none`                        | Non              |
| `howSure`           | `confirmed`, `likely`, `possible` ou null             | Non              |

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

Un point à corriger avec ses preuves masquées.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_finding`](/fr/docs/mcp/tools#lockpick_get_finding)
* Envoyez `x-lockpick-agent-features: finding-code` pour recevoir le `code` de chaque constat (`LP-` et six caractères, tel que le rapport web l'affiche). Sans l'en-tête, la réponse n'a pas de `code`, la forme qu'attendent les anciens clients.

**data**

| Champ               | Type                                                  | Toujours présent |
| ------------------- | ----------------------------------------------------- | ---------------- |
| `id`                | chaîne                                                | Oui              |
| `code`              | chaîne                                                | Non              |
| `runId`             | chaîne                                                | Oui              |
| `kind`              | `pulse`, `box` (Deep, nom hérité)                     | Oui              |
| `severity`          | `critical`, `high`, `medium`, `low`, `info`           | Oui              |
| `state`             | `attention`, `information`, `unknown`, `pass`         | Oui              |
| `category`          | chaîne                                                | Oui              |
| `title`             | chaîne                                                | Oui              |
| `meaning`           | chaîne                                                | Oui              |
| `fix`               | chaîne ou null                                        | Oui              |
| `confidence`        | chaîne                                                | Oui              |
| `evidence`          | liste de chaînes                                      | Oui              |
| `sources`           | liste de chaînes                                      | Oui              |
| `steps`             | liste de chaînes                                      | Oui              |
| `webPath`           | chaîne                                                | Oui              |
| `webUrl`            | chaîne                                                | Oui              |
| `evidenceTrust`     | chaîne                                                | Oui              |
| `evidenceTruncated` | booléen                                               | Oui              |
| `verdict`           | `confirmed`, `needs_review`, `not_actionable` ou null | Non              |
| `certainty`         | `high`, `medium`, `low` ou null                       | Non              |
| `exploitability`    | `direct`, `conditional`, `hygiene`, `none` ou null    | Non              |
| `proof`             | objet ou null                                         | Non              |
| `proofGap`          | chaîne ou null                                        | Non              |
| `urgency`           | `now`, `week`, `later`, `none`                        | Non              |
| `howSure`           | `confirmed`, `likely`, `possible` ou null             | Non              |

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

Une partie du brief de correction d’une analyse.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_repair_brief`](/fr/docs/mcp/tools#lockpick_get_repair_brief)

**Paramètres de requête**

| Champ       | Type                                                                                      | Requis |
| ----------- | ----------------------------------------------------------------------------------------- | ------ |
| `findingId` | chaîne                                                                                    | Non    |
| `agent`     | `claude-code`, `codex`, `cursor`, `vscode`, `opencode`, `lovable`, `bolt`, `replit`, `v0` | Non    |
| `cursor`    | chaîne                                                                                    | Non    |

**data**

| Champ        | Type             | Toujours présent |
| ------------ | ---------------- | ---------------- |
| `scanId`     | chaîne           | Oui              |
| `findingIds` | liste de chaînes | Oui              |
| `saved`      | booléen          | Oui              |
| `markdown`   | chaîne           | Oui              |
| `nextCursor` | chaîne ou null   | Oui              |
| `complete`   | booléen          | Oui              |
| `webUrl`     | chaîne           | Oui              |

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

Ce qui a changé entre une analyse et celle qu’elle recontrôle.

* Autorisation : `read`
* Outil MCP : [`lockpick_compare_scans`](/fr/docs/mcp/tools#lockpick_compare_scans)
* Envoyez `x-lockpick-agent-features: finding-code` pour recevoir le `code` de chaque constat (`LP-` et six caractères, tel que le rapport web l'affiche). Sans l'en-tête, la réponse n'a pas de `code`, la forme qu'attendent les anciens clients.

**data**

| Champ           | Type           | Toujours présent |
| --------------- | -------------- | ---------------- |
| `runId`         | chaîne         | Oui              |
| `baselineRunId` | chaîne         | Oui              |
| `error`         | chaîne ou null | Oui              |
| `changes`       | liste d’objets | Oui              |
| `webUrl`        | chaîne         | Oui              |

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

Relancer le contrôle DNS gratuit d’une analyse. N’envoie rien au site.

* Autorisation : `pulse`
* Outil MCP : [`lockpick_recheck_dns`](/fr/docs/mcp/tools#lockpick_recheck_dns)

**Corps**

| Champ            | Type   | Requis |
| ---------------- | ------ | ------ |
| `findingId`      | chaîne | Oui    |
| `idempotencyKey` | chaîne | Oui    |

**data**

| Champ                    | Type             | Toujours présent |
| ------------------------ | ---------------- | ---------------- |
| `scanId`                 | chaîne           | Oui              |
| `findingIds`             | liste de chaînes | Oui              |
| `pending`                | objet ou null    | Oui              |
| `checkedAt`              | chaîne ou null   | Oui              |
| `outcomes`               | liste d’objets   | Oui              |
| `nextAllowedAt`          | chaîne ou null   | Oui              |
| `failedAt`               | chaîne ou null   | Oui              |
| `originalGradeUnchanged` | booléen          | Oui              |

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

Le dernier contrôle DNS relancé d’une analyse.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_dns_recheck`](/fr/docs/mcp/tools#lockpick_get_dns_recheck)

**data**

| Champ                    | Type             | Toujours présent |
| ------------------------ | ---------------- | ---------------- |
| `scanId`                 | chaîne           | Oui              |
| `findingIds`             | liste de chaînes | Oui              |
| `pending`                | objet ou null    | Oui              |
| `checkedAt`              | chaîne ou null   | Oui              |
| `outcomes`               | liste d’objets   | Oui              |
| `nextAllowedAt`          | chaîne ou null   | Oui              |
| `failedAt`               | chaîne ou null   | Oui              |
| `originalGradeUnchanged` | booléen          | Oui              |

### POST /agent/quick-checks

Lancer un contrôle rapide gratuit d’une page d’accueil.

* Autorisation : `pulse`
* Outil MCP : [`lockpick_quick_check`](/fr/docs/mcp/tools#lockpick_quick_check)

**Corps**

| Champ            | Type   | Requis |
| ---------------- | ------ | ------ |
| `url`            | chaîne | Oui    |
| `idempotencyKey` | chaîne | Oui    |

**data**

| Champ                       | Type                                       | Toujours présent |
| --------------------------- | ------------------------------------------ | ---------------- |
| `checkId`                   | chaîne                                     | Oui              |
| `status`                    | `queued`, `running`, `succeeded`, `failed` | Oui              |
| `reused`                    | booléen                                    | Oui              |
| `headline`                  | objet                                      | Oui              |
| `summary`                   | chaîne ou null                             | Oui              |
| `checks`                    | liste d’objets                             | Oui              |
| `webUrl`                    | chaîne                                     | Oui              |
| `suggestedPollAfterSeconds` | entier ou null                             | Oui              |

### POST /agent/repository-checks

Vérifier un dépôt GitHub public (un skill, un plugin, un serveur MCP ou une application) avant de l’installer.

* Autorisation : `pulse`
* Outil MCP : [`lockpick_check_repository`](/fr/docs/mcp/tools#lockpick_check_repository)

**Corps**

| Champ            | Type           | Requis |
| ---------------- | -------------- | ------ |
| `url`            | chaîne         | Oui    |
| `mode`           | `skill`, `app` | Non    |
| `depth`          | `free`, `deep` | Non    |
| `idempotencyKey` | chaîne         | Oui    |

**data**

| Champ                       | Type                                                                                                                 | Toujours présent |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `checkId`                   | chaîne                                                                                                               | Oui              |
| `status`                    | `queued`, `running`, `succeeded`, `failed`                                                                           | Oui              |
| `reused`                    | booléen                                                                                                              | Oui              |
| `repository`                | objet                                                                                                                | Oui              |
| `mode`                      | `skill`, `app` ou null                                                                                               | Oui              |
| `kind`                      | chaîne ou null                                                                                                       | Oui              |
| `verdict`                   | `safe`, `caution`, `do_not_install` ou null                                                                          | Oui              |
| `appRisk`                   | `low`, `elevated`, `high` ou null                                                                                    | Oui              |
| `score`                     | entier ou null                                                                                                       | Oui              |
| `summary`                   | chaîne ou null                                                                                                       | Oui              |
| `plainSummary`              | chaîne ou null                                                                                                       | Oui              |
| `findings`                  | liste d’objets                                                                                                       | Oui              |
| `moreFindings`              | entier                                                                                                               | Oui              |
| `coverage`                  | objet ou null                                                                                                        | Oui              |
| `failure`                   | `not-found`, `ref-not-found`, `empty`, `too-large`, `rate-limited`, `unavailable`, `timeout`, `engine-error` ou null | Oui              |
| `webUrl`                    | chaîne                                                                                                               | Oui              |
| `suggestedPollAfterSeconds` | entier ou null                                                                                                       | Oui              |

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

Une vérification de dépôt et ses constats.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_repository_check`](/fr/docs/mcp/tools#lockpick_get_repository_check)

**data**

| Champ                       | Type                                                                                                                 | Toujours présent |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------- | ---------------- |
| `checkId`                   | chaîne                                                                                                               | Oui              |
| `status`                    | `queued`, `running`, `succeeded`, `failed`                                                                           | Oui              |
| `reused`                    | booléen                                                                                                              | Oui              |
| `repository`                | objet                                                                                                                | Oui              |
| `mode`                      | `skill`, `app` ou null                                                                                               | Oui              |
| `kind`                      | chaîne ou null                                                                                                       | Oui              |
| `verdict`                   | `safe`, `caution`, `do_not_install` ou null                                                                          | Oui              |
| `appRisk`                   | `low`, `elevated`, `high` ou null                                                                                    | Oui              |
| `score`                     | entier ou null                                                                                                       | Oui              |
| `summary`                   | chaîne ou null                                                                                                       | Oui              |
| `plainSummary`              | chaîne ou null                                                                                                       | Oui              |
| `findings`                  | liste d’objets                                                                                                       | Oui              |
| `moreFindings`              | entier                                                                                                               | Oui              |
| `coverage`                  | objet ou null                                                                                                        | Oui              |
| `failure`                   | `not-found`, `ref-not-found`, `empty`, `too-large`, `rate-limited`, `unavailable`, `timeout`, `engine-error` ou null | Oui              |
| `webUrl`                    | chaîne                                                                                                               | Oui              |
| `suggestedPollAfterSeconds` | entier ou null                                                                                                       | Oui              |

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

Un contrôle rapide et son résultat.

* Autorisation : `read`
* Outil MCP : [`lockpick_get_quick_check`](/fr/docs/mcp/tools#lockpick_get_quick_check)

**data**

| Champ                       | Type                                       | Toujours présent |
| --------------------------- | ------------------------------------------ | ---------------- |
| `checkId`                   | chaîne                                     | Oui              |
| `status`                    | `queued`, `running`, `succeeded`, `failed` | Oui              |
| `reused`                    | booléen                                    | Oui              |
| `headline`                  | objet                                      | Oui              |
| `summary`                   | chaîne ou null                             | Oui              |
| `checks`                    | liste d’objets                             | Oui              |
| `webUrl`                    | chaîne                                     | Oui              |
| `suggestedPollAfterSeconds` | entier ou null                             | Oui              |

### GET /agent/docs/search

Rechercher dans la documentation publique de Lockpick.

* Autorisation : `read`
* Outil MCP : [`lockpick_search_docs`](/fr/docs/mcp/tools#lockpick_search_docs)

**Paramètres de requête**

| Champ   | Type   | Requis |
| ------- | ------ | ------ |
| `query` | chaîne | Oui    |
| `limit` | entier | Non    |

**data**

| Champ     | Type           | Toujours présent |
| --------- | -------------- | ---------------- |
| `query`   | chaîne         | Oui              |
| `results` | liste d’objets | Oui              |

### GET /agent/docs/page

Une page de la documentation publique en Markdown, par parties si elle est longue.

* Autorisation : `read`
* Outil MCP : [`lockpick_read_doc`](/fr/docs/mcp/tools#lockpick_read_doc)

**Paramètres de requête**

| Champ    | Type   | Requis |
| -------- | ------ | ------ |
| `path`   | chaîne | Non    |
| `cursor` | chaîne | Non    |

**data**

| Champ         | Type           | Toujours présent |
| ------------- | -------------- | ---------------- |
| `path`        | chaîne         | Oui              |
| `title`       | chaîne         | Oui              |
| `description` | chaîne ou null | Oui              |
| `url`         | chaîne         | Oui              |
| `markdownUrl` | chaîne         | Oui              |
| `markdown`    | chaîne         | Oui              |
| `nextCursor`  | chaîne ou null | Oui              |
| `complete`    | booléen        | Oui              |

## Connexion par appareil

Comment `lockpick login` obtient une clé : il demande un code, la personne l’autorise dans le navigateur, et l’interrogation renvoie la clé.

### POST /device/code

Démarrer une connexion par appareil et obtenir un code à autoriser dans le navigateur.

* Autorisation : aucune, fait partie de la connexion

**Corps**

| Champ        | Type                                       | Requis |
| ------------ | ------------------------------------------ | ------ |
| `clientName` | chaîne                                     | Non    |
| `hostname`   | chaîne                                     | Non    |
| `platform`   | chaîne                                     | Non    |
| `version`    | chaîne                                     | Non    |
| `scopes`     | liste de `pulse`, `sites`, `deep`, `local` | Non    |

**data**

| Champ                     | Type   | Toujours présent |
| ------------------------- | ------ | ---------------- |
| `deviceCode`              | chaîne | Oui              |
| `userCode`                | chaîne | Oui              |
| `verificationUri`         | chaîne | Oui              |
| `verificationUriComplete` | chaîne | Oui              |
| `expiresIn`               | entier | Oui              |
| `interval`                | entier | Oui              |

### POST /device/token

Interroger une connexion par appareil jusqu’à ce que la personne l’autorise, puis recevoir la clé.

* Autorisation : aucune, fait partie de la connexion

**Corps**

| Champ        | Type   | Requis |
| ------------ | ------ | ------ |
| `deviceCode` | chaîne | Oui    |

## Anciennes routes

Les routes CLI d’origine, utilisées par la CLI 0.2. Elles restent inchangées, et les nouvelles intégrations doivent utiliser l’API de l’agent ci-dessus.

<details>
  <summary>
    Routes CLI d’origine
  </summary>

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

  Autoriser une évaluation locale avant d’inspecter le dépôt. Aucun code source ni résultat n’est envoyé.

  * Autorisation : `local`

  **Corps**

  | Champ                 | Type                                                                                                                                                                                                | Requis |
  | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
  | `cliVersion`          | chaîne                                                                                                                                                                                              | Oui    |
  | `scannerVersion`      | chaîne                                                                                                                                                                                              | Oui    |
  | `rulesetVersion`      | chaîne                                                                                                                                                                                              | Oui    |
  | `reportSchemaVersion` | chaîne                                                                                                                                                                                              | Oui    |
  | `checks`              | liste de `tracked-secrets`, `public-environment`, `browser-artifacts`, `supabase-client`, `supabase-migrations`, `git-history`, `docker-files`, `docker-values`, `actions-injection`, `source-maps` | Oui    |

  **data**

  | Champ           | Type           | Toujours présent |
  | --------------- | -------------- | ---------------- |
  | `admissionId`   | chaîne         | Oui              |
  | `projectId`     | chaîne         | Oui              |
  | `workspaceId`   | chaîne         | Oui              |
  | `policyVersion` | chaîne         | Oui              |
  | `startBy`       | chaîne         | Oui              |
  | `checks`        | liste d’objets | Oui              |

  **GET /me**

  La personne, l’espace de travail et la clé derrière cet identifiant.

  * Autorisation : `read`

  **data**

  | Champ       | Type  | Toujours présent |
  | ----------- | ----- | ---------------- |
  | `user`      | objet | Oui              |
  | `workspace` | objet | Oui              |
  | `key`       | objet | Oui              |

  **DELETE /me**

  Révoquer la clé présentée.

  * Autorisation : toute clé valide

  **data**

  | Champ     | Type    | Toujours présent |
  | --------- | ------- | ---------------- |
  | `revoked` | booléen | Oui              |

  **GET /projects**

  Sites (projets) avec leurs dernières analyses Pulse et Deep.

  * Autorisation : `read`

  **Chaque élément de data**

  | Champ         | Type           | Toujours présent |
  | ------------- | -------------- | ---------------- |
  | `id`          | chaîne         | Oui              |
  | `name`        | chaîne         | Oui              |
  | `status`      | chaîne         | Oui              |
  | `baseDomain`  | chaîne ou null | Oui              |
  | `latestPulse` | objet ou null  | Oui              |
  | `latestDeep`  | objet ou null  | Non              |
  | `latestBox`   | objet ou null  | Oui              |
  | `webPath`     | chaîne         | Oui              |
  | `webUrl`      | chaîne         | Non              |

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

  Derniers résultats d’un site et ce qui a changé.

  * Autorisation : `read`

  **data**

  | Champ            | Type             | Toujours présent |
  | ---------------- | ---------------- | ---------------- |
  | `project`        | objet            | Oui              |
  | `latestPulse`    | objet ou null    | Oui              |
  | `latestDeep`     | objet ou null    | Non              |
  | `latestBox`      | objet ou null    | Oui              |
  | `lastComparison` | objet ou null    | Oui              |
  | `caveats`        | liste de chaînes | Oui              |

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

  Lancer une analyse Pulse sur un site, ou un nouveau contrôle de la dernière.

  * Autorisation : `pulse`
  * Répond 201 en cas de succès

  **Corps**

  | Champ            | Type   | Requis |
  | ---------------- | ------ | ------ |
  | `idempotencyKey` | chaîne | Oui    |

  **data**

  | Champ                       | Type                                                                                | Toujours présent |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | chaîne                                                                              | Oui              |
  | `kind`                      | `pulse`, `box` (Deep, nom hérité)                                                   | Oui              |
  | `projectId`                 | chaîne                                                                              | Oui              |
  | `target`                    | chaîne                                                                              | Oui              |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Oui              |
  | `mode`                      | `autonomous`, `authenticated`, `active` ou null                                     | Oui              |
  | `createdAt`                 | chaîne ou null                                                                      | Oui              |
  | `finishedAt`                | chaîne ou null                                                                      | Oui              |
  | `webPath`                   | chaîne                                                                              | Oui              |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` ou null                                                 | Non              |
  | `headline`                  | objet                                                                               | Non              |
  | `webUrl`                    | chaîne                                                                              | Non              |
  | `suggestedPollAfterSeconds` | entier ou null                                                                      | Non              |
  | `baselineRunId`             | chaîne ou null                                                                      | Oui              |
  | `open`                      | objet                                                                               | Oui              |
  | `findingCount`              | entier                                                                              | Oui              |
  | `progress`                  | objet ou null                                                                       | Oui              |
  | `coverage`                  | objet                                                                               | Oui              |
  | `caveats`                   | liste de chaînes                                                                    | Oui              |
  | `outcome`                   | objet ou null                                                                       | Non              |
  | `exposureCheck`             | objet ou null                                                                       | Non              |

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

  Lancer l’analyse Deep d’une version avec une clé CI créée pour ce site, avec l’autorisation Deep.

  * Autorisation : `deep`
  * Répond 201 en cas de succès

  **Corps**

  | Champ            | Type   | Requis |
  | ---------------- | ------ | ------ |
  | `idempotencyKey` | chaîne | Oui    |

  **data**

  | Champ                       | Type                                                                                | Toujours présent |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | chaîne                                                                              | Oui              |
  | `kind`                      | `pulse`, `box` (Deep, nom hérité)                                                   | Oui              |
  | `projectId`                 | chaîne                                                                              | Oui              |
  | `target`                    | chaîne                                                                              | Oui              |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Oui              |
  | `mode`                      | `autonomous`, `authenticated`, `active` ou null                                     | Oui              |
  | `createdAt`                 | chaîne ou null                                                                      | Oui              |
  | `finishedAt`                | chaîne ou null                                                                      | Oui              |
  | `webPath`                   | chaîne                                                                              | Oui              |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` ou null                                                 | Non              |
  | `headline`                  | objet                                                                               | Non              |
  | `webUrl`                    | chaîne                                                                              | Non              |
  | `suggestedPollAfterSeconds` | entier ou null                                                                      | Non              |
  | `baselineRunId`             | chaîne ou null                                                                      | Oui              |
  | `open`                      | objet                                                                               | Oui              |
  | `findingCount`              | entier                                                                              | Oui              |
  | `progress`                  | objet ou null                                                                       | Oui              |
  | `coverage`                  | objet                                                                               | Oui              |
  | `caveats`                   | liste de chaînes                                                                    | Oui              |
  | `outcome`                   | objet ou null                                                                       | Non              |
  | `exposureCheck`             | objet ou null                                                                       | Non              |

  **GET /runs**

  Analyses Pulse et Deep, les plus récentes en premier.

  * Autorisation : `read`

  **Paramètres de requête**

  | Champ             | Type                                                                                | Requis |
  | ----------------- | ----------------------------------------------------------------------------------- | ------ |
  | `projectId`       | chaîne                                                                              | Non    |
  | `kind`            | `pulse`, `box` (Deep, nom hérité)                                                   | Non    |
  | `assessmentLevel` | `pulse`, `standard`, `deep`                                                         | Non    |
  | `status`          | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Non    |
  | `limit`           | entier                                                                              | Non    |

  **Chaque élément de data**

  | Champ                       | Type                                                                                | Toujours présent |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | chaîne                                                                              | Oui              |
  | `kind`                      | `pulse`, `box` (Deep, nom hérité)                                                   | Oui              |
  | `projectId`                 | chaîne                                                                              | Oui              |
  | `target`                    | chaîne                                                                              | Oui              |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Oui              |
  | `mode`                      | `autonomous`, `authenticated`, `active` ou null                                     | Oui              |
  | `createdAt`                 | chaîne ou null                                                                      | Oui              |
  | `finishedAt`                | chaîne ou null                                                                      | Oui              |
  | `webPath`                   | chaîne                                                                              | Oui              |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` ou null                                                 | Non              |
  | `headline`                  | objet                                                                               | Non              |
  | `webUrl`                    | chaîne                                                                              | Non              |
  | `suggestedPollAfterSeconds` | entier ou null                                                                      | Non              |

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

  Une analyse avec son résumé et ses totaux.

  * Autorisation : `read`

  **data**

  | Champ                       | Type                                                                                | Toujours présent |
  | --------------------------- | ----------------------------------------------------------------------------------- | ---------------- |
  | `id`                        | chaîne                                                                              | Oui              |
  | `kind`                      | `pulse`, `box` (Deep, nom hérité)                                                   | Oui              |
  | `projectId`                 | chaîne                                                                              | Oui              |
  | `target`                    | chaîne                                                                              | Oui              |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | Oui              |
  | `mode`                      | `autonomous`, `authenticated`, `active` ou null                                     | Oui              |
  | `createdAt`                 | chaîne ou null                                                                      | Oui              |
  | `finishedAt`                | chaîne ou null                                                                      | Oui              |
  | `webPath`                   | chaîne                                                                              | Oui              |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` ou null                                                 | Non              |
  | `headline`                  | objet                                                                               | Non              |
  | `webUrl`                    | chaîne                                                                              | Non              |
  | `suggestedPollAfterSeconds` | entier ou null                                                                      | Non              |
  | `baselineRunId`             | chaîne ou null                                                                      | Oui              |
  | `open`                      | objet                                                                               | Oui              |
  | `findingCount`              | entier                                                                              | Oui              |
  | `progress`                  | objet ou null                                                                       | Oui              |
  | `coverage`                  | objet                                                                               | Oui              |
  | `caveats`                   | liste de chaînes                                                                    | Oui              |
  | `outcome`                   | objet ou null                                                                       | Non              |
  | `exposureCheck`             | objet ou null                                                                       | Non              |

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

  Points à corriger d’une analyse.

  * Autorisation : `read`

  **Paramètres de requête**

  | Champ      | Type                                          | Requis |
  | ---------- | --------------------------------------------- | ------ |
  | `severity` | `critical`, `high`, `medium`, `low`, `info`   | Non    |
  | `state`    | `attention`, `information`, `unknown`, `pass` | Non    |
  | `all`      | `true`, `false`                               | Non    |

  **Chaque élément de data**

  | Champ            | Type                                                  | Toujours présent |
  | ---------------- | ----------------------------------------------------- | ---------------- |
  | `id`             | chaîne                                                | Oui              |
  | `code`           | chaîne                                                | Non              |
  | `runId`          | chaîne                                                | Oui              |
  | `kind`           | `pulse`, `box` (Deep, nom hérité)                     | Oui              |
  | `severity`       | `critical`, `high`, `medium`, `low`, `info`           | Oui              |
  | `state`          | `attention`, `information`, `unknown`, `pass`         | Oui              |
  | `category`       | chaîne                                                | Oui              |
  | `title`          | chaîne                                                | Oui              |
  | `meaning`        | chaîne                                                | Oui              |
  | `fix`            | chaîne ou null                                        | Oui              |
  | `confidence`     | chaîne                                                | Oui              |
  | `evidence`       | liste de chaînes                                      | Oui              |
  | `sources`        | liste de chaînes                                      | Oui              |
  | `steps`          | liste de chaînes                                      | Oui              |
  | `webPath`        | chaîne                                                | Oui              |
  | `webUrl`         | chaîne                                                | Non              |
  | `verdict`        | `confirmed`, `needs_review`, `not_actionable` ou null | Non              |
  | `certainty`      | `high`, `medium`, `low` ou null                       | Non              |
  | `exploitability` | `direct`, `conditional`, `hygiene`, `none` ou null    | Non              |
  | `proof`          | objet ou null                                         | Non              |
  | `proofGap`       | chaîne ou null                                        | Non              |
  | `urgency`        | `now`, `week`, `later`, `none`                        | Non              |
  | `howSure`        | `confirmed`, `likely`, `possible` ou null             | Non              |

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

  Un point à corriger avec ses preuves masquées.

  * Autorisation : `read`

  **data**

  | Champ            | Type                                                  | Toujours présent |
  | ---------------- | ----------------------------------------------------- | ---------------- |
  | `id`             | chaîne                                                | Oui              |
  | `code`           | chaîne                                                | Non              |
  | `runId`          | chaîne                                                | Oui              |
  | `kind`           | `pulse`, `box` (Deep, nom hérité)                     | Oui              |
  | `severity`       | `critical`, `high`, `medium`, `low`, `info`           | Oui              |
  | `state`          | `attention`, `information`, `unknown`, `pass`         | Oui              |
  | `category`       | chaîne                                                | Oui              |
  | `title`          | chaîne                                                | Oui              |
  | `meaning`        | chaîne                                                | Oui              |
  | `fix`            | chaîne ou null                                        | Oui              |
  | `confidence`     | chaîne                                                | Oui              |
  | `evidence`       | liste de chaînes                                      | Oui              |
  | `sources`        | liste de chaînes                                      | Oui              |
  | `steps`          | liste de chaînes                                      | Oui              |
  | `webPath`        | chaîne                                                | Oui              |
  | `webUrl`         | chaîne                                                | Non              |
  | `verdict`        | `confirmed`, `needs_review`, `not_actionable` ou null | Non              |
  | `certainty`      | `high`, `medium`, `low` ou null                       | Non              |
  | `exploitability` | `direct`, `conditional`, `hygiene`, `none` ou null    | Non              |
  | `proof`          | objet ou null                                         | Non              |
  | `proofGap`       | chaîne ou null                                        | Non              |
  | `urgency`        | `now`, `week`, `later`, `none`                        | Non              |
  | `howSure`        | `confirmed`, `likely`, `possible` ou null             | Non              |

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

  Les corrections d’une analyse dans un seul brief Markdown.

  * Autorisation : `read`

  **Paramètres de requête**

  | Champ       | Type                                                                                      | Requis |
  | ----------- | ----------------------------------------------------------------------------------------- | ------ |
  | `findingId` | chaîne                                                                                    | Non    |
  | `agent`     | `claude-code`, `codex`, `cursor`, `vscode`, `opencode`, `lovable`, `bolt`, `replit`, `v0` | Non    |

  **data**

  | Champ        | Type             | Toujours présent |
  | ------------ | ---------------- | ---------------- |
  | `runId`      | chaîne           | Oui              |
  | `findingIds` | liste de chaînes | Oui              |
  | `saved`      | booléen          | Oui              |
  | `markdown`   | chaîne           | Oui              |
  | `webUrl`     | chaîne           | Non              |

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

  Ce qui a changé entre une analyse et la précédente.

  * Autorisation : `read`

  **data**

  | Champ           | Type           | Toujours présent |
  | --------------- | -------------- | ---------------- |
  | `runId`         | chaîne         | Oui              |
  | `baselineRunId` | chaîne         | Oui              |
  | `error`         | chaîne ou null | Oui              |
  | `changes`       | liste d’objets | Oui              |
  | `webUrl`        | chaîne         | Non              |
</details>