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

# Enterprise quickstart

> Create a workspace for a client, import LinkedIn URLs and read the paths Clustr finds

You will create a workspace for one client, import a list of LinkedIn URLs for it, wait for
the job, and read the paths.

You need an [organization key](https://docs.clustr-ai.com/enterprise/api-keys.md) with the default scopes. Set it once:

```bash theme={null}
export CLUSTR_ORG_KEY="clo_..."
export CLUSTR=https://api.clustr-ai.com
```

**1. Create a workspace**

```bash theme={null}
curl -X POST $CLUSTR/api/org/v1/tenants \
  -H "Authorization: Bearer $CLUSTR_ORG_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme", "externalId": "client-1234" }'
```

The answer is `201`. `data.id` is the workspace id. From now on you can name the workspace
by that id or by `client-1234`. `409` means the `externalId` is taken.

**2. Import LinkedIn URLs**

Send the list as `linkedin_urls`, and name the workspace in `X-Clustr-Tenant`. The
`Idempotency-Key` makes a retry safe.

```bash theme={null}
curl -X POST $CLUSTR/api/public/network/import/connectors \
  -H "Authorization: Bearer $CLUSTR_ORG_KEY" \
  -H "X-Clustr-Tenant: client-1234" \
  -H "Idempotency-Key: client-1234-batch-001" \
  -H "Content-Type: application/json" \
  -d '{ "linkedin_urls": ["https://www.linkedin.com/in/jane-doe", "https://www.linkedin.com/in/john-smith"] }'
```

Each URL is a profile in `/in/name` form. The answer carries `data.job_id`, which you use
in the next step, and `data.stats`.

* `400` means the list is longer than one job can take. Send it in several requests.
* `422` with code `ORG_LIMIT_EXCEEDED` means your contract limit is used up. See
  [Usage and limits](https://docs.clustr-ai.com/enterprise/usage-and-limits.md).

More on sizes and scheduling in [Bulk jobs](https://docs.clustr-ai.com/enterprise/bulk-jobs.md).

**3. Wait for the job**

Poll [Get Job Status](https://docs.clustr-ai.com/api-reference/get-job-status.md) until `status` is `COMPLETED`.

```bash theme={null}
curl $CLUSTR/api/public/jobs/$JOB_ID \
  -H "Authorization: Bearer $CLUSTR_ORG_KEY" \
  -H "X-Clustr-Tenant: client-1234"
```

A `FAILED` job carries `failure_reason`. To see which URLs did not make it, call
[List Job Items](https://docs.clustr-ai.com/api-reference/list-job-items.md) with `GET /api/public/jobs/{id}/items`.

Prefer a push? Set an [organization webhook](https://docs.clustr-ai.com/enterprise/webhooks.md) once and wait for
`job.completed`.

**4. Read the paths**

Search the workspace's opportunities with [Search Opportunities](https://docs.clustr-ai.com/api-reference/search-opportunities.md).

```bash theme={null}
curl "$CLUSTR/api/public/network/search/opportunities?page=1&page_size=100" \
  -H "Authorization: Bearer $CLUSTR_ORG_KEY" \
  -H "X-Clustr-Tenant: client-1234"
```

Raise `page` while `has_more` is `true`. Add `job_id=$JOB_ID` to see only what this job
found. Other filters, such as `domains`, narrow the list.

## What next

* Watch your volume: [Usage and limits](https://docs.clustr-ai.com/enterprise/usage-and-limits.md).
* Rename, suspend or delete the workspace: [Managing workspaces](https://docs.clustr-ai.com/enterprise/workspaces.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.