---
title: "Fetch job application data from Zoho Recruit API"
description: "Learn how to fetch job application and candidate data using the Zoho Recruit API. This guide covers authentication, API endpoints, common pitfalls, and FAQs for reliable integrations."
source_url: "https://www.getknit.dev/blog/fetch-job-application-data-from-zoho-recruit-api"
page_type: "blog"
---

_This is an educational blog post from Knit's blog: “Fetch job application data from Zoho Recruit API”._

# Fetch job application data from Zoho Recruit API

## Introduction

This article is part of an ongoing series that explores the Zoho Recruit API in detail. It focuses specifically on retrieving job application and candidate data using the Zoho Recruit API.

If you are building integrations for recruitment analytics, internal dashboards, or downstream HR workflows, accessing candidate data reliably is a foundational requirement. This guide walks through the exact API endpoints, authentication steps, and common pitfalls involved in fetching candidate data from Zoho Recruit.

For a broader overview of the Zoho Recruit API, including authentication flows, rate limits, and other supported use cases—refer to the complete Zoho Recruit API guide [here](https://www.getknit.dev/blog/zoho-recruit-api-directory).

### Pre-requisites

Before making any API calls, ensure the following are in place:

*   Your application is registered with Zoho Recruit and has a valid **Client ID** and **Client Secret**.
*   OAuth 2.0 authorization is completed and an **Access Token** has been generated.
*   The application has the required **API scopes** to access candidate data.

Without these, API requests will fail regardless of endpoint correctness.

### API Endpoints

*   **Get All Candidates**  
    `GET https://recruit.zoho.in/recruit/v2/Candidates`
*   **Get Specific Candidate**  
    `GET https://recruit.zoho.in/recruit/v2/Candidates/{candidate_id}`

#### Step 1: Obtain Access Token

```
import requests

url = "https://accounts.zoho.in/oauth/v2/token"
payload = {
    'grant_type': 'authorization_code',
    'client_id': '{client_id}',
    'client_secret': '{client_secret}',
    'redirect_uri': '{redirect_uri}',
    'code': '{grant_token}'
}

response = requests.post(url, data=payload)
access_token = response.json().get('access_token')
```

This access token must be included in the `Authorization` header for all subsequent API calls.

#### Step 2: Fetch All Candidates

```
url = "https://recruit.zoho.in/recruit/v2/Candidates"
headers = {
    'Authorization': f'Zoho-oauthtoken {access_token}'
}

response = requests.get(url, headers=headers)
candidates = response.json().get('data')
```

This endpoint returns a list of candidate records, subject to pagination and API limits.

#### Step 3: Fetch a Specific Candidate

```
candidate_id = "134154000000311105"
url = f"https://recruit.zoho.in/recruit/v2/Candidates/{candidate_id}"

response = requests.get(url, headers=headers)
candidate_data = response.json().get('data')
```

This is useful when you already have a candidate ID and need detailed information for a single record.

## Common Pitfalls to Watch Out For

1.  **Expired access tokens**  
    Access tokens have a limited lifetime and must be refreshed to avoid authentication failures.
2.  **API rate limits**  
    Exceeding rate limits can result in throttling or temporary blocks, especially during bulk fetches.
3.  **Unhandled HTTP errors**  
    Errors such as 400, 401, or 403 should be explicitly handled instead of assuming a valid response.
4.  **Invalid candidate IDs**  
    Requests for non-existent or deleted candidate IDs will return errors and should be validated upstream.
5.  **Missing or incorrect API scopes**  
    Even with a valid token, insufficient scopes will prevent access to candidate data.
6.  **Incorrect regional endpoint usage**  
    Using the wrong Zoho data center domain can cause authentication or routing issues.
7.  **Improper JSON parsing**  
    Always validate response structures before accessing nested fields to avoid runtime errors.

## Frequently Asked Questions (FAQs)

**Q1. How do I refresh an expired access token?**  
Use the refresh token with Zoho’s OAuth token endpoint to generate a new access token.

**Q2. What is the maximum number of candidates returned per API call?**  
You can retrieve up to 200 candidates per request.

**Q3. Can candidate data be sorted in API responses?**  
Yes, sorting can be applied using the `sort_by` and `sort_order` parameters.

**Q4. Is it possible to filter candidates by status?**  
Yes, filtering can be done using the `Candidate_Status` field in the request query.

**Q5. How should API errors be handled?**  
Inspect the error code and message returned in the API response to identify the root cause.

**Q6. Can I receive real-time updates when candidate data changes?**  
Yes, Zoho Recruit webhooks can be used to receive notifications for candidate updates.

**Q7. Are candidate attachments accessible via the API?**  
Yes, but attachments require additional API calls beyond the candidate data endpoints.

## Using Knit for Zoho Recruit API Integration

For teams looking to simplify [Zoho Recruit API](https://www.getknit.dev/integration/zoho-recruit) integrations, Knit provides a streamlined alternative. By integrating with Knit once, you can avoid managing OAuth flows, token refresh logic, and long-term maintenance internally. Knit handles authentication, authorization, and integration upkeep, enabling faster and more reliable access to Zoho Recruit data with significantly reduced engineering overhead.


## Related pages

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