---
title: "Get job application data from Darwinbox ATS API using Python"
description: "A practical, step-by-step guide to fetching job application data from the Darwinbox ATS API. Learn prerequisites, endpoints, implementation workflows, common pitfalls, and solutions, plus how Knit simplifies Darwinbox API integrations."
source_url: "https://www.getknit.dev/blog/get-job-application-data-from-darwinbox-ats-api-using-python"
page_type: "blog"
---

_This is an educational blog post from Knit's blog: “Get job application data from Darwinbox ATS API using Python”._

# Get job application data from Darwinbox ATS API using Python

## **Introduction**

Darwinbox ATS sits at the core of hiring operations for many fast-growth companies, but extracting structured, reliable candidate data through the API can quickly turn into a multi-hour engineering effort. This guide breaks down the exact workflow for pulling job application data using the [Darwinbox ATS API](https://www.getknit.dev/integration/darwinbox-ats), without the guesswork.

This article is part of a larger deep-dive series on the  ATS API, covering authentication models, rate limits, job postings, candidate records, and more. You can explore the complete guide [**here**](https://www.getknit.dev/blog/ats-integration-guide)**.**

## **Prerequisites**

*   An active API Key issued by Darwinbox
*   Darwinbox username + password (Basic Auth)
*   Your organization’s Darwinbox subdomain
*   Python environment prepared with `requests`

## **API Endpoint**

**Bulk Candidate Data (V3):**  
`https://{{subdomain}}.darwinbox.in/JobsApiv3/BulkCandidatesData`

### **1\. Fetch Data for a Single Candidate**

```
import requests

url = "https://{{subdomain}}.darwinbox.in/JobsApiv3/BulkCandidatesData"
headers = {
}
payload = {
    "api_key": "your_api_key",
    "candidate_id": ["candidate_id_here"]
}

response = requests.post(
    url,
    auth=('username', 'password'),
    headers=headers,
    json=payload
)

print(response.json())
```

### **2\. Fetch Data for All Candidates Within a Date Range**

```
import requests

url = "https://{{subdomain}}.darwinbox.in/JobsApiv3/BulkCandidatesData"
headers = {
}
payload = {
    "api_key": "your_api_key",
    "created_from": "start_date_here",   # dd-mm-yyyy hh:mm:ss
}

response = requests.post(
    url,
    auth=('username', 'password'),
    headers=headers,
    json=payload
)

print(response.json())
```

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

Getting the API to behave consistently requires precision. Here are the biggest tripwires:

### **1\. Incorrect Basic Auth credentials**

Even minor typos in username/password cause silent 401 failures.

### **2\. Misconfigured or expired API key**

Darwinbox keys may be environment-specific. Validate you’re using the right one.

### **3\. Wrong subdomain**

Teams often confuse sandbox vs production subdomains.

### **4\. Date format mismatches**

Darwinbox is strict about `dd-mm-yyyy hh:mm:ss`. Anything else breaks the request.

### **5\. Large payload performance issues**

Bulk fetches may need pagination, retries, or queueing on your side.

### **6\. Rate limiting**

Multiple bulk requests back-to-back can get throttled.

### **7\. Complex, nested JSON**

Candidate objects come with deeply nested sections — mapping them into your system requires a proper schema plan.

## **FAQs**

**1\. What format does the Darwinbox API key follow?**  
A string token issued by the Darwinbox team. It must be included in every call.

**2\. How do I authenticate?**  
Use Basic Auth (username + password) along with the API key in the payload.

**3\. Can I fetch multiple candidates in one call?**  
Yes, pass a list of candidate IDs in `candidate_id`.

**4\. What date format is required for bulk fetch?**  
`dd-mm-yyyy hh:mm:ss`. Anything else is rejected.

**5\. How do I troubleshoot error responses?**  
Check:

*   API key validity
*   Subdomain correctness
*   Auth credentials
*   Payload parameters

**6\. Is there a limit to bulk fetching?**  
Darwinbox may throttle heavy loads. Check with your account team for exact limits.

**7\. How do I keep the integration secure?**  
Use HTTPS, rotate API keys, and store credentials in a secrets manager.

## **Knit for Darwinbox ATS API Integration**

If you want to avoid maintaining the entire integration lifecycle, authentication, retries, throttling, schema handling, and version upgrades, Knit abstracts all of it. A single integration with Knit unlocks seamless access to [Darwinbox ATS API](https://developers.getknit.dev/docs/darwinbox-ats-usecases) data, removes ongoing maintenance overhead, and ensures the API behaves reliably at scale. It’s the fastest way to productionize a Darwinbox integration.


## Related pages

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