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

# Set Connector Owner

> Assign an owner to a connector already in your network, without reimporting

Assign an owner to a [connector](/api-reference/list-connectors) that is already in your network. No
reimport, no job, no credits. The change is immediate.

<Info>
  **An owner owns a connector, and everything that connector produces.** There is no such thing
  as owning a single opportunity: [Update Opportunity](/api-reference/update-opportunity) rejects
  owner fields and points here.

  The other way to set this is `owner_email` on
  [Import Connectors](/api-reference/import-connectors), at import time. This endpoint is how you
  set or change it afterwards, without reimporting.
</Info>

Assigning an owner here does three things:

1. The connector reports that owner in [List Connectors](/api-reference/list-connectors) and counts
   toward it in [List Owners](/api-reference/list-owners) `connector_count`, `connectors_by_tag`
   and `opportunity_count`.
2. Every opportunity the connector already has moves to that owner, so their book does not split
   between the old and the new owner.
3. Opportunities discovered for that connector by **later** imports land owned, with no further
   calls.

## Path Parameters

<ParamField path="linkedinId" type="string" required>
  The connector's LinkedIn public identifier, as returned in `linkedin_id` by
  [List Connectors](/api-reference/list-connectors). For
  `https://www.linkedin.com/in/nicdelaye` that is `nicdelaye`.
</ParamField>

## Body

Send `owner_id` or `owner_email`, not both.

<ParamField body="owner_id" type="string">
  An owner id from [List Owners](/api-reference/list-owners).
</ParamField>

<ParamField body="owner_email" type="string">
  Resolved against your owner directory. The same address you would send as `owner_email` when
  importing.
</ParamField>

<ParamField body="create_owner_if_missing" type="boolean" default="false">
  Add `owner_email` to the directory when no owner holds it yet, instead of failing. Use this for
  self-service flows where the person being assigned may not be in the directory. No seat is used,
  no email is sent, and no access is granted. See
  [Owners are a directory, not a seat](/mcp-server#owners-are-a-directory-not-a-seat).
</ParamField>

<ParamField body="owner_name" type="string">
  Display name for an owner created by `create_owner_if_missing`. Ignored when the address already
  resolves to an owner.
</ParamField>

## Response Fields

<ResponseField name="connector_linkedin_id" type="string">
  The connector you assigned.
</ResponseField>

<ResponseField name="owner" type="object">
  The owner now accountable for the connector. Same shape as
  [Get Owner](/api-reference/get-owner). `null` after a `DELETE`.
</ResponseField>

<ResponseField name="updated_opportunities" type="integer">
  How many of the connector's existing opportunities were written to this owner. This is the
  connector's whole current book, so re-sending the same owner reports the same number rather
  than `0`.
</ResponseField>

## Removing an owner

`DELETE` on the same path clears it. The connector reports no owner afterwards and newly
discovered opportunities stop inheriting one. Opportunities already assigned keep the owner
stamped on them, so a `DELETE` never silently empties a live book — reassign the connector with
`PUT` if that is what you meant.

The `DELETE` is idempotent. Clearing an owner that is already absent succeeds.

<RequestExample>
  ```bash cURL theme={null}
  curl -X PUT "https://api.clustr-ai.com/api/public/network/connectors/nicdelaye/owner" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{"owner_email": "marine.b@example.com"}'
  ```

  ```bash cURL (self-service) theme={null}
  curl -X PUT "https://api.clustr-ai.com/api/public/network/connectors/nicdelaye/owner" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "owner_email": "new.rep@example.com",
      "owner_name": "New Rep",
      "create_owner_if_missing": true
    }'
  ```

  ```bash cURL (unassign) theme={null}
  curl -X DELETE "https://api.clustr-ai.com/api/public/network/connectors/nicdelaye/owner" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```python Python theme={null}
  import requests

  requests.put(
      "https://api.clustr-ai.com/api/public/network/connectors/nicdelaye/owner",
      headers={"Authorization": "Bearer YOUR_API_KEY"},
      json={"owner_email": "marine.b@example.com"},
  )
  ```

  ```javascript JavaScript theme={null}
  await fetch("https://api.clustr-ai.com/api/public/network/connectors/nicdelaye/owner", {
    method: "PUT",
    headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
    body: JSON.stringify({ owner_email: "marine.b@example.com" }),
  });
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "connector_linkedin_id": "nicdelaye",
      "owner": {
        "id": "8f1b2c34-5d6e-4f70-8a91-b2c3d4e5f607",
        "email": "marine.b@example.com",
        "first_name": "Marine",
        "last_name": "B",
        "avatar_url": "",
        "is_member": true,
        "opportunity_count": 63
      },
      "updated_opportunities": 63
    }
  }
  ```

  ```json 400 theme={null}
  {
    "success": false,
    "error": {
      "message": "No owner found for owner_email: ghost@example.com. Set create_owner_if_missing=true to add them to the owner directory.",
      "code": "BAD_REQUEST"
    }
  }
  ```

  ```json 404 theme={null}
  {
    "success": false,
    "error": {
      "message": "No connector found with linkedin id: nicdelaye",
      "code": "NOT_FOUND"
    }
  }
  ```

  ```json 401 theme={null}
  {
    "success": false,
    "error": { "message": "Invalid or missing API key", "code": "UNAUTHORIZED" }
  }
  ```
</ResponseExample>

## Bulk assignment

There is no batch form. Call this once per connector; the writes are independent, so they can run
concurrently. To find the connectors that still need an owner, list them with
[List Connectors](/api-reference/list-connectors) and `?owner_email=unassigned`.
