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

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

Step-by-Step Implementation

1. Fetch Data for a Single Candidate

import requests

url = "https://{{subdomain}}.darwinbox.in/JobsApiv3/BulkCandidatesData"
headers = {
    "Content-Type": "application/json"
}
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 = {
    "Content-Type": "application/json"
}
payload = {
    "api_key": "your_api_key",
    "created_from": "start_date_here",   # dd-mm-yyyy hh:mm:ss
    "created_to": "end_date_here"
}

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 data, removes ongoing maintenance overhead, and ensures the API behaves reliably at scale. It’s the fastest way to productionize a Darwinbox integration.

#1 in Ease of Integrations

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