BrassRing Jobs API: Getting BrassRing Job Listings as Data

CleanJobData Engineering

TL;DR

BrassRing, long sold as IBM Kenexa BrassRing, hosts career sites on sjobs.brassring.com, identified by a partnerid (the employer) and a siteid (the board). Its job search JSON only works inside the career page's browser session, so a plain curl or fetch returns no jobs, and the official integrations are set up for the employer and its approved vendors. Each employer defines its own job fields, so title, location and description sit in different fields per tenant, the only date is a last-updated date, and there is no salary field.

On this page

BrassRing has no public jobs API: its career sites load job data as JSON, but only inside the browser session the career page sets up, so a plain curl or fetch returns no jobs. To get BrassRing job listings as data, you either go through the employer's own BrassRing integration, or use a job data API that already collects and normalizes them.

CleanJobData collects jobs from BrassRing career sites along with other ATS platforms and serves them in one schema, with each employer's custom fields mapped to the same title, location and description fields as every other source. See the Jobs API docs.

At a Glance

Public jobs APINone
Career sitehttps://sjobs.brassring.com/TGnewUI/Search/Home/Home?partnerid={partnerId}&siteid={siteId}
Identifierspartnerid (employer) and siteid (board)
Job JSONTied to the career page's browser session
Official routeIntegrations set up for the employer and its approved vendors
FieldsDefined per employer; no fixed location field
DateLast updated only; no posted date
SalaryNo field
RemoteNo flag

What BrassRing Is

BrassRing is an enterprise applicant tracking system with a long history: it was part of Kenexa, which IBM acquired in 2012, and for years it was sold as IBM Kenexa BrassRing. It's built for large, high-volume employers: big retailers, defense and manufacturing companies, universities and public-sector organizations. One customer can have tens of thousands of open jobs.

What a BrassRing Career Site Looks Like

BrassRing career sites share one host, sjobs.brassring.com, and the tenant is carried entirely in two query parameters:

https://sjobs.brassring.com/TGnewUI/Search/Home/Home?partnerid=12345&siteid=5678
                                                      │                │
                                                      employer         board
  • partnerid identifies the employer (BrassRing's "client").
  • siteid identifies one career site for that employer. Many employers run several: external and internal boards, separate brands, or different languages.

Job pages are deep links on the same host with PageType=JobDetails and a jobid added. Follow the employer's careers link and note both numbers.

Why a Plain Request Doesn't Return Jobs

The career site is a single-page application. After it loads, it requests job data from BrassRing's servers, and those requests only succeed within the browser session the page has set up. Sent on their own from curl or a script, they don't return jobs.

These are undocumented internal endpoints for BrassRing's own front end, not a public API. They can change without notice, the site's terms govern their use, and we don't publish a way around that.

The Official Route

BrassRing's integration options are set up for its client companies and their approved vendors, with access tied to the employer's account and contract. If you're building something for an employer that uses BrassRing, work with that employer to get access. It isn't a way to read other employers' jobs.

What BrassRing Job Data Contains

The defining feature of BrassRing data is that every employer designs its own job fields. BrassRing gives each tenant a set of generic custom fields and lets the employer decide what each one means. The employer's title, location and description can live in differently named fields from one tenant to the next. Across the tenants we've looked at:

  • Location has no fixed shape. One employer splits it into city, state and country fields. Another has a single "store - city" string with no state. Others give only a city, or only a country.
  • Neighboring fields aren't always places. The fields shown next to a job title can hold a street address, a subsidiary's legal name or an employment class code such as "NC-Exempt", so you can't just join them into a location.
  • The only date is "last updated." There's no separate posted date in BrassRing's job data. On the tenants we checked, last-updated dates were spread over months with day-to-day variation, so they're a usable proxy, but an edited job can look newer than it is.
  • Date formats vary by locale. 25-Sep-2026, 09 Oct 2026 and 09/25/2026 all appear, and a Portuguese-language board writes "Out" for October.
  • No salary field, no remote flag. Pay and remote status, when mentioned at all, are in the description text.
  • Employment type depends on the employer. It's only there if the employer created a field for it.

Paging is offset-based, and sorting on fields with many ties, such as a shared date or a common title like "Cashier", can make jobs drop between pages. A board that doesn't exist also looks the same as a real board with no jobs, so an empty result isn't proof that a tenant is gone.

What a Normalized BrassRing Job Looks Like

Here's a BrassRing job as it comes back from CleanJobData, trimmed (values illustrative):

{
  "id": 51298730,
  "title": "Systems Engineer II",
  "location": "Huntsville, AL, US",
  "locations": [
    {
      "kind": "city_state_country",
      "city_name": "Huntsville",
      "state_name": "Alabama",
      "state_code": "AL",
      "country_code": "US",
      "is_primary": true
    }
  ],
  "published": "2026-10-27T00:00:00.000Z",
  "employment_type": "FULL_TIME",
  "has_remote": false,
  "salary_min": null,
  "salary_max": null,
  "company": { "name": "Acme Defense" },
  "employer_id": "a1B2c3"
}

Values that don't resolve to a real city, state or country are dropped, so a legal entity name never becomes a location. published is BrassRing's last-updated date, and salary is only filled when the description states pay. See the location normalization guide.

Getting BrassRing Jobs from CleanJobData

BrassRing jobs come back in the same schema as every other source, so there's no per-tenant field handling on your side:

curl "https://api.cleanjobdata.com/jobs?title=engineer&location=US&limit=20" \
  -H "Authorization: Bearer $CLEANJOBDATA_API_KEY"

Use company_website_url or employer_id to scope to one employer, and page with the cursor in pagination.next_page. Coverage depends on which employers are in the dataset, so check that the companies you care about appear before you rely on it. To see how BrassRing compares with the other platforms, read the ATS public job postings API list.

FAQ

Does BrassRing have a public jobs API?

No. BrassRing career sites load jobs from JSON that only works inside the career page's browser session, and BrassRing's integrations are set up for the employer and its approved vendors.

What are partnerid and siteid in a BrassRing URL?

partnerid identifies the employer, and siteid identifies one of its career sites. You need both to point at a specific BrassRing job board.

Why do BrassRing jobs have different fields for each employer?

BrassRing lets each employer define what its custom job fields mean, so title, location and description can live in different fields per tenant. Location in particular may be one combined field, several separate ones, or just a country.

Does BrassRing show when a job was posted?

Not directly. The only date in BrassRing's job data is the last-updated date, which works as a rough proxy for the posting date.