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

# Company Intelligence

> Research and enrich company data with additional information and find associated people.

## Use case

Research and enrich company data with additional firmographic information and find associated people. Use it for sales outreach, CRM enrichment, lead qualification, or investigative diligence.

## Endpoint

```http theme={null}
POST https://api.sixtyfour.ai/company-intelligence
```

<Card title="API Reference" icon="code" href="/api-reference/enrichment/company-intelligence-sync">
  See the full request/response schema and parameters in the API Reference.
</Card>

## Pricing

See [Credits & Pricing Guide](/guides/credits-and-pricing) for credit costs by tier.

## Errors

For error responses (400, 403, 422, etc.), see [Handling Errors](/api-reference/errors).

## Tiers

The `tier` parameter controls research depth and cost. To override the default, pass `tier` in the request body. See [Sync usage](#sync-usage) for an example.

| Tier | Description | Access |
| - | - | - |
| `micro` | Lightweight enrichment — returns up to 10 fields. Best for very high-volume lookups where only minimal firmographic data is needed. | Access is granted case-by-case by our team. |
| `low` (default) | Baseline tier — fast and cheap. Good for high-volume firmographic enrichment. | All orgs |
| `medium` | Deeper research — more fields filled, more sources. | All orgs |
| `high` | **OSINT-grade investigation** — deeply recursive crawling across the open web, dark web, directories, proprietary sources. Designed for high-stakes accounts, sensitive diligence, and investigative workflows. | **Exclusive — access is granted case-by-case by our team. Contact sales to request.** |

<Warning>
  If `tier` is omitted, `low` is used. Requests with `tier: "micro"` or `tier: "high"` on an org without access return **403** — see [Handling Errors](/api-reference/errors#403-forbidden).
</Warning>

## Using the `struct` field

The `struct` field defines exactly what data you want back. Each key becomes a field in `structured_data`, and its value tells the agent what to find.

You can pass either a plain-English description or an object with `description` and `type`:

```json theme={null}
{
  "struct": {
    "instagram_url": "Instagram url for the photography company",
    "num_employees": {"description": "Approximate employee count", "type": "int"}
  }
}
```

The agent uses these descriptions to guide its research. Be specific — `"company's primary Instagram handle"` returns better results than `"social"`.

For supported types, type resolution priority, and casting examples, see [Struct & Type Casting](/guides/struct-and-type-casting).

## Choosing related parameters

### `find_people` vs `full_org_chart`

* **`find_people`** — Finds specific people associated with the company. Pair with `people_focus_prompt` to filter by role or seniority.
* **`full_org_chart`** — Returns a compact view of employees grouped by department (capped per department). It's broad coverage of who works where, not a literal reporting tree or an exhaustive employee dump. When `true`, the response includes a top-level `org_chart` field.

Use `find_people` for targeted lead discovery and `full_org_chart` for department-level visibility.

### `research_plan` vs `people_focus_prompt`

* **`research_plan`** — Methodology. Tells the agent **where to look** (e.g., `"Check the 'About Us' page and LinkedIn Company People tab"`).
* **`people_focus_prompt`** — Criteria. Tells the agent **who to find** (e.g., `"Find the VP of Marketing and the CTO"`).

## Timeouts and parallelization

This endpoint performs deep research and is a long-running operation. Typical P95 runtime is about 5 minutes and can reach 10 minutes for complex companies. We are actively working on performance improvements.

* **Set client timeouts appropriately**: If you call the sync endpoint, configure your HTTP client with a timeout of at least **15 minutes**.
* **Prefer async in production**: Use `POST /company-intelligence-async` and poll `GET /job-status/{task_id}`.
* **Parallelize for throughput**: Submit multiple async jobs in parallel (bounded concurrency) rather than waiting for each to complete sequentially.

## Understanding scores

| Field | Meaning | Range |
| - | - | - |
| `confidence_score` | **Global quality score** — overall quality, consistency, and correctness of the returned data. | 0–10 |
| `score` | **Relevance score** — likelihood that a returned person matches the prompt or is helpful. Returned per lead. | 0–10 |

<Warning>The `findings` field on the response is deprecated. It currently returns an empty list and will be removed in a future update.</Warning>

## Sync usage

Make a direct request and wait for the response. Enrichment can take several minutes depending on depth of research.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.sixtyfour.ai/company-intelligence" \
    -H "x-api-key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "target_company": {
        "company_name": "Pacific View Studios",
        "website": "https://pacificview.studio"
      },
      "struct": {
        "instagram_url": "Instagram url for the photography company",
        "num_employees": "How many employees work there"
      },
      "tier": "medium",
      "find_people": true
    }'
  ```

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

  response = requests.post(
      "https://api.sixtyfour.ai/company-intelligence",
      headers={
          "x-api-key": "YOUR_API_KEY",
          "Content-Type": "application/json"
      },
      json={
          "target_company": {
              "company_name": "Pacific View Studios",
              "website": "https://pacificview.studio"
          },
          "struct": {
              "instagram_url": "Instagram url for the photography company",
              "num_employees": "How many employees work there"
          },
          "tier": "medium",
          "find_people": True
      },
      timeout=900
  )

  response.raise_for_status()
  results = response.json()
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://api.sixtyfour.ai/company-intelligence", {
    method: "POST",
    headers: {
      "x-api-key": "YOUR_API_KEY",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      target_company: {
        company_name: "Pacific View Studios",
        website: "https://pacificview.studio"
      },
      struct: {
        instagram_url: "Instagram url for the photography company",
        num_employees: "How many employees work there"
      },
      tier: "medium",
      find_people: true
    })
  });

  const results = await response.json();
  console.log(results);
  ```
</CodeGroup>

## Async pattern

For production workflows, use `/company-intelligence-async` to submit a job and poll for results. This avoids long-lived HTTP connections during deep research runs.

The flow is:

1. **Submit** — `POST /company-intelligence-async` with the same body as the sync endpoint. Response includes a `task_id`.
2. **Poll** — `GET /job-status/{task_id}` until `status` is `completed`, `failed`, `cancelled`, `terminated`, or `timed_out`.
3. **Read result** — When `completed`, the full enrichment is in the `result` field.

<Note>The async start endpoint returns uppercase `RUNNING`. Subsequent `/job-status/{task_id}` calls return lowercase statuses. `charge_amount` is returned in cents, not credits.</Note>

### Polling example

<CodeGroup>
  ```python Python theme={null}
  import requests
  import time

  response = requests.post(
      "https://api.sixtyfour.ai/company-intelligence-async",
      headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
      json={
          "target_company": {
              "company_name": "Pacific View Studios",
              "website": "https://pacificview.studio"
          },
          "struct": {
              "instagram_url": "Instagram url for the photography company",
              "num_employees": "How many employees work there"
          },
          "tier": "medium",
          "find_people": True
      }
  )
  response.raise_for_status()
  task_id = response.json()["task_id"]

  while True:
      status = requests.get(
          f"https://api.sixtyfour.ai/job-status/{task_id}",
          headers={"x-api-key": "YOUR_API_KEY"}
      ).json()

      if status["status"] == "completed":
          results = status["result"]
          break
      if status["status"] in ("failed", "cancelled", "terminated", "timed_out"):
          raise RuntimeError(f"Job {status['status']}: {status.get('error', 'Unknown error')}")

      time.sleep(10)
  ```

  ```javascript JavaScript theme={null}
  async function runAsync() {
    const start = await fetch("https://api.sixtyfour.ai/company-intelligence-async", {
      method: "POST",
      headers: { "x-api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
      body: JSON.stringify({
        target_company: {
          company_name: "Pacific View Studios",
          website: "https://pacificview.studio"
        },
        struct: {
          instagram_url: "Instagram url for the photography company",
          num_employees: "How many employees work there"
        },
        tier: "medium",
        find_people: true
      })
    });
    const { task_id } = await start.json();

    while (true) {
      const status = await (await fetch(
        `https://api.sixtyfour.ai/job-status/${task_id}`,
        { headers: { "x-api-key": "YOUR_API_KEY" } }
      )).json();

      if (status.status === "completed") return status.result;
      if (["failed", "cancelled", "terminated", "timed_out"].includes(status.status)) {
        throw new Error(`Job ${status.status}: ${status.error || "Unknown error"}`);
      }
      await new Promise(r => setTimeout(r, 10000));
    }
  }
  ```
</CodeGroup>


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