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

# Filterable Fields

> Complete reference of all filterable fields, accepted values, and filter patterns for the Jobo job search API.

## Overview

The Jobo API exposes two endpoints for searching jobs, each accepting filters in a different format:

* **GET `/api/jobs`** — filters via query parameters
* **POST `/api/jobs/search`** — filters via typed JSON body fields

All filter values are **case-insensitive**.

***

## Field Reference

| Field            | GET Query Param    | POST Body Field     | Type (GET / POST)                   | Accepted Values                                                                                                                                   |
| ---------------- | ------------------ | ------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Text search      | `q`                | `queries`           | string / string\[]                  | Free text (broad: title, company, skills, summary). Wrap in `"double quotes"` for an exact, title-only phrase match. Multiple `queries` are OR'd. |
| Location         | `location`         | `locations`         | string / string\[]                  | City names, regions, countries, `"remote"`                                                                                                        |
| Skills           | `skills`           | `skills`            | string / `InclusionExclusionFilter` | Comma-separated (GET) or include/exclude arrays (POST)                                                                                            |
| Companies        | —                  | `companies`         | — / `InclusionExclusionFilter`      | Include/exclude arrays (POST only)                                                                                                                |
| Work Model       | `work_model`       | `work_models`       | string / string\[]                  | `remote`, `hybrid`, `onsite`                                                                                                                      |
| Employment Type  | `employment_type`  | `employment_types`  | string / string\[]                  | `full-time`, `part-time`, `contract`, `internship`, `temporary`                                                                                   |
| Experience Level | `experience_level` | `experience_levels` | string / string\[]                  | `entry level`, `mid level`, `senior level`, `lead/staff`, `principal`, `director`, `vp`, `executive`                                              |
| Salary (min)     | `min_salary_usd`   | `salary_usd.min`    | int / int                           | Annual USD amount                                                                                                                                 |
| Salary (max)     | `max_salary_usd`   | `salary_usd.max`    | int / int                           | Annual USD amount                                                                                                                                 |
| Posted After     | `posted_after`     | `posted_after`      | datetime                            | ISO 8601 datetime string                                                                                                                          |
| Posted Before    | `posted_before`    | `posted_before`     | datetime                            | ISO 8601 datetime string                                                                                                                          |
| Sources          | `sources`          | —                   | string                              | Comma-separated ATS IDs (GET only)                                                                                                                |
| Page             | `page`             | `page`              | int                                 | Default `1`                                                                                                                                       |
| Page Size        | `page_size`        | `page_size`         | int                                 | Default `25`, max `100`                                                                                                                           |

***

## Filter Patterns (POST)

### InclusionExclusionFilter

The `skills` and `companies` fields in the POST body accept an object with `include` and `exclude` arrays. Items within `include` are combined with **OR** logic; items in `exclude` are removed from results.

```json theme={null}
{
  "include": ["python", "typescript"],
  "exclude": ["java"]
}
```

### RangeFilter (`salary_usd`)

The `salary_usd` field in the POST body accepts `min` and/or `max` boundaries (annual USD).

```json theme={null}
{
  "min": 100000,
  "max": 200000
}
```

***

## Accepted Values

### `work_model` / `work_models`

| Filter Value | Stored Value | Description                 |
| ------------ | ------------ | --------------------------- |
| `remote`     | Remote       | Fully remote position       |
| `hybrid`     | Hybrid       | Mix of remote and in-office |
| `onsite`     | Onsite       | Fully in-office             |

### `employment_type` / `employment_types`

| Filter Value | Stored Value | Description                      |
| ------------ | ------------ | -------------------------------- |
| `full-time`  | Full-time    | Standard full-time employment    |
| `part-time`  | Part-time    | Part-time position               |
| `contract`   | Contract     | Contract or freelance engagement |
| `internship` | Internship   | Internship                       |
| `temporary`  | Temporary    | Temporary position               |

### `experience_level` / `experience_levels`

| Filter Value   | Stored Value | Description              |
| -------------- | ------------ | ------------------------ |
| `entry level`  | Entry Level  | Entry-level / junior     |
| `mid level`    | Mid Level    | Mid-level / intermediate |
| `senior level` | Senior Level | Senior                   |
| `lead/staff`   | Lead/Staff   | Lead or staff engineer   |
| `principal`    | Principal    | Principal                |
| `director`     | Director     | Director level           |
| `vp`           | VP           | Vice president           |
| `executive`    | Executive    | C-level / executive      |

### `sources` (ATS Platforms)

Pass one or more of the following ATS identifiers as a comma-separated string in the GET `sources` param:

`greenhouse`, `lever`, `workday`, `ashby`, `bamboohr`, `icims`, `smartrecruiters`, `teamtailor`, `workable`, `rippling`, `personio`, `taleo`, `successfactors`, `paylocity`, `dayforce`, `phenompeople`, `jobvite`, `eightfold`, `jazzhr`, `breezy`, `recruitee`, `applicantpro`, `comeet`, `pinpoint`, `freshteam`, `gem`, `polymer`, `kula`, `homerun`, `careerplug`, `joincom`, `recooty`, `trakstar`, `hirehive`, `hiringthing`, `zohorecruit`, `gohire`, `jobscore`, `csod`, `adpmyjobs`, `adpworkforcenow`, `paycom`, `ultipro`, `isolved`, `oraclecloud`, `talnet`, `careerpuck`, `dover`, `hibob`, `hirebridge`, `hireology`, `manatal`, `pageup`, `paycor`, `rival`, `trinet`, `werecruit`

***

## Examples

### GET Request

```
GET /api/jobs?q=backend+engineer&location=new+york&work_model=remote&employment_type=full-time&experience_level=senior+level&min_salary_usd=120000&posted_after=2026-01-01T00:00:00Z&posted_before=2026-06-01T00:00:00Z&page=1&page_size=25
```

### POST Request

```json theme={null}
POST /api/jobs/search

{
  "queries": ["backend engineer"],
  "locations": ["New York", "San Francisco"],
  "skills": {
    "include": ["python", "go"],
    "exclude": ["php"]
  },
  "companies": {
    "include": ["Stripe", "Datadog"]
  },
  "work_models": ["remote", "hybrid"],
  "employment_types": ["full-time"],
  "experience_levels": ["senior level", "lead/staff"],
  "salary_usd": {
    "min": 150000,
    "max": 250000
  },
  "posted_after": "2026-01-01T00:00:00Z",
  "posted_before": "2026-06-01T00:00:00Z",
  "page": 1,
  "page_size": 25
}
```

***

## Facets (Response)

Search responses include a `facets` object containing aggregated counts for key dimensions. The set of facets returned is controlled by the `include_facets` request parameter; when omitted, the server returns a low-cardinality default subset to keep responses fast. See the [Jobs Search facets reference](/api-reference/jobs/search#facets) for the full opt-in matrix.

| Facet Key          | Default? | Description                                            |
| ------------------ | -------- | ------------------------------------------------------ |
| `work_model`       | ✅        | Distribution of work models                            |
| `experience_level` | ✅        | Distribution of experience levels across matching jobs |
| `employment_type`  | ✅        | Distribution of employment types                       |
| `sources`          | ✅        | Distribution of ATS sources                            |
| `industries`       | opt-in   | Distribution of company industries                     |
| `skills`           | opt-in   | Distribution of required skills (high-cardinality)     |

Each facet is an array of objects sorted by count descending:

```json theme={null}
{
  "facets": {
    "work_model": [
      { "key": "Remote", "count": 842 },
      { "key": "Hybrid", "count": 314 },
      { "key": "Onsite", "count": 127 }
    ]
  }
}
```
