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

# Get company orbit

> Get company metadata, role mix, current people, and recent leavers.

Get a company's metadata and a bounded orbit of people. The path value can be a FreshTalent company key, an exact company name, or a LinkedIn company URL containing the value. URL-encode names or URLs before placing them in the path.

The response contains up to 40 `current` people and up to 40 `leavers`. These arrays are not paginated and are not guaranteed to contain every person at the company. Each person row has the full Person field shape but only the two most recent/current positions are hydrated. See [Person response shapes](/api-reference/people/schema).

<ParamField path="key" type="string" required>
  Company key, exact company name, or a LinkedIn company URL. The Gateway decodes the path value before lookup.
</ParamField>

<RequestExample>
  ```bash cURL theme={"theme":{"light":"github-light","dark":"github-dark"}}
  curl --fail-with-body --max-time 30 "https://api.freshtalent.ai/v1/companies/anduril" \
    -H "Authorization: Bearer $FRESHTALENT_API_KEY"
  ```

  ```javascript JavaScript (fetch) theme={"theme":{"light":"github-light","dark":"github-dark"}}
  const key = "anduril";
  const response = await fetch(
    `https://api.freshtalent.ai/v1/companies/${encodeURIComponent(key)}`,
    { signal: AbortSignal.timeout(30_000), headers: { Authorization: `Bearer ${process.env.FRESHTALENT_API_KEY}` } },
  );
  if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
  const body = await response.json();
  console.log(body.data.company.name, body.data.current.length, body.data.leavers.length);
  ```

  ```python Python (stdlib) theme={"theme":{"light":"github-light","dark":"github-dark"}}
  import json
  import os
  from urllib.parse import quote
  from urllib.request import Request, urlopen

  key = "anduril"
  url = "https://api.freshtalent.ai/v1/companies/" + quote(key, safe="")
  request = Request(
      url,
      headers={"Authorization": f"Bearer {os.environ['FRESHTALENT_API_KEY']}"},
  )
  with urlopen(request, timeout=30) as response:
      body = json.load(response)
  print(body["data"]["company"]["name"])
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "data": {
      "company": {
        "key": "anduril",
        "name": "Anduril Industries",
        "linkedin_url": "https://www.linkedin.com/company/anduril-industries",
        "current_count": 1,
        "alum_count": 0,
        "role_mix": {
          "forward-deployed-engineer": 1
        }
      },
      "current": [
        {
          "slug": "derek-morrow",
          "full_name": "Derek Morrow",
          "headline": "FDE, Anduril",
          "linkedin_url": "https://www.linkedin.com/in/derek-morrow",
          "profile_picture_url": null,
          "location": {
            "city": "New York",
            "region": "New York",
            "country": "United States"
          },
          "is_open_to_work": false,
          "is_between_roles": false,
          "between_roles_since": null,
          "is_exploring": false,
          "exploring_since": null,
          "exploring_reasons": [],
          "exploring_interpretation": null,
          "connections_count": 500,
          "followers_count": null,
          "last_enriched_at": "2026-09-07T10:00:00.000Z",
          "dq_flags": [],
          "github": null,
          "x": null,
          "positions": [
            {
              "company": "Anduril",
              "company_url": "https://www.linkedin.com/company/anduril-industries",
              "title": "FDE",
              "started_at": "2025-01",
              "ended_at": null,
              "tenure_months": 14,
              "is_current": true,
              "role_family": "forward-deployed-engineer"
            }
          ],
          "education": [],
          "skills": [],
          "languages": [],
          "match": {}
        }
      ],
      "leavers": []
    }
  }
  ```
</ResponseExample>

`company.name` and `company.linkedin_url` can be `null`. `current_count` and `alum_count` are graph counts and can be larger than the returned arrays. `role_mix` maps each non-null recorded role family to its relationship count. `current` includes current positions; `leavers` includes people with an ended, non-current position. Counts and returned arrays use different predicates: `alum_count` includes an explicitly non-current position or any recorded end date, while `leavers` requires both a normalized end date and `is_current: false`. A person with multiple stints can qualify for both current and alumni groups.

## Response schema

| Field                                                   | Type           | Meaning                                                                                          |
| ------------------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------ |
| `data.company`                                          | object         | Company summary                                                                                  |
| `data.company.key`                                      | string         | Company key                                                                                      |
| `data.company.name`, `data.company.linkedin_url`        | string or null | Display identity                                                                                 |
| `data.company.current_count`, `data.company.alum_count` | integer        | Visible graph counts, not array lengths                                                          |
| `data.company.role_mix`                                 | object         | Role-family keys mapped to integer position counts                                               |
| `data.current`, `data.leavers`                          | Person\[]      | Bounded previews, up to 40 per array; see [Person response shapes](/api-reference/people/schema) |

## Errors and recovery

* `404 not_found`: no visible company matched the decoded key, exact name, or LinkedIn URL fragment. Search first with [Search companies](/api-reference/companies/search), then retry with the returned `key`.
* `401 unauthorized`: provide a valid API key in `Authorization: Bearer ...`.
* `402 payment_required`: restore active organization access.
* `5xx` or a transient network failure: retry this read with bounded backoff, jitter, and a timeout.
* `429`: retry this idempotent `GET` with exponential backoff and jitter after slowing down. The shared Gateway limit is 300 requests per minute per client IP as the Gateway sees it. Honor `Retry-After`; see [Rate limits](/rate-limits).

See [Errors](/errors) for the common error envelope. There is no pagination cursor for the orbit arrays; use [Search people](/api-reference/people/search) with a company filter when you need a separately paged people result.

## Next steps

Create a company Target with [POST /targets](/api-reference/targets/create) and `{ "input": "Anduril", "kind": "company" }` to monitor the company network.
