BambooHR Hiring & Applicant Tracking
Who applied for the open roles this week, and who is still waiting on a reply? Work the BambooHR ATS pipeline: list job openings and applications by status group, read an applicant's answers and status history, move them to the next status, leave comments for the hiring team, add candidates and post new job openings.
Connect this API to an AI agent Browse all specs
What you can do with BambooHR Hiring & Applicant Tracking via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /api/v1/applicant_tracking/jobs |
listJobOpenings | List job openings with applicant counts, filtered by status group |
| GET | /api/v1/applicant_tracking/applications |
listApplications | List job applications by job, status, search text or submit date |
| GET | /api/v1/applicant_tracking/applications/{applicationId} |
getApplication | Get an application with the applicant, answers and status history |
| GET | /api/v1/applicant_tracking/statuses |
listApplicantStatuses | List the applicant statuses your company uses |
| POST | /api/v1/applicant_tracking/applications/{applicationId}/status |
updateApplicationStatus | Move an application to another status |
| POST | /api/v1/applicant_tracking/applications/{applicationId}/comments |
addApplicationComment | Add a comment to an application for the hiring team |
| POST | /api/v1/applicant_tracking/application |
createCandidate | Add a candidate to a job opening |
| GET | /api/v1/applicant_tracking/hiring_leads |
listHiringLeads | List employees who can be the hiring lead on a job opening |
| GET | /api/v1/applicant_tracking/locations |
listJobLocations | List company locations a job opening can use |
| POST | /api/v1/applicant_tracking/job_opening |
createJobOpening | Create a job opening (draft or open) |
Authentication
basic
HTTP Basic
BambooHR API key sent with HTTP basic auth: the API key is the username and the password can be any text (e.g. x).
How to get a credential
- Sign in to BambooHR as a user with access to Hiring (ATS) settings, such as an admin or a hiring manager with ATS access.
- Click your name in the top-right corner and choose API Keys (shown when API access is enabled for your company).
- Click Add New Key, name it (e.g. VX Agents hiring) and copy the key.
- Note your company subdomain from the address bar (
https://<subdomain>.bamboohr.com).
The key acts with that user's permissions, and the company needs the BambooHR Hiring (applicant tracking) feature.
Permissions used
| Access (OAuth scope) | Operations |
|---|---|
Read hiring data (hiring:applications) |
listJobOpenings, listApplications, getApplication, listApplicantStatuses, listJobLocations |
Manage applications (hiring:applications.write) |
updateApplicationStatus, addApplicationComment, createCandidate |
| ATS settings access (API key) | listHiringLeads, createJobOpening |
Common errors
| Status | Meaning | Fix |
|---|---|---|
| 401 | Wrong or revoked API key | Create a new key under API Keys and use it as the username. |
| 403 | The key's user has no access to ATS settings | Use a key from an admin or a user with Hiring access. |
| 400 | Missing required field or bad id (status, job, location, hiring lead) | List statuses, jobs, locations or hiring leads first and send their ids. |
| 404 | Wrong company subdomain or unknown application id | Check the subdomain and list applications first. |
| 429 / 503 | Rate limited | Wait and retry. |
Store the API key as a VX Agents basic-auth credential (username = API key, password = x).
Usage guide
Setup
- Credential: HTTP Basic with the BambooHR API key as the username and any password (e.g.
x). The key's user needs access to Hiring (ATS) settings. - Set the server variable
companyDomainto your subdomain (forhttps://acme.bamboohr.comuseacme). - Worth pinning as presets: the
jobIdof the openings you hire for most, and the status ids you move people to (e.g. Phone Screen, Interview).
Review new applicants
listJobOpeningswithstatusGroups=Opento see open roles and their applicant counts.listApplicationswithjobId,applicationStatus=NEW(orALL_ACTIVE),newSince=2026-10-17 00:00:00,sortBy=created_date&sortOrder=DESC; usepagefor more results.getApplicationfor the applicant's contact details, answers, rating and status history.listApplicantStatusesonce to learn the status ids your company uses.- Move someone on:
updateApplicationStatuswith{"status": <status id>}. Leave context for the team withaddApplicationComment({"comment": "..."}).
Add candidates and roles
createCandidate(form fields) withfirstName,lastName,jobIdand any fields the job's standard questions require (email,phoneNumber,source,linkedinUrl,dateAvailableasYYYY-MM-DD). It returns the new candidate id.- For a new role:
listHiringLeads(useemployeeId) andlistJobLocations(use the location id), thencreateJobOpeningwithpostingTitle,jobStatus(DraftorOpen),hiringLead,employmentType,jobDescription, andlocationType(0on-site and2hybrid needjobLocation;1is remote).
Good to know
- Confirm with the user before changing a status, adding a comment, creating a candidate or opening a job: status changes can trigger candidate emails, and an
Openjob may be posted to your careers page. newSinceusesYYYY-MM-DD HH:MM:SSin UTC, not ISO 8601 withT.- Resume and cover letter file uploads are not included: if a job marks them as
Required, add the candidate in BambooHR instead. - Status filters take comma-separated values (
NEW,ACTIVE); job status groups areALL,DRAFT_AND_OPEN,Open,Filled,Draft, ... - No deletes by design.
Source: BambooHR API reference (https://documentation.bamboohr.com/reference/applicant-tracking), checked 2026-10-24.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “BambooHR Hiring & Applicant Tracking” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.