Shine.com Job Search App icon

Shine.com job search data API

HT Media Limited · Identity

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

  • Shine.com Job Search App screenshot 1
  • Shine.com Job Search App screenshot 2
  • Shine.com Job Search App screenshot 3
  • Shine.com Job Search App screenshot 4
  • Shine.com Job Search App screenshot 5
  • Shine.com Job Search App screenshot 6
  • Shine.com Job Search App screenshot 7
  • Shine.com Job Search App screenshot 8

API surface

  • Search jobs

    GET /v1/jobs/search opendata

    Returns 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 bar
    • field set mirrors the vacancy cards shown in search results
  • Fetch job description

    GET /v1/jobs/detail opendata

    Hydrates 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 applying
    • field set mirrors the posting header, skills list and recruiter block
  • Similar jobs

    GET /v1/jobs/similar opendata

    Returns 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/send osint

    Sends 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
    • email
    • 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/verify osint

    Exchanges 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 flow
    • token pair mirrors what the app stores locally after sign-in
  • Fetch aggregated candidate profile

    GET /v1/profile/aggregate osint

    Loads 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
    • email
    • 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 screens
    • field set mirrors the personal-details, salary, skills and resume sections
  • Parse uploaded resume

    POST /v1/profile/resume/parse osint

    Parses 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 completion
    • parsed-field set mirrors the sections the app pre-fills from a CV
  • Homepage schema (Nova Home)

    GET /v1/pages/home/schema opendata

    Returns 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 ordering
    • section names mirror the modules shown on the candidate home page
  • Profile performance schema

    GET /v1/pages/profile-insights/schema osint

    Loads 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-alerts opendata

    Lists 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/shortlist opendata

    Marks 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 cards
    • mirrors the 20-item cap the app enforces per shortlist call
  • Recruiter activity (candidate response update)

    POST /v1/profile/recruiter-activity osint

    Returns 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 panel
    • card fields mirror the recruiter-viewed vacancy list
  • Pre-apply questionnaire

    GET /v1/jobs/questionnaire opendata

    Loads 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.

Get a quote