Shine.com job search data API
Shine.com Job Search App is HT Media Limited's Android app for Shine.com, the Indian job portal from the publisher of the Hindustan Times. Candidates sign in with a one-time password sent to their phone or email, then search vacancies with filters for employment type, functional area, industry, experience, salary band, job type, shift and location, and open a job-details page showing the description, required skills, salary, number of openings and the recruiter's name, with a Similar Jobs strip underneath. Openings can be shortlisted for later, and employers can attach screening questions, such as notice period or willingness to work from a given city, that appear before an application goes through. The home screen is organised into Flash openings, Recommended jobs, Your activity and Last applied; a Complete Profile flow pre-fills work history, skills and education from an uploaded CV; a Profile Performance screen shows profile strength, recruiter interest and follow-ups; and saved job alerts can be reviewed and deleted. Shine.com serves job seekers in India, where it competes with Naukri, foundit (formerly Monster India), TimesJobs, Indeed and LinkedIn for candidates looking for salaried roles.
Salary bands quoted in lakhs (jSal) and as rupee ranges (jSLA) sit on every search-result card next to the title jJT, employer jCName, location jLoc, experience band jExp, posting date jPDate, openings count jVanc, applicant count jACnt, skill keywords jKwds and premium_job_flag, and the listing can be sliced by emp_type, farea, fexp, fsalary and shift_type. A full posting adds job_description, job_skills, recruiter_name and recruiter_email, and employer screening questions carry their answer type and a required flag.
On the candidate side, the signed-in profile record holds current_annual_salary, expected_salary, notice_period, total_work_experience, key_skills, functional_area, education_history, linkedin_url and actively_looking; an uploaded CV comes back as resume_parsed_data stamped with resume_timestamp; and recruiter interest is scored through profileStrength, searchImpressions, profileViews, interestedRecruiters and recruiterFollowUps, with per-job is_applied, is_shortlisted and jExpDate in the activity feed. Saved job alerts keep the same filter set, from job_title and location to fsalary and an active switch.
Labour-market pipelines can store the card fields as a live census of Indian vacancies and salary bands by functional area and experience; HRIS tools can attach expected salary, notice period, skills, resume ID and LinkedIn URL to an existing applicant record; ATS bots can map applied and shortlisted status, posting and expiry dates into interview-stage dashboards with profile strength and interested-recruiter counts overlaid; and onboarding flows can hydrate job title, employer, skills, experience and education from a parsed CV instead of a blank Complete Profile form. openData Studio makes these Shine.com vacancy, candidate and recruiter-activity records callable open data for those integrations.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Search jobs
GET
/v1/jobs/srpopendataReturns a filtered Shine.com vacancy listing (jJT title, jCName employer, jLoc, jSal/jSLA salary, jExp, jVanc openings, is_applied/is_shortlisted) used by the job-search results screen.
Auth: Optional Bearer JWT (accessToken) from POST /v1/auth/otp/login. Anonymous search still sends device=app.
- jobs
- jCID
- jJT
- jJT_slug
- jCName
- jCName_slug
- jCUID
- jLoc
- jExp
- jSal
- jSLA
- jPDate
- jJobType
- jEType
- jTypeC
- jVanc
- jACnt
- jKwds
- jRUrl
- jSlug
- jPJ
- jHJ
- is_applied
- is_shortlisted
- highlighted
- premium_job_flag
- emp_type
- farea
- fcid
- fexp
- findustry
- fsalary
- job_type
- shift_type
- sort
- device
GET /v1/jobs/srp?q=software+engineer&location=Bengaluru&emp_type=full-time&farea=it&fcid=12&fexp=3-6&findustry=it&fsalary=8-12&job_type=permanent&shift_type=day&sort=relevance&device=app HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "jobs": [{ "jCID": "87123456", "jJT": "Software Engineer", "jJT_slug": "software-engineer", "jCName": "Example Corp", "jCName_slug": "example-corp", "jCUID": "comp-441", "jLoc": "Bengaluru", "jExp": "3-6 Yrs", "jSal": "8-12 Lacs", "jSLA": "800000-1200000", "jPDate": "2026-09-24", "jJobType": "Permanent", "jEType": "Full Time", "jTypeC": "IT", "jVanc": 4, "jACnt": 86, "jKwds": ["Java", "Spring"], "jRUrl": "https://www.shine.com/jobs/software-engineer/87123456", "jSlug": "software-engineer-example-corp-bengaluru", "jPJ": true, "jHJ": false, "is_applied": false, "is_shortlisted": false, "highlighted": true, "premium_job_flag": true }], "count": 1284 }Fetch job description
GET
/v1/jobs/detailopendataHydrates a single Shine.com posting (job_description, job_skills, salary, vacancies, recruiter_name/recruiter_email) for the job-details screen, including apply/shortlist flags.
Auth: Optional Bearer JWT (accessToken) from POST /v1/auth/otp/login. Personalised flags (is_applied, is_shortlisted) require a signed-in candidate_id.
- jobId
- job_id
- jCID
- job_title
- jJT
- job_description
- job_skills
- company_name
- company_id
- jLoc
- jExp
- jSal
- jVanc
- job_postedDate
- jPDate
- job_type
- emp_type
- shift_type
- recruiter_name
- recruiter_email
- premium_job_flag
- is_applied
- is_shortlisted
- jACnt
GET /v1/jobs/detail?jobId=87123456 HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "job_id": "87123456", "jCID": "87123456", "job_title": "Software Engineer", "jJT": "Software Engineer", "job_description": "<p>Build marketplace services in Bengaluru.</p>", "job_skills": ["Java", "Spring", "SQL"], "company_name": "Example Corp", "company_id": "comp-441", "jLoc": "Bengaluru", "jExp": "3-6 Yrs", "jSal": "8-12 Lacs", "jVanc": 4, "job_postedDate": "2026-09-24", "jPDate": "2026-09-24", "job_type": "Permanent", "emp_type": "full-time", "shift_type": "day", "recruiter_name": "Priya Sharma", "recruiter_email": "[email protected]", "premium_job_flag": true, "is_applied": false, "is_shortlisted": false, "jACnt": 86 }Similar jobs
GET
/v1/jobs/similaropendataReturns similar Shine.com vacancies for the job-details Similar Jobs strip, using the same jCID/jJT/jCName/jSal card fields as search.
Auth: Optional Bearer JWT (accessToken) from POST /v1/auth/otp/login.
- jobs
- jCID
- jJT
- jCName
- jLoc
- jExp
- jSal
- jPDate
- jJobType
- is_applied
- is_shortlisted
- jobId
GET /v1/jobs/similar?jobId=87123456 HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "jobs": [{ "jCID": "87129901", "jJT": "Backend Engineer", "jCName": "Example Labs", "jLoc": "Bengaluru", "jExp": "2-5 Yrs", "jSal": "7-11 Lacs", "jPDate": "2026-09-22", "jJobType": "Permanent", "is_applied": false, "is_shortlisted": false }] }Send login OTP
POST
/v1/auth/otp/sendosintSends the Shine.com login OTP to the candidate's phone (or email via the sibling email-OTP call) before the verify step.
Auth: Unauthenticated. Starts the phone/email OTP login that later calls POST /v1/auth/otp/login.
- phone
- device
- status
- channel
- sessionId
- message
POST /v1/auth/otp/send HTTP/1.1 Content-Type: application/json Accept: application/json { "phone": "9876543210", "email": "[email protected]", "device": "app" }{ "status": "otp_sent", "channel": "sms", "sessionId": "sess-9f3a", "message": "OTP sent" }JWT mobile login (verify OTP)
POST
/v1/auth/otp/loginosintExchanges a phone OTP for the token pair (accessToken, refreshToken) and candidate_id used by every subsequent profile, apply and recruiter-activity call.
Auth: Unauthenticated OTP exchange. Subsequent calls attach Authorization: Bearer <accessToken>. Duplicate-account picker uses the same phone.
- phone
- otp
- sessionId
- device
- accessToken
- refreshToken
- candidate_id
- candidateId
- isProfileComplete
POST /v1/auth/otp/login HTTP/1.1 Content-Type: application/json Accept: application/json { "phone": "9876543210", "otp": "482193", "sessionId": "sess-9f3a", "device": "app" }{ "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refreshToken": "rt_8c1e2b...", "candidate_id": "cand-1001", "candidateId": "cand-1001", "isProfileComplete": false }Fetch aggregated candidate profile
GET
/v1/profile/aggregateosintLoads the signed-in Shine.com candidate record used by Complete Profile: identity, current/expected salary, notice_period, skills, resumeId and LinkedIn/photo URLs.
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login. Rooted at the signed-in candidate_id.
- candidate_id
- personalDetails
- firstName
- lastName
- phone
- current_city
- current_location
- current_annual_salary
- current_salary
- expected_salary
- total_work_experience
- yearsOfExperience
- notice_period
- last_working_date
- currently_pursuing
- key_skills
- functional_area
- industry
- resumeId
- profile_picture_url
- linkedin_url
- education_history
- grading_system
- actively_looking
GET /v1/profile/aggregate HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "candidate_id": "cand-1001", "personalDetails": { "firstName": "Ada", "lastName": "Sharma", "email": "[email protected]", "phone": "9876543210" }, "current_city": "Bengaluru", "current_location": "Whitefield", "current_annual_salary": 1200000, "current_salary": 100000, "expected_salary": 1500000, "total_work_experience": 4.5, "yearsOfExperience": 4, "notice_period": 30, "last_working_date": null, "currently_pursuing": false, "key_skills": ["Java", "Spring"], "functional_area": "Software Engineering", "industry": "IT", "resumeId": "resume-9", "profile_picture_url": "https://cdn.example.com/ada.png", "linkedin_url": "https://www.linkedin.com/in/ada-sharma", "education_history": [{"institute": "NITK", "grading_system": "CGPA"}], "actively_looking": true }Parse uploaded resume
POST
/v1/profile/resume/parseosintParses an uploaded CV into resume_parsed_data (job_title, company_name, key_skills, total_work_experience, education_history) used by the Complete Profile / Upload CV flow.
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login. Multipart CV upload.
- resumeId
- resume_timestamp
- resume_parsed_data
- job_title
- company_name
- key_skills
- total_work_experience
- education_history
- grading_system
- currently_pursuing
- current_city
POST /v1/profile/resume/parse HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: multipart/form-data; boundary=----ShineBoundary ------ShineBoundary Content-Disposition: form-data; name="resume"; filename="ada-cv.pdf" Content-Type: application/pdf <binary> ------ShineBoundary--{ "resumeId": "resume-9", "resume_timestamp": "2026-09-27T08:12:00Z", "resume_parsed_data": { "job_title": "Software Engineer", "company_name": "Example Corp", "key_skills": ["Java", "Spring"], "total_work_experience": 4.5, "education_history": [{"institute": "NITK", "grading_system": "CGPA"}], "currently_pursuing": false, "current_city": "Bengaluru" } }Homepage schema (Nova Home)
GET
/v1/pages/home/schemaopendataReturns the home page schema for the app (flash_openings, recommended_jobs, your_activity, last_applied) used after registration and on each home load.
Auth: Optional Bearer JWT. Personalized modules send candidate_id; anonymous calls send device=app.
- device
- candidate_id
- page_type
- home_page
- sections
- flash_openings
- recommended_jobs
- your_activity
- last_applied
- jCID
- jJT
- jCName
- is_applied
- JFY
- JD
- JSRP
- DRM
- dashboard
GET /v1/pages/home/schema?device=app&candidate_id=cand-1001 HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "page_type": "home_page", "sections": [ {"id": "flash_openings", "title": "Flash openings", "jobs": [{"jCID": "87123456", "jJT": "Software Engineer", "jCName": "Example Corp"}]}, {"id": "recommended_jobs", "title": "Recommended jobs", "jobs": [{"jCID": "87129901", "jJT": "Backend Engineer"}]}, {"id": "your_activity", "title": "Your activity"}, {"id": "last_applied", "title": "Last applied", "jobs": [{"jCID": "87120001", "is_applied": true}]} ] }Profile performance schema
GET
/v1/pages/profile-insights/schemaosintLoads the Profile Performance dashboard (profile strength, recruiter interest, follow-ups) shown on the candidate insights screen.
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login.
- candidate_id
- profileStrength
- searchImpressions
- profileViews
- interestedRecruiters
- recruiterFollowUps
GET /v1/pages/profile-insights/schema HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "candidate_id": "cand-1001", "profileStrength": 72, "searchImpressions": 128, "profileViews": 17, "interestedRecruiters": 6, "recruiterFollowUps": 2 }List / delete job alerts
GET
/v1/job-alertsopendataLists the candidate's saved Shine.com job alerts (title, location, emp_type, farea, salary band) used by the job-alert screen; the sibling delete call removes an alert.
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login. Delete uses the sibling DELETE /v1/job-alerts/delete call.
- alerts
- id
- job_title
- location
- emp_type
- farea
- fexp
- fsalary
- shift_type
- active
GET /v1/job-alerts HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "alerts": [{ "id": "alert-22", "job_title": "Software Engineer", "location": "Bengaluru", "emp_type": "full-time", "farea": "it", "fexp": "3-6", "fsalary": "8-12", "shift_type": "day", "active": true }] }Shortlist a job
POST
/v1/jobs/shortlistopendataMarks a Shine.com vacancy as shortlisted for the signed-in candidate (is_shortlisted) and is capped at 20 jobIds per call.
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login. jobIds array cannot exceed 20 items.
- jobIds
- candidate_id
- jCID
- is_shortlisted
POST /v1/jobs/shortlist HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "jobIds": ["87123456"], "candidate_id": "cand-1001" }{ "jCID": "87123456", "is_shortlisted": true, "jobIds": ["87123456"] }Recruiter activity (candidate response update)
POST
/v1/profile/recruiter-activityosintReturns recruiter-side activity on the candidate (viewed/shortlisted/applied jobs with jCID, jCName, is_applied, is_shortlisted) used by the Your Activity / recruiter-activity panel.
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login.
- candidate_id
- period
- activities
- jCID
- jJT
- jCName
- jCType
- jKwds
- jExp
- jLoc
- jRUrl
- jPDate
- jExpDate
- jJobType
- jEType
- jVanc
- jSLA
- is_applied
- is_shortlisted
- highlighted
- ftcid
- jCUID
- jWLC
- jWSD
- jWLocID
POST /v1/profile/recruiter-activity HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "candidate_id": "cand-1001", "period": "7d" }{ "activities": [{ "jCID": "87123456", "jJT": "Software Engineer", "jCName": "Example Corp", "jCType": "IT", "jKwds": ["Java"], "jExp": "3-6 Yrs", "jLoc": "Bengaluru", "jRUrl": "https://www.shine.com/jobs/software-engineer/87123456", "jPDate": "2026-09-24", "jExpDate": "2026-10-24", "jJobType": "Permanent", "jEType": "Full Time", "jVanc": 4, "jSLA": "800000-1200000", "is_applied": true, "is_shortlisted": false, "highlighted": true, "ftcid": "comp-441" }] }Pre-apply questionnaire
GET
/v1/jobs/questionnaireopendataLoads employer screening questions shown before a Shine.com apply (notice period, location, custom yes/no).
Auth: Bearer JWT (accessToken) from POST /v1/auth/otp/login. Shown before apply when the vacancy has screening questions.
- jobId
- questions
- id
- text
- type
- required
GET /v1/jobs/questionnaire?jobId=87123456 HTTP/1.1 Accept: application/json Authorization: Bearer <accessToken>{ "jobId": "87123456", "questions": [{ "id": "q-1", "text": "Are you willing to work from Bengaluru?", "type": "yes_no", "required": true }, { "id": "q-2", "text": "Current notice period (days)", "type": "number", "required": true }] }
Data categories
- job listings
- job details
- candidate profiles
- resumes
- applications
- recruiter activity
- auth sessions
Where teams use this data
India vacancy market census
A labour-market pipeline can poll GET /v1/jobs/srp with emp_type, farea, fexp, fsalary, location and shift_type, then store jCID, jJT, jCName, jLoc, jSal/jSLA, jExp, jVanc and premium_job_flag for a live Shine.com vacancy catalog.
Candidate CRM enrichment
HRIS tools can call GET /v1/profile/aggregate after the OTP login and attach personalDetails, current_annual_salary, expected_salary, notice_period, key_skills, resumeId, linkedin_url and profile_picture_url onto an existing applicant record.
Recruiter-activity sync
ATS bots can POST /v1/profile/recruiter-activity and map is_applied, is_shortlisted, jCName, jPDate and jExpDate into interview-stage dashboards, then overlay GET /v1/pages/profile-insights/schema for profileStrength and interestedRecruiters.
CV parse into structured profile
Onboarding flows can POST a PDF to /v1/profile/resume/parse and hydrate job_title, company_name, key_skills, total_work_experience and education_history from resume_parsed_data instead of a blank Complete Profile form.
Frequently asked questions
What job fields does Shine.com search return?
GET /v1/jobs/srp returns compact card fields: jCID, jJT (title), jCName (employer), jLoc, jExp, jSal/jSLA (salary), jPDate, jVanc (openings), jACnt (applicant count), is_applied, is_shortlisted and premium_job_flag. Filters include emp_type, farea, fexp, fsalary, job_type, location and shift_type.
How does a candidate authenticate?
The app posts a phone number to /v1/auth/otp/send, then verifies the OTP at /v1/auth/otp/login for accessToken, refreshToken and candidate_id. Later calls send Authorization: Bearer <accessToken>.
Can I read a candidate profile and resume parse?
Yes. GET /v1/profile/aggregate returns personalDetails, current_annual_salary, expected_salary, notice_period, key_skills, resumeId and linkedin_url. POST /v1/profile/resume/parse fills those fields from an uploaded CV as resume_parsed_data.
Where do recruiter views and job alerts live?
POST /v1/profile/recruiter-activity lists recruiter-side activity (is_applied, is_shortlisted, jCName). GET /v1/pages/profile-insights/schema exposes profileStrength and interestedRecruiters. GET /v1/job-alerts lists saved alerts.
Apps similar to Shine.com Job Search App
- Naukri: Job Search App — Naukri is India's recruiter-driven job board, used for volume hiring across IT, BFSI, manufacturing and other sectors, with filters, alerts and direct recruiter contact.
- Indeed Job Search — Indeed aggregates Indian listings from company sites, agencies and other boards into one search, with one-click apply and no redirect for candidates.
- LinkedIn: Community & Network — LinkedIn is a professional network that also functions as a job portal, used in India for profile-based outreach to hiring managers rather than keyword-only search.
- apna - Search Job, Vacancy App — Apna is a mobile-first Indian job app aimed at Tier 2 and Tier 3 cities and blue-collar hiring, with regional-language access and direct chat with employers.
- foundit — foundit.in is the rebranded Monster India portal, relaunched around AI-driven job matching plus resume and interview extras for mid-career roles.
- TimesJobs — TimesJobs is the Times Group job board, distinguished by a dedicated government-jobs section alongside private-sector listings.
- Internshala — Internshala focuses on Indian internships and extends into fresher jobs, with courses and an ATS-oriented resume tool for students and first-job seekers.
Topics
- Shine.com API
- Shine job search API
- Shine vacancy endpoints
- jCID jJT jCName jSal
- candidate profile API
- resume parsing API
- OTP login JWT
- recruiter activity Shine
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