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

# Protocols: REST and Connect RPC

> Every team v2 operation is callable via REST or Connect RPC

<sup>Questions or issues? Contact us at [api-support@manus.ai](mailto:api-support@manus.ai).</sup>

Every team v2 service is generated from a protobuf definition and exposed over **two interchangeable protocols**:

* **REST** — `POST/GET /v2/<resource>.<verb>` with JSON bodies / query strings. This is what the per-endpoint reference pages document.
* **Connect RPC** — `POST /<package>.<Service>/<Method>` with the same JSON body shape (or `application/connect+proto` for typed Connect clients).

Both share the same authentication header (`X-API-Key`), the same request/response payload, and the same `{ok, request_id, ...}` response wrapper.

## URL mapping

### Enterprise Data Export (`dataexport.v2.EnterpriseDataExportV2Service`)

| Operation      | REST                                            | Connect RPC                                                        |
| -------------- | ----------------------------------------------- | ------------------------------------------------------------------ |
| CreateExport   | `POST /v2/enterprise.export.create`             | `POST /dataexport.v2.EnterpriseDataExportV2Service/CreateExport`   |
| GetExport      | `GET /v2/enterprise.export.detail?uid=...`      | `POST /dataexport.v2.EnterpriseDataExportV2Service/GetExport`      |
| ListExports    | `GET /v2/enterprise.export.list?user=...`       | `POST /dataexport.v2.EnterpriseDataExportV2Service/ListExports`    |
| GetDownloadURL | `GET /v2/enterprise.export.downloadUrl?uid=...` | `POST /dataexport.v2.EnterpriseDataExportV2Service/GetDownloadURL` |
| ListTasks      | `GET /v2/enterprise.task.list?user=...`         | `POST /dataexport.v2.EnterpriseDataExportV2Service/ListTasks`      |

### Enterprise SIEM Integrations — export API (`observability.v2.EnterpriseComplianceV2Service`)

This service is authenticated with a `KEY_TYPE_SIEM` enterprise API key; other key types are rejected. The streaming (OTLP push) side is configured in the Manus console and is not part of this REST/RPC surface.

| Operation      | REST                                                       | Connect RPC                                                           |
| -------------- | ---------------------------------------------------------- | --------------------------------------------------------------------- |
| CreateExport   | `POST /v2/enterprise.compliance.export.create`             | `POST /observability.v2.EnterpriseComplianceV2Service/CreateExport`   |
| GetExport      | `GET /v2/enterprise.compliance.export.detail?uid=...`      | `POST /observability.v2.EnterpriseComplianceV2Service/GetExport`      |
| GetDownloadURL | `GET /v2/enterprise.compliance.export.downloadUrl?uid=...` | `POST /observability.v2.EnterpriseComplianceV2Service/GetDownloadURL` |

### Team User Management (`team.v2.TeamUserManagementApiV2Service`)

| Operation       | REST                                 | Connect RPC                                                    |
| --------------- | ------------------------------------ | -------------------------------------------------------------- |
| ListUsers       | `GET /v2/team.user.list`             | `POST /team.v2.TeamUserManagementApiV2Service/ListUsers`       |
| GetUser         | `GET /v2/team.user.detail?email=...` | `POST /team.v2.TeamUserManagementApiV2Service/GetUser`         |
| CreateUser      | `POST /v2/team.user.create`          | `POST /team.v2.TeamUserManagementApiV2Service/CreateUser`      |
| UpdateUser      | `POST /v2/team.user.update`          | `POST /team.v2.TeamUserManagementApiV2Service/UpdateUser`      |
| DelegateProfile | `POST /v2/team.user.delegate`        | `POST /team.v2.TeamUserManagementApiV2Service/DelegateProfile` |
| ReclaimProfile  | `POST /v2/team.user.reclaim`         | `POST /team.v2.TeamUserManagementApiV2Service/ReclaimProfile`  |
| RenameProfile   | `POST /v2/team.user.rename`          | `POST /team.v2.TeamUserManagementApiV2Service/RenameProfile`   |
| RemoveMember    | `POST /v2/team.user.remove`          | `POST /team.v2.TeamUserManagementApiV2Service/RemoveMember`    |

### Shared Team Asset Governance (`team.v2.TeamAssetAuditApiV2Service` and `team.v2.TeamAssetManageApiV2Service`)

The audit and management surfaces live on two separate services so they can be authenticated with independently-rotated API keys (`KEY_TYPE_TEAM_ASSET_AUDIT` vs. `KEY_TYPE_TEAM_ASSET_MGMT`).

| Operation             | REST                               | Connect RPC                                                       |
| --------------------- | ---------------------------------- | ----------------------------------------------------------------- |
| ListShareableAssets   | `GET /v2/team.asset.list`          | `POST /team.v2.TeamAssetAuditApiV2Service/ListShareableAssets`    |
| UpdateAssetShareScope | `POST /v2/team.asset.update_scope` | `POST /team.v2.TeamAssetManageApiV2Service/UpdateAssetShareScope` |

## When to choose which

* **Use REST** for ad-hoc curl, third-party HTTP clients, no-code platforms, and the auto-rendered "Try it" panel on each endpoint page.
* **Use Connect RPC** for typed clients (Go, TypeScript, Python with generated stubs) where you want compile-time guarantees on request and response shapes. Connect supports the same wire format over HTTP+JSON, so any plain HTTP client also works.

The body shape is identical either way. GET REST endpoints use query parameters; the equivalent Connect call moves those same fields into a JSON body.

## Connect RPC examples

Same operation (`GetExport`) called three ways:

<CodeGroup>
  ```bash buf curl theme={null}
  buf curl \
    --schema buf.build/manus/dataexport \
    --header 'X-API-Key: <your-api-key>' \
    --data '{"uid":"5YX76pz7Dga3yztNVw97Dh"}' \
    https://api.manus.im/dataexport.v2.EnterpriseDataExportV2Service/GetExport
  ```

  ```typescript Connect (TypeScript) theme={null}
  import { createPromiseClient } from "@connectrpc/connect";
  import { createConnectTransport } from "@connectrpc/connect-web";
  import { EnterpriseDataExportV2Service } from "./gen/dataexport/v2/export_enterprise_v2_connect";

  const transport = createConnectTransport({
    baseUrl: "https://api.manus.im",
    interceptors: [
      (next) => async (req) => {
        req.header.set("X-API-Key", process.env.MANUS_ENTERPRISE_API_KEY!);
        return next(req);
      },
    ],
  });

  const client = createPromiseClient(EnterpriseDataExportV2Service, transport);
  const res = await client.getExport({ uid: "5YX76pz7Dga3yztNVw97Dh" });
  console.log(res.record);
  ```

  ```go Connect (Go) theme={null}
  package main

  import (
      "context"
      "log"
      "net/http"

      "connectrpc.com/connect"
      dataexportv2 "example.com/gen/dataexport/v2"
      "example.com/gen/dataexport/v2/dataexportv2connect"
  )

  func main() {
      client := dataexportv2connect.NewEnterpriseDataExportV2ServiceClient(
          http.DefaultClient,
          "https://api.manus.im",
      )
      req := connect.NewRequest(&dataexportv2.GetExportRequest{
          Uid: "5YX76pz7Dga3yztNVw97Dh",
      })
      req.Header().Set("X-API-Key", "<your-api-key>")
      res, err := client.GetExport(context.Background(), req)
      if err != nil {
          log.Fatal(err)
      }
      log.Println(res.Msg.Record)
  }
  ```
</CodeGroup>

<Tip>
  The auto-rendered "Try it" panel on each endpoint page only exercises the REST surface. For Connect-specific client generation, see the [Connect RPC docs](https://connectrpc.com/docs).
</Tip>
