---
title: "How to get job application data from BambooHR ATS API"
description: "A practical guide to fetching job application data from the BambooHR ATS API, with step-by-step instructions, code samples, pitfalls, FAQs, and a streamlined integration alternative using Knit."
source_url: "https://www.getknit.dev/blog/how-to-get-job-application-data-from-bamboohr-ats-api"
page_type: "blog"
---

_This is an educational blog post from Knit's blog: “How to get job application data from BambooHR ATS API”._

# How to get job application data from BambooHR ATS API

## **Introduction**

If you're building HR workflows, scaling recruiting ops, or stitching together multiple ATS systems, [BambooHR’s ATS API](https://developers.getknit.dev/docs/bamboohr-ats-usecases) is a solid lever to pull. This guide distills the exact process for fetching job application data, without wading through generic documentation.

It’s part of a broader deep-dive series on the comprehensive ATS API covering authentication flows, rate-limit behavior, and real-world integration patterns. If you want the full ecosystem view, the master guide is available on the [Knit blog](https://www.getknit.dev/blog/ats-integration-guide).

### **Prerequisites**

Before you start calling the API, make sure you’ve locked in the basics:

*   Active [BambooHR](https://md.getknit.dev/integration/bamboohr) API credentials
*   API access enabled for your [BambooHR](https://md.getknit.dev/integration/bamboohr) account
*   Comfort with REST APIs and JSON structures
*   A Python environment with `requests` installed

## **API Endpoints**

Here are the two BambooHR ATS endpoints you’ll use most frequently:

*   Get all applications  
    `GET https://api.bamboohr.com/api/gateway.php/{companyDomain}/v1/applicant_tracking/applications`
*   Get application details  
    `GET https://api.bamboohr.com/api/gateway.php/{companyDomain}/v1/applicant_tracking/applications/{applicationId}`

### **1\. Retrieve All Job Applications**

```
import requests

def get_all_applications(company_domain, api_key):
    url = f"https://api.bamboohr.com/api/gateway.php/{company_domain}/v1/applicant_tracking/applications"
    headers = {
        "accept": "application/json",
    }
    response = requests.get(url, headers=headers)
    return response.json()

# Example
applications = get_all_applications("mycompany", "your_api_key")
print(applications)
```

### **2\. Retrieve Application Details**

```
import requests

def get_application_details(company_domain, application_id, api_key):
    url = f"https://api.bamboohr.com/api/gateway.php/{company_domain}/v1/applicant_tracking/applications/{application_id}"
    headers = {
        "accept": "application/json",
    }
    response = requests.get(url, headers=headers)
    return response.json()

# Example
application_details = get_application_details("mycompany", 48, "your_api_key")
print(application_details)
```

## **Common Pitfalls to Watch Out For**

Most integration failures come from operational blind spots, not code. Watch these closely:

*   **Rate limits sneak up fast**, especially in high-volume orgs. Build retry logic early.
*   **Basic Auth mishandling** is common. Always encode and store credentials securely.
*   **Pagination is easy to miss** when fetching all applications, don’t assume one-page responses.
*   **Attachments require extra requests**; resumes and cover letters aren’t always bundled.
*   **Structure drift**, BambooHR’s ATS schema can vary across accounts. Don’t hardcode fields.
*   **Timeouts happen** if you’re pulling heavy datasets; set generous timeouts and retries.

## **FAQs**

**1\. What is BambooHR ATS?**  
It’s BambooHR’s built-in applicant tracking system for managing candidates, roles, and application workflows.

**2\. How do I authenticate?**  
Using Basic Auth with your API key.

**3\. Can I filter by job ID?**  
Yes, pass a `jobId` query parameter when listing applications.

**4\. What format does the API return?**  
JSON.

**5\. Does BambooHR paginate application results?**  
Yes, depending on volume. Always check for pagination keys.

**6\. Can I access uploaded documents?**  
Yes, resumes, cover letters, and attachments appear as file IDs you can fetch separately.

**7\. How should I handle API errors?**  
Check HTTP status codes and include fallback logic for 400s, 401s, and 429s.

## **A Faster Way: Using Knit for BambooHR ATS Integration**

If you don’t want to maintain authentication flows, rate-limit handling, schema variations, and long-term [BambooHR ATS API](https://developers.getknit.dev/docs/bamboohr-ats-usecases) upkeep, Knit simplifies the entire stack. Integrating once with Knit gives you unified authentication, automatic schema normalization, zero-maintenance updates every time BambooHR changes something and easy access to application, employee, and hiring-related datasets

If you want to avoid the heavy lifting of maintaining these integrations long-term, Knit handles the full lifecycle so your engineering team can focus elsewhere.


## Related pages

- [How Knit works](https://md.getknit.dev/how-knit-works)
- [Unified API product](https://md.getknit.dev/products/unified-api)
