---
title: "Workday API"
description: "Workday API: the per-tenant REST and SOAP surfaces, why neither lists jobs, the public myworkdayjobs.com feed that does, and every tenant in one call."
canonical: https://jobspipe.dev/sources/workday
date_published: 2026-06-16
date_modified: 2026-09-26
author: Dvir Atias
---

# Workday API

Workday has an API, but not a public jobs one: the Workday REST API and the older SOAP web services are issued per tenant and read that company's data only, while candidates see postings on public myworkdayjobs.com sites. JobsPipe collects every public Workday careers site's postings into one search endpoint, in the same record shape as the rest of its 30+ sources.

> Workday's official API is tenant-scoped OAuth. The public postings live on myworkdayjobs.com. JobsPipe collects those public tenants into one endpoint, one schema, one key.

**Canonical URL:** https://jobspipe.dev/sources/workday

## Coverage

- **Sources covered:** Public Workday tenants, verified per tenant
- **Freshness:** discovered_at, last_seen_at and verified_at on every record
- **History retention:** Closed postings kept, with closed_at and closed_reason

## Why Workday jobs data is confusing

Workday does not offer a public job-postings API. The Workday Staffing REST API requires OAuth credentials granted by each tenant. That works if you are the company; it does not work if you want to consume jobs from many companies.

Every Workday customer hosts their careers site at a subdomain of myworkdayjobs.com (wd1, wd3, wd5 and so on). The page is rendered through Workday's UI, but the underlying job data is fetched from an internal JSON endpoint whose shape varies across tenant versions. JobsPipe reads that public surface for each verified tenant and normalizes it so you learn one shape.

## Workarounds

### Scrape each tenant directly

Possible, but you need per-tenant configuration, the JSON shape varies between Workday versions, and Workday's bot detection blocks naive scrapers.

### Use one company's Staffing REST API

Works for that one company only, and only after they grant you OAuth credentials. Not a path to multi-tenant coverage.

### Use JobsPipe

Every verified public tenant, one call. Same record shape as the other boards JobsPipe collects. Free tier of 1,000 jobs to start, key in 30 seconds.

## Fields available on every record

- `id`
- `job_title`
- `company`
- `company_domain`
- `url`
- `date_posted`
- `discovered_at`
- `last_seen_at`
- `verified_at`
- `status`
- `closed_at`
- `closed_reason`
- `ghost_score`
- `seniority`
- `cities`
- `state_code`
- `min_annual_salary_usd`
- `max_annual_salary_usd`
- `technology_slugs`
- `keyword_slugs`
- `esco_skills`
- `sources`

## Sample response

```json
{
  "id": "job/California---San-Francisco/Senior-Software-Engineer-Distributed-Systems_JR-284431",
  "job_title": "Senior Software Engineer, Distributed Systems",
  "company": "Salesforce",
  "company_domain": "salesforce.com",
  "url": "https://salesforce.wd12.myworkdayjobs.com/en-US/External_Career_Site/job/California---San-Francisco/Senior-Software-Engineer-Distributed-Systems_JR-284431",
  "date_posted": "2026-09-02",
  "discovered_at": "2026-09-02T09:23:11+00:00",
  "last_seen_at": "2026-09-08 05:41:07",
  "verified_at": "2026-09-08 06:02:19",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 9,
  "seniority": "senior",
  "cities": [
    "San Francisco"
  ],
  "state_code": "CA",
  "min_annual_salary_usd": 165000,
  "max_annual_salary_usd": 220000,
  "technology_slugs": [
    "java",
    "kubernetes",
    "aws"
  ],
  "keyword_slugs": [
    "distributed-systems",
    "microservices"
  ],
  "sources": [
    {
      "provider": "workday",
      "url": "https://salesforce.wd12.myworkdayjobs.com/en-US/External_Career_Site/job/California---San-Francisco/Senior-Software-Engineer-Distributed-Systems_JR-284431"
    }
  ]
}
```

## FAQ

### How do I find a company's Workday careers site URL?

Every Workday customer hosts its careers site on a subdomain of myworkdayjobs.com, with a data-center prefix such as wd1, wd3, wd5 or wd12 and a site name in the path, for example salesforce.wd12.myworkdayjobs.com/en-US/External_Career_Site. The page loads its jobs from an internal JSON endpoint that is undocumented and whose shape varies between tenant versions, so each tenant needs its own configuration.

### How do I get one company's Workday jobs through an API?

If you are that company, a tenant admin can issue OAuth credentials for the Workday Staffing REST API, which reaches that tenant only. From the outside, send "company_name_partial_match_or": ["salesforce"] (or any company name) with "source_or": ["workday"] in the body of POST /v1/jobs/search, and JobsPipe returns that tenant's public postings in the same record shape as every other board.

### Do Workday job postings include salary ranges?

Only when the employer states one in the posting. In that case the record carries min_annual_salary_usd and max_annual_salary_usd, and the min_salary_usd filter works against them; otherwise both fields are null. The data section on this page shows what share of Workday postings carry a salary, a remote flag and a seniority label, so check it before building a feature that depends on pay.

### Can I see closed or expired Workday job postings?

Yes. JobsPipe keeps Workday postings after they close and sets status, closed_at and closed_reason on the record, alongside discovered_at, last_seen_at and verified_at. To work only with live openings, filter on status and use posted_at_max_age_days, and add max_ghost_score to skip stale reposts that stay listed on a tenant's careers site.

## Does Workday have an API?

Yes, but not a public jobs one. Workday ships the Workday REST API (OAuth, Staffing, HCM, Time and Absence, Compensation and a few recruiting endpoints) and the older Public Web Services SOAP API with 50+ services. Both are per tenant: a client id issued by one company reaches that company's data only. The job postings a candidate sees are served by the tenant's careers site on myworkdayjobs.com, which has no documented API. That public careers surface is what JobsPipe collects for every verified tenant.

## Is the Workday API free?

Not in any way an outside developer can use. There is no price list because there is no self-serve access: API clients are created by a tenant admin inside Workday and are part of that customer's subscription. Third-party 'Workday job APIs' sold on scraping marketplaces are metered per result and read the same public careers pages JobsPipe reads. JobsPipe's free tier returns 1,000 jobs to start with no card, and the sandbox at POST /v1/sandbox/jobs/search needs no key.

## How do I get a Workday API key?

Ask the tenant admin. In Workday they run Register API Client for Integrations, pick the scopes, and hand you a client id and secret that exchange for a bearer token at that tenant's token endpoint. The credentials never work against another tenant, and Workday does not run a developer program that issues cross-tenant keys. If your goal is reading postings across many Workday customers, the key you need is a JobsPipe key: sign up, copy it, and send it as a Bearer token to POST /v1/jobs/search with "source_or": ["workday"].

## What does the Workday API documentation cover?

Workday's official docs live at community.workday.com behind a Workday Community login. They document the REST API by service (Staffing, Person, Time, Compensation, Recruiting), the SOAP Web Services by version, the OAuth 2.0 setup for integration system users, and the Workday Extend platform. What they do not document is any public job-postings endpoint, because Workday has none; the careers site runs on an internal JSON call that changes between tenant versions. JobsPipe's docs at /docs cover the one record shape returned for every Workday tenant and every other collected board.

## What JobsPipe returns for Workday

A POST /v1/jobs/search with "source_or": ["workday"] returns Workday postings as JobsPipe records: id (the tenant's job path), job_title, company, company_domain, url, date_posted, discovered_at, last_seen_at, verified_at, status with closed_at and closed_reason once a posting closes, ghost_score, seniority, min_annual_salary_usd and max_annual_salary_usd when the posting states a range, technology_slugs and keyword_slugs parsed from the description, and sources[0].provider set to workday. Filters that matter for Workday: company_name_partial_match_or to pin one tenant, job_title_or, posted_at_max_age_days, job_country_code_or, remote, and max_ghost_score to skip stale reposts. The data section below shows what share of Workday postings carry a salary, a remote flag and a seniority label.

## Workday REST API vs the careers site

The Workday REST API is the modern OAuth interface Workday added in v32+. It covers Staffing (workers, organizations, supervisory hierarchy), Time and Absence, Compensation and a handful of recruiting endpoints, all for the authenticated tenant. There is no equivalent of a Greenhouse Job Board API where any developer can hit a public endpoint and get a tenant's jobs without OAuth. For a single tenant integration (payroll sync, provisioning, custom report extraction) go through OAuth onboarding with that tenant's admin. For cross-tenant postings, JobsPipe is the integration: one key, every verified public tenant, one schema.

## In-depth guides

- https://jobspipe.dev/guides/how-to-integrate-with-workday

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/workday.

## Further reading

- [Does Workday have an API?](https://jobspipe.dev/answers/does-workday-have-an-api)
- [Is Workday an Applicant Tracking System?](https://jobspipe.dev/blog/is-workday-an-applicant-tracking-system)

---
Building this integration yourself? The steps above work. The alternative is one API over 30+ sources, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin