Jobs

Create and manage jobs with the same fields as Dashboard → Jobs → Create job. All JSON uses snake_case. Timestamps are ISO 8601 strings in UTC.

List query parameters (GET)

GET /api/v1/jobs
FieldTypeRequiredDescription
searchstringNoSearch job title
status"draft" | "active" | "paused" | "closed" | "filled"NoFilter by status
client_idstring (uuid)NoFilter by client
limitintegerNoPage size (1–100, default 50)
offsetintegerNoSkip N records (default 0)

Request body (POST / PUT)

Job object — POST requires title; PUT is partial
FieldTypeRequiredDescription
titlestringPOSTJob title (required on create)
jd_textstring | nullNoHTML job description; may trigger AI enrichment
descriptionstring | nullNoPlain-text description (optional if jd_text set)
client_idstring (uuid) | nullNonull = direct hire (your org); UUID = client you recruit for
client_name_not_disclosedbooleanNoWhen client_id set: hide client on public job page
client_namestring | nullNoLegacy free-text client name
locationsstring[]NoCity names (e.g. Bangalore, Mumbai)
work_mode"onsite" | "remote" | "hybrid"NoDefault hybrid on dashboard
job_type"full_time" | "contract"NoDefault full_time
openings_countintegerNoOpen positions (min 1, default 1)
status"draft" | "active" | "paused" | "closed" | "filled"NoDefault active on create
min_experience_yearsnumber | nullNoMinimum experience (years)
max_experience_yearsnumber | nullNoMaximum experience (years)
currency"INR" | "USD" | "EUR" | "GBP"NoSalary/rate currency (default INR)
min_ctcnumber | nullNoCTC minimum in LPA (full_time)
max_ctcnumber | nullNoCTC maximum in LPA (full_time)
ctc_not_disclosedbooleanNoHide salary on public job page
ratenumber | nullNoContract rate (when job_type is contract)
required_skillsstring[]NoRequired skill tags
preferred_skillsstring[]NoPreferred skill tags
screening_questionsobject[]NoWhatsApp/email/web screening questions (see nested fields below)
screening_questions[].idstringNoQuestion id
screening_questions[].questionstringYes*Question text (*per item)
screening_questions[].type"text" | "number" | "single_choice" | "multiple_choice"Yes*Answer type (*per item)
screening_questions[].optionsstring[]NoChoices for choice types
screening_questions[].requiredbooleanYes*Whether required (*per item)
screening_questions[].orderintegerYes*Display order (*per item)
recruiter_idstring (uuid) | nullNoAssigned recruiter user id
skip_ai_enrichmentbooleanNotrue skips JD parsing, embedding, and video question generation
metadataobjectNoCustom JSON (e.g. external_id)

Response body

Single-resource responses return { "data": { ... } }. Lists return { "data": [ ... ], "meta": { ... } }.

Job resource (data)
FieldTypeRequiredDescription
idstring (uuid)Job id
titlestringJob title
jd_textstring | nullHTML job description
descriptionstring | nullPlain description
client_idstring (uuid) | nullClient id or null for direct hire
client_namestring | nullResolved client name
client_name_not_disclosedbooleanClient hidden on public surfaces
is_direct_hirebooleantrue when client_id is null
public_company_namestringName shown to candidates on public job page
locationsstring[]City names
work_modestring | nullonsite, remote, or hybrid
job_typestring | nullfull_time or contract
openings_countintegerNumber of openings
filled_countintegerPositions filled
statusstringdraft | active | paused | closed | filled
min_experience_yearsnumber | nullMin experience (years)
max_experience_yearsnumber | nullMax experience (years)
currencystring | nullINR, USD, EUR, or GBP
min_ctcnumber | nullMin CTC (LPA)
max_ctcnumber | nullMax CTC (LPA)
ctc_not_disclosedbooleanSalary hidden publicly
ratenumber | nullContract rate
required_skillsstring[]Required skills
preferred_skillsstring[]Preferred skills
required_skills_weightedobject[]AI-weighted required skills
preferred_skills_weightedobject[]AI-weighted preferred skills
screening_questionsobject[] | nullScreening question config
video_interview_questionsobject[]Generated video interview questions
applicant_countintegerCandidates on candidate_jobs
recruiter_idstring (uuid) | nullRecruiter user id
metadataobject | nullCustom metadata
created_atstring (ISO 8601 date-time)Created timestamp
updated_atstring (ISO 8601 date-time)Updated timestamp
List meta object
FieldTypeRequiredDescription
meta.totalintegerTotal matching records
meta.limitintegerPage size used
meta.offsetintegerOffset used
GET/api/v1/jobs

List jobs.

GET/api/v1/jobs/{id}

Get one job.

POST/api/v1/jobs

Create a job. Returns 201 with the job object in data.

Example
{
  "title": "Senior React Developer",
  "jd_text": "<p>Build product features with React...</p>",
  "client_id": null,
  "client_name_not_disclosed": false,
  "locations": ["Bangalore", "Mumbai"],
  "work_mode": "hybrid",
  "job_type": "full_time",
  "openings_count": 1,
  "status": "active",
  "min_experience_years": 4,
  "max_experience_years": 8,
  "currency": "INR",
  "min_ctc": 18,
  "max_ctc": 28,
  "ctc_not_disclosed": false,
  "required_skills": ["React", "TypeScript"],
  "preferred_skills": ["Next.js"],
  "skip_ai_enrichment": false
}
Contract job (draft)
{
  "title": "DevOps Consultant",
  "job_type": "contract",
  "currency": "INR",
  "rate": 2500,
  "work_mode": "remote",
  "locations": ["Hyderabad"],
  "status": "draft"
}
PUT/api/v1/jobs/{id}

Partial update — send only fields to change.