---
title: "Get job application information from Recruitee ATS API with Python"
description: "A practical guide for developers on retrieving job application data from the Recruitee API. Covers authentication, key endpoints, sample code, pitfalls, FAQs, and how to simplify integrations using Knit."
source_url: "https://www.getknit.dev/blog/get-job-application-information-from-recruitee-ats-api-with-python"
page_type: "blog"
---

_This is an educational blog post from Knit's blog: “Get job application information from Recruitee ATS API with Python”._

# Get job application information from Recruitee ATS API with Python

## **Introduction**

[Recruitee’s ATS API](https://developers.getknit.dev/docs/recruitee-usecases) gives teams direct access to candidate and application data, but the actual lift, authentication, endpoint handling, pagination, and error management, often slows teams down. This guide cuts through the noise and walks you through the exact workflow to pull job application data reliably. It’s part of our broader deep-dive series on ATS API architecture, performance constraints, and integration patterns. You can find the same [here](https://www.getknit.dev/blog/ats-integration-guide).

### **Prerequisites**

*   Active Recruitee account with API permissions
*   API key for token-based authentication
*   Python environment with `requests` installed

### **Key API Endpoints**

*   **Get all candidates:** `GET /c/{company_id}/candidates`
*   **Get one candidate:** `GET /c/{company_id}/candidates/{candidate_id}`

### **1\. Authenticate**

```
import requests
headers = {"Authorization": "Bearer YOUR_API_KEY"}
```

### **2\. Fetch All Candidates**

```
company_id = "your_company_id"
url = f"https://api.recruitee.com/c/{company_id}/candidates"
response = requests.get(url, headers=headers)
all_candidates = response.json()
```

### **3\. Fetch a Single Candidate**

```
company_id = "your_company_id"
url = f"https://api.recruitee.com/c/{company_id}/candidates"
response = requests.get(url, headers=headers)
all_candidates = response.json()
```

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

These are the failure modes teams hit most often when productionizing Recruitee integrations:

1.  **Exposed API keys**: Most breaches happen through GitHub leaks; lock your keys down.
2.  **Rate-limit shocks**: Recruitee throttles aggressively; batch and paginate smartly.
3.  **Loose error handling**: 404s and 500s are common during peak load; wrap responses in defensive checks.
4.  **Incorrect IDs**: Mistyped `company_id` or `candidate_id` leads to silent failures; validate inputs early.
5.  **Outdated Python environments**: Old `requests` versions break TLS or redirect chains.
6.  **API version drift**: Endpoints shift; keep an eye on Recruitee’s release notes.
7.  **No staging validation**: Running untested API calls directly in prod is a recurring source of outages.

## **FAQs**

**1\. How do I get my Recruitee API key?**  
From your Recruitee admin console under API settings.

**2\. What are the rate limits?**  
Typically ~1000 requests/hour per account, but this changes, always cross-check the latest docs.

**3\. Can I filter candidates?**  
Yes. Use query parameters on the `/candidates` endpoint to filter by job, status, or tags.

**4\. Does Recruitee support pagination?**  
Yes. Use `page` and `per_page` parameters for large datasets.

**5\. What if I hit authentication errors?**  
Confirm the API key, token format, and permission scope tied to your Recruitee role.

**6\. Can I update a candidate?**  
Yes, via PUT/PATCH endpoints for candidate objects.

**7\. Is the API tied to any language?**  
No, it’s fully language-agnostic; examples here use Python for convenience.

## **A Faster Way: Knit for Recruitee ATS API Integrations**

If you don’t want to manage auth flows, rate limiting, retries, or version drift, Knit abstracts all of it. [Recruitee ATS API](https://www.getknit.dev/integration/recruitee) integration with Knit gives you a stable, production-ready connection to Recruitee without rebuilding logic every quarter. Knit handles authentication, ongoing maintenance, schema normalization, and error resilience so your team ships integrations faster, with less operational drag.


## Related pages

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