# Eightfold AI Jobs API

> What Eightfold AI career sites look like, how the PCSX API really behaves, and why ?source=eightfold reaches some tenants and 403s permanently on the rest.

Source: https://hyperjobs.io/ats/eightfold

Eightfold AI is a talent-intelligence platform that large enterprises put in front
of their hiring: Nvidia, Cisco and Bayer all run career sites on it. Boards live
at `<slug>.eightfold.ai`, backed by a public JSON API Eightfold calls **PCSX**.

## What the board looks like

Two unauthenticated endpoints, a search and a detail:

```bash
# Search — paginated, server-fixed page size (~10)
curl "https://<slug>.eightfold.ai/api/pcsx/search?domain=<domain>&start=0"

# Detail — this is where the description is
curl "https://<slug>.eightfold.ai/api/pcsx/position_details?domain=<domain>&position_id=<id>"
```

The data itself is good. Positions carry a real department, a work-location
option, the employer's own requisition id, a genuine apply URL, and a
`standardizedLocations` array. Descriptions come from the detail call.

## Why it's partial: the `domain` parameter

Both endpoints require a **`domain`** query parameter, and it is not the board
slug. It's a separate per-tenant value naming the employer's domain, and there is
no way to derive it from the careers URL that identified the board in the first
place.

So the adapter guesses `<token>.com` — for a tenant at `acme.eightfold.ai`, it
tries `domain=acme.com`. When the guess is right, the board scrapes cleanly. When
it's wrong, the API returns **403**, and it returns 403 forever, because the
request is not malformed and the tenant is not blocking us: we are asking for a
domain that isn't theirs. Activision is the standing example.

<Warning title="This 403 is permanent, and that matters more than it sounds">
  Elsewhere in this pool a 403 is a transient burst — the platform's WAF twitching
  under concurrency, clearing on the very next attempt. Treating those as fatal
  disables live boards for no reason.

  Eightfold's 403 is the opposite: it means `detect()` guessed the wrong tenant,
  and no amount of retrying, backing off, changing IP or improving the TLS
  fingerprint will ever change the answer. The fix is data, not networking. This
  is why "is a 403 retryable" has to be answered per platform rather than globally
  — the same status code means "wait a second" on one source and "you are asking
  the wrong question" on this one.
</Warning>

That leaves roughly 36 known boards, and a per-tenant `domain` that has to be
supplied rather than computed. It's solvable — the adapter takes an override — but
it's solvable one tenant at a time, and it hasn't been worth the run yet against
platforms with thousands of boards waiting.

### And there's a second wall behind it

Some Eightfold tenants sit behind Cloudflare and reject plain requests. A
TLS-impersonation tier clears some of them, but from datacenter IPs most stay
blocked even with impersonation. Those boards return **empty** rather than wrong,
which is harmless to the dataset and invisible in a log. Residential IPs open
more.

So Eightfold needs two things it doesn't have: a per-tenant domain map, and
egress that its tenants' Cloudflare rules will accept.

## The adapter was never the bottleneck

Eightfold was one of three platforms here that had a finished, working, tested
adapter and scraped nothing for months purely because discovery never produced
boards for it. The other two were ADP and join.com.

All three came out of that hole. join.com's 23,548-board list had been sitting in a
public dataset the entire time, one file nobody had imported: 141 boards became
23,601, and 44,201 jobs appeared. [ADP](/ats/adp) took a discovery run plus fixing
a guard that was silently rejecting its UUID-shaped board ids, and now serves
4,560 postings. Eightfold serves rows too.

What caps it is the ceiling above, not the adapter and not the parse: a tenant
whose domain the guess gets wrong isn't a board we're slow to reach, it's a board
that answers 403 to the only question we know how to ask it.

## The tenants the guess misses

Many Eightfold customers are large enterprises that also run other boards, and a
tenant sitting behind a wrong-domain 403 frequently reaches this dataset by
another route anyway — the same job on [LinkedIn](/ats/linkedin), or the
employer's [Workday](/ats/workday) or [Oracle Cloud HCM](/ats/oracle) tenant.
Cross-source mirrors are [collapsed to one row](/docs/guides/deduplication), so
you're not counting the same job twice.

Query what's here with `?source=eightfold`. Read the live vocabulary off
[`/v1/meta`](/docs/api-reference/meta) → `sources` rather than off this page, and
[sources](/docs/reference/sources) for what each value means.

[Quickstart](/docs/quickstart) · [All platforms](/ats)
