WorkIndia Job Search App Data API
WorkIndia Job Search App is the candidate-facing Android client of WorkIndia, the Indian hiring marketplace started by Nilesh Dungarwal for blue-collar and grey-collar city work — delivery, sales, warehouse, security, housekeeping and similar frontline roles. Sign-in is a phone-number OTP; after that the home feed is a hyperlocal ranked list of vacancies for the candidate's city and locality, each card showing the role, salary band, company, area, openings, shift timings, experience needed and a work-from-home flag. Tapping a card opens the vacancy with the full description, branch address and how-to-reach notes, HR contact, interview details and eligibility questions, and the primary actions are Call HR, WhatsApp, apply in-app, or save to favourites. The account screens hold name, mobile, city, expected salary, experience, education, past companies, preferred sectors, languages, a resume link and a premium/Gold flag; hire-tracking and a live-location share sit on the walk-in path. Listed for India, it competes with apna, Job Hai, Shine and Naukri Fast on high-volume frontline hiring rather than LinkedIn-style white-collar networking.
Hyperlocal ranked_jobs rows stamp each opening with profile_job_title, profile_min_salary / profile_max_salary, branch_company_name, branch_location_city_name and no_of_openings, plus isWorkFromHome and job_timings. The signed-in dossier carries full_name, mobile_no, expectedSalary, preferred_sectors, educationDetailsArrayList and companyDetails, with an oauth pair of access_token / refresh_token after OTP confirm.
Walk-in tracking posts latitude and longitude and returns a share link plus description. Staffing boards can chart salary bands against city demand; HR-ops tools can watch isEmployerUnlocked, calls, whatsAppContactEpochTime and favourite actionPerformedAt; onboarding stacks can reuse education and company-history rows. openData Studio turns those records 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.
Generate login OTP
POST
/v1/seeker/phone/otp/startosintSends a phone OTP before confirm. Returns was_code_generated, otp_limit_exceeded, candidate_status and name for an existing candidate, plus a Notp block (notpEnabled, accountSID, appID, appSecret).
Auth: Unauthenticated. JSON body with Accept: application/json and an app-version header.
- mobile_no
- was_code_generated
- otp_limit_exceeded
- candidate_status
- name
- api_version
- registration
- notp
- notpEnabled
- accountSID
- appID
- appSecret
POST /v1/seeker/phone/otp/start HTTP/1.1 Accept: application/json Content-Type: application/json { "mobile_no": "9876543210" }{ "was_code_generated": true, "otp_limit_exceeded": false, "candidate_status": "existing", "name": "Rahul Sharma", "api_version": {"registration": 12}, "notp": { "notpEnabled": true, "accountSID": "<account_sid>", "appID": "<app_id>", "appSecret": "<app_secret>" } }Verify login OTP
POST
/v1/seeker/phone/otp/confirmosintConfirms the SMS OTP. Later calls attach oauth.access_token / refresh_token as Authorization; the client retries on HTTP 401.
Auth: Unauthenticated. JSON body with Accept: application/json and an app-version header.
- mobile_no
- otp
- candidate
- id
- full_name
- is_otp_verified
- oauth
- access_token
- refresh_token
- token_type
- expires_in
- scope
POST /v1/seeker/phone/otp/confirm HTTP/1.1 Accept: application/json Content-Type: application/json { "mobile_no": "9876543210", "otp": "482193" }{ "error": false, "message": "verified", "candidate": { "id": 44189012, "mobile_no": "9876543210", "full_name": "Rahul Sharma", "is_otp_verified": true }, "oauth": { "access_token": "<access_token>", "refresh_token": "<refresh_token>", "token_type": "Bearer", "expires_in": "86400", "scope": "candidate" } }Candidate login
POST
/v1/seeker/session/openosintPosts the candidate login body and returns candidate plus OnboardingMetaData.onboardingVersion.
Auth: Unauthenticated. JSON body with Accept: application/json and an app-version header.
- mobile_no
- device_id
- app_version
- language
- city
- google_advertising_id
- candidate
- id
- full_name
- email_id
- location
- is_otp_verified
- is_premium
- expectedSalary
- experience_level
- profile_pic
- metaData
- onboardingVersion
POST /v1/seeker/session/open HTTP/1.1 Accept: application/json Content-Type: application/json { "mobile_no": "9876543210", "device_id": "a1b2c3d4e5f6", "app_version": "7.1.7.3", "language": "en", "city": "Mumbai", "google_advertising_id": "00000000-0000-0000-0000-000000000000" }{ "candidate": { "id": 44189012, "full_name": "Rahul Sharma", "mobile_no": "9876543210", "email_id": "[email protected]", "city": "Mumbai", "location": "Andheri East", "is_otp_verified": true, "is_premium": false, "expectedSalary": 18000, "experience_level": "0-1", "profile_pic": "https://cdn.example/avatar.png" }, "metaData": {"onboardingVersion": "v12"} }Register candidate
POST
/v1/seeker/enrolosintCreates a new candidate and returns candidate, oauth tokens and OnboardingMetaData.
Auth: Unauthenticated. JSON body with Accept: application/json and an app-version header.
- full_name
- mobile_no
- gender
- date_of_birth
- city
- location
- expectedSalary
- experience_level
- qualification_type
- preferred_sectors
- languages_known
- willing_to_relocate
- urgently_looking_job
- register_mode
- candidate
- id
- is_otp_verified
- profile_state
- my_referral_code
- oauth
- access_token
- refresh_token
- token_type
- metaData
- onboardingVersion
POST /v1/seeker/enrol HTTP/1.1 Accept: application/json Content-Type: application/json { "full_name": "Rahul Sharma", "mobile_no": "9876543210", "gender": "male", "date_of_birth": "1998-04-12", "city": "Mumbai", "location": "Andheri East", "expectedSalary": 18000, "experience_level": "0-1", "qualification_type": "10th", "preferred_sectors": ["delivery", "sales"], "languages_known": ["Hindi", "English"], "willing_to_relocate": false, "urgently_looking_job": true, "register_mode": "otp", "language": "en" }{ "candidate": { "id": 44189012, "full_name": "Rahul Sharma", "mobile_no": "9876543210", "city": "Mumbai", "is_otp_verified": true, "profile_state": 1, "my_referral_code": "WI-RAHUL12" }, "oauth": { "access_token": "<access_token>", "refresh_token": "<refresh_token>", "token_type": "Bearer", "expires_in": "86400", "scope": "candidate" }, "metaData": {"onboardingVersion": "v12"} }Refresh OAuth token
POST
/v1/seeker/session/rotateosintMints a new oauth access_token from refresh_token. The client calls this on HTTP 401; payload carries the Oauth pair.
Auth: Authorization: Bearer <access_token> plus refresh_token in the body. The client retries on HTTP 401.
- refresh_token
- error
- message
- payload
- access_token
- token_type
- expires_in
- scope
POST /v1/seeker/session/rotate HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer <access_token> { "refresh_token": "<refresh_token>" }{ "error": false, "message": "ok", "payload": { "access_token": "<new_access_token>", "refresh_token": "<new_refresh_token>", "token_type": "Bearer", "expires_in": "86400", "scope": "candidate" } }Get candidate profile
GET
/v1/seeker/dossierosintHydrates the My Account / profile screen: identity, salary expectations, sectors, educationDetailsArrayList, companyDetails and resume_link.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- id
- full_name
- mobile_no
- email_id
- gender
- date_of_birth
- city
- location
- current_salary
- expectedSalary
- experience_level
- totalExperience
- notice_period
- qualification_type
- speaking_english_level
- languages_known
- preferred_sectors
- preferred_job_cities
- willing_to_relocate
- urgently_looking_job
- is_premium
- is_otp_verified
- resume_link
- profile_pic
- educationDetailsArrayList
- college_name
- course
- passingYear
- companyDetails
- companyName
- designation
- salary
- workType
GET /v1/seeker/dossier HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "id": 44189012, "full_name": "Rahul Sharma", "mobile_no": "9876543210", "email_id": "[email protected]", "gender": "male", "date_of_birth": "1998-04-12", "city": "Mumbai", "location": "Andheri East", "current_salary": "15000", "expectedSalary": 18000, "experience_level": "0-1", "totalExperience": 12, "notice_period": "immediate", "qualification_type": "10th", "speaking_english_level": 2, "languages_known": ["Hindi", "English"], "preferred_sectors": ["delivery", "sales"], "preferred_job_cities": ["Mumbai", "Thane"], "willing_to_relocate": false, "urgently_looking_job": true, "is_premium": false, "is_otp_verified": true, "resume_link": "https://files.example/candidate-resume/44189012.pdf", "profile_pic": "https://cdn.example/avatar.png", "educationDetailsArrayList": [{ "college_name": "Municipal High School", "course": "SSC", "degree_id": 1, "passingYear": 2014, "specialization": "" }], "companyDetails": [{ "companyName": "Example Logistics", "designation": "Delivery Executive", "industry": "logistics", "isCurrent": false, "salary": 14000, "workType": "full_time" }] }Update candidate profile
PUT
/v1/seeker/dossier/patchosintWrites profile edits from the account screens (city, expectedSalary, sectors, workShift / workType / workMode).
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- id
- full_name
- email_id
- city
- location
- expectedSalary
- notice_period
- preferred_sectors
- languages_known
- willing_to_relocate
- workShift
- workType
- workMode
- shouldUpdateProfile
- profile_update_state
PUT /v1/seeker/dossier/patch HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer <access_token> { "id": 44189012, "full_name": "Rahul Sharma", "email_id": "[email protected]", "city": "Mumbai", "location": "Andheri East", "expectedSalary": 20000, "notice_period": "7 days", "preferred_sectors": ["delivery", "warehouse"], "languages_known": ["Hindi", "English", "Marathi"], "willing_to_relocate": true, "workShift": ["day"], "workType": ["full_time"], "workMode": ["office"] }{ "id": 44189012, "full_name": "Rahul Sharma", "email_id": "[email protected]", "city": "Mumbai", "location": "Andheri East", "expectedSalary": 20000, "notice_period": "7 days", "preferred_sectors": ["delivery", "warehouse"], "shouldUpdateProfile": false, "profile_update_state": 2 }Nearest city from GPS
GET
/v1/geo/nearest-localityopendataMaps a GPS pair to the city / locality taxonomy used to seed the job feed.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- latitude
- longitude
- city
- location
- sub_city
GET /v1/geo/nearest-locality?latitude=19.0760&longitude=72.8777 HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "city": "Mumbai", "location": "Andheri East", "sub_city": "Andheri" }Filtered job search
GET
/v1/openings/city-rankopendataPowers the home / search listing: paginated ranked_jobs with salary band, company, locality, openings, WFH flag and jobFilters facets.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- jobCount
- fetch_next
- actualCity
- isMainListingJobs
- candidateData
- city
- location
- overriddenCity
- jobFilters
- primaryFilters
- constantName
- displayName
- toggleFilter
- ranked_jobs
- id
- profile_job_title
- profile_min_salary
- profile_max_salary
- branch_company_name
- company_logo
- branch_location_city_name
- branch_location_name
- no_of_openings
- isWorkFromHome
- job_timings
- jobState
- profile_qualification_required
- distance_away
GET /v1/openings/city-rank?city=Mumbai&location=Andheri&query=delivery&offset=0&limit=20 HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "jobCount": 1284, "fetch_next": "20", "actualCity": "Mumbai", "isMainListingJobs": true, "candidateData": { "city": "Mumbai", "location": "Andheri East", "overriddenCity": null }, "jobFilters": { "primaryFilters": [{"constantName": "delivery", "displayName": "Delivery"}], "toggleFilter": {"constantName": "wfh", "displayName": "Work from home"}, "primaryGroupFilters": [] }, "ranked_jobs": [{ "id": 8845123, "profile_job_title": "Delivery Executive", "profile_min_salary": 15000, "profile_max_salary": 22000, "branch_company_name": "Example Logistics", "company_logo": "https://cdn.example/logo.png", "branch_location_city_name": "Mumbai", "branch_location_name": "Andheri East", "no_of_openings": 12, "isWorkFromHome": false, "job_timings": "09:00-18:00", "experience": "0-1 years", "job_type": "full_time", "jobState": "live", "profile_qualification_required": "10th pass", "distance_away": "3.2 km" }] }Job detail
GET
/v1/openings/{openingId}/cardopendataHydrates the vacancy screen: full description, salary structure, branch geo/address, HR contact, interview notes and apply/call state.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- id
- profile_job_title
- profile_job_description
- profile_min_salary
- profile_max_salary
- profile_incentives
- profile_salary_structure
- profile_qualification_required
- job_timings
- no_of_openings
- isWorkFromHome
- jobState
- branch_company_name
- branch_address
- branch_landmark
- branch_how_to_reach
- branch_location_city_name
- branch_location_name
- branch_location_latitude
- branch_location_longitude
- branch_contact_person_name
- interview_address
- interview_details
- calls
- views
- isFavourite
- isJobApplied
- isEmployerUnlocked
- isChatApplicable
- applyJobLink
GET /v1/openings/8845123/card HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "id": 8845123, "profile_job_title": "Delivery Executive", "profile_job_description": "Pick up and drop parcels across Mumbai. Two-wheeler required.", "profile_min_salary": 15000, "profile_max_salary": 22000, "profile_incentives": "Fuel + per-delivery bonus", "profile_salary_structure": "Fixed + incentive", "profile_qualification_required": "10th pass", "profile_weekly_off": "Sunday", "job_timings": "09:00-18:00", "no_of_openings": 12, "isWorkFromHome": false, "jobState": "live", "branch_company_name": "Example Logistics", "branch_address": "Andheri East, Mumbai", "branch_landmark": "Near metro station", "branch_how_to_reach": "Western Express Highway", "branch_location_city_name": "Mumbai", "branch_location_name": "Andheri East", "branch_location_latitude": "19.1197", "branch_location_longitude": "72.8468", "branch_contact_person_name": "Priya Nair", "interview_address": "Same as branch", "interview_details": "Walk-in 11am-4pm", "calls": 86, "views": 412, "isFavourite": false, "isJobApplied": false, "isEmployerUnlocked": false, "isChatApplicable": true, "applyJobLink": "https://share.example/opening" }Recommended jobs
GET
/v1/openings/for-youopendataReturns jobs matched to the signed-in candidate, including isRecommended and recommendedBy.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- jobCount
- fetch_next
- ranked_jobs
- id
- profile_job_title
- profile_min_salary
- profile_max_salary
- branch_company_name
- branch_location_city_name
- isRecommended
- recommendedBy
- jobState
GET /v1/openings/for-you HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "jobCount": 24, "fetch_next": null, "ranked_jobs": [{ "id": 8845201, "profile_job_title": "Warehouse Associate", "profile_min_salary": 14000, "profile_max_salary": 18000, "branch_company_name": "Example Retail", "branch_location_city_name": "Mumbai", "isRecommended": true, "recommendedBy": "preferred_sectors", "jobState": "live" }] }Similar jobs
GET
/v1/openings/{openingId}/neighboursopendataLoads the similar-jobs strip on a vacancy.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- jobCount
- ranked_jobs
- id
- profile_job_title
- profile_min_salary
- profile_max_salary
- branch_company_name
- branch_location_city_name
- related_jobs
GET /v1/openings/8845123/neighbours HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "jobCount": 8, "ranked_jobs": [{ "id": 8845308, "profile_job_title": "Delivery Rider", "profile_min_salary": 16000, "profile_max_salary": 23000, "branch_company_name": "Example Express", "branch_location_city_name": "Mumbai", "related_jobs": "8845123" }] }Job categories
GET
/v1/openings/sector-tilesopendataLists category cards (position plus jobCategories of id / displayString / icon) used to jump into a sector feed.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- error
- message
- payload
- position
- jobCategories
- id
- displayString
- icon
- drawable
- url
- tint
GET /v1/openings/sector-tiles?city=Mumbai HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "error": false, "message": "ok", "payload": { "position": 0, "jobCategories": [{ "id": "delivery", "displayString": "Delivery", "icon": { "drawable": "ic_delivery", "url": "https://cdn.example/cat_delivery.png", "tint": "#1A73E8" } }] } }Favourite jobs
GET
/v1/openings/savedopendataPages the saved/favourite pipeline (JobData rows with actionPerformedAt).
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- count
- next
- prev
- jobs
- actionPerformedAt
- job
- id
- profile_job_title
- profile_min_salary
- profile_max_salary
- branch_company_name
- isFavourite
- favorite_on
GET /v1/openings/saved?page=1&limit=20 HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "count": 6, "next": null, "prev": null, "jobs": [{ "actionPerformedAt": "2026-10-08T11:04:00Z", "job": { "id": 8845123, "profile_job_title": "Delivery Executive", "profile_min_salary": 15000, "profile_max_salary": 22000, "branch_company_name": "Example Logistics", "branch_location_city_name": "Mumbai", "isFavourite": true, "favorite_on": "2026-10-08T11:04:00Z" } }] }HR-viewed jobs
GET
/v1/openings/recruiter-unlocksopendataLists vacancies where an employer unlocked / viewed the candidate (unlockedJobs with isEmployerUnlocked).
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- next
- unlockedJobs
- id
- profile_job_title
- branch_company_name
- isEmployerUnlocked
- profileCount
- calls
- jobState
GET /v1/openings/recruiter-unlocks?page=1&limit=20 HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "next": 2, "unlockedJobs": [{ "id": 8845123, "profile_job_title": "Delivery Executive", "branch_company_name": "Example Logistics", "isEmployerUnlocked": true, "profileCount": 1, "calls": 1, "jobState": "live" }] }Apply to job
POST
/v1/openings/{openingId}/applyopendataRecords an in-app apply and flips isJobApplied / applied_on on the vacancy.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- job_id
- candidate_id
- candidateApplyType
- jobApplicationSource
- id
- isJobApplied
- applied
- applied_on
- candidateJobAction
POST /v1/openings/8845123/apply HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer <access_token> { "job_id": 8845123, "candidate_id": 44189012, "candidateApplyType": "in_app", "jobApplicationSource": "job_detail" }{ "id": 8845123, "isJobApplied": true, "applied": true, "applied_on": "2026-10-09T06:12:00Z", "candidateJobAction": "applied", "candidateApplyType": "in_app" }Call HR
POST
/v1/openings/{openingId}/call-recruiteropendataRecords a Call-HR tap and typically flips isEmployerUnlocked / increments calls on the vacancy.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- job_id
- candidate_id
- callContactedActionType
- id
- isEmployerUnlocked
- calls
- candidateJobAction
POST /v1/openings/8845123/call-recruiter HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer <access_token> { "job_id": 8845123, "candidate_id": 44189012, "callContactedActionType": "call" }{ "id": 8845123, "isEmployerUnlocked": true, "calls": 87, "callContactedActionType": "call", "candidateJobAction": "employer_contacted_call" }WhatsApp HR
POST
/v1/openings/{openingId}/whatsapp-recruiteropendataRecords a WhatsApp-HR tap and stamps whatsAppContactEpochTime on the vacancy.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- job_id
- candidate_id
- callContactedActionType
- id
- isEmployerUnlocked
- whatsAppContactEpochTime
- candidateJobAction
POST /v1/openings/8845123/whatsapp-recruiter HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer <access_token> { "job_id": 8845123, "candidate_id": 44189012, "callContactedActionType": "whatsapp" }{ "id": 8845123, "isEmployerUnlocked": true, "whatsAppContactEpochTime": 1760000000000, "callContactedActionType": "whatsapp", "candidateJobAction": "employer_contacted_whatsapp" }Live location collect
POST
/v1/walkin/gps-pingopendataPosts walk-in GPS on the hire-tracking path. Geo payload carries latitude and longitude.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- candidate_id
- job_id
- latitude
- longitude
- error
- message
POST /v1/walkin/gps-ping HTTP/1.1 Accept: application/json Content-Type: application/json Authorization: Bearer <access_token> { "candidate_id": 44189012, "job_id": 8845123, "latitude": 19.1197, "longitude": 72.8468 }{ "error": false, "message": "ok" }Hire-tracking link
GET
/v1/walkin/share-linkopendataReturns the hire-tracking card for a walk-in (description / link) used while the candidate travels to interview.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- description
- link
GET /v1/walkin/share-link HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "description": "Share live location with HR while you travel to the interview", "link": "https://track.example/walkin/call-list?data=<payload>" }Government job detail
GET
/v1/public-service/{openingId}opendataHydrates a government-vacancy card from the public-service catalog, including how-to-apply and application-fee fields.
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- id
- profile_job_title
- profile_job_description
- profile_min_salary
- profile_max_salary
- profile_how_to_apply
- profile_application_fees
- profile_selection_procedure
- jobState
- jobPostType
GET /v1/public-service/12045 HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "id": 12045, "profile_job_title": "Constable", "profile_job_description": "State police recruitment, physical + written.", "profile_min_salary": 21700, "profile_max_salary": 69100, "profile_how_to_apply": "Apply on the official portal before the closing date.", "profile_application_fees": "100", "profile_selection_procedure": "PET + written + medical", "jobState": "live", "jobPostType": "government" }Job calls and views
GET
/v1/openings/{openingId}/engagementopendataReads engagement counters for a vacancy (jobCall / jobViews).
Auth: Authorization: Bearer <access_token> after OTP verify, plus an app-version header.
- jobCall
- jobViews
GET /v1/openings/8845123/engagement HTTP/1.1 Accept: application/json Authorization: Bearer <access_token>{ "jobCall": "86", "jobViews": "412" }
Data categories
- job listings
- candidate profiles
- applications
- identity
- location
- resumes
Where teams use this data
City labour-market pulse
Staffing dashboards page ranked_jobs for a city and locality and chart profile_min_salary / profile_max_salary, no_of_openings and jobCategoryDisplayValue to see which frontline roles are hiring this week.
Candidate-profile prefill
Onboarding tools read full_name, mobile_no, expectedSalary, preferred_sectors, educationDetailsArrayList and companyDetails so a second marketplace does not re-ask the same work history.
Apply, Call-HR and unlock pipeline
HR-ops bots watch isJobApplied, applied_on, isEmployerUnlocked, calls, whatsAppContactEpochTime and the favourite JobData.actionPerformedAt stream to measure time-to-call after an in-app apply.
Walk-in location seed
Map a GPS pair through city / location / sub_city for the feed, then reuse latitude / longitude on the live-location collect and the hire-tracking link while a candidate travels to a walk-in.
Frequently asked questions
How does WorkIndia authenticate candidates?
POST /v1/seeker/phone/otp/start sends the OTP; POST /v1/seeker/phone/otp/confirm and POST /v1/seeker/enrol return oauth.access_token, refresh_token and token_type. Later calls send Authorization: Bearer <access_token>; POST /v1/seeker/session/rotate mints a new pair on HTTP 401. These are first-party endpoints after sign-in, not a public developer API.
What fields sit on a WorkIndia job card?
GET /v1/openings/city-rank pages ranked_jobs with profile_job_title, profile_min_salary, profile_max_salary, branch_company_name, branch_location_city_name, no_of_openings, isWorkFromHome, job_timings and jobState. GET /v1/openings/{openingId}/card adds profile_job_description, branch_address, interview_details and branch_contact_person_name.
Can I see who viewed a candidate?
GET /v1/openings/recruiter-unlocks returns unlockedJobs with isEmployerUnlocked and profileCount. Favourites are GET /v1/openings/saved with actionPerformedAt. Call-HR and WhatsApp events stamp calls and whatsAppContactEpochTime.
Is this a public developer API?
No. These are first-party endpoints the Android client uses after OTP login. They are documented here as a data surface, not as a supported public SDK.
Apps similar to WorkIndia Job Search App
- apna - Search Job, Vacancy App — apna is a mobile-first Indian job app for blue-collar, entry-level and Tier 2/3 hiring, with regional-language access and direct chat with employers.
- Naukri: Job Search App — Naukri is a recruiter-driven Indian job board used for volume hiring in IT, banking, operations and other office roles, often paired with local blue-collar apps for broader coverage.
- Indeed Job Search — Indeed aggregates Indian job listings from company sites and other boards into one search, with Easy Apply and a stored resume.
- Shine.com Job Search App — Shine is a general Indian job portal listed among Naukri and Apna alternatives, with mid-level listings plus career extras such as skill tests and courses.
- LinkedIn: Community & Network — LinkedIn Jobs is used in India for professional networking, referrals and corporate white-collar roles rather than hyper-local frontline hiring.
- foundit — foundit.in is the rebranded Monster India portal, with AI-driven job matching plus resume and interview extras for mid-career roles.
- Internshala — Internshala focuses on Indian internships and first jobs for students and freshers, with courses and an ATS-oriented resume tool.
Topics
- WorkIndia API
- WorkIndia jobs data
- candidate profile
- OTP login
- ranked_jobs
- profile_min_salary
- blue collar India jobs
- Call HR apply
- WorkIndia oauth
- walk-in tracking
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