Get job application information from Recruitee ATS API with Python

Introduction

Recruitee’s ATS API 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.

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 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.

#1 in Ease of Integrations

Trusted by businesses to streamline and simplify integrations seamlessly with GetKnit.