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

# Quickstart

> Make your first authenticated request to the Jobo API and understand the response, in about five minutes.

## 1. Get a key

Sign in to the [dashboard](https://enterprise.jobo.world) and go to **Settings → API Keys**. The key is shown once, so store it straight away.

```bash theme={null}
export JOBO_API_KEY="your_api_key_here"
```

## 2. Make a request

Search for software engineering jobs and take the first five results.

<CodeGroup>
  ```bash curl theme={null}
  curl -G "https://connect.jobo.world/api/jobs" \
    -H "X-Api-Key: $JOBO_API_KEY" \
    --data-urlencode "q=software engineer" \
    --data-urlencode "page_size=5"
  ```

  ```python Python theme={null}
  # pip install jobo-enterprise
  from jobo_enterprise import JoboClient

  with JoboClient(api_key="YOUR_API_KEY") as client:
      results = client.search.search(q="software engineer", page_size=5)

      print(f"{results.total} matching jobs")
      for job in results.jobs:
          print(f"  {job.title} — {job.company.name} ({job.workplace_type})")
  ```
</CodeGroup>

## 3. Read the response

Results come back in a `jobs` array with pagination metadata and a `facets` object. This example is abridged — a real job carries about 25 fields.

```json theme={null}
{
  "jobs": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Senior Software Engineer",
      "normalized_title": "software_engineer",
      "company": {
        "id": "b5e6f7a8-1234-5678-9abc-def012345678",
        "name": "Acme Corp",
        "website": "https://acme.com",
        "details_url": "https://connect.jobo.world/api/companies/b5e6f7a8-1234-5678-9abc-def012345678"
      },
      "locations": [
        {
          "location": "San Francisco, CA",
          "city": "San Francisco",
          "region": "California",
          "country": "United States",
          "latitude": 37.7749,
          "longitude": -122.4194
        }
      ],
      "compensation": {
        "min": 150000,
        "max": 200000,
        "currency": "USD",
        "period": "yearly"
      },
      "employment_type": "Full-time",
      "workplace_type": "Remote",
      "experience_level": "Senior",
      "source": "greenhouse",
      "date_posted": "2026-07-20T00:00:00Z",
      "updated_at": "2026-07-24T11:02:41Z",
      "listing_url": "https://boards.greenhouse.io/acmecorp/jobs/4567890",
      "apply_url": "https://boards.greenhouse.io/acmecorp/jobs/4567890#app"
    }
  ],
  "total": 12847,
  "page": 1,
  "page_size": 5,
  "total_pages": 2570,
  "facets": {
    "work_model": [
      { "key": "remote", "count": 5230 },
      { "key": "hybrid", "count": 2847 }
    ]
  }
}
```

Four things worth noticing immediately:

|                                         |                                                                                                                                                                 |
| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`id` is your primary key**            | A stable UUID that survives updates to the posting. Upsert on it.                                                                                               |
| **Enum fields return display values**   | `workplace_type` is `"Remote"`, but the *filter* value is `work_model=remote`. Facet keys are the filter values. See [Enums](/docs/api-reference/jobs/object#enums). |
| **`facets` come back by default**       | Server-computed counts you can build a filter UI from, with no extra request.                                                                                   |
| **`total_pages` is not an export plan** | Paginating 2,570 pages is the wrong tool. Use the [feed](/docs/guides/sync-a-database).                                                                              |

See [The job object](/docs/api-reference/jobs/object) for every field, its type, and its nullability.

***

## Filter the results

Filters are matched literally, so send canonical values — `remote`, not `Remote`; `senior`, not `senior level`.

```bash theme={null}
curl -G "https://connect.jobo.world/api/jobs" \
  -H "X-Api-Key: $JOBO_API_KEY" \
  --data-urlencode "q=frontend engineer" \
  --data-urlencode "work_model=remote" \
  --data-urlencode "experience_level=senior" \
  --data-urlencode "sources=greenhouse,lever"
```

<Warning>
  An unknown **parameter** is ignored and an unknown **value** matches nothing — neither is an error. A typo returns a plausible-looking `200`, so check `total` when a filter seems to have done nothing. There is no `is_remote` parameter; use `work_model`. See [silent failures](/docs/errors#silent-failures).
</Warning>

[Search recipes](/docs/guides/search-recipes) has working combinations for every filter.

***

## Try it without spending

Three endpoints are free, so you can build against them without touching your wallet:

* `GET /api/jobs/{id}` — re-fetch a single job
* `GET /api/jobs/expired` — ids that recently expired
* `GET /api/companies/{id}` — a full company profile, and it needs **no API key at all**

```bash theme={null}
curl "https://connect.jobo.world/api/companies/b5e6f7a8-1234-5678-9abc-def012345678"
```

See [Billing](/docs/billing) for what the metered endpoints cost.

***

## Next

<CardGroup cols={2}>
  <Card title="Core concepts" icon="lightbulb" href="/docs/concepts">
    Freshness, job identity, and the 7-day expiry window that catches most integrations out.
  </Card>

  <Card title="Sync a database" icon="database" href="/docs/guides/sync-a-database">
    The flagship pattern — backfill, then incremental sync with expiry sweeps.
  </Card>

  <Card title="Search recipes" icon="magnifying-glass" href="/docs/guides/search-recipes">
    Working filter combinations, relevance behaviour, facets, and field selection.
  </Card>

  <Card title="API reference" icon="code" href="/docs/api-reference/overview">
    Every endpoint, with request and response schemas.
  </Card>
</CardGroup>
