Job Hai - Search Job, Vacancy icon

Job Hai vacancy, profile and apply data API

infoedge.com · Jobs & Careers 4.4 ★

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

  • Job Hai - Search Job, Vacancy screenshot 1
  • Job Hai - Search Job, Vacancy screenshot 2
  • Job Hai - Search Job, Vacancy screenshot 3
  • Job Hai - Search Job, Vacancy screenshot 4
  • Job Hai - Search Job, Vacancy screenshot 5
  • Job Hai - Search Job, Vacancy screenshot 6
  • Job Hai - Search Job, Vacancy screenshot 7
  • Job Hai - Search Job, Vacancy screenshot 8

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/dispatch osint

    Sends 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/confirm osint

    Verifies 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/rotate osint

    Rotates 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-feed opendata

    Returns 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-card opendata

    Hydrates 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-apply opendata

    Applies 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-dial opendata

    Call-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-matches opendata

    Returns 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-reels opendata

    Pages 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-ledger opendata

    Lists 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-card osint

    Returns 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
    • email
    • 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-cv osint

    Generates (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-typeahead opendata

    Typeahead 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-map opendata

    Home 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-bucket opendata

    Returns 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-readiness opendata

    Returns 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

Get a quote