# Fantastic Jobs — Orthogonal API

> Pay-per-use API on Orthogonal. Each call is billed to your Orthogonal balance.
> Base API: `https://api.orth.sh/v1/run` · [llms.txt](https://orthogonal.com/llms.txt) · [browse all APIs](https://orthogonal.com/discover)

High-volume job postings feed. Indexes new ATS jobs hourly from 54 ATS platforms across 200k+ companies, plus job board listings from LinkedIn, Wellfound, and Y Combinator. Includes 20+ AI enrichments per job and deep company enrichments from LinkedIn, Glassdoor, and Crunchbase.

**Verified:** no

## Access

**Run API:** `POST https://api.orth.sh/v1/run`
**Auth:** `Authorization: Bearer $ORTHOGONAL_API_KEY`
Get an API key at https://orthogonal.com/dashboard/settings/api-keys

Every call goes through the unified Run API: send the API `slug`, the endpoint `path`, and the `query`/`body` parameters. The response is `{ "success": true, "price": "<usd>", "data": { ... } }`.

## Endpoints

### Company List

Catalog of every organization tracked across ATS sources. ~50MB payload, refreshed daily at 02:00 UTC.

`GET /v1/ats-organizations`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `format` | string | No | Set to csv for CSV download |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/ats-organizations","method":"GET","query":{"format":"<string>"}}'
```

### Expired Job Board Jobs

Returns arrays of expired job board listing IDs. LinkedIn only.

`GET /v1/expired-jb`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `time_frame` | string | Yes | Required. 1h, 1d, 1m, or 6m |
| `source` | string | No | Source filter (linkedin only) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/expired-jb","method":"GET","query":{"time_frame":"<string>","source":"<string>"}}'
```

### Expired ATS Jobs

Returns arrays of internal job IDs for ATS postings that have expired or been removed.

`GET /v1/expired-ats`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `time_frame` | string | Yes | Required. 1h, 1d, 1m, or 6m |
| `source` | string | No | Filter by ATS source(s) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/expired-ats","method":"GET","query":{"time_frame":"<string>","source":"<string>"}}'
```

### Modified ATS Jobs

ATS jobs whose fields changed in the last 24 hours. Returns full job data plus date_modified and modified_fields. Typically 100k-150k jobs/day.

`GET /v1/modified-ats`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `limit` | string | No | Results per page (1-1000, default 100) |
| `offset` | string | No | Pagination offset |
| `cursor` | string | No | Cursor pagination |
| `title` | string | No | Title search |
| `location` | string | No | Location search |
| `description_format` | string | No | text or html |
| `source` | string | No | ATS source filter |
| `organization` | string | No | Org name filter |
| `date_modified_gte` | string | No | Modifications on or after this date (ISO 8601) |
| `date_modified_lt` | string | No | Modifications before this date (ISO 8601) |
| `include_basic_organization_details` | string | No | Set true for inline company fields |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/modified-ats","method":"GET","query":{"limit":"<string>","offset":"<string>","cursor":"<string>","title":"<string>","location":"<string>","description_format":"<string>","source":"<string>","organization":"<string>","date_modified_gte":"<string>","date_modified_lt":"<string>","include_basic_organization_details":"<string>"}}'
```

### New Job Board Jobs

Returns new jobs from LinkedIn, Wellfound, and Y Combinator. LinkedIn hourly for English-speaking countries; others every few hours.

`GET /v1/active-jb`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `time_frame` | string | Yes | Required. Time window: 1h, 24h, 7d, or 6m |
| `limit` | string | No | Results per page (1-1000, default 100) |
| `offset` | string | No | Pagination offset |
| `cursor` | string | No | Cursor pagination |
| `title` | string | No | Natural-language title search |
| `location` | string | No | Natural-language location search |
| `description` | string | No | Search on title and description combined |
| `description_format` | string | No | text or html |
| `source` | string | No | linkedin, wellfound, ycombinator |
| `organization` | string | No | Filter by exact org name(s) |
| `organization_slug` | string | No | Filter by LinkedIn org slug(s) |
| `organization_industry` | string | No | Filter by LinkedIn industry |
| `ai_experience_level` | string | No | AI-derived: 0-2, 2-5, 5-10, 10+ |
| `ai_work_arrangement` | string | No | AI-derived: On-site, Hybrid, Remote OK, Remote Solely |
| `ai_employment_type` | string | No | AI-derived: FULL_TIME, PART_TIME, CONTRACTOR, etc. |
| `has_salary` | string | No | Set true for jobs with salary info only |
| `exclude_ats_duplicate` | string | No | Set true to drop LinkedIn jobs matching ATS postings |
| `exclude_recruiter_fields` | string | No | Set true to exclude recruiter fields |
| `seniority` | string | No | LinkedIn seniority: Entry level, Mid-Senior level, Director, etc. |
| `linkedin_id` | string | No | Filter by LinkedIn job posting ID(s) |
| `id` | string | No | Filter by internal Fantastic.jobs ID(s) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/active-jb","method":"GET","query":{"time_frame":"<string>","limit":"<string>","offset":"<string>","cursor":"<string>","title":"<string>","location":"<string>","description":"<string>","description_format":"<string>","source":"<string>","organization":"<string>","organization_slug":"<string>","organization_industry":"<string>","ai_experience_level":"<string>","ai_work_arrangement":"<string>","ai_employment_type":"<string>","has_salary":"<string>","exclude_ats_duplicate":"<string>","exclude_recruiter_fields":"<string>","seniority":"<string>","linkedin_id":"<string>","id":"<string>"}}'
```

### Job Board Jobs Count

Returns count of job board listings matching filters. Uses 1 API Request credit.

`GET /v1/active-jb-count`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `time_frame` | string | Yes | Required. 1h, 24h, 1m, or 6m (default 1m) |
| `title` | string | No | Title search |
| `location` | string | No | Location search |
| `source` | string | No | linkedin, wellfound, ycombinator |
| `organization` | string | No | Org name filter |
| `ai_experience_level` | string | No | Experience level filter |
| `ai_work_arrangement` | string | No | Work arrangement filter |
| `has_salary` | string | No | Set true for salary-having jobs only |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/active-jb-count","method":"GET","query":{"time_frame":"<string>","title":"<string>","location":"<string>","source":"<string>","organization":"<string>","ai_experience_level":"<string>","ai_work_arrangement":"<string>","has_salary":"<string>"}}'
```

### ATS Jobs Count

Returns count of ATS listings matching filters. Uses 1 API Request credit, not Jobs credits.

`GET /v1/active-ats-count`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `time_frame` | string | Yes | Required. 1h, 24h, 1m, or 6m (default 1m) |
| `title` | string | No | Title search |
| `location` | string | No | Location search |
| `source` | string | No | ATS source filter |
| `organization` | string | No | Org name filter |
| `ai_experience_level` | string | No | Experience level filter |
| `ai_work_arrangement` | string | No | Work arrangement filter |
| `has_salary` | string | No | Set true for salary-having jobs only |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/active-ats-count","method":"GET","query":{"time_frame":"<string>","title":"<string>","location":"<string>","source":"<string>","organization":"<string>","ai_experience_level":"<string>","ai_work_arrangement":"<string>","has_salary":"<string>"}}'
```

### New ATS Jobs

Returns new jobs from 54 ATS platforms (company career pages). Refreshed hourly. Supports 30+ filters including title, location, source, AI experience level, work arrangement, and more.

`GET /v1/active-ats`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `time_frame` | string | Yes | Required. Time window: 1h, 24h, 7d, or 6m |
| `limit` | string | No | Results per page (1-1000, default 100) |
| `offset` | string | No | Pagination offset |
| `cursor` | string | No | Cursor pagination. Pass last job id for next page |
| `title` | string | No | Natural-language title search. Quotes for exact phrase, OR for alternatives |
| `location` | string | No | Natural-language location search. Use full country names |
| `description` | string | No | Search on title and description combined |
| `description_format` | string | No | text or html. Omit to exclude description field |
| `source` | string | No | Comma-separated ATS sources (greenhouse, lever.co, workday, etc.) |
| `organization` | string | No | Filter by exact organization name(s), comma-separated |
| `organization_slug` | string | No | Filter by LinkedIn org slug(s), comma-separated |
| `organization_industry` | string | No | Filter by exact LinkedIn industry name |
| `domain` | string | No | Filter by employer domain(s) |
| `include_basic_organization_details` | string | No | Set true to include inline LinkedIn company fields |
| `ai_experience_level` | string | No | AI-derived: 0-2, 2-5, 5-10, 10+ |
| `ai_work_arrangement` | string | No | AI-derived: On-site, Hybrid, Remote OK, Remote Solely |
| `ai_employment_type` | string | No | AI-derived: FULL_TIME, PART_TIME, CONTRACTOR, INTERN, etc. |
| `ai_taxonomies_a_primary` | string | No | Match primary AI taxonomy only |
| `ai_taxonomies_a` | string | No | Match any assigned AI taxonomy |
| `has_salary` | string | No | Set true for jobs with salary info only |
| `date_posted_gte` | string | No | Jobs posted on or after this date (ISO 8601) |
| `date_posted_lt` | string | No | Jobs posted before this date (ISO 8601) |
| `organization_headcount_gte` | string | No | Min LinkedIn employee count |
| `organization_headcount_lt` | string | No | Max LinkedIn employee count |
| `organization_agency` | string | No | only or exclude recruitment agencies |
| `ai_visa_sponsorship` | string | No | only or exclude visa sponsorship listings |
| `id` | string | No | Filter by internal Fantastic.jobs ID(s) |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/active-ats","method":"GET","query":{"time_frame":"<string>","limit":"<string>","offset":"<string>","cursor":"<string>","title":"<string>","location":"<string>","description":"<string>","description_format":"<string>","source":"<string>","organization":"<string>","organization_slug":"<string>","organization_industry":"<string>","domain":"<string>","include_basic_organization_details":"<string>","ai_experience_level":"<string>","ai_work_arrangement":"<string>","ai_employment_type":"<string>","ai_taxonomies_a_primary":"<string>","ai_taxonomies_a":"<string>","has_salary":"<string>","date_posted_gte":"<string>","date_posted_lt":"<string>","organization_headcount_gte":"<string>","organization_headcount_lt":"<string>","organization_agency":"<string>","ai_visa_sponsorship":"<string>","id":"<string>"}}'
```

### Advanced Company Details

Deep company profiles: LinkedIn, Crunchbase funding, Glassdoor ratings, headcount/revenue timeseries, news. Refreshed monthly. Beta.

`GET /v1/ats-organizations-advanced`

**Estimated cost:** $0.01

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `linkedin_slug` | string | No | Filter by LinkedIn slug(s), comma-separated |
| `linkedin_name` | string | No | Filter by exact LinkedIn name(s), case-sensitive |
| `limit` | string | No | Results per page (default 100) |
| `offset` | string | No | Pagination offset |
| `include_crunchbase_funding_and_investment` | string | No | Set true for funding rounds data |
| `include_linkedin_headcount_timeseries` | string | No | Set true for weekly headcount breakdowns |
| `include_linkedin_followers_timeseries` | string | No | Set true for follower counts |
| `include_linkedin_estimated_revenue_timeseries` | string | No | Set true for monthly revenue estimates |
| `include_news_articles` | string | No | Set true for recent news articles |
| `include_glassdoor_reviews` | string | No | Set true for employee reviews |

```bash
curl -X POST 'https://api.orth.sh/v1/run' \
  -H 'Authorization: Bearer $ORTHOGONAL_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"api":"fantastic-jobs","path":"/v1/ats-organizations-advanced","method":"GET","query":{"linkedin_slug":"<string>","linkedin_name":"<string>","limit":"<string>","offset":"<string>","include_crunchbase_funding_and_investment":"<string>","include_linkedin_headcount_timeseries":"<string>","include_linkedin_followers_timeseries":"<string>","include_linkedin_estimated_revenue_timeseries":"<string>","include_news_articles":"<string>","include_glassdoor_reviews":"<string>"}}'
```

---

Full details and an interactive quickstart: https://orthogonal.com/discover/fantastic-jobs
