Job Hai vacancy, profile and apply data API
Job Hai - Search Job, Vacancy is Info Edge's Android job-search client for JobHai, the same group's hyperlocal hiring board for India's blue-collar and grey-collar workforce (Info Edge also runs Naukri). Jobseekers sign in with a phone OTP or Truecaller, then land on a city- and locality-filtered feed of nearby openings that can be narrowed by keyword, category, title, distance, bus/metro and contextual filters, including a Fatafat fast-hire bucket and a video job-description reel. Each card shows the role, salary band, WFH / part-time / full-time / contract flags, shift, openings, walk-in tag and the hiring company; tapping through opens the vacancy with the full description, interview address, recruiter, required skills and an eligibility questionnaire, and Apply or Call HR connects the candidate to the hiring contact. A Responses tab tracks every application, similar-job suggestions appear after apply, the profile holds name, phone, locality, qualification, work experience, skills, languages, an uploaded resume and a generated CV, and Seekho / HireMeter sit as in-app learning and readiness extras. Across 420+ Indian cities it competes with apna, WorkIndia, Shine and Naukri Fast rather than LinkedIn-style white-collar networking, with a 4.43 rating from 164,975 Play reviews.
Hyperlocal vacancy cards are keyed by jobTitle with minSalary/maxSalary, isWfh, locality and callAllowed, plus a Fatafat fast-hire bucket (jsAction, isTopJob, bucketId) and video JDs (hasVideoJD, videoUrl).
A phone OTP session returns token and refreshToken with isFresher / isSoftProfileCompleted; apply and call-apply unlock jobContact and requisitionId; the Responses tab lists applicationType and canCall; the profile exposes profileCompletionPercentage, highestQualification and a generated CV url; HireMeter scores hireMeterPercentage across base/activity/profile with per-task probabilityGain. Neighbourhood hiring maps can census advertised INR bands, ATS tools can reconcile call-apply pipelines, and readiness dashboards can join HireMeter tasks onto applicant records — openData Studio turns those fields into callable open data.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Send jobseeker OTP
POST
/v1/seeker/otp/dispatchosintSends a login OTP to the jobseeker's phone before verify-OTP issues token and refreshToken.
Auth: Unauthenticated. Phone OTP login; Truecaller is an alternate sign-in path.
- phone
- status
- code
- message
- data
POST /v1/seeker/otp/dispatch HTTP/1.1 Content-Type: application/json Accept: application/json { "phone": "9876543210" }{ "status": true, "code": 200, "message": "OTP sent", "data": { "phone": "9876543210" } }Verify OTP login
POST
/v1/seeker/otp/confirmosintVerifies the SMS OTP and returns token, refreshToken, userId, isFresher, isReturningUser and isSoftProfileCompleted used as the jobseeker session.
Auth: Unauthenticated. Response data.token is sent as Authorization: Bearer <token> on later calls; data.refreshToken is stored for POST /v1/seeker/token/rotate.
- phone
- otp
- token
- refreshToken
- userId
- name
- gender
- isFresher
- isReturningUser
- isSoftProfileCompleted
- mLandingScreen
- currentSalary
- qualification
- highestQualificationId
- highestQualification
- vernacHighestQualification
- schoolMedium
- schoolSubject
- status
- code
- message
POST /v1/seeker/otp/confirm HTTP/1.1 Content-Type: application/json Accept: application/json { "phone": "9876543210", "otp": "482193" }{ "status": true, "code": 200, "message": "ok", "data": { "token": "<access-token>", "refreshToken": "<refresh-token>", "userId": 4412891, "name": "Priya Sharma", "gender": "female", "isFresher": false, "isReturningUser": true, "isSoftProfileCompleted": true, "mLandingScreen": "home", "currentSalary": 18000, "qualification": { "highestQualificationId": 4, "highestQualification": "12th Pass", "vernacHighestQualification": "12वीं पास", "schoolMedium": "Hindi", "schoolSubject": "Arts" } } }Refresh auth token
POST
/v1/seeker/token/rotateosintRotates the jobseeker Bearer token using the stored refreshToken pair (token, refreshToken).
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm. Rotates token and refreshToken.
- token
- refreshToken
- status
- code
- message
- data
POST /v1/seeker/token/rotate HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": { "token": "<new-access-token>", "refreshToken": "<new-refresh-token>" } }Job feed
POST
/v1/openings/neighbourhood-feedopendataReturns the paginated city/locality vacancy feed used by the home Jobs tab: jobTitle, minSalary/maxSalary, isWfh, callAllowed, company and recruiter.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- job_type
- page
- size
- keyword
- category
- city
- locality
- topMatchJobsOnly
- has_reset_filters
- source
- page_url
- filter
- title_filters
- distance_filters
- contextual_filters
- bus_metro_filters
- passed_filters
- jobCount
- starMatchJobCount
- srpTitle
- isTopMatch
- showCallApplyUpfront
- totalVideoJdCount
- jobs
- id
- jobTitle
- jobType
- salary
- minSalary
- maxSalary
- salaryIncentiveText
- incentives
- incentivesValue
- expText
- noOfOpenings
- postedOn
- jobAddress
- distance
- isWfh
- isPartTime
- isFullTime
- isContract
- walkin
- isVerified
- isNew
- highDemand
- applied
- application_status
- callAllowed
- showApplyButton
- hasVideoJD
- videoUrl
- company
- recruiter
- jobShift
- roleCategory
- categoryId
- applications
- filters
- titleFilters
- localityFilters
- distanceFilters
- sortOptions
POST /v1/openings/neighbourhood-feed HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "job_type": "recommended", "page": 1, "size": 20, "keyword": "delivery", "category": 42, "city": "Bengaluru", "locality": "Whitefield", "topMatchJobsOnly": false, "has_reset_filters": false, "source": "home", "page_url": "/jobs", "filter": [], "title_filters": [], "distance_filters": [], "contextual_filters": [], "bus_metro_filters": [], "passed_filters": {} }{ "status": true, "code": 200, "message": "ok", "data": { "jobCount": 1284, "starMatchJobCount": 36, "srpTitle": "Jobs in Whitefield, Bengaluru", "isTopMatch": false, "showCallApplyUpfront": true, "totalVideoJdCount": 18, "companyLogoVariant": true, "jobs": [{ "id": "JH-86750", "jobTitle": "Delivery Executive", "jobType": "full_time", "jobTypeSrp": "Full Time", "salary": "₹15,000 - ₹22,000", "minSalary": 15000, "maxSalary": 22000, "salaryIncentiveText": "Incentives extra", "incentives": true, "incentivesValue": 3000, "expText": "0-1 yrs", "noOfOpenings": "12", "openings": "12", "postedOn": "2 days ago", "locality": "Whitefield", "jobAddress": "ITPL Main Road, Whitefield, Bengaluru", "shortJobAddress": "Whitefield, Bengaluru", "distance": "3.2 km", "isWfh": false, "isPartTime": false, "isFullTime": true, "isContract": false, "walkin": false, "isVerified": true, "isNew": true, "highDemand": true, "applied": false, "application_status": null, "callAllowed": true, "showApplyButton": true, "hasVideoJD": true, "videoUrl": "https://cdn.example.com/jd/86750.mp4", "videoThumbnailUrl": "https://cdn.example.com/jd/86750.jpg", "company": {"id": "comp-4412", "name": "Example Logistics"}, "recruiter": {"id": "hr-882", "name": "Asha K"}, "jobShift": "Day", "roleCategory": "Delivery", "categoryId": 42, "applications": 86 }], "filters": [], "titleFilters": [], "localityFilters": [], "distanceFilters": [], "sortOptions": [] } }Job detail
GET
/v1/openings/{openingId}/vacancy-cardopendataHydrates a single vacancy: jobDescription, interviewAddress, jobHighlights (education/skills/timings), recruiter and callAllowed used on the job-detail screen.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- id
- jobTitle
- jobDescription
- enhancedJobDescription
- requirements
- salary
- salaryHtml
- minSalary
- maxSalary
- jobShift
- jobAddress
- interviewAddress
- interviewAddressLat
- interviewAddressLng
- interviewMessage
- locality
- isWfh
- isVerified
- walkin
- screeningEnabled
- showQuestionnaire
- callAllowed
- showApplyButton
- applied
- application_status
- applicationStatusMessage
- depositDetail
- noOfOpenings
- applications
- shareMessage
- company
- recruiter
- jobHighlights
- education
- gender
- skills
- timings
- companyPerks
- asset
- jobSkills
- hasVideoJD
- videoUrl
- videoJDThumbnail
GET /v1/openings/JH-86750/vacancy-card HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": { "id": "JH-86750", "jobTitle": "Delivery Executive", "jobDescription": "Deliver packages across Whitefield. Two-wheeler required.", "enhancedJobDescription": "Route-based delivery with daily incentives.", "requirements": "Own two-wheeler, Android phone, 10th pass", "salary": "₹15,000 - ₹22,000", "salaryHtml": "<b>₹15,000 - ₹22,000</b>", "minSalary": 15000, "maxSalary": 22000, "jobShift": "Day 9am-6pm", "jobAddress": "ITPL Main Road, Whitefield, Bengaluru", "interviewAddress": "Gate 2, ITPL, Whitefield", "interviewAddressLat": "12.9698", "interviewAddressLng": "77.7499", "interviewMessage": "Walk in Mon-Sat 10am-4pm", "locality": "Whitefield", "isWfh": false, "isVerified": true, "walkin": true, "screeningEnabled": true, "showQuestionnaire": true, "callAllowed": true, "showApplyButton": true, "applied": false, "application_status": null, "applicationStatusMessage": null, "depositDetail": null, "noOfOpenings": "12", "applications": 86, "shareMessage": "Delivery Executive in Whitefield — apply on Job Hai", "company": {"id": "comp-4412", "name": "Example Logistics"}, "recruiter": {"id": "hr-882", "name": "Asha K"}, "jobHighlights": { "education": {"label": "10th Pass", "isSelected": true}, "gender": {"label": "Any", "isSelected": true}, "skills": {"label": "Driving", "isSelected": true}, "timings": {"label": "Day shift", "isSelected": true}, "companyPerks": {"label": "PF", "isSelected": true}, "asset": {"label": "Two-wheeler", "isSelected": true} }, "jobSkills": [{"label": "Driving"}], "hasVideoJD": true, "videoUrl": "https://cdn.example.com/jd/86750.mp4", "videoJDThumbnail": "https://cdn.example.com/jd/86750.jpg" } }Apply to job
POST
/v1/openings/tap-applyopendataApplies the signed-in jobseeker to a vacancy and returns callAllowed, jobContact and requisitionId for the post-apply Call HR sheet.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- jobId
- source
- callAllowed
- callAllowedMessage
- jobContact
- jobApplyCount
- requisitionId
- showFraudEducation
- showGuide
- showReferralBanner
- showLcsScreening
- isAudioUploadAllowed
- salary
- lcsUrl
- questions
- callFeedbackOptions
POST /v1/openings/tap-apply HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "jobId": "JH-86750", "source": "job_detail" }{ "status": true, "code": 200, "message": "applied", "data": { "callAllowed": true, "callAllowedMessage": "You can call the recruiter now", "jobContact": "+9198XXXXXX21", "jobApplyCount": 1, "requisitionId": "req-4412", "showFraudEducation": false, "showGuide": true, "showReferralBanner": false, "showLcsScreening": false, "isAudioUploadAllowed": false, "salary": true, "lcsUrl": null, "questions": [], "callFeedbackOptions": [] } }Call recruiter apply
POST
/v1/openings/hr-dialopendataCall-to-apply: unlocks jobContact when callAllowed is true and returns callFeedbackOptions for the post-call sheet.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- jobId
- source
- callAllowed
- callAllowedMessage
- jobContact
- jobApplyCount
- requisitionId
- showFraudEducation
- showGuide
- showLcsScreening
- isAudioUploadAllowed
- questions
- callFeedbackOptions
POST /v1/openings/hr-dial HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "jobId": "JH-86750", "source": "job_detail" }{ "status": true, "code": 200, "message": "ok", "data": { "callAllowed": true, "callAllowedMessage": "Connecting you to HR", "jobContact": "+9198XXXXXX21", "jobApplyCount": 1, "requisitionId": "req-4412", "showFraudEducation": true, "showGuide": true, "showLcsScreening": false, "isAudioUploadAllowed": true, "questions": [], "callFeedbackOptions": [{"id": "connected", "label": "Call connected"}] } }Similar jobs
POST
/v1/openings/nearby-matchesopendataReturns similar vacancies after an apply, with count, moveToSimilarPage and okCallCount/greatCallCount used on the similar-jobs screen.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- job_id
- job_type
- page
- size
- city
- locality
- topMatchJobsOnly
- source
- filter
- title_filters
- distance_filters
- count
- showCallApplyUpfront
- moveToSimilarPage
- okCallCount
- greatCallCount
- jobs
- id
- jobTitle
- minSalary
- maxSalary
- isWfh
- callAllowed
- applied
- company
POST /v1/openings/nearby-matches HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "job_id": "JH-86750", "job_type": "similar", "page": 1, "size": 10, "city": "Bengaluru", "locality": "Whitefield", "topMatchJobsOnly": false, "source": "post_apply", "filter": [], "title_filters": [], "distance_filters": [], "contextual_filters": [], "bus_metro_filters": [] }{ "status": true, "code": 200, "message": "ok", "data": { "count": 8, "showCallApplyUpfront": true, "moveToSimilarPage": true, "okCallCount": 12, "greatCallCount": 4, "jobs": [{ "id": "JH-86761", "jobTitle": "Warehouse Associate", "minSalary": 14000, "maxSalary": 18000, "locality": "Mahadevapura", "isWfh": false, "callAllowed": true, "applied": false, "company": {"id": "comp-4490", "name": "Example Retail"} }] } }Video job reels
POST
/v1/openings/video-reelsopendataPages video job-description reels (hasVideoJD, videoUrl, videoThumbnailUrl, totalVideoJdCount) used by the video SRP.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- job_type
- page
- size
- city
- locality
- source
- totalCount
- totalVideoJdCount
- jobs
- id
- jobTitle
- hasVideoJD
- videoUrl
- videoThumbnailUrl
- videoJDThumbnail
- minSalary
- maxSalary
- isVideoSeen
- company
POST /v1/openings/video-reels HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "job_type": "video", "page": 1, "size": 10, "city": "Bengaluru", "locality": "Whitefield", "source": "video_srp" }{ "status": true, "code": 200, "message": "ok", "data": { "page": 1, "size": 10, "totalCount": 48, "totalVideoJdCount": 48, "jobs": [{ "id": "JH-87001", "jobTitle": "Retail Cashier", "hasVideoJD": true, "videoUrl": "https://cdn.example.com/jd/87001.mp4", "videoThumbnailUrl": "https://cdn.example.com/jd/87001.jpg", "videoJDThumbnail": "https://cdn.example.com/jd/87001.jpg", "minSalary": 16000, "maxSalary": 20000, "locality": "Indiranagar", "isVideoSeen": false, "company": {"id": "comp-120", "name": "Example Mart"} }] } }Applications list
POST
/v1/seeker/application-ledgeropendataLists the jobseeker's applications with status, applicationType, canCall, cName/rName and notGoingReasons used by the Responses tab.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- page
- size
- title
- filter
- notGoingReasons
- jobs
- jobId
- cName
- rName
- addr
- distance
- salaryHTML
- status
- applicationType
- canCall
- isExpired
- isFatafatJob
- showSimilarJobs
- showSimilarJobsCta
- cta
- incentives
- incentivesValue
- salaryIncentiveText
- categoryTitle
- filterId
- feedbackGiven
POST /v1/seeker/application-ledger HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "page": 1, "size": 20 }{ "status": true, "code": 200, "message": "ok", "data": { "title": "My applications", "filter": [{"id": "applied", "label": "Applied"}], "notGoingReasons": [{"id": "far", "label": "Too far"}], "jobs": [{ "jobId": "JH-86750", "title": "Delivery Executive", "cName": "Example Logistics", "rName": "Asha K", "addr": "Whitefield, Bengaluru", "distance": "3.2 km", "salaryHTML": "₹15,000 - ₹22,000", "status": "applied", "applicationType": "call", "canCall": true, "isExpired": false, "isFatafatJob": false, "showSimilarJobs": true, "showSimilarJobsCta": true, "cta": "Call HR", "incentives": true, "incentivesValue": 3000, "salaryIncentiveText": "Incentives extra", "categoryTitle": "Delivery", "filterId": "applied", "feedbackGiven": false }] } }Complete jobseeker profile
GET
/v1/seeker/full-cardosintReturns the signed-in jobseeker profile: phone, locality, qualification, workExp, skills, resume and profileCompletionPercentage.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- userId
- name
- firstName
- lastName
- phone
- altPhone
- verifiedEmail
- gender
- age
- isFresher
- currentSalary
- profilePhoto
- profileCompletionPercentage
- address
- otherCity
- isWhatsappEnabled
- isSMSEnabled
- hireMeterEligible
- showLearnTab
- isFatafatEligible
- skills
- locality
- localityId
- label
- cityId
- cityLabel
- stateLabel
- latitude
- longitude
- isCityLive
- vernacLabel
- qualification
- highestQualification
- highestQualificationId
- schoolMedium
- resume
- fileName
- workExp
- categoryId
- categoryLabel
- formattedExperience
- jobRoles
- languagesKnown
GET /v1/seeker/full-card HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": { "userId": 4412891, "name": "Priya Sharma", "firstName": "Priya", "lastName": "Sharma", "phone": "9876543210", "altPhone": "9123456780", "email": "[email protected]", "verifiedEmail": "[email protected]", "gender": "female", "age": 24, "isFresher": false, "currentSalary": 18000, "profilePhoto": "https://cdn.example.com/u/4412891.jpg", "profileCompletionPercentage": 82.0, "address": "Whitefield, Bengaluru", "otherCity": null, "isWhatsappEnabled": true, "isSMSEnabled": true, "hireMeterEligible": true, "showLearnTab": true, "isFatafatEligible": true, "skills": ["Driving", "Customer service"], "locality": { "localityId": "loc-whitefield", "label": "Whitefield", "cityId": "city-blr", "cityLabel": "Bengaluru", "stateLabel": "Karnataka", "latitude": 12.9698, "longitude": 77.7499, "isCityLive": true, "vernacLabel": "व्हाइटफील्ड", "vernacCityLabel": "बेंगलुरु" }, "qualification": { "highestQualificationId": 4, "highestQualification": "12th Pass", "vernacHighestQualification": "12वीं पास", "schoolMedium": "Hindi", "schoolSubject": "Arts" }, "resume": { "resume": "https://cdn.example.com/cv/4412891.pdf", "fileName": "priya-sharma.pdf" }, "workExp": [{ "categoryId": 42, "categoryLabel": "Delivery", "timeline": 12, "categoryExperience": 12, "formattedExperience": "1 yr", "isSelected": true }], "jobRoles": [{"id": 42, "title": "Delivery"}], "languagesKnown": [{"label": "Hindi"}, {"label": "English"}] } }Generate CV
GET
/v1/seeker/generated-cvosintGenerates (or fetches) the jobseeker's CV download URL from the profile resume.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- url
- status
- code
- message
- data
GET /v1/seeker/generated-cv HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": { "url": "https://cdn.example.com/cv/4412891-generated.pdf" } }Locality suggestions
POST
/v1/geo/locality-typeaheadopendataTypeahead for Indian city localities: localityId, localityLabel, cityId and cityLabel used by the location picker.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- query
- limit
- filters
- cityIds
- totalCount
- queryTimeMs
- suggestions
- localityId
- localityLabel
- cityId
- cityLabel
POST /v1/geo/locality-typeahead HTTP/1.1 Authorization: Bearer <token> Content-Type: application/json Accept: application/json { "query": "Whitefield", "limit": 10, "filters": { "cityIds": ["city-blr"] } }{ "status": true, "code": 200, "message": "ok", "data": { "totalCount": 3, "queryTimeMs": 12, "suggestions": [{ "localityId": "loc-whitefield", "localityLabel": "Whitefield", "cityId": "city-blr", "cityLabel": "Bengaluru" }] } }Dashboard job sections
GET
/v1/home/section-mapopendataHome dashboard section map: nearby, category-wise, Fatafat, video SRP and apply-now blocks gated by jobsAvailableInCity.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- jobsAvailableInCity
- NEAR_BY_JOB_SECTION
- CATEGORY_WISE_SECTION
- JOBS_FOR_ALL_NEEDS_SECTION
- VIDEO_SRP_JOBS_SECTION
- APPLY_JOB_SECTION
- EASY_TO_REACH_SECTION
- FATAFAT_SECTION
- NEAR_BY_JOB_SECTION_CITIES
GET /v1/home/section-map HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": [{ "jobsAvailableInCity": true, "NEAR_BY_JOB_SECTION": {"title": "Jobs near you"}, "CATEGORY_WISE_SECTION": {"title": "Jobs by category"}, "JOBS_FOR_ALL_NEEDS_SECTION": {"title": "Jobs for all needs"}, "VIDEO_SRP_JOBS_SECTION": {"title": "Video jobs"}, "APPLY_JOB_SECTION": {"title": "Apply now"}, "EASY_TO_REACH_SECTION": {"title": "Easy to reach"}, "FATAFAT_SECTION": {"title": "Fatafat jobs"}, "NEAR_BY_JOB_SECTION_CITIES": {"title": "Nearby cities"} }] }Fatafat job bucket
GET
/v1/openings/same-day-bucketopendataReturns the Fatafat fast-hire bucket: jsAction, recAction, isTopJob, bucketId and a nested job card used by the same-day openings rail.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- jobs
- jsAction
- recAction
- date
- jobId
- isTopJob
- bucketId
- job
- id
- jobTitle
- minSalary
- maxSalary
- locality
- isWfh
- callAllowed
- company
GET /v1/openings/same-day-bucket HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": { "jobs": [{ "jsAction": "apply", "recAction": "shortlist", "date": 1727827200000, "jobId": 86750, "isTopJob": true, "bucketId": "ff-blr-whitefield", "job": { "id": "JH-86750", "jobTitle": "Delivery Executive", "minSalary": 15000, "maxSalary": 22000, "locality": "Whitefield", "isWfh": false, "callAllowed": true, "company": {"id": "comp-4412", "name": "Example Logistics"} } }] } }HireMeter tasks
GET
/v1/seeker/hire-readinessopendataReturns HireMeter readiness: hireMeterPercentage (base/activity/profile/total) and hireMeterTasks with probabilityGain, currentProgress and isCompleted.
Auth: Authorization: Bearer <token> from POST /v1/seeker/otp/confirm.
- userId
- totalTasks
- hireMeterPercentage
- base
- activity
- profile
- total
- hireMeterTasks
- task
- taskType
- probabilityGain
- currentProgress
- totalRequired
- isCompleted
- source
GET /v1/seeker/hire-readiness HTTP/1.1 Authorization: Bearer <token> Accept: application/json{ "status": true, "code": 200, "message": "ok", "data": { "userId": 4412891, "totalTasks": 6, "hireMeterPercentage": { "base": 40.0, "activity": 18.0, "profile": 22.5, "total": 80.5 }, "hireMeterTasks": [{ "task": "Add work experience", "taskType": "profile", "probabilityGain": 8.0, "currentProgress": 1.0, "totalRequired": 1.0, "isCompleted": true, "source": "profile" }, { "task": "Apply to 5 jobs", "taskType": "activity", "probabilityGain": 12.0, "currentProgress": 2.0, "totalRequired": 5.0, "isCompleted": false, "source": "home" }] } }
Data categories
- vacancies
- applications
- jobseeker_profiles
- resumes
- localities
- fatafat_jobs
- hire_readiness
Where teams use this data
Hyperlocal vacancy census
Labour-market dashboards can page the city/locality feed and store jobTitle, minSalary, maxSalary, isWfh, locality, company.name and callAllowed as a live JobHai vacancy catalog across Indian neighbourhoods.
Apply-pipeline reconciliation
ATS bots can apply or call-apply a vacancy, then read the applications list and map jobId, status, applicationType, canCall, cName, rName and jobContact onto interview-stage dashboards.
Candidate CRM enrichment
HRIS tools can pull the signed-in profile after OTP login and attach userId, phone, locality.label, highestQualification, currentSalary, profileCompletionPercentage, workExp.categoryLabel and resume.fileName onto an existing applicant record.
Neighbourhood location graph
Geo indexes can typeahead locality suggestions and join localityId, localityLabel, cityId and cityLabel with the feed's city/locality filters to keep a neighbourhood-level hiring map.
Fast-hire and readiness scoring
Staffing desks can pull the Fatafat bucket (jsAction, isTopJob, bucketId) as same-day openings and overlay HireMeter hireMeterPercentage plus per-task probabilityGain to rank which candidates to push first.
Frequently asked questions
How does Job Hai authenticate jobseekers?
A phone OTP is sent, then verified. The verify call returns token, refreshToken, userId, isFresher, isReturningUser and isSoftProfileCompleted. Later calls send Authorization: Bearer <token>. Truecaller is an alternate sign-in, and a token-rotate call refreshes the pair.
What fields sit on a Job Hai vacancy card?
The feed returns jobCount and jobs[] with id, jobTitle, minSalary, maxSalary, isWfh, isPartTime, isFullTime, isContract, walkin, locality, distance, callAllowed, showApplyButton, company.id/name and recruiter.id/name. Vacancy detail adds jobDescription, interviewAddress, jobHighlights and videoUrl.
How does Call HR / apply show up in the data?
Apply and call-apply return callAllowed, jobContact, requisitionId and callFeedbackOptions. The applications list then exposes jobId, status, applicationType, canCall, cName, rName and showSimilarJobs.
What profile fields can a CRM pull?
The complete-profile record includes userId, phone, altPhone, locality (localityId, label, cityLabel, latitude, longitude), qualification.highestQualification, currentSalary, workExp, skills, languagesKnown, resume.fileName and profileCompletionPercentage. A separate call returns a generated CV url.
What is a Fatafat job versus a HireMeter score?
The Fatafat bucket returns jobs[] of FFJob rows with jsAction, recAction, isTopJob, bucketId, date and a nested job card. HireMeter returns userId, hireMeterPercentage (base, activity, profile, total), totalTasks and hireMeterTasks with task, taskType, probabilityGain, currentProgress, totalRequired and isCompleted.
Topics
- job hai
- jobhai
- infoedge
- india jobs
- jobTitle
- minSalary
- isWfh
- callAllowed
- jobContact
- profileCompletionPercentage
- jsAction
- hireMeterPercentage
- probabilityGain
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use