# 참고

모든 Lockpick API 작업, 필요한 권한, 입력과 응답입니다. API 자체에서 생성되었습니다. 버전 1, 베타.

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

버전 1, 베타입니다. 모든 경로는 `/api/cli/v1`로 시작하고, 모든 요청은 베어러 토큰으로 키를 함께 보내며, 모든 응답은 `{ data, error }`입니다. 전체 설명은 [OpenAPI 3.1](/openapi.json)로도 제공됩니다.

## 에이전트 API

호스팅된 MCP 도구 뒤에서 동작하는 서버 작업입니다. 새로운 연동은 이 작업들을 사용해야 합니다. `lockpick_wait_for_scan`은 `GET /agent/scans/{scanId}`를 반복해서 확인하고, `lockpick_evaluate_scan`은 같은 스캔을 읽고 클라이언트에서 평가 정책을 적용합니다. 이 두 조합 도구에는 별도의 HTTP 엔드포인트가 없습니다. 스크립트는 스캔 상태를 반복해서 확인하고, 완료 시각, 검사 범위, 열린 문제 수를 자신의 정책에 비추어 평가할 수 있습니다.

### GET /agent/me

이 자격 증명의 사용자, 워크스페이스, 범위, 만료 시각, 그리고 시작할 수 있는 작업입니다.

* 권한: `read`
* MCP 도구: [`lockpick_whoami`](/ko/docs/mcp/tools#lockpick_whoami)

**data**

| 필드             | 타입 | 항상 포함 |
| -------------- | -- | ----- |
| `user`         | 객체 | 예     |
| `workspace`    | 객체 | 예     |
| `credential`   | 객체 | 예     |
| `capabilities` | 객체 | 예     |

### GET /agent/allowance

이번 달 남은 무료 스캔, 초기화 날짜, 크레딧입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_allowance`](/ko/docs/mcp/tools#lockpick_get_allowance)

**data**

| 필드                  | 타입                                                       | 항상 포함 |
| ------------------- | -------------------------------------------------------- | ----- |
| `accessSource`      | `community`, `stripe`(이전 결제 값), `pilot`(이전, 내부용), `none` | 예     |
| `accountingMode`    | `pilot`(이전, 내부용), `credits`(이전, 내부용), `unmetered`        | 예     |
| `pulse`             | 객체                                                       | 예     |
| `deep`              | 객체                                                       | 예     |
| `creditBalance`     | 정수 또는 null                                               | 예     |
| `freeSiteId`        | 문자열 또는 null                                              | 예     |
| `freeSiteVisible`   | 불리언                                                      | 예     |
| `canSwitchFreeSite` | 불리언                                                      | 예     |

### GET /agent/monitor

승인된 사이트에 대해 현재 보안 정보를 살펴보고 일치 항목을 설명합니다.

* 권한: `read`
* MCP 도구: [`lockpick_monitor`](/ko/docs/mcp/tools#lockpick_monitor)

**쿼리**

| 필드           | 타입                                                    | 필수  |
| ------------ | ----------------------------------------------------- | --- |
| `view`       | `latest`, `sites`, `exploited`, `following`           | 아니요 |
| `kind`       | `all`, `vulnerability`, `malicious_package`           | 아니요 |
| `q`          | 문자열                                                   | 아니요 |
| `ecosystem`  | `all`, `npm`, `pypi`, `composer`, `wordpress`         | 아니요 |
| `severity`   | `all`, `critical`, `high`, `medium`, `low`, `unknown` | 아니요 |
| `days`       | 숫자                                                    | 아니요 |
| `cursor`     | 문자열                                                   | 아니요 |
| `limit`      | 정수                                                    | 아니요 |
| `siteId`     | 문자열                                                   | 아니요 |
| `advisoryId` | 문자열                                                   | 아니요 |

**data**

| 필드            | 타입          | 항상 포함 |
| ------------- | ----------- | ----- |
| `items`       | 객체 목록       | 예     |
| `nextCursor`  | 문자열 또는 null | 예     |
| `limitations` | 문자열 목록      | 예     |

**각 항목**

| 필드            | 타입                                             | 항상 포함 |
| ------------- | ---------------------------------------------- | ----- |
| `id`          | 문자열                                            | 예     |
| `title`       | 문자열                                            | 예     |
| `source`      | 문자열                                            | 예     |
| `kind`        | `vulnerability`, `malicious_package`           | 예     |
| `severity`    | `critical`, `high`, `medium`, `low`, `unknown` | 예     |
| `provenance`  | 객체 목록                                          | 예     |
| `withdrawnAt` | 문자열 또는 null                                    | 아니요   |
| `publishedAt` | 문자열                                            | 예     |
| `exploited`   | 불리언                                            | 예     |
| `ids`         | 문자열 목록                                         | 예     |
| `tech`        | 객체 목록                                          | 예     |
| `epss`        | 객체 또는 null                                     | 아니요   |
| `cvss`        | 객체 또는 null                                     | 아니요   |
| `attribution` | 문자열 또는 null                                    | 예     |
| `references`  | 문자열 목록                                         | 예     |
| `packages`    | 객체 목록                                          | 예     |
| `sites`       | 객체 목록                                          | 예     |

### GET /agent/sites

최신 스캔과 함께 사이트 목록을 한 페이지씩 보여 줍니다.

* 권한: `read`
* MCP 도구: [`lockpick_list_sites`](/ko/docs/mcp/tools#lockpick_list_sites)

**쿼리**

| 필드       | 타입  | 필수  |
| -------- | --- | --- |
| `limit`  | 정수  | 아니요 |
| `cursor` | 문자열 | 아니요 |

**data**

| 필드           | 타입          | 항상 포함 |
| ------------ | ----------- | ----- |
| `items`      | 객체 목록       | 예     |
| `nextCursor` | 문자열 또는 null | 예     |

**각 항목**

| 필드            | 타입          | 항상 포함 |
| ------------- | ----------- | ----- |
| `id`          | 문자열         | 예     |
| `name`        | 문자열         | 예     |
| `status`      | 문자열         | 예     |
| `baseDomain`  | 문자열 또는 null | 예     |
| `latestPulse` | 객체 또는 null  | 예     |
| `latestDeep`  | 객체 또는 null  | 예     |
| `latestBox`   | 객체 또는 null  | 예     |
| `webPath`     | 문자열         | 예     |
| `webUrl`      | 문자열         | 예     |

### POST /agent/sites

사이트를 추가하거나, 같은 주소의 사이트가 있으면 그 사이트를 반환합니다.

* 권한: `sites`
* MCP 도구: [`lockpick_add_site`](/ko/docs/mcp/tools#lockpick_add_site)

**본문**

| 필드               | 타입  | 필수  |
| ---------------- | --- | --- |
| `url`            | 문자열 | 예   |
| `name`           | 문자열 | 아니요 |
| `idempotencyKey` | 문자열 | 예   |

**data**

| 필드        | 타입  | 항상 포함 |
| --------- | --- | ----- |
| `site`    | 객체  | 예     |
| `created` | 불리언 | 예     |

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

사이트 하나의 현재 상태입니다. 최신 스캔과 다음에 할 일을 보여 줍니다.

* 권한: `read`
* MCP 도구: [`lockpick_site_status`](/ko/docs/mcp/tools#lockpick_site_status)

**data**

| 필드               | 타입         | 항상 포함 |
| ---------------- | ---------- | ----- |
| `site`           | 객체         | 예     |
| `latestPulse`    | 객체 또는 null | 예     |
| `latestDeep`     | 객체 또는 null | 예     |
| `latestBox`      | 객체 또는 null | 예     |
| `lastComparison` | 객체 또는 null | 예     |
| `caveats`        | 문자열 목록     | 예     |
| `relevant`       | 객체 목록      | 아니요   |
| `relevantTotal`  | 정수         | 아니요   |

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

사이트가 고정(pin)한 패키지 이름과 정확한 버전을 보내고(코드는 보내지 않음), 그 패키지에 영향을 주는 권고를 읽습니다.

* 권한: `sites`
* MCP 도구: [`lockpick_send_dependencies`](/ko/docs/mcp/tools#lockpick_send_dependencies)

**본문**

| 필드               | 타입                                                                                                               | 필수  |
| ---------------- | ---------------------------------------------------------------------------------------------------------------- | --- |
| `inventory`      | 객체                                                                                                               | 아니요 |
| `packages`       | 객체 목록                                                                                                            | 예   |
| `sources`        | 목록: `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `poetry.lock` | 예   |
| `idempotencyKey` | 문자열                                                                                                              | 예   |

**data**

| 필드                | 타입                                                                                                               | 항상 포함 |
| ----------------- | ---------------------------------------------------------------------------------------------------------------- | ----- |
| `siteId`          | 문자열                                                                                                              | 예     |
| `receivedAt`      | 문자열 또는 null                                                                                                      | 예     |
| `sources`         | 목록: `package-lock.json`, `npm-shrinkwrap.json`, `pnpm-lock.yaml`, `yarn.lock`, `requirements.txt`, `poetry.lock` | 예     |
| `packageCount`    | 정수                                                                                                               | 예     |
| `affectsYouCount` | 정수                                                                                                               | 예     |
| `affectsYou`      | 객체 목록                                                                                                            | 예     |
| `webUrl`          | 문자열                                                                                                              | 예     |

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

사이트에서 Pulse를 시작합니다.

* 권한: `pulse`
* MCP 도구: [`lockpick_start_pulse`](/ko/docs/mcp/tools#lockpick_start_pulse)

**본문**

| 필드               | 타입  | 필수  |
| ---------------- | --- | --- |
| `idempotencyKey` | 문자열 | 예   |
| `baselineScanId` | 문자열 | 아니요 |

**data**

| 필드          | 타입  | 항상 포함 |
| ----------- | --- | ----- |
| `scan`      | 객체  | 예     |
| `charged`   | 객체  | 예     |
| `allowance` | 객체  | 예     |
| `replayed`  | 불리언 | 예     |

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

Deep 스캔 전에 DNS 또는 파일 소유권 증명을 발급합니다.

* 권한: `deep`
* MCP 도구: [`lockpick_start_deep_verification`](/ko/docs/mcp/tools#lockpick_start_deep_verification)

**본문**

| 필드               | 타입                    | 필수 |
| ---------------- | --------------------- | -- |
| `method`         | `dns`, `file`, `meta` | 예  |
| `idempotencyKey` | 문자열                   | 예  |

**data**

| 필드                  | 타입                                                       | 항상 포함 |
| ------------------- | -------------------------------------------------------- | ----- |
| `verificationId`    | 문자열                                                      | 예     |
| `siteId`            | 문자열                                                      | 예     |
| `origin`            | 문자열                                                      | 예     |
| `method`            | `dns`, `file`, `meta`                                    | 예     |
| `state`             | `pending`, `verified`, `expired`, `exhausted`, `revoked` | 예     |
| `expiresAt`         | 문자열                                                      | 예     |
| `verifiedUntil`     | 문자열 또는 null                                              | 예     |
| `attemptsRemaining` | 정수                                                       | 예     |
| `retryAfterSeconds` | 정수 또는 null                                               | 예     |
| `value`             | 문자열                                                      | 예     |
| `location`          | 문자열                                                      | 예     |

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

게시된 소유권 증명을 확인합니다. 확인할 때마다 시도 한 번을 사용합니다.

* 권한: `deep`
* MCP 도구: [`lockpick_check_deep_verification`](/ko/docs/mcp/tools#lockpick_check_deep_verification)

**data**

| 필드                  | 타입                                                       | 항상 포함 |
| ------------------- | -------------------------------------------------------- | ----- |
| `verificationId`    | 문자열                                                      | 예     |
| `siteId`            | 문자열                                                      | 예     |
| `origin`            | 문자열                                                      | 예     |
| `method`            | `dns`, `file`, `meta`                                    | 예     |
| `state`             | `pending`, `verified`, `expired`, `exhausted`, `revoked` | 예     |
| `expiresAt`         | 문자열                                                      | 예     |
| `verifiedUntil`     | 문자열 또는 null                                              | 예     |
| `attemptsRemaining` | 정수                                                       | 예     |
| `retryAfterSeconds` | 정수 또는 null                                               | 예     |

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

Deep 스캔을 준비하고, 사용자가 승인할 링크를 받습니다.

* 권한: `deep`
* MCP 도구: [`lockpick_prepare_deep`](/ko/docs/mcp/tools#lockpick_prepare_deep)

**본문**

| 필드               | 타입  | 필수 |
| ---------------- | --- | -- |
| `verificationId` | 문자열 | 예  |
| `idempotencyKey` | 문자열 | 예  |

**data**

| 필드                | 타입                                         | 항상 포함 |
| ----------------- | ------------------------------------------ | ----- |
| `operationId`     | 문자열                                        | 예     |
| `siteId`          | 문자열                                        | 예     |
| `origin`          | 문자열                                        | 예     |
| `assessmentLevel` | 문자열                                        | 예     |
| `verificationId`  | 문자열                                        | 예     |
| `cost`            | 객체                                         | 예     |
| `allowance`       | 객체                                         | 예     |
| `approvalState`   | `pending`, `approved`, `expired`, `denied` | 예     |
| `approvalUrl`     | 문자열                                        | 예     |
| `expiresAt`       | 문자열                                        | 예     |

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

사용자가 승인한 Deep 스캔을 시작합니다.

* 권한: `deep`
* MCP 도구: [`lockpick_start_deep`](/ko/docs/mcp/tools#lockpick_start_deep)

**data**

| 필드          | 타입  | 항상 포함 |
| ----------- | --- | ----- |
| `scan`      | 객체  | 예     |
| `charged`   | 객체  | 예     |
| `allowance` | 객체  | 예     |
| `replayed`  | 불리언 | 예     |

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

사이트를 제거해서 이번 달 무료 Pulse를 다른 사이트로 옮깁니다.

* 권한: `sites` 및 `pulse`
* MCP 도구: [`lockpick_switch_free_site`](/ko/docs/mcp/tools#lockpick_switch_free_site)

**본문**

| 필드               | 타입  | 필수  |
| ---------------- | --- | --- |
| `removeSiteId`   | 문자열 | 예   |
| `checkId`        | 문자열 | 아니요 |
| `idempotencyKey` | 문자열 | 예   |
| `confirmRemoval` | 불리언 | 예   |

**data**

| 필드                  | 타입          | 항상 포함 |
| ------------------- | ----------- | ----- |
| `removedSiteId`     | 문자열         | 예     |
| `removedSiteHost`   | 문자열         | 예     |
| `replacementSiteId` | 문자열 또는 null | 예     |
| `allowance`         | 객체          | 예     |
| `restoreUrl`        | 문자열         | 예     |
| `startedScanId`     | 문자열 또는 null | 예     |
| `charged`           | 객체          | 예     |
| `replayed`          | 불리언         | 예     |

### GET /agent/scans

필터를 적용해 스캔을 최신순으로 한 페이지씩 보여 줍니다.

* 권한: `read`
* MCP 도구: [`lockpick_list_scans`](/ko/docs/mcp/tools#lockpick_list_scans)

**쿼리**

| 필드                | 타입                                                                                  | 필수  |
| ----------------- | ----------------------------------------------------------------------------------- | --- |
| `siteId`          | 문자열                                                                                 | 아니요 |
| `kind`            | `pulse`, `box`(Deep, 이전 이름)                                                         | 아니요 |
| `assessmentLevel` | `pulse`, `standard`, `deep`                                                         | 아니요 |
| `status`          | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 아니요 |
| `limit`           | 정수                                                                                  | 아니요 |
| `cursor`          | 문자열                                                                                 | 아니요 |

**data**

| 필드           | 타입          | 항상 포함 |
| ------------ | ----------- | ----- |
| `items`      | 객체 목록       | 예     |
| `nextCursor` | 문자열 또는 null | 예     |

**각 항목**

| 필드                          | 타입                                                                                  | 항상 포함 |
| --------------------------- | ----------------------------------------------------------------------------------- | ----- |
| `id`                        | 문자열                                                                                 | 예     |
| `kind`                      | `pulse`, `box`(Deep, 이전 이름)                                                         | 예     |
| `projectId`                 | 문자열                                                                                 | 예     |
| `target`                    | 문자열                                                                                 | 예     |
| `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 예     |
| `mode`                      | `autonomous`, `authenticated`, `active` 또는 null                                     | 예     |
| `createdAt`                 | 문자열 또는 null                                                                         | 예     |
| `finishedAt`                | 문자열 또는 null                                                                         | 예     |
| `webPath`                   | 문자열                                                                                 | 예     |
| `assessmentLevel`           | `pulse`, `standard`, `deep` 또는 null                                                 | 예     |
| `headline`                  | 객체                                                                                  | 예     |
| `webUrl`                    | 문자열                                                                                 | 예     |
| `suggestedPollAfterSeconds` | 정수 또는 null                                                                          | 예     |

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

스캔 하나와 상태, 요약입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_scan`](/ko/docs/mcp/tools#lockpick_get_scan)

**data**

| 필드                          | 타입                                                                                  | 항상 포함 |
| --------------------------- | ----------------------------------------------------------------------------------- | ----- |
| `id`                        | 문자열                                                                                 | 예     |
| `kind`                      | `pulse`, `box`(Deep, 이전 이름)                                                         | 예     |
| `projectId`                 | 문자열                                                                                 | 예     |
| `target`                    | 문자열                                                                                 | 예     |
| `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 예     |
| `mode`                      | `autonomous`, `authenticated`, `active` 또는 null                                     | 예     |
| `createdAt`                 | 문자열 또는 null                                                                         | 예     |
| `finishedAt`                | 문자열 또는 null                                                                         | 예     |
| `webPath`                   | 문자열                                                                                 | 예     |
| `assessmentLevel`           | `pulse`, `standard`, `deep` 또는 null                                                 | 예     |
| `headline`                  | 객체                                                                                  | 예     |
| `webUrl`                    | 문자열                                                                                 | 예     |
| `suggestedPollAfterSeconds` | 정수 또는 null                                                                          | 예     |
| `baselineRunId`             | 문자열 또는 null                                                                         | 예     |
| `open`                      | 객체                                                                                  | 예     |
| `findingCount`              | 정수                                                                                  | 예     |
| `progress`                  | 객체 또는 null                                                                          | 예     |
| `coverage`                  | 객체                                                                                  | 예     |
| `caveats`                   | 문자열 목록                                                                              | 예     |
| `outcome`                   | 객체 또는 null                                                                          | 예     |
| `exposureCheck`             | 객체                                                                                  | 아니요   |

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

스캔의 문제를 한 페이지씩 보여 줍니다.

* 권한: `read`
* MCP 도구: [`lockpick_list_findings`](/ko/docs/mcp/tools#lockpick_list_findings)
* `x-lockpick-agent-features: finding-code`를 보내면 각 발견 항목의 `code`(`LP-`와 여섯 글자, 웹 보고서에 표시되는 것과 같음)를 받습니다. 이 헤더가 없으면 응답에 `code`가 없으며, 이전 클라이언트가 기대하는 형태입니다.

**쿼리**

| 필드         | 타입                                            | 필수  |
| ---------- | --------------------------------------------- | --- |
| `state`    | `attention`, `information`, `unknown`, `pass` | 아니요 |
| `severity` | `critical`, `high`, `medium`, `low`, `info`   | 아니요 |
| `all`      | 불리언 또는 `true`, `false`                        | 아니요 |
| `limit`    | 정수                                            | 아니요 |
| `cursor`   | 문자열                                           | 아니요 |

**data**

| 필드           | 타입          | 항상 포함 |
| ------------ | ----------- | ----- |
| `items`      | 객체 목록       | 예     |
| `nextCursor` | 문자열 또는 null | 예     |

**각 항목**

| 필드                  | 타입                                                    | 항상 포함 |
| ------------------- | ----------------------------------------------------- | ----- |
| `id`                | 문자열                                                   | 예     |
| `code`              | 문자열                                                   | 아니요   |
| `runId`             | 문자열                                                   | 예     |
| `kind`              | `pulse`, `box`(Deep, 이전 이름)                           | 예     |
| `severity`          | `critical`, `high`, `medium`, `low`, `info`           | 예     |
| `state`             | `attention`, `information`, `unknown`, `pass`         | 예     |
| `category`          | 문자열                                                   | 예     |
| `title`             | 문자열                                                   | 예     |
| `meaning`           | 문자열                                                   | 예     |
| `fix`               | 문자열 또는 null                                           | 예     |
| `confidence`        | 문자열                                                   | 예     |
| `evidence`          | 문자열 목록                                                | 예     |
| `sources`           | 문자열 목록                                                | 예     |
| `steps`             | 문자열 목록                                                | 예     |
| `webPath`           | 문자열                                                   | 예     |
| `webUrl`            | 문자열                                                   | 예     |
| `evidenceTrust`     | 문자열                                                   | 예     |
| `evidenceTruncated` | 불리언                                                   | 예     |
| `verdict`           | `confirmed`, `needs_review`, `not_actionable` 또는 null | 아니요   |
| `certainty`         | `high`, `medium`, `low` 또는 null                       | 아니요   |
| `exploitability`    | `direct`, `conditional`, `hygiene`, `none` 또는 null    | 아니요   |
| `proof`             | 객체 또는 null                                            | 아니요   |
| `proofGap`          | 문자열 또는 null                                           | 아니요   |
| `urgency`           | `now`, `week`, `later`, `none`                        | 아니요   |
| `howSure`           | `confirmed`, `likely`, `possible` 또는 null             | 아니요   |

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

문제 하나와, 가려진 근거입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_finding`](/ko/docs/mcp/tools#lockpick_get_finding)
* `x-lockpick-agent-features: finding-code`를 보내면 각 발견 항목의 `code`(`LP-`와 여섯 글자, 웹 보고서에 표시되는 것과 같음)를 받습니다. 이 헤더가 없으면 응답에 `code`가 없으며, 이전 클라이언트가 기대하는 형태입니다.

**data**

| 필드                  | 타입                                                    | 항상 포함 |
| ------------------- | ----------------------------------------------------- | ----- |
| `id`                | 문자열                                                   | 예     |
| `code`              | 문자열                                                   | 아니요   |
| `runId`             | 문자열                                                   | 예     |
| `kind`              | `pulse`, `box`(Deep, 이전 이름)                           | 예     |
| `severity`          | `critical`, `high`, `medium`, `low`, `info`           | 예     |
| `state`             | `attention`, `information`, `unknown`, `pass`         | 예     |
| `category`          | 문자열                                                   | 예     |
| `title`             | 문자열                                                   | 예     |
| `meaning`           | 문자열                                                   | 예     |
| `fix`               | 문자열 또는 null                                           | 예     |
| `confidence`        | 문자열                                                   | 예     |
| `evidence`          | 문자열 목록                                                | 예     |
| `sources`           | 문자열 목록                                                | 예     |
| `steps`             | 문자열 목록                                                | 예     |
| `webPath`           | 문자열                                                   | 예     |
| `webUrl`            | 문자열                                                   | 예     |
| `evidenceTrust`     | 문자열                                                   | 예     |
| `evidenceTruncated` | 불리언                                                   | 예     |
| `verdict`           | `confirmed`, `needs_review`, `not_actionable` 또는 null | 아니요   |
| `certainty`         | `high`, `medium`, `low` 또는 null                       | 아니요   |
| `exploitability`    | `direct`, `conditional`, `hygiene`, `none` 또는 null    | 아니요   |
| `proof`             | 객체 또는 null                                            | 아니요   |
| `proofGap`          | 문자열 또는 null                                           | 아니요   |
| `urgency`           | `now`, `week`, `later`, `none`                        | 아니요   |
| `howSure`           | `confirmed`, `likely`, `possible` 또는 null             | 아니요   |

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

스캔 수정 브리프의 일부입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_repair_brief`](/ko/docs/mcp/tools#lockpick_get_repair_brief)

**쿼리**

| 필드          | 타입                                                                                        | 필수  |
| ----------- | ----------------------------------------------------------------------------------------- | --- |
| `findingId` | 문자열                                                                                       | 아니요 |
| `agent`     | `claude-code`, `codex`, `cursor`, `vscode`, `opencode`, `lovable`, `bolt`, `replit`, `v0` | 아니요 |
| `cursor`    | 문자열                                                                                       | 아니요 |

**data**

| 필드           | 타입          | 항상 포함 |
| ------------ | ----------- | ----- |
| `scanId`     | 문자열         | 예     |
| `findingIds` | 문자열 목록      | 예     |
| `saved`      | 불리언         | 예     |
| `markdown`   | 문자열         | 예     |
| `nextCursor` | 문자열 또는 null | 예     |
| `complete`   | 불리언         | 예     |
| `webUrl`     | 문자열         | 예     |

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

스캔과 그 스캔이 다시 검사하는 대상 사이에서 바뀐 내용입니다.

* 권한: `read`
* MCP 도구: [`lockpick_compare_scans`](/ko/docs/mcp/tools#lockpick_compare_scans)
* `x-lockpick-agent-features: finding-code`를 보내면 각 발견 항목의 `code`(`LP-`와 여섯 글자, 웹 보고서에 표시되는 것과 같음)를 받습니다. 이 헤더가 없으면 응답에 `code`가 없으며, 이전 클라이언트가 기대하는 형태입니다.

**data**

| 필드              | 타입          | 항상 포함 |
| --------------- | ----------- | ----- |
| `runId`         | 문자열         | 예     |
| `baselineRunId` | 문자열         | 예     |
| `error`         | 문자열 또는 null | 예     |
| `changes`       | 객체 목록       | 예     |
| `webUrl`        | 문자열         | 예     |

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

스캔의 무료 DNS 검사를 다시 실행합니다. 사이트에는 아무것도 보내지 않습니다.

* 권한: `pulse`
* MCP 도구: [`lockpick_recheck_dns`](/ko/docs/mcp/tools#lockpick_recheck_dns)

**본문**

| 필드               | 타입  | 필수 |
| ---------------- | --- | -- |
| `findingId`      | 문자열 | 예  |
| `idempotencyKey` | 문자열 | 예  |

**data**

| 필드                       | 타입          | 항상 포함 |
| ------------------------ | ----------- | ----- |
| `scanId`                 | 문자열         | 예     |
| `findingIds`             | 문자열 목록      | 예     |
| `pending`                | 객체 또는 null  | 예     |
| `checkedAt`              | 문자열 또는 null | 예     |
| `outcomes`               | 객체 목록       | 예     |
| `nextAllowedAt`          | 문자열 또는 null | 예     |
| `failedAt`               | 문자열 또는 null | 예     |
| `originalGradeUnchanged` | 불리언         | 예     |

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

스캔의 가장 최근 DNS 재검사입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_dns_recheck`](/ko/docs/mcp/tools#lockpick_get_dns_recheck)

**data**

| 필드                       | 타입          | 항상 포함 |
| ------------------------ | ----------- | ----- |
| `scanId`                 | 문자열         | 예     |
| `findingIds`             | 문자열 목록      | 예     |
| `pending`                | 객체 또는 null  | 예     |
| `checkedAt`              | 문자열 또는 null | 예     |
| `outcomes`               | 객체 목록       | 예     |
| `nextAllowedAt`          | 문자열 또는 null | 예     |
| `failedAt`               | 문자열 또는 null | 예     |
| `originalGradeUnchanged` | 불리언         | 예     |

### POST /agent/quick-checks

홈페이지의 무료 빠른 검사를 시작합니다.

* 권한: `pulse`
* MCP 도구: [`lockpick_quick_check`](/ko/docs/mcp/tools#lockpick_quick_check)

**본문**

| 필드               | 타입  | 필수 |
| ---------------- | --- | -- |
| `url`            | 문자열 | 예  |
| `idempotencyKey` | 문자열 | 예  |

**data**

| 필드                          | 타입                                         | 항상 포함 |
| --------------------------- | ------------------------------------------ | ----- |
| `checkId`                   | 문자열                                        | 예     |
| `status`                    | `queued`, `running`, `succeeded`, `failed` | 예     |
| `reused`                    | 불리언                                        | 예     |
| `headline`                  | 객체                                         | 예     |
| `summary`                   | 문자열 또는 null                                | 예     |
| `checks`                    | 객체 목록                                      | 예     |
| `webUrl`                    | 문자열                                        | 예     |
| `suggestedPollAfterSeconds` | 정수 또는 null                                 | 예     |

### POST /agent/repository-checks

설치하기 전에 공개 GitHub 저장소(스킬, 플러그인, MCP 서버 또는 앱)를 검사합니다.

* 권한: `pulse`
* MCP 도구: [`lockpick_check_repository`](/ko/docs/mcp/tools#lockpick_check_repository)

**본문**

| 필드               | 타입             | 필수  |
| ---------------- | -------------- | --- |
| `url`            | 문자열            | 예   |
| `mode`           | `skill`, `app` | 아니요 |
| `depth`          | `free`, `deep` | 아니요 |
| `idempotencyKey` | 문자열            | 예   |

**data**

| 필드                          | 타입                                                                                                                   | 항상 포함 |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------- | ----- |
| `checkId`                   | 문자열                                                                                                                  | 예     |
| `status`                    | `queued`, `running`, `succeeded`, `failed`                                                                           | 예     |
| `reused`                    | 불리언                                                                                                                  | 예     |
| `repository`                | 객체                                                                                                                   | 예     |
| `mode`                      | `skill`, `app` 또는 null                                                                                               | 예     |
| `kind`                      | 문자열 또는 null                                                                                                          | 예     |
| `verdict`                   | `safe`, `caution`, `do_not_install` 또는 null                                                                          | 예     |
| `appRisk`                   | `low`, `elevated`, `high` 또는 null                                                                                    | 예     |
| `score`                     | 정수 또는 null                                                                                                           | 예     |
| `summary`                   | 문자열 또는 null                                                                                                          | 예     |
| `plainSummary`              | 문자열 또는 null                                                                                                          | 예     |
| `findings`                  | 객체 목록                                                                                                                | 예     |
| `moreFindings`              | 정수                                                                                                                   | 예     |
| `coverage`                  | 객체 또는 null                                                                                                           | 예     |
| `failure`                   | `not-found`, `ref-not-found`, `empty`, `too-large`, `rate-limited`, `unavailable`, `timeout`, `engine-error` 또는 null | 예     |
| `webUrl`                    | 문자열                                                                                                                  | 예     |
| `suggestedPollAfterSeconds` | 정수 또는 null                                                                                                           | 예     |

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

저장소 검사와 그 발견 사항입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_repository_check`](/ko/docs/mcp/tools#lockpick_get_repository_check)

**data**

| 필드                          | 타입                                                                                                                   | 항상 포함 |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------- | ----- |
| `checkId`                   | 문자열                                                                                                                  | 예     |
| `status`                    | `queued`, `running`, `succeeded`, `failed`                                                                           | 예     |
| `reused`                    | 불리언                                                                                                                  | 예     |
| `repository`                | 객체                                                                                                                   | 예     |
| `mode`                      | `skill`, `app` 또는 null                                                                                               | 예     |
| `kind`                      | 문자열 또는 null                                                                                                          | 예     |
| `verdict`                   | `safe`, `caution`, `do_not_install` 또는 null                                                                          | 예     |
| `appRisk`                   | `low`, `elevated`, `high` 또는 null                                                                                    | 예     |
| `score`                     | 정수 또는 null                                                                                                           | 예     |
| `summary`                   | 문자열 또는 null                                                                                                          | 예     |
| `plainSummary`              | 문자열 또는 null                                                                                                          | 예     |
| `findings`                  | 객체 목록                                                                                                                | 예     |
| `moreFindings`              | 정수                                                                                                                   | 예     |
| `coverage`                  | 객체 또는 null                                                                                                           | 예     |
| `failure`                   | `not-found`, `ref-not-found`, `empty`, `too-large`, `rate-limited`, `unavailable`, `timeout`, `engine-error` 또는 null | 예     |
| `webUrl`                    | 문자열                                                                                                                  | 예     |
| `suggestedPollAfterSeconds` | 정수 또는 null                                                                                                           | 예     |

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

빠른 검사와 그 결과입니다.

* 권한: `read`
* MCP 도구: [`lockpick_get_quick_check`](/ko/docs/mcp/tools#lockpick_get_quick_check)

**data**

| 필드                          | 타입                                         | 항상 포함 |
| --------------------------- | ------------------------------------------ | ----- |
| `checkId`                   | 문자열                                        | 예     |
| `status`                    | `queued`, `running`, `succeeded`, `failed` | 예     |
| `reused`                    | 불리언                                        | 예     |
| `headline`                  | 객체                                         | 예     |
| `summary`                   | 문자열 또는 null                                | 예     |
| `checks`                    | 객체 목록                                      | 예     |
| `webUrl`                    | 문자열                                        | 예     |
| `suggestedPollAfterSeconds` | 정수 또는 null                                 | 예     |

### GET /agent/docs/search

Lockpick 공개 문서를 검색합니다.

* 권한: `read`
* MCP 도구: [`lockpick_search_docs`](/ko/docs/mcp/tools#lockpick_search_docs)

**쿼리**

| 필드      | 타입  | 필수  |
| ------- | --- | --- |
| `query` | 문자열 | 예   |
| `limit` | 정수  | 아니요 |

**data**

| 필드        | 타입    | 항상 포함 |
| --------- | ----- | ----- |
| `query`   | 문자열   | 예     |
| `results` | 객체 목록 | 예     |

### GET /agent/docs/page

공개 문서 페이지 하나를 Markdown으로 보여 줍니다. 길면 여러 부분으로 나눕니다.

* 권한: `read`
* MCP 도구: [`lockpick_read_doc`](/ko/docs/mcp/tools#lockpick_read_doc)

**쿼리**

| 필드       | 타입  | 필수  |
| -------- | --- | --- |
| `path`   | 문자열 | 아니요 |
| `cursor` | 문자열 | 아니요 |

**data**

| 필드            | 타입          | 항상 포함 |
| ------------- | ----------- | ----- |
| `path`        | 문자열         | 예     |
| `title`       | 문자열         | 예     |
| `description` | 문자열 또는 null | 예     |
| `url`         | 문자열         | 예     |
| `markdownUrl` | 문자열         | 예     |
| `markdown`    | 문자열         | 예     |
| `nextCursor`  | 문자열 또는 null | 예     |
| `complete`    | 불리언         | 예     |

## 기기 로그인

`lockpick login`이 키를 받는 방법입니다. 코드를 요청하고, 사용자가 브라우저에서 승인하면, 반복 확인으로 키를 받습니다.

### POST /device/code

기기 로그인을 시작하고, 사용자가 브라우저에서 승인할 코드를 받습니다.

* 권한: 없음. 로그인 과정의 일부입니다

**본문**

| 필드           | 타입                                    | 필수  |
| ------------ | ------------------------------------- | --- |
| `clientName` | 문자열                                   | 아니요 |
| `hostname`   | 문자열                                   | 아니요 |
| `platform`   | 문자열                                   | 아니요 |
| `version`    | 문자열                                   | 아니요 |
| `scopes`     | 목록: `pulse`, `sites`, `deep`, `local` | 아니요 |

**data**

| 필드                        | 타입  | 항상 포함 |
| ------------------------- | --- | ----- |
| `deviceCode`              | 문자열 | 예     |
| `userCode`                | 문자열 | 예     |
| `verificationUri`         | 문자열 | 예     |
| `verificationUriComplete` | 문자열 | 예     |
| `expiresIn`               | 정수  | 예     |
| `interval`                | 정수  | 예     |

### POST /device/token

사용자가 승인할 때까지 기기 로그인을 반복해서 확인한 뒤, 키를 받습니다.

* 권한: 없음. 로그인 과정의 일부입니다

**본문**

| 필드           | 타입  | 필수 |
| ------------ | --- | -- |
| `deviceCode` | 문자열 | 예  |

## 레거시

CLI 0.2가 쓰는 원래 CLI 경로입니다. 그대로 유지되며, 새로운 연동은 위의 에이전트 API를 사용해야 합니다.

<details>
  <summary>
    원래 CLI 경로
  </summary>

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

  저장소 검사 전에 로컬 평가를 승인합니다. 소스와 결과는 업로드하지 않습니다.

  * 권한: `local`

  **본문**

  | 필드                    | 타입                                                                                                                                                                                             | 필수 |
  | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
  | `cliVersion`          | 문자열                                                                                                                                                                                            | 예  |
  | `scannerVersion`      | 문자열                                                                                                                                                                                            | 예  |
  | `rulesetVersion`      | 문자열                                                                                                                                                                                            | 예  |
  | `reportSchemaVersion` | 문자열                                                                                                                                                                                            | 예  |
  | `checks`              | 목록: `tracked-secrets`, `public-environment`, `browser-artifacts`, `supabase-client`, `supabase-migrations`, `git-history`, `docker-files`, `docker-values`, `actions-injection`, `source-maps` | 예  |

  **data**

  | 필드              | 타입    | 항상 포함 |
  | --------------- | ----- | ----- |
  | `admissionId`   | 문자열   | 예     |
  | `projectId`     | 문자열   | 예     |
  | `workspaceId`   | 문자열   | 예     |
  | `policyVersion` | 문자열   | 예     |
  | `startBy`       | 문자열   | 예     |
  | `checks`        | 객체 목록 | 예     |

  **GET /me**

  이 자격 증명 뒤에 있는 사용자, 워크스페이스, 키입니다.

  * 권한: `read`

  **data**

  | 필드          | 타입 | 항상 포함 |
  | ----------- | -- | ----- |
  | `user`      | 객체 | 예     |
  | `workspace` | 객체 | 예     |
  | `key`       | 객체 | 예     |

  **DELETE /me**

  제출한 키를 폐기합니다.

  * 권한: 유효한 모든 키

  **data**

  | 필드        | 타입  | 항상 포함 |
  | --------- | --- | ----- |
  | `revoked` | 불리언 | 예     |

  **GET /projects**

  최신 Pulse 및 Deep 스캔과 함께 사이트(프로젝트)를 보여 줍니다.

  * 권한: `read`

  **data 안의 각 항목**

  | 필드            | 타입          | 항상 포함 |
  | ------------- | ----------- | ----- |
  | `id`          | 문자열         | 예     |
  | `name`        | 문자열         | 예     |
  | `status`      | 문자열         | 예     |
  | `baseDomain`  | 문자열 또는 null | 예     |
  | `latestPulse` | 객체 또는 null  | 예     |
  | `latestDeep`  | 객체 또는 null  | 아니요   |
  | `latestBox`   | 객체 또는 null  | 예     |
  | `webPath`     | 문자열         | 예     |
  | `webUrl`      | 문자열         | 아니요   |

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

  사이트 하나의 최신 결과와 바뀐 내용입니다.

  * 권한: `read`

  **data**

  | 필드               | 타입         | 항상 포함 |
  | ---------------- | ---------- | ----- |
  | `project`        | 객체         | 예     |
  | `latestPulse`    | 객체 또는 null | 예     |
  | `latestDeep`     | 객체 또는 null | 아니요   |
  | `latestBox`      | 객체 또는 null | 예     |
  | `lastComparison` | 객체 또는 null | 예     |
  | `caveats`        | 문자열 목록     | 예     |

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

  사이트에서 Pulse를 시작하거나, 가장 최근 Pulse를 재검사합니다.

  * 권한: `pulse`
  * 성공하면 201로 응답합니다

  **본문**

  | 필드               | 타입  | 필수 |
  | ---------------- | --- | -- |
  | `idempotencyKey` | 문자열 | 예  |

  **data**

  | 필드                          | 타입                                                                                  | 항상 포함 |
  | --------------------------- | ----------------------------------------------------------------------------------- | ----- |
  | `id`                        | 문자열                                                                                 | 예     |
  | `kind`                      | `pulse`, `box`(Deep, 이전 이름)                                                         | 예     |
  | `projectId`                 | 문자열                                                                                 | 예     |
  | `target`                    | 문자열                                                                                 | 예     |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 예     |
  | `mode`                      | `autonomous`, `authenticated`, `active` 또는 null                                     | 예     |
  | `createdAt`                 | 문자열 또는 null                                                                         | 예     |
  | `finishedAt`                | 문자열 또는 null                                                                         | 예     |
  | `webPath`                   | 문자열                                                                                 | 예     |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` 또는 null                                                 | 아니요   |
  | `headline`                  | 객체                                                                                  | 아니요   |
  | `webUrl`                    | 문자열                                                                                 | 아니요   |
  | `suggestedPollAfterSeconds` | 정수 또는 null                                                                          | 아니요   |
  | `baselineRunId`             | 문자열 또는 null                                                                         | 예     |
  | `open`                      | 객체                                                                                  | 예     |
  | `findingCount`              | 정수                                                                                  | 예     |
  | `progress`                  | 객체 또는 null                                                                          | 예     |
  | `coverage`                  | 객체                                                                                  | 예     |
  | `caveats`                   | 문자열 목록                                                                              | 예     |
  | `outcome`                   | 객체 또는 null                                                                          | 아니요   |
  | `exposureCheck`             | 객체 또는 null                                                                          | 아니요   |

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

  이 사이트에 Deep이 허용된 CI 키로 릴리스의 Deep 스캔을 시작합니다.

  * 권한: `deep`
  * 성공하면 201로 응답합니다

  **본문**

  | 필드               | 타입  | 필수 |
  | ---------------- | --- | -- |
  | `idempotencyKey` | 문자열 | 예  |

  **data**

  | 필드                          | 타입                                                                                  | 항상 포함 |
  | --------------------------- | ----------------------------------------------------------------------------------- | ----- |
  | `id`                        | 문자열                                                                                 | 예     |
  | `kind`                      | `pulse`, `box`(Deep, 이전 이름)                                                         | 예     |
  | `projectId`                 | 문자열                                                                                 | 예     |
  | `target`                    | 문자열                                                                                 | 예     |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 예     |
  | `mode`                      | `autonomous`, `authenticated`, `active` 또는 null                                     | 예     |
  | `createdAt`                 | 문자열 또는 null                                                                         | 예     |
  | `finishedAt`                | 문자열 또는 null                                                                         | 예     |
  | `webPath`                   | 문자열                                                                                 | 예     |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` 또는 null                                                 | 아니요   |
  | `headline`                  | 객체                                                                                  | 아니요   |
  | `webUrl`                    | 문자열                                                                                 | 아니요   |
  | `suggestedPollAfterSeconds` | 정수 또는 null                                                                          | 아니요   |
  | `baselineRunId`             | 문자열 또는 null                                                                         | 예     |
  | `open`                      | 객체                                                                                  | 예     |
  | `findingCount`              | 정수                                                                                  | 예     |
  | `progress`                  | 객체 또는 null                                                                          | 예     |
  | `coverage`                  | 객체                                                                                  | 예     |
  | `caveats`                   | 문자열 목록                                                                              | 예     |
  | `outcome`                   | 객체 또는 null                                                                          | 아니요   |
  | `exposureCheck`             | 객체 또는 null                                                                          | 아니요   |

  **GET /runs**

  Pulse 및 Deep 스캔을 최신순으로 보여 줍니다.

  * 권한: `read`

  **쿼리**

  | 필드                | 타입                                                                                  | 필수  |
  | ----------------- | ----------------------------------------------------------------------------------- | --- |
  | `projectId`       | 문자열                                                                                 | 아니요 |
  | `kind`            | `pulse`, `box`(Deep, 이전 이름)                                                         | 아니요 |
  | `assessmentLevel` | `pulse`, `standard`, `deep`                                                         | 아니요 |
  | `status`          | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 아니요 |
  | `limit`           | 정수                                                                                  | 아니요 |

  **data 안의 각 항목**

  | 필드                          | 타입                                                                                  | 항상 포함 |
  | --------------------------- | ----------------------------------------------------------------------------------- | ----- |
  | `id`                        | 문자열                                                                                 | 예     |
  | `kind`                      | `pulse`, `box`(Deep, 이전 이름)                                                         | 예     |
  | `projectId`                 | 문자열                                                                                 | 예     |
  | `target`                    | 문자열                                                                                 | 예     |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 예     |
  | `mode`                      | `autonomous`, `authenticated`, `active` 또는 null                                     | 예     |
  | `createdAt`                 | 문자열 또는 null                                                                         | 예     |
  | `finishedAt`                | 문자열 또는 null                                                                         | 예     |
  | `webPath`                   | 문자열                                                                                 | 예     |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` 또는 null                                                 | 아니요   |
  | `headline`                  | 객체                                                                                  | 아니요   |
  | `webUrl`                    | 문자열                                                                                 | 아니요   |
  | `suggestedPollAfterSeconds` | 정수 또는 null                                                                          | 아니요   |

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

  요약과 개수가 있는 실행 하나입니다.

  * 권한: `read`

  **data**

  | 필드                          | 타입                                                                                  | 항상 포함 |
  | --------------------------- | ----------------------------------------------------------------------------------- | ----- |
  | `id`                        | 문자열                                                                                 | 예     |
  | `kind`                      | `pulse`, `box`(Deep, 이전 이름)                                                         | 예     |
  | `projectId`                 | 문자열                                                                                 | 예     |
  | `target`                    | 문자열                                                                                 | 예     |
  | `status`                    | `queued`, `running`, `cancelling`, `succeeded`, `incomplete`, `failed`, `cancelled` | 예     |
  | `mode`                      | `autonomous`, `authenticated`, `active` 또는 null                                     | 예     |
  | `createdAt`                 | 문자열 또는 null                                                                         | 예     |
  | `finishedAt`                | 문자열 또는 null                                                                         | 예     |
  | `webPath`                   | 문자열                                                                                 | 예     |
  | `assessmentLevel`           | `pulse`, `standard`, `deep` 또는 null                                                 | 아니요   |
  | `headline`                  | 객체                                                                                  | 아니요   |
  | `webUrl`                    | 문자열                                                                                 | 아니요   |
  | `suggestedPollAfterSeconds` | 정수 또는 null                                                                          | 아니요   |
  | `baselineRunId`             | 문자열 또는 null                                                                         | 예     |
  | `open`                      | 객체                                                                                  | 예     |
  | `findingCount`              | 정수                                                                                  | 예     |
  | `progress`                  | 객체 또는 null                                                                          | 예     |
  | `coverage`                  | 객체                                                                                  | 예     |
  | `caveats`                   | 문자열 목록                                                                              | 예     |
  | `outcome`                   | 객체 또는 null                                                                          | 아니요   |
  | `exposureCheck`             | 객체 또는 null                                                                          | 아니요   |

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

  실행의 문제입니다.

  * 권한: `read`

  **쿼리**

  | 필드         | 타입                                            | 필수  |
  | ---------- | --------------------------------------------- | --- |
  | `severity` | `critical`, `high`, `medium`, `low`, `info`   | 아니요 |
  | `state`    | `attention`, `information`, `unknown`, `pass` | 아니요 |
  | `all`      | `true`, `false`                               | 아니요 |

  **data 안의 각 항목**

  | 필드               | 타입                                                    | 항상 포함 |
  | ---------------- | ----------------------------------------------------- | ----- |
  | `id`             | 문자열                                                   | 예     |
  | `code`           | 문자열                                                   | 아니요   |
  | `runId`          | 문자열                                                   | 예     |
  | `kind`           | `pulse`, `box`(Deep, 이전 이름)                           | 예     |
  | `severity`       | `critical`, `high`, `medium`, `low`, `info`           | 예     |
  | `state`          | `attention`, `information`, `unknown`, `pass`         | 예     |
  | `category`       | 문자열                                                   | 예     |
  | `title`          | 문자열                                                   | 예     |
  | `meaning`        | 문자열                                                   | 예     |
  | `fix`            | 문자열 또는 null                                           | 예     |
  | `confidence`     | 문자열                                                   | 예     |
  | `evidence`       | 문자열 목록                                                | 예     |
  | `sources`        | 문자열 목록                                                | 예     |
  | `steps`          | 문자열 목록                                                | 예     |
  | `webPath`        | 문자열                                                   | 예     |
  | `webUrl`         | 문자열                                                   | 아니요   |
  | `verdict`        | `confirmed`, `needs_review`, `not_actionable` 또는 null | 아니요   |
  | `certainty`      | `high`, `medium`, `low` 또는 null                       | 아니요   |
  | `exploitability` | `direct`, `conditional`, `hygiene`, `none` 또는 null    | 아니요   |
  | `proof`          | 객체 또는 null                                            | 아니요   |
  | `proofGap`       | 문자열 또는 null                                           | 아니요   |
  | `urgency`        | `now`, `week`, `later`, `none`                        | 아니요   |
  | `howSure`        | `confirmed`, `likely`, `possible` 또는 null             | 아니요   |

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

  문제 하나와, 가려진 근거입니다.

  * 권한: `read`

  **data**

  | 필드               | 타입                                                    | 항상 포함 |
  | ---------------- | ----------------------------------------------------- | ----- |
  | `id`             | 문자열                                                   | 예     |
  | `code`           | 문자열                                                   | 아니요   |
  | `runId`          | 문자열                                                   | 예     |
  | `kind`           | `pulse`, `box`(Deep, 이전 이름)                           | 예     |
  | `severity`       | `critical`, `high`, `medium`, `low`, `info`           | 예     |
  | `state`          | `attention`, `information`, `unknown`, `pass`         | 예     |
  | `category`       | 문자열                                                   | 예     |
  | `title`          | 문자열                                                   | 예     |
  | `meaning`        | 문자열                                                   | 예     |
  | `fix`            | 문자열 또는 null                                           | 예     |
  | `confidence`     | 문자열                                                   | 예     |
  | `evidence`       | 문자열 목록                                                | 예     |
  | `sources`        | 문자열 목록                                                | 예     |
  | `steps`          | 문자열 목록                                                | 예     |
  | `webPath`        | 문자열                                                   | 예     |
  | `webUrl`         | 문자열                                                   | 아니요   |
  | `verdict`        | `confirmed`, `needs_review`, `not_actionable` 또는 null | 아니요   |
  | `certainty`      | `high`, `medium`, `low` 또는 null                       | 아니요   |
  | `exploitability` | `direct`, `conditional`, `hygiene`, `none` 또는 null    | 아니요   |
  | `proof`          | 객체 또는 null                                            | 아니요   |
  | `proofGap`       | 문자열 또는 null                                           | 아니요   |
  | `urgency`        | `now`, `week`, `later`, `none`                        | 아니요   |
  | `howSure`        | `confirmed`, `likely`, `possible` 또는 null             | 아니요   |

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

  실행의 수정 사항을 하나의 Markdown 브리프로 보여 줍니다.

  * 권한: `read`

  **쿼리**

  | 필드          | 타입                                                                                        | 필수  |
  | ----------- | ----------------------------------------------------------------------------------------- | --- |
  | `findingId` | 문자열                                                                                       | 아니요 |
  | `agent`     | `claude-code`, `codex`, `cursor`, `vscode`, `opencode`, `lovable`, `bolt`, `replit`, `v0` | 아니요 |

  **data**

  | 필드           | 타입     | 항상 포함 |
  | ------------ | ------ | ----- |
  | `runId`      | 문자열    | 예     |
  | `findingIds` | 문자열 목록 | 예     |
  | `saved`      | 불리언    | 예     |
  | `markdown`   | 문자열    | 예     |
  | `webUrl`     | 문자열    | 아니요   |

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

  실행과 그 이전 실행 사이에서 바뀐 내용입니다.

  * 권한: `read`

  **data**

  | 필드              | 타입          | 항상 포함 |
  | --------------- | ----------- | ----- |
  | `runId`         | 문자열         | 예     |
  | `baselineRunId` | 문자열         | 예     |
  | `error`         | 문자열 또는 null | 예     |
  | `changes`       | 객체 목록       | 예     |
  | `webUrl`        | 문자열         | 아니요   |
</details>