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

# 列出云浏览器配置

> 检索你账户下所有已保存的云浏览器配置文件，返回包含分页元数据的配置列表以及账户配额信息，包括你可保存的配置数上限、可同时运行的并发上限以及当前已占用的运行槽位数，方便你在启动新浏览器前检查剩余容量，也可以在一个请求中轮询所有配置文件的实时运行状态和交互式查看器连接地址。

检索你账户下所有已保存的云浏览器配置文件，并附带一些全账户配额字段，告诉你最多可保存多少配置文件（`limit`）、同时可运行多少个（`runningLimit`），以及当前已占用多少个运行槽位（`runningCount`）。此端点接受 `x-api-key`、`Authorization: Bearer` 会话 JWT 或 Dashboard 会话 Cookie 进行认证。

<ParamField query="page" default="1" type="integer">
  要获取的页码。默认为 `1`；无效或非正值会回退到 `1`。上限为 `10000`。
</ParamField>

<ParamField query="pageSize" default="10" type="integer">
  每页返回的配置文件数量。默认为 `10`；无效或非正值会回退到 `10`。最大值为 `10`。
</ParamField>

## 响应

<ResponseField name="ok" type="boolean">
  成功时始终为 `true`。
</ResponseField>

<ResponseField name="data" type="array">
  所请求页面的已保存云浏览器配置文件对象列表。

  <Expandable title="Profile 对象字段">
    <ResponseField name="id" type="string (UUID)">
      持久性配置文件标识符。在启动、停止、详情和删除的路径参数中使用该值。
    </ResponseField>

    <ResponseField name="source" type="string">
      配置文件来源：通过 `POST /cloud-browsers` 创建的是 `manual`，通过 `POST /cloud-browsers/launch` 创建的是 `launch`。
    </ResponseField>

    <ResponseField name="deleteOnStop" type="boolean">
      当前 API 响应中始终为 `false`。配置文件在停止后会保留，除非显式删除。
    </ResponseField>

    <ResponseField name="remark" type="string | null">
      创建时通过 PATCH 保存的可选标签。
    </ResponseField>

    <ResponseField name="browserSettings" type="object">
      已保存的配置（viewport、locale、timezoneId、代理显示信息、cookies、指纹）。代理凭据已从响应中移除。
    </ResponseField>

    <ResponseField name="proxyDisplayIp" type="string | null">
      最后观察到的代理出口 IP 地址，如果未设置则为 `null`。
    </ResponseField>

    <ResponseField name="proxyDisplayRegion" type="string | null">
      最后观察到的代理区域，如果未设置则为 `null`。
    </ResponseField>

    <ResponseField name="lastOpenedAt" type="string (RFC3339) | null">
      最近一次成功启动的时间戳，如果配置文件从未运行过则为 `null`。
    </ResponseField>

    <ResponseField name="updatedAt" type="string (RFC3339)">
      最近一次配置文件更新的时间戳。
    </ResponseField>

    <ResponseField name="runtime" type="object">
      此配置文件的当前运行时状态。

      <Expandable title="Runtime 字段">
        <ResponseField name="runtimeKind" type="string">
          `neko` 或 `worker_cdp`。
        </ResponseField>

        <ResponseField name="status" type="string">
          `starting`、`running`、`stopping` 或 `stopped`。`starting` 和 `stopping` 都会占用一个运行槽位。
        </ResponseField>

        <ResponseField name="sessionId" type="string">
          存在活跃会话时出现。
        </ResponseField>

        <ResponseField name="expiresAt" type="string (RFC3339)">
          会话过期时间戳；存在活跃会话时出现。
        </ResponseField>

        <ResponseField name="connectUrl" type="string">
          指向交互式浏览器查看器的直接 URL。仅在 `status` 为 `running` 时出现。用已登录为配置文件所有者的浏览器打开它。切勿向此 URL 追加 API 密钥或代理凭据。
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  标准分页信封。

  <Expandable title="Pagination 字段">
    <ResponseField name="page" type="integer">
      当前页码。
    </ResponseField>

    <ResponseField name="pageSize" type="integer">
      此页返回的项目数量。
    </ResponseField>

    <ResponseField name="total" type="integer">
      所有页面中的已保存配置文件总数。
    </ResponseField>

    <ResponseField name="totalPages" type="integer">
      基于当前 `pageSize` 的总页数。
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="limit" type="integer">
  你套餐的保存配置文件上限：你同时最多可保存的配置文件数量。达到此上限后再创建新配置文件会返回 `409`。
</ResponseField>

<ResponseField name="runningLimit" type="integer">
  你账户的并发运行上限。值为 `0` 时将阻止所有新启动。未设置或为负值时默认为 `1`。降低此值不会停止当前正在运行的会话。
</ResponseField>

<ResponseField name="runningCount" type="integer">
  当前在你的所有配置文件、所有页面和所有 API 密钥中处于 `starting`、`running` 或 `stopping` 状态的会话总数。此计数不包括通过 `/cdp/sessions` 创建的临时远程 CDP 会话。
</ResponseField>

| Code | Meaning |
| - | - |
| `200` | 成功 |
| `401` | 未认证 |
| `403` | 会话数已达上限 |
| `500` | 内部错误 |
| `503` | 运行时不可用 |

<Note>
  `runningCount` 包含 **所有三种活跃状态**（`starting`、`running` 和 `stopping`），因为这三种状态都会占用一个运行槽位。会话直到达到 `stopped` 状态才会释放其槽位。
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl --fail-with-body --silent --show-error --max-time 65 \
    -X GET 'https://api.adscrawl.net/cloud-browsers?page=1&pageSize=10' \
    -H 'x-api-key: <api-key>'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 OK theme={null}
  {
    "ok": true,
    "data": [
      {
        "id": "<browser-id>",
        "source": "manual",
        "deleteOnStop": false,
        "remark": "work profile",
        "browserSettings": {
          "viewport": {
            "width": 1440,
            "height": 900
          }
        },
        "proxyDisplayIp": null,
        "proxyDisplayRegion": null,
        "lastOpenedAt": null,
        "updatedAt": "2026-09-07T08:00:00.000Z",
        "runtime": {
          "runtimeKind": "neko",
          "status": "stopped"
        }
      }
    ],
    "pagination": {
      "page": 1,
      "pageSize": 10,
      "total": 1,
      "totalPages": 1
    },
    "limit": 10,
    "runningLimit": 1,
    "runningCount": 0
  }
  ```
</ResponseExample>
