> ## 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.

# Import Connectors

> Import LinkedIn connectors for referral opportunity discovery

Import [connectors](/api-reference/list-connectors) by LinkedIn URL. Connectors are the people whose
connections Clustr analyzes to find referral opportunities. Processing is **asynchronous**. Results come
via [webhook](/webhook) or email.

<Info>
  **Renamed.** This endpoint was previously `POST /network/import/contacts` and its body field was
  `contacts`. Both still work, so existing integrations keep running. New integrations should use
  `/network/import/connectors` with `connectors`. Send `connectors` or `contacts`, not both.
</Info>

## Body

<ParamField body="connectors" type="object[]">
  1–50 connectors to import (use this OR `linkedin_urls`, not both).

  <Expandable title="fields">
    <ParamField body="linkedin_url" type="string" required>
      Profile URL. Must be `/in/` format, not `/in/ACwAAA...`
    </ParamField>

    <ParamField body="record_id" type="string">
      Your CRM identifier (passed through to webhook)
    </ParamField>

    <ParamField body="owner_email" type="string">
      Who owns this connector. They own everything it produces: the opportunities this import
      finds, and the ones later imports find too. Must already be in your owner directory, or be
      added with [Create Owner](/api-reference/create-owner) first. To change it later without
      reimporting, use [Set Connector Owner](/api-reference/set-connector-owner).
    </ParamField>

    <ParamField body="connector_tag" type="string">
      Must match an existing tag in Settings
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="contacts" type="object[]" deprecated>
  Previous name for `connectors`. Still accepted, same fields. Use `connectors` instead.
</ParamField>

<ParamField body="linkedin_urls" type="string[]">
  Simple alternative: 1–50 LinkedIn URLs without metadata (use this OR `connectors`, not both).
</ParamField>

<ParamField body="webhook_url" type="string">
  Receives results when processing completes
</ParamField>

<ParamField body="completion_email" type="string">
  Email for job completion notification
  <Warning>A notification email will be sent to this address. This is not the connector's email.</Warning>
</ParamField>

<ParamField body="max_opportunities" type="integer">
  Cap per connector. Omit for unlimited.
</ParamField>

<ParamField body="full_history" type="boolean" default="false">
  Include engagement history in webhook response
</ParamField>

<ParamField body="custom" type="object">
  Passed through unchanged to webhook response
</ParamField>

<ParamField body="filters" type="object">
  <Expandable title="filter fields">
    <ParamField body="confidence_score_ranges" type="string[]">
      `"80-100"` `"60-79"` `"40-59"` `"0-39"`
    </ParamField>

    <ParamField body="seniority_levels" type="string[]">
      `"high"` `"mid"` `"low"`
    </ParamField>

    <ParamField body="employee_ranges" type="string[]">
      `"1-10"` `"11-50"` `"51-200"` `"201-500"` `"501-1000"` `"1001-5000"` `"5001-10000"` `"10001+"`
    </ParamField>

    <ParamField body="industries" type="string[]">
      LinkedIn industry names
    </ParamField>

    <ParamField body="countries" type="string[]">
      Country names
    </ParamField>
  </Expandable>
</ParamField>

<RequestExample>
  ```json Request Body theme={null}
  {
    "connectors": [
      {
        "linkedin_url": "https://www.linkedin.com/in/john-doe",
        "record_id": "CRM_12345",
        "owner_email": "alice@company.com",
        "connector_tag": "Friend"
      }
    ],
    "webhook_url": "https://your-webhook.com/endpoint",
    "max_opportunities": 50,
    "full_history": true,
    "custom": {
      "your_field": "value"
    },
    "filters": {
      "confidence_score_ranges": ["80-100", "60-79"],
      "seniority_levels": ["high", "mid"]
    }
  }
  ```

  ```bash cURL theme={null}
  curl -X POST https://api.clustr-ai.com/api/public/network/import/connectors \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "connectors": [
        {
          "linkedin_url": "https://www.linkedin.com/in/john-doe",
          "record_id": "CRM_12345",
          "owner_email": "alice@company.com"
        }
      ],
      "webhook_url": "https://your-webhook.com/endpoint"
    }'
  ```

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

  requests.post(
      "https://api.clustr-ai.com/api/public/network/import/connectors",
      headers={"Authorization": "Bearer YOUR_API_KEY"},
      json={
          "connectors": [{"linkedin_url": "https://www.linkedin.com/in/john-doe"}],
          "webhook_url": "https://your-webhook.com/endpoint",
      },
  )
  ```

  ```javascript JavaScript theme={null}
  await fetch("https://api.clustr-ai.com/api/public/network/import/connectors", {
    method: "POST",
    headers: { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
    body: JSON.stringify({
      connectors: [{ linkedin_url: "https://www.linkedin.com/in/john-doe" }],
      webhook_url: "https://your-webhook.com/endpoint",
    }),
  });
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "success": true,
    "data": {
      "message": "Successfully queued prospects for processing (webhook registered)",
      "job_id": "988f0602-1ddd-49ec-aef6-e0a6d680b5a5",
      "stats": {
        "total_submitted": 1,
        "valid_processed": 1,
        "invalid_urls": 0
      }
    }
  }
  ```

  ```json 400 theme={null}
  {
    "success": false,
    "error": {
      "message": "Invalid request body",
      "code": "BAD_REQUEST"
    }
  }
  ```

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