Shine.com job search data API
Shine.com Job Search App is HT Media's Android client for India's Shine.com board. The data API behind those screens starts at /v1/jobs/search for the filtered vacancy list (jCID, jJT, jCName, jSal, jLoc) and /v1/jobs/detail for a single posting, then layers on the signed-in profile at /v1/profile/aggregate and recruiter activity at /v1/profile/recruiter-activity.
Shine.com Job Search App (package com.net.shine, version 8.9.50) is HT Media's Android client for India's Shine.com job board: candidates search and filter vacancies, open a job description, apply or shortlist, upload a CV, and watch recruiter activity on their profile. Behind those screens the app talks to a JSON API over HTTPS, with a separate backend-for-frontend schema service driving the home and dashboard pages. Signed-in calls attach a Bearer JWT from the OTP login flow (accessToken, refreshToken, candidate_id); anonymous search still sends device=app. Job cards use compact wire names such as jCID, jJT, jCName, jLoc, jSal, jExp, jPDate, jVanc, is_applied and is_shortlisted. The illustrative surface below covers job search, job description, similar jobs, OTP login, the aggregated candidate profile, resume parsing, homepage schema, profile performance, job alerts, shortlist, recruiter-activity updates and the pre-apply questionnaire.
Screenshots
API surface
Search jobs
GET
/v1/jobs/searchopendataReturns 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/verify. 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
Illustrative example reconstructed from the app's interface — not a live capture.
GET /v1/jobs/search?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 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's job-search results screen and its filter barfield set mirrors the vacancy cards shown in search results
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/verify. 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
Illustrative example reconstructed from the app's interface — not a live capture.
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 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the job-details screen a candidate opens before applyingfield set mirrors the posting header, skills list and recruiter block
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/verify.
- jobs
- jCID
- jJT
- jCName
- jLoc
- jExp
- jSal
- jPDate
- jJobType
- is_applied
- is_shortlisted
- jobId
Illustrative example reconstructed from the app's interface — not a live capture.
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 }] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the Similar Jobs strip on the vacancy-detail screen
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/verify.
- phone
- device
- status
- channel
- sessionId
- message
Illustrative example reconstructed from the app's interface — not a live capture.
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" }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's OTP login screens
JWT mobile login (verify OTP)
POST
/v1/auth/otp/verifyosintExchanges 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
Illustrative example reconstructed from the app's interface — not a live capture.
POST /v1/auth/otp/verify 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 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the OTP verification step of the login flowtoken pair mirrors what the app stores locally after sign-in
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/verify. 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
Illustrative example reconstructed from the app's interface — not a live capture.
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 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the Complete Profile screensfield set mirrors the personal-details, salary, skills and resume sections
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/verify. 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
Illustrative example reconstructed from the app's interface — not a live capture.
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" } }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the Upload CV step of profile completionparsed-field set mirrors the sections the app pre-fills from a CV
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
Illustrative example reconstructed from the app's interface — not a live capture.
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}]} ] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the app's home screen section orderingsection names mirror the modules shown on the candidate home page
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/verify.
- candidate_id
- profileStrength
- searchImpressions
- profileViews
- interestedRecruiters
- recruiterFollowUps
Illustrative example reconstructed from the app's interface — not a live capture.
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 }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the candidate insights / profile-performance screen
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/verify. Delete uses the sibling DELETE /v1/job-alerts/delete call.
- alerts
- id
- job_title
- location
- emp_type
- farea
- fexp
- fsalary
- shift_type
- active
Illustrative example reconstructed from the app's interface — not a live capture.
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 }] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the job-alerts management screen
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/verify. jobIds array cannot exceed 20 items.
- jobIds
- candidate_id
- jCID
- is_shortlisted
Illustrative example reconstructed from the app's interface — not a live capture.
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"] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the shortlist action on vacancy cardsmirrors the 20-item cap the app enforces per shortlist call
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/verify.
- 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
Illustrative example reconstructed from the app's interface — not a live capture.
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" }] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the Your Activity / recruiter-activity panelcard fields mirror the recruiter-viewed vacancy list
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/verify. Shown before apply when the vacancy has screening questions.
- jobId
- questions
- id
- text
- type
- required
Illustrative example reconstructed from the app's interface — not a live capture.
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 }] }Derived from the app's interface; endpoint details are illustrative, not a live capture.
reconstructed from the pre-apply screening-questions step
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/search 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/search 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/verify 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.
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.