R
Recruitment Agentic AI
v2.0 Public Beta

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/api

Authentication

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.

POST/auth/sso/generate-token

Generate 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=..."
IFRAMEhttps://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

tokenQuery

The SSO token generated in Step 1

Required

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>

POST/proxy/upload/resume

Resume Analysis

Upload a candidate's resume (PDF/DOCX) along with the Job Description (JD) to get a comprehensive compatibility analysis.

Parameters

resumeFile

The candidate Resume file (PDF, DOCX)

Required
jd_fileFile

The Job Description file

Required

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"
  }
}
POST/proxy/upload/interview

Interview Analysis

Submit an audio recording of an interview to receive a full transcript and behavioral analysis report.

Parameters

resumeFile

The candidate Resume

Required
audioFile

Interview audio recording (MP3, WAV)

Required
jd_fileFile

The Job Description

Required

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"
  }
}
POST/proxy/generate/questions

Generate Questions

Generate a list of tailored interview questions based on the specific requirements in a Job Description.

Parameters

jd_fileFile

The Job Description file to analyze

Required

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.

GET/proxy/resumes

List 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..." }
  ]
}
GET/proxy/resumes/:id/download

Download Stored Resume

Download a specific resume binary from the repository using its unique identifier.

Parameters

idPath

The unique ID of the stored resume

Required

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);

GET/proxy/jds

List 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..." }
  ]
}
GET/proxy/jds/:id/download

Download Job Description

Download a specific Job Description file.

Parameters

idPath

The unique ID of the stored JD

Required

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();

GET/proxy/recordings

List 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..." }
  ]
}
GET/proxy/recordings/:id/download

Download Recording

Download the audio recording binary (MP3/WAV/WebM).

Parameters

idPath

The unique ID of the recording

Required

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();

GET/proxy/logs

Retrieve Logs

Get a paginated list of all your past API requests and their processing status.

Parameters

pageQuery

Page number for pagination

limitQuery

Number 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
  }
}
GET/proxy/logs/:id

Process Details

Retrieve the full details and status of a specific analysis task using its ID.

Parameters

idPath

The logId or task ID returned by the analysis endpoints

Required

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://..."
    }
  }
}