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

# Enrich companies

> Look up a full company profile — funding, leadership, ratings, and more — plus every job it's hiring for.

Every job returned by [search](/docs/api-reference/jobs/search-jobs) or the [feed](/docs/api-reference/feed/stream-the-job-feed) carries an embedded `company` summary — just `id`, `name`, `website`, and a handful of other fields. The Companies API turns that `id` into the full picture: funding history, leadership, ratings, press, technologies, acquisitions, and H-1B sponsorship data.

```bash theme={null}
curl "https://connect.jobo.world/api/companies/{id}"
```

```python theme={null}
from jobo_enterprise import JoboClient

with JoboClient(api_key="YOUR_API_KEY") as client:
    company = client.companies.get(company_id)
    print(company.name, company.funding_stage, company.company_size)
```

***

## Get a company profile

[`GET /api/companies/{id}`](/docs/api-reference/companies/retrieve-a-company) returns the fully enriched `CompanyDto` — identity, social profiles, headquarters, funding rounds, leadership, third-party ratings, press references, technologies, acquisitions, and H-1B statistics. See the [Company object reference](/docs/api-reference/companies/object) for the complete field list.

<Note>
  This endpoint is anonymous. It needs **no API key**, is **unmetered**, and is **CDN-cached**. That's what makes `company.details_url` — the link embedded in every job's company summary — safe to put directly in front of end users: it resolves from a browser with no auth wiring on your side.
</Note>

## List a company's jobs

[`GET /api/companies/{id}/jobs`](/docs/api-reference/companies/list-a-companys-jobs) returns every job currently posted by one company.

```bash theme={null}
curl "https://connect.jobo.world/api/companies/{id}/jobs?page=1&page_size=25" \
  -H "X-Api-Key: $JOBO_API_KEY"
```

```python theme={null}
from jobo_enterprise import JoboClient

with JoboClient(api_key="YOUR_API_KEY") as client:
    result = client.companies.get_jobs(company_id, page=1, page_size=25)
    for job in result.jobs:
        print(job.title, job.listing_url)
```

Unlike the profile endpoint, this one requires an API key and is metered per delivered job. `page_size` maxes out at 100. An unknown or nonexistent company ID returns `200` with an empty `jobs` array — not a `404` — so check the array length rather than the status code.

***

## Finding a company ID

You don't look up company IDs directly; you get them from jobs:

* Every job object's `company.id` (see the [Job object reference](/docs/api-reference/jobs/object)).
* `company.details_url` on that same embedded summary points straight at the profile endpoint, so you can link to it without constructing the URL yourself.

***

## What enrichment covers

At a high level, `CompanyDto` groups into:

* **Identity & social** — trade and legal name, description, website, logo, LinkedIn/Crunchbase/GitHub and other social profile URLs.
* **Corporate facts** — headquarters, company size, revenue band, operating status, IPO status, ticker symbol.
* **Funding** — stage, total raised, investors, and a detailed round-by-round history.
* **People** — founders and leadership, plus dated leadership-hire and layoff events.
* **Reputation** — third-party ratings (Glassdoor, Indeed, etc.) and press references.
* **Products & technology** — the tech stack, products offered, and software in use.
* **Relationships** — acquisitions, exits, subsidiaries, and featured-list appearances.
* **H-1B data** — sponsorships filed per year and by job title, for US companies.

Every list field defaults to `[]` and every scalar to `null` when Jobo doesn't have the data — an empty list means "unknown," not "the company has none." See the [Company object reference](/docs/api-reference/companies/object) for the full field-by-field breakdown.

***

## Errors

A missing or malformed company ID returns a standard error envelope — see [Errors](/docs/errors). Rate limiting on `/jobs` follows the same rules as the rest of the API; see [Rate limits](/docs/rate-limits).
