USAJOBS API.
USAJOBS runs the rare official, free, self-serve jobs API. JobsPipe does not collect USAJOBS; pair the official API with JobsPipe for the private-sector half of the market.
JobsPipe does not collect USAJOBS. The boards JobsPipe collects today are LinkedIn, Indeed, Y Combinator, Naukri, Workday, Greenhouse, Workable, SmartRecruiters, Ashby, Lever, Paylocity. A search with "source_or": ["usajobs"] returns no rows. This page explains what USAJOBS exposes publicly and how to reach the same employers through the boards on the sources list.
Why people are confused about the USAJOBS API
USAJOBS is the opposite of most boards on this list: the API exists, it is official, it is free, and anyone can use it. It is operated by the U.S. Office of Personnel Management, keys are issued by email in minutes, and the search endpoint returns full announcements as JSON. The catch is scope, not access: it covers federal civil-service positions only.
Its data follows federal hiring conventions rather than commercial ATS ones: pay plans and grades (GS-9, GS-12), occupational series codes, hiring paths, security clearance fields, and hard close dates. JobsPipe does not collect USAJOBS. If you need federal and private-sector postings together, call the USAJOBS API for the federal half and JobsPipe for the boards it collects.
This works. Register for a key at developer.usajobs.gov, send it with your email in the User-Agent header, and page through GET /api/search. The response uses federal terminology, so you write the adapter to your schema.
Pointless. The public API is complete, free and better structured than the pages. Do not do this.
JobsPipe does not collect USAJOBS. Use the official API for federal announcements and JobsPipe for the private-sector boards it collects; both sides carry structured title, company, location, salary and posting-date fields, so the join is straightforward.
Does USAJOBS have an API?
Yes, and it is the best-documented public jobs API of any board on this site. The USAJOBS REST API at data.usajobs.gov, run by the Office of Personnel Management, exposes GET /api/search over every openly advertised federal announcement, codelist endpoints for the reference taxonomies (agency subelements, occupational series, pay plans, hiring paths, security clearances), and historic-announcement endpoints for archived postings. Each announcement is unusually well structured: real minimum and maximum pay figures because federal pay is scale-based, a stable agency hierarchy, a numeric occupational series, and explicit open and close dates. JobsPipe does not collect USAJOBS; it collects private-sector boards, which is the other half of the picture.
Is the USAJOBS API free?
Yes, without a catch. There is no billing page, no paid tier, no link-back scheme and no call metering that matters for normal use; OPM asks only for the documented request etiquette and paging limits (ResultsPerPage up to 500). It is one of the few genuinely free jobs APIs, alongside the keyless per-company endpoints Greenhouse, Lever, Ashby and SmartRecruiters expose. JobsPipe's free tier returns 1,000 jobs a month across the boards it collects and the sandbox at POST /v1/sandbox/jobs/search needs no key, but neither returns USAJOBS rows.
How do I get a USAJOBS API key?
Register at developer.usajobs.gov/apirequest with an email address and the Authorization-Key arrives by return, usually within minutes. Every request then carries three headers: Host set to data.usajobs.gov, User-Agent set to the email you registered with, and Authorization-Key set to the key. The User-Agent convention inverts the header's usual meaning and is the cause of nearly every 401 developers hit on their first call. There is no approval process and no tier gating. The curl block above is a working first request once you export USAJOBS_KEY.
What does the USAJOBS API documentation cover?
developer.usajobs.gov documents the search endpoint and its parameters (Keyword, PositionTitle, LocationName, Organization by agency code, JobCategoryCode by occupational series, RemunerationMinimumAmount, DatePosted, Page and ResultsPerPage), the response shape under SearchResult with MatchedObjectDescriptor per item, the codelist endpoints for every taxonomy the announcements are classified with, the historic-data endpoints, authentication and the request etiquette. It also links OPM's data dictionaries for pay plans and hiring paths. JobsPipe's docs at /docs cover the record shape returned for the boards JobsPipe does collect, which is what you map federal announcements onto if you want one schema.
What JobsPipe returns for USAJOBS
Nothing under "source_or": ["usajobs"]: JobsPipe does not collect federal announcements. What JobsPipe returns is the private-sector half of the market: POST /v1/jobs/search over LinkedIn, Indeed, Y Combinator, Naukri and the collected ATS boards, with each record carrying sources[0].provider, status, ghost_score, discovered_at, last_seen_at, seniority, and min_annual_salary_usd and max_annual_salary_usd when the posting states a range. A contractor's posting for a federal program (the engineer working on a NASA project through a systems integrator) lives on that contractor's ATS, not on USAJOBS, and is the kind of record JobsPipe returns; the sample above shows the shape for one such record found on LinkedIn.
Where the USAJOBS API runs out
Three boundaries to plan around. Federal only: no state or municipal roles and no private sector, so USAJOBS is one employer domain, a big one but one. Current openings only: closed announcements leave the search index, so longitudinal datasets need your own snapshot pipeline keyed by control number. Query-shaped access: there is no firehose or webhook, so freshness is bounded by how often you poll and how you enumerate queries. Most products that need federal jobs need private-sector jobs too, and that half has no official API; it lives on the ATS boards JobsPipe collects.
Try the official USAJOBS endpoint
USAJOBS' official search API is free and keyed by email. Register at developer.usajobs.gov, then send your key and your registered email as the User-Agent.
curl "https://data.usajobs.gov/api/search?Keyword=data+engineer&LocationName=Washington,+DC&ResultsPerPage=100" \
-H "Host: data.usajobs.gov" \
-H "User-Agent: you@example.com" \
-H "Authorization-Key: $USAJOBS_KEY"That is the surface USAJOBS offers. JobsPipe does not collect USAJOBS, so the JobsPipe request below reaches USAJOBS employers through the boards JobsPipe does collect.
Sample request
Filtering on "source_or": ["usajobs"] returns no rows because JobsPipe does not collect USAJOBS. Employers that run USAJOBS usually syndicate the same postings to LinkedIn and Indeed, which JobsPipe does collect, so filter by company instead and let sources[0].provider tell you which board each record came from.
curl https://api.jobspipe.dev/v1/jobs/search \
-H "Authorization: Bearer jp_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "company_name_partial_match_or": ["acme"], "status": "active", "limit": 25 }'Every record is returned in the same JSON shape regardless of the board it came from. The full schema is documented in the docs.
Skip the scraper - try the API right now
Sample data from 30+ ATS feeds and job boards in the exact live JSON shape. No key needed.
Run the search to see normalized results.
{
"job_title_or": [
"software engineer"
],
"limit": 3,
"remote": true
}Live results are one free key away - same request against /v1/jobs/search.
Fields in every job record
FAQ
Is the USAJOBS API free?+
Yes. You request a key at developer.usajobs.gov, it arrives by email, and there is no paid tier or meaningful call metering for normal use. It is a public service operated by the U.S. Office of Personnel Management; the only constraints are documented request etiquette and result paging.
How do I get a USAJOBS API key?+
Request one at developer.usajobs.gov/apirequest with an email address; the Authorization-Key arrives by return. Every request then sends three headers: Host (data.usajobs.gov), User-Agent (the email you registered with, not a browser string) and Authorization-Key. Keys are self-serve with no sales process.
Why does the USAJOBS API return a 401 error?+
Almost always the headers. USAJOBS requires your registered email address in the User-Agent header alongside Authorization-Key. Sending a browser-style User-Agent instead of your email is the most common first-call mistake, and a valid key with the wrong User-Agent still fails.
What data does the USAJOBS API return?+
Current federal announcements under SearchResult.SearchResultItems, each with a MatchedObjectDescriptor: position title, hiring agency and department with organization codes, locations, structured pay ranges under PositionRemuneration tied to federal pay scales, occupational series, hiring paths, open and close dates, qualification summaries and the apply URL on usajobs.gov.
Does the USAJOBS API include private-sector jobs?+
No. It covers openly advertised federal civil-service positions, plus excepted-service and legislative postings agencies choose to list. No private companies, no state or municipal roles, and no federal contractors, whose jobs are posted on their own ATSs. Those are the boards JobsPipe collects.
Does JobsPipe collect USAJOBS?+
No. "source_or": ["usajobs"] returns no rows and JobsPipe does not carry federal announcements. Call the official USAJOBS API for the federal half and JobsPipe for LinkedIn, Indeed, Y Combinator, Naukri, Workday, Greenhouse, Workable, SmartRecruiters, Ashby, Lever and Paylocity.
Can I get historical USAJOBS data?+
Not from the search API, which serves current openings; closed announcements drop out. Build a snapshot pipeline: poll the search endpoint on a schedule, key announcements by control number, and diff against your previous run to detect new and closed postings.
Reach USAJOBS employers through the boards JobsPipe collects - key in 30 seconds.
Get a free API key