> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 通过 Devin API 触发代码扫描

> 介绍如何使用 v3 组织和企业 API 以编程方式启动 Devin 代码扫描、轮询其状态并读取发现项

代码扫描 API 可让你无需使用 Web 应用即可启动扫描、轮询扫描状态并读取发现项。与 v3 API 的其他部分一样，每项操作均提供两个作用域，遵循相同的[组织与企业划分](/zh/api-reference/v3/overview)：

* **组织** (`/v3/organizations/{org_id}/code-scans/...`) 适用于单个组织，需要组织级 `UseCodeScans` (写入) 或 `ViewCodeScans` (读取) 权限。
* **企业** (`/v3/enterprise/...`) 适用于企业中的所有组织，需要企业级 `UseAccountCodeScans` (写入) 或 `ViewAccountCodeScans` (读取) 权限。由于扫描归属于某个组织，创建扫描和修复端点的路径中仍需包含 `org_id`。

两个作用域均使用[服务用户](/zh/api-reference/v3/service-users/members-service-users) API 密钥或[个人访问令牌](/zh/api-reference/personal-access-tokens)进行身份验证，并使用相同的请求和响应格式。

<div id="endpoints">
  ## 端点
</div>

| 操作             | 组织                                                                                                                 | 企业                                                                                                                     |
| -------------- | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| 启动代码扫描         | [`POST /v3/organizations/{org_id}/code-scans`](/zh/api-reference/v3/code-scans/organizations-code-scans-start)     | [`POST /v3/enterprise/organizations/{org_id}/code-scans`](/zh/api-reference/v3/code-scans/enterprise-code-scans-start) |
| 启动导入扫描         | [`POST .../code-scans/ingestion`](/zh/api-reference/v3/code-scans/organizations-code-scans-start-ingestion)        | [`POST .../code-scans/ingestion`](/zh/api-reference/v3/code-scans/enterprise-code-scans-start-ingestion)               |
| 列出代码扫描         | [`GET /v3/organizations/{org_id}/code-scans/scans`](/zh/api-reference/v3/code-scans/organizations-code-scans-list) | [`GET /v3/enterprise/code-scans/scans`](/zh/api-reference/v3/code-scans/enterprise-code-scans-list)                    |
| 列出代码扫描 Profile | [`GET .../code-scans/profiles`](/zh/api-reference/v3/code-scans/organizations-code-scans-profiles)                 | [`GET /v3/enterprise/code-scans/profiles`](/zh/api-reference/v3/code-scans/enterprise-code-scans-profiles)             |
| 获取代码扫描 Profile | [`GET .../code-scans/profiles/{profile_id}`](/zh/api-reference/v3/code-scans/organizations-code-scans-profile)     | [`GET /v3/enterprise/code-scans/profiles/{profile_id}`](/zh/api-reference/v3/code-scans/enterprise-code-scans-profile) |
| 列出代码扫描发现项      | [`GET .../code-scans/findings`](/zh/api-reference/v3/code-scans/organizations-code-scans-findings)                 | [`GET /v3/enterprise/code-scans/findings`](/zh/api-reference/v3/code-scans/enterprise-code-scans-findings)             |
| 获取代码扫描指标       | [`GET .../code-scans/metrics`](/zh/api-reference/v3/code-scans/organizations-code-scans-metrics)                   | [`GET /v3/enterprise/code-scans/metrics`](/zh/api-reference/v3/code-scans/enterprise-code-scans-metrics)               |
| 修复代码扫描发现项      | [`POST .../findings/{finding_id}/remediate`](/zh/api-reference/v3/code-scans/organizations-code-scans-remediate)   | [`POST .../findings/{finding_id}/remediate`](/zh/api-reference/v3/code-scans/enterprise-code-scans-remediate)          |

这些操作同样适用于 `/v3beta1/...` 路径，请求和响应结构完全相同。该表涵盖扫描工作流程；v3 OpenAPI 规范还在两个作用域下提供自动扫描调度 (`POST .../code-scans/{scan_id}/auto-scan`) 和 Profile 重新分配 (`PUT .../code-scans/{scan_id}/profile`) 。

以下步骤以组织作用域为例；如果你的凭据限定为企业作用域，请改用企业路径和相应权限。

<div id="typical-flow">
  ## 典型流程
</div>

<Steps>
  <Step title="选择 Profile（可选）">
    调用 [列出代码扫描 Profile](/zh/api-reference/v3/code-scans/organizations-code-scans-profiles)，选择一个 `discover` 模式的 Profile。若要使用默认安全扫描，请省略 Profile。
  </Step>

  <Step title="启动扫描">
    ```bash theme={null}
    curl -X POST "https://api.devin.ai/v3/organizations/$ORG_ID/code-scans" \
      -H "Authorization: Bearer $DEVIN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"repo_name": "acme/payments"}'
    ```

    响应状态码为 `201`，并包含扫描记录。请保存 `scan_id`。`409` 表示该组织的扫描待办列表已满，请稍后重试。
  </Step>

  <Step title="轮询直至完成">
    调用 [列出代码扫描](/zh/api-reference/v3/code-scans/organizations-code-scans-list) (按 `repo_name` 过滤) ，直到扫描的 `status` 为 `completed` (或 `failed` / `cancelled`) 。这三种状态均为终止状态。`awaiting_user_input` 仅适用于从 web app 启动的交互式扫描；通过 API 启动的扫描均为非交互式，不会进入该状态。
  </Step>

  <Step title="查看发现项">
    使用 `scan_id` 调用 [列出代码扫描发现项](/zh/api-reference/v3/code-scans/organizations-code-scans-findings)，分页查看发现项；也可按 `severity` 和 `status` 过滤。
  </Step>

  <Step title="修复">
    调用 [修复代码扫描发现项](/zh/api-reference/v3/code-scans/organizations-code-scans-remediate)，让 Devin 创建拉取请求以修复发现项。
  </Step>
</Steps>

<div id="ingestion-scans">
  ## 导入扫描
</div>

要让 Devin 对其他扫描器生成的发现项进行分流，请在 Web 应用中创建一个 `ingest` 模式的 Profile，通过 [attachments API](/zh/api-reference/v3/attachments/post-organizations-attachments) 上传扫描器报告 (这是一个组织级端点，除代码扫描权限外，还需要 `UseDevinSessions` 组织权限) ，然后使用 `profile_id` 和 `attachment_urls` 调用 [启动导入扫描](/zh/api-reference/v3/code-scans/organizations-code-scans-start-ingestion) (或相应的 [企业 端点](/zh/api-reference/v3/code-scans/enterprise-code-scans-start-ingestion)) 。
