API Reference
Integrate our advanced Recruitment Agentic AI engine directly into your ATS or internal tools. Our REST API allows you to programmatically analyze resumes, process interviews, and generate tailored questions.
Base URL
https://recruitagenticai-api.keertikaonline.com/apiAuthentication
All API requests must include your API Key in the X-API-Key header. You can find your API key in your account dashboard.
Header Format
X-API-Key: sk_live_51M...SSO & Iframe Integration
Seamlessly embed the Recruitment AI Dashboard into your own application without requiring users to log in separately. Generate a short-lived SSO token via the API, then use the returned URL in an iframe.
/auth/sso/generate-tokenGenerate SSO Token
Generate a temporary Single Sign-On token for a user. The response includes an 'iframeUrl' that you can embed in your application.
Implementation Example
// 1. Backend: Generate Token
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/auth/sso/generate-token', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY'
}
});
const data = await response.json();
// The iframeUrl contains the SSO token:
// "https://recruitai.keertikaonline.com/sso?token=..."https://recruitai.keertikaonline.com/sso?token=eyJhbGciOi...Embed Dashboard Widget
Once you have the iframeUrl from the step above, you can embed it in a modal or a div. Below is a complete drop-in example of a floating widget with Minimize/Maximize controls.
Parameters
tokenQueryThe SSO token generated in Step 1
Implementation Example
// 2. Frontend: iframe Embed
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Recruitment Agentic AI</title>
<style>
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
height: 100vh;
font-family: "Segoe UI", system-ui, sans-serif;
background: #020617;
overflow: hidden;
}
/* Overlay */
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(2, 6, 23, 0.7);
display: flex;
z-index: 9999;
}
/* Modal */
.modal {
width: 100%;
height: 100%;
background: #ffffff;
display: flex;
flex-direction: column;
transition: all 0.2s ease;
}
/* Header */
.modal-header {
height: 40px;
background: #0f172a;
display: flex;
align-items: center;
justify-content: flex-end;
border-bottom: 1px solid #1e293b;
}
/* Windows Controls */
.window-controls {
display: flex;
}
.win-btn {
width: 46px;
height: 40px;
border: none;
background: transparent;
color: #e5e7eb;
font-size: 14px;
cursor: pointer;
transition: background 0.15s ease;
}
.win-btn:hover {
background: #1e293b;
}
.win-btn.close:hover {
background: #dc2626;
color: #ffffff;
}
.win-btn span {
display: inline-block;
transform: scale(1.1);
}
/* Body */
.modal-body {
flex: 1;
background: #020617;
}
iframe {
width: 100%;
height: 100%;
border: none;
background: #fff;
}
/* Minimized */
.minimized {
width: 300px !important;
height: 40px !important;
position: fixed;
bottom: 12px;
right: 12px;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 18px 40px rgba(0,0,0,0.45);
}
.minimized .modal-body {
display: none;
}
</style>
</head>
<body>
<div class="modal-overlay" id="overlay">
<div class="modal" id="modal">
<div class="modal-header">
<div class="window-controls">
<button class="win-btn" title="Minimize" onclick="minimize()">
<span>—</span>
</button>
<button class="win-btn" title="Maximize" onclick="maximize()">
<span>▢</span>
</button>
<button class="win-btn close" title="Close" onclick="closeModal()">
<span>✕</span>
</button>
</div>
</div>
<div class="modal-body">
<iframe
src="Received iframeUrl from Step 1"
allow="clipboard-read clipboard-write"
></iframe>
</div>
</div>
</div>
<script>
const modal = document.getElementById("modal");
const overlay = document.getElementById("overlay");
function closeModal() {
overlay.style.display = "none";
}
function minimize() {
modal.classList.add("minimized");
}
function maximize() {
modal.classList.remove("minimized");
modal.style.width = "100%";
modal.style.height = "100%";
}
// ESC closes modal
document.addEventListener("keydown", (e) => {
if (e.key === "Escape") closeModal();
});
</script>
</body>
</html>/proxy/upload/resumeResume Analysis
Upload a candidate's resume (PDF/DOCX) along with the Job Description (JD) to get a comprehensive compatibility analysis.
Parameters
resumeFileThe candidate Resume file (PDF, DOCX)
jd_fileFileThe Job Description file
Implementation Example
const form = new FormData();
form.append('resume', resumeFile);
form.append('jd_file', jdFile);
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/upload/resume', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY'
},
body: form
});
const data = await response.json();
// Response: { success: true, message: "...", logId: "65d..." }
// Use logId to poll or view result in dashboard.Expected JSON Response
{
"success": true,
"message": "Analysis started",
"data": {
"logId": "65d8a93e23...",
"status": "pending"
}
}/proxy/upload/interviewInterview Analysis
Submit an audio recording of an interview to receive a full transcript and behavioral analysis report.
Parameters
resumeFileThe candidate Resume
audioFileInterview audio recording (MP3, WAV)
jd_fileFileThe Job Description
Implementation Example
const form = new FormData();
form.append('audio', audioFile);
form.append('resume', resumeFile);
form.append('jd_file', jdFile);
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/upload/interview', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY'
},
body: form
});
const data = await response.json();
// Response: { success: true, message: "...", logId: "65d..." }Expected JSON Response
{
"success": true,
"message": "Analysis started",
"data": {
"logId": "65d8a93e23...",
"status": "pending"
}
}/proxy/generate/questionsGenerate Questions
Generate a list of tailored interview questions based on the specific requirements in a Job Description.
Parameters
jd_fileFileThe Job Description file to analyze
Implementation Example
const form = new FormData();
form.append('jd_file', jdFile);
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/generate/questions', {
method: 'POST',
headers: {
'X-API-Key': 'YOUR_API_KEY'
},
body: form
});
const data = await response.json();
// Response: { success: true, message: "...", logId: "65d..." }Expected JSON Response
{
"success": true,
"message": "Question generation started",
"data": {
"logId": "65d8a93e23...",
"status": "pending"
}
}File Management
Programmatically manage your stored assets including resumes, job descriptions, and interview recordings. These endpoints allow you to list, upload, and download files for use in analysis workflows.
/proxy/resumesList Stored Resumes
Retrieve a complete list of all resumes currently stored in your organizational repository.
Implementation Example
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/resumes', {
method: 'GET',
headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const data = await response.json();Expected JSON Response
{
"success": true,
"data": [
{ "_id": "65d...", "name": "john_doe_resume.pdf", "createdAt": "2024-02-23..." }
]
}/proxy/resumes/:id/downloadDownload Stored Resume
Download a specific resume binary from the repository using its unique identifier.
Parameters
idPathThe unique ID of the stored resume
Implementation Example
const resId = "65d...";
const response = await fetch(`https://recruitagenticai-api.keertikaonline.com/api/proxy/resumes/${resId}/download`, {
method: 'GET',
headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
window.open(url);/proxy/jdsList Job Descriptions
Retrieve all previously uploaded or generated Job Descriptions from your secure storage.
Implementation Example
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/jds', {
method: 'GET',
headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const data = await response.json();Expected JSON Response
{
"success": true,
"data": [
{ "_id": "65e...", "name": "Senior_Engineer_JD.pdf", "createdAt": "2024-02-24..." }
]
}/proxy/jds/:id/downloadDownload Job Description
Download a specific Job Description file.
Parameters
idPathThe unique ID of the stored JD
Implementation Example
const jdId = "65e...";
const response = await fetch(`https://recruitagenticai-api.keertikaonline.com/api/proxy/jds/${jdId}/download`, {
method: 'GET',
headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const blob = await response.blob();/proxy/recordingsList Interview Recordings
Access the library of interview audio recordings processed by the platform.
Implementation Example
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/recordings', {
method: 'GET',
headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const data = await response.json();Expected JSON Response
{
"success": true,
"data": [
{ "_id": "65f...", "name": "interview_session_01.webm", "createdAt": "2024-02-25..." }
]
}/proxy/recordings/:id/downloadDownload Recording
Download the audio recording binary (MP3/WAV/WebM).
Parameters
idPathThe unique ID of the recording
Implementation Example
const recId = "65f...";
const response = await fetch(`https://recruitagenticai-api.keertikaonline.com/api/proxy/recordings/${recId}/download`, {
method: 'GET',
headers: { 'X-API-Key': 'YOUR_API_KEY' }
});
const blob = await response.blob();/proxy/logsRetrieve Logs
Get a paginated list of all your past API requests and their processing status.
Parameters
pageQueryPage number for pagination
limitQueryNumber of items per page
Implementation Example
const response = await fetch('https://recruitagenticai-api.keertikaonline.com/api/proxy/logs?page=1&limit=10', {
method: 'GET',
headers: {
'X-API-Key': 'YOUR_API_KEY'
}
});Expected JSON Response
{
"success": true,
"data": {
"logs": [
{
"_id": "65d8a93e23...",
"endpoint": "/api/proxy/upload/resume",
"method": "POST",
"status": "completed",
"createdAt": "2024-02-23T10:00:00Z"
}
],
"totalPages": 5,
"currentPage": 1,
"total": 48
}
}/proxy/logs/:idProcess Details
Retrieve the full details and status of a specific analysis task using its ID.
Parameters
idPathThe logId or task ID returned by the analysis endpoints
Implementation Example
const logId = "65d...";
const response = await fetch(`https://recruitagenticai-api.keertikaonline.com/api/proxy/logs/${logId}`, {
method: 'GET',
headers: {
'X-API-Key': 'YOUR_API_KEY'
}
});
const data = await response.json();
// Check data.data.status: "pending", "processing", "completed", or "failed"Expected JSON Response
{
"success": true,
"data": {
"_id": "65d8a93e23...",
"status": "completed",
"responseData": {
"id": 12,
"personal_info": { "name": "John Doe", ... },
"analysis_report": { "score": 85, ... },
"file": "https://..."
}
}
}