Jobstreet: Smart job matching icon

Jobstreet: Smart job matching Data API

Jobstreet.com Private Limited · Identity

Jobstreet: Smart job matching talks to SEEK over a token-authenticated JSON API. Job search is POST /v1/search/jobs (title, advertiser, salary displayValue, workArrangements). The companion calls load a single posting via POST /v1/jobs/details, the signed-in candidate profile via POST /v1/candidates/profile (emailAddress, firstName, lastName, resumes), the applied-jobs pipeline via POST /v1/candidates/applications, application submission via POST /v1/applications/submit (applicationId) and the public people search via POST /v1/profiles/search (slug, workHistories, digitalIdentity).

Jobstreet: Smart job matching (package com.jobstreet.jobstreet, versionName 15.32.0) is SEEK's Android client for Jobstreet in Indonesia, Malaysia, the Philippines and Singapore. Behind its screens sits a token-authenticated JSON data API. The job-search call returns listings with title, advertiser name, salary displayValue, workTypes and workArrangements; the job-details call hydrates a posting plus company reviewsSummary and applicant insights; the signed-in profile call returns candidate PII (emailAddress, firstName, lastName, phoneNumber), career history, resumes and salaryPreferences2; the applied-jobs call tracks application pipeline events; the apply call posts a jobId with resume and questionnaireAnswers and returns an applicationId; and the public-profile search looks up people by slug, firstName, lastName and workHistories. Signed-in calls send an Auth0 Bearer token from the Jobstreet account sign-in; search also carries searchContext.sessionId and solVisitorId.

Screenshots

  • Jobstreet: Smart job matching screenshot 1
  • Jobstreet: Smart job matching screenshot 2
  • Jobstreet: Smart job matching screenshot 3
  • Jobstreet: Smart job matching screenshot 4
  • Jobstreet: Smart job matching screenshot 5
  • Jobstreet: Smart job matching screenshot 6

API surface

  • Search jobs (JobSearchV7)

    POST /v1/search/jobs opendata

    Returns a JobSearchV7 listing page (title, advertiser, location, salary displayValue, workTypes, workArrangements) used by the Jobstreet search-results screen.

    Auth: Optional Auth0 Bearer access token from the Jobstreet account sign-in (Authorization: Bearer). Anonymous search still sends searchContext.sessionId and solVisitorId.

    • jobSearchV7
    • id
    • title
    • abstract
    • advertiser
    • location
    • displayName
    • workTypes
    • salary
    • hideSalary
    • currency
    • displayValue
    • companyLogoURL
    • listedAt
    • dateTimeUtc
    • workArrangements
    • resultCount
    • searchToken
    • sessionId
    • solVisitorId

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/search/jobs HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "operationName": "JobSearchV7",
      "variables": {
        "params": {
          "searchIntent": null,
          "encodedUrl": "/jobs?keywords=software+engineer&where=Jakarta",
          "searchContext": {
            "brand": "jobstreet",
            "channel": "ANDROID",
            "userId": null,
            "solVisitorId": "<visitor-uuid>",
            "intent": null,
            "source": "SEARCH"
          },
          "responseConfig": null,
          "searchToken": null,
          "sessionId": "<jobseeker-session-id>"
        },
        "locale": "en-ID",
        "timezone": "Asia/Jakarta",
        "subTypes": ["FEATURED"]
      }
    }
    {
      "data": {
        "jobSearchV7": {
          "results": {
            "jobs": [{
              "id": "87001234",
              "title": "Software Engineer",
              "abstract": "Build marketplace services in Jakarta.",
              "advertiser": {"name": "Example Corp"},
              "location": {"displayName": {"text": "Jakarta"}},
              "cjs": {
                "workTypes": [{"name": "Full time"}],
                "salary": {"hideSalary": false, "currency": "IDR", "displayValue": "IDR 15,000,000 - 20,000,000"},
                "product": {"branding": {"companyLogoURL": "https://cdn.example.com/logo.png"}, "bullets": ["Hybrid"]}
              },
              "listedAt": {"label": "2d ago", "dateTimeUtc": "2026-09-24T02:15:00Z"},
              "workArrangements": [{"id": "hybrid", "label": {"text": "Hybrid"}}]
            }],
            "pagination": {"resultCount": 1284}
          },
          "context": {"searchToken": "<search-token>"},
          "metadata": {"sol": "<sol-blob>"}
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's job search results flow
    • field set mirrors the listing cards shown for a keyword and location search
  • Fetch job details

    POST /v1/jobs/details opendata

    Hydrates a single Jobstreet posting (content, salary, advertiser, classifications) plus company reviewsSummary and applicant-count insights for the job-details screen.

    Auth: Optional Auth0 Bearer access token from the Jobstreet account sign-in. Personalised blocks (appliedDateTime, candidateJobMatch, matchedSkills) require a signed-in viewer; visitorId is always sent.

    • jobDetails
    • jobId
    • title
    • status
    • isExpired
    • isLinkOut
    • content
    • salary
    • currencyLabel
    • workTypes
    • advertiser
    • location
    • classifications
    • companyProfile
    • reviewsSummary
    • overallRating
    • ApplicantCount
    • count
    • workArrangements
    • candidateJobMatch

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/jobs/details HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "operationName": "JobDetails",
      "variables": {
        "jobId": "87001234",
        "tracking": {},
        "zone": "asia-4",
        "locale": "en-ID",
        "languageCode": "en",
        "timezone": "Asia/Jakarta",
        "countryCode": "ID",
        "visitorId": "<visitor-uuid>",
        "channel": "JOB_DETAILS",
        "jobMatchAnalysisIsOn": true,
        "isContactsMaskingOn": false,
        "agentOnJdvInlineIsOn": false
      }
    }
    {
      "data": {
        "jobDetails": {
          "job": {
            "id": "87001234",
            "title": "Software Engineer",
            "status": "Active",
            "isExpired": false,
            "isLinkOut": false,
            "isVerified": true,
            "content": "<p>Build marketplace services.</p>",
            "listedAt": {"label": "2d ago", "dateTimeUtc": "2026-09-24T02:15:00Z"},
            "salary": {"label": "IDR 15,000,000 - 20,000,000", "currencyLabel": "IDR"},
            "workTypes": {"label": "Full time"},
            "advertiser": {"id": "adv-9001", "name": "Example Corp", "isVerified": true},
            "location": {"label": "Jakarta, Indonesia"},
            "classifications": {"label": "Information & Communication Technology"}
          },
          "companyProfile": {
            "id": "org-441",
            "name": "Example Corp",
            "reviewsSummary": {"overallRating": {"value": 3.8, "numberOfReviews": {"value": 214}}}
          },
          "insights": {"__typename": "ApplicantCount", "count": 42, "countLabel": "42 applicants"},
          "workArrangements": {"label": "Hybrid", "arrangements": [{"type": "hybrid", "label": "Hybrid"}]}
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's job details screen
    • field set mirrors the posting body, company review summary and applicant-count panel
  • Fetch signed-in candidate profile

    POST /v1/candidates/profile osint

    Loads the signed-in candidate record used by the Jobstreet profile tab: identity fields, career history, resumes, salaryPreferences2, rightsToWork and publicProfile.slug.

    Auth: Auth0 Bearer access token from the Jobstreet account sign-in (Authorization: Bearer). The Profile query is rooted at viewer (Candidate).

    • emailAddress
    • firstName
    • lastName
    • phoneNumber
    • countryCallingCode
    • currentLocation2
    • personalStatement
    • confirmedRoles
    • qualifications
    • skills2
    • resumes
    • fileMetadata
    • salaryPreferences2
    • rightsToWork
    • publicProfile
    • slug
    • searchImpressionCount
    • viewCount

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/candidates/profile HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "operationName": "Profile",
      "variables": {
        "locale": "en-ID",
        "countryCode": "ID",
        "languageCode": "en",
        "zone": "asia-4",
        "platform": "ANDROID",
        "source": "PROFILE",
        "timezone": "Asia/Jakarta"
      }
    }
    {
      "data": {
        "viewer": {
          "emailAddress": "[email protected]",
          "personalDetails": {
            "firstName": "Ada",
            "lastName": "Setiawan",
            "phoneNumber": "81234567890",
            "countryCallingCode": {"id": "ID", "countryCallingCode": "+62", "description": "Indonesia"}
          },
          "currentLocation2": {"id": "3000", "description": "Jakarta", "countryCode": "ID", "kind": "City"},
          "careerObjectives": {"personalStatement": "Backend engineer seeking hybrid roles."},
          "confirmedRoles": [{
            "id": "role-1",
            "title": {"text": "Software Engineer"},
            "company": {"text": "Example Corp"},
            "from": {"month": 3, "year": 2021},
            "to": null
          }],
          "skills2": [{"keyword": {"text": "Kotlin", "ontologyId": "sk-kotlin"}}],
          "resumes": [{
            "id": "resume-9",
            "isDefault": true,
            "fileMetadata": {"name": "ada-cv.pdf", "size": 184320, "virusScanStatus": "Clean", "uri": "https://cdn.example.com/ada-cv.pdf"}
          }],
          "salaryPreferences2": [{"amount": 18000000, "salaryType": "Monthly", "currencyCode": "IDR"}],
          "publicProfile": {"slug": "ada-setiawan", "url": "https://profiles.example.com/ada-setiawan"},
          "profileInsights2": {"searchImpressionCount": 128, "viewCount": 17}
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's signed-in profile tab
    • field set mirrors the identity, career history, resume and salary preference sections
  • List applied jobs

    POST /v1/candidates/applications osint

    Pages the candidate's applied-jobs list with pipeline events (status, timestamp) and the related job title, advertiser and salary labels.

    Auth: Auth0 Bearer access token from the Jobstreet account sign-in. Rooted at viewer.appliedJobs.

    • appliedJobs
    • applicationRequestId
    • isExternal
    • isActive
    • isPreferredApplicationEligible
    • priorityApplyState
    • events
    • status
    • timestamp
    • job
    • title
    • advertiser
    • salary
    • currencyLabel

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/candidates/applications HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "operationName": "GetAppliedJobs",
      "variables": {
        "first": 20,
        "timezone": "Asia/Jakarta",
        "locale": "en-ID",
        "zone": "asia-4",
        "sortBy": "RECENT",
        "jobId": "87001234",
        "source": "APPLIED_JOBS",
        "selectedAnswerUris": [],
        "languageCode": "en"
      }
    }
    {
      "data": {
        "viewer": {
          "id": "cand-1001",
          "appliedJobs": {
            "edges": [{
              "node": {
                "id": "app-7788",
                "isExternal": false,
                "isActive": true,
                "isPreferredApplicationEligible": true,
                "applicationRequestId": "req-334",
                "priorityApplyState": {"state": "NotPrioritized"},
                "events": [{
                  "status": "Submitted",
                  "timestamp": {"dateTimeUtc": "2026-09-20T09:01:00Z", "shortAbsoluteLabel": "20 Sep"}
                }],
                "job": {
                  "id": "87001234",
                  "title": "Software Engineer",
                  "location": {"label": "Jakarta"},
                  "advertiser": {"id": "adv-9001", "name": "Example Corp"},
                  "salary": {"label": "IDR 15,000,000 - 20,000,000", "currencyLabel": "IDR"}
                }
              }
            }]
          }
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's applied jobs tracker
    • field set mirrors the per-application pipeline events and related posting summary
  • Submit job application

    POST /v1/applications/submit opendata

    Submits a Jobstreet application (jobId, personalDetails, resume, optional coverLetter and questionnaireAnswers) and returns applicationId or locale-specific errors.

    Auth: Auth0 Bearer access token from the Jobstreet account sign-in. Mutation submitApplication requires a signed-in candidate.

    • submitApplication
    • jobId
    • correlationId
    • personalDetails
    • profilePrivacyLevel
    • mostRecentRole
    • questionnaireAnswers
    • resume
    • coverLetter
    • selectionCriteria
    • applicationId
    • errors

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/applications/submit HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "operationName": "ApplySubmitApplication",
      "variables": {
        "input": {
          "jobId": "87001234",
          "correlationId": "<uuid>",
          "personalDetails": {"firstName": "Ada", "lastName": "Setiawan", "phoneNumber": "81234567890"},
          "profilePrivacyLevel": "Standard",
          "mostRecentRole": {"title": "Software Engineer", "company": "Example Corp"},
          "questionnaireAnswers": [],
          "resume": {"id": "resume-9"},
          "coverLetter": null,
          "selectionCriteria": null,
          "zone": "asia-4",
          "referenceCheck": null,
          "priorityApply": null
        },
        "locale": "en-ID"
      }
    }
    {
      "data": {
        "submitApplication": {
          "__typename": "SubmitApplicationSuccess",
          "applicationId": "app-7788"
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's apply flow
    • field set mirrors the application form: personal details, resume, cover letter and questionnaire answers
  • Search public profiles

    POST /v1/profiles/search osint

    Looks up Jobstreet public people profiles by searchQuery, market, roleTitles and locations, returning slug, name, homeLocation, workHistories and digitalIdentity verification flags.

    Auth: Optional Auth0 Bearer access token from the Jobstreet account sign-in. UnrestrictedPublicProfileSearchResult adds verifiedName and isOwnedByLoggedInUser when the viewer is signed in.

    • publicProfileSearch
    • searchQuery
    • market
    • roleTitles
    • companies
    • locations
    • exactMatches
    • partialMatches
    • slug
    • firstName
    • lastName
    • homeLocation
    • workHistories
    • companyName
    • roleTitle
    • hasVerifiedCredentials
    • digitalIdentity
    • verifiedName
    • isVerified
    • profileAvatarUrls

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/profiles/search HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "operationName": "PublicProfileSearch",
      "variables": {
        "input": {
          "searchQuery": "Ada Setiawan",
          "market": "asia-4",
          "roleTitles": ["Software Engineer"],
          "companies": [],
          "locations": {"ids": ["3000"]},
          "pageNumber": 1,
          "pageSize": 20,
          "visitorId": "<visitor-uuid>"
        },
        "locale": "en-ID"
      }
    }
    {
      "data": {
        "publicProfileSearch": {
          "exactMatches": [{
            "node": {
              "__typename": "UnrestrictedPublicProfileSearchResult",
              "slug": "ada-setiawan",
              "firstName": "Ada",
              "lastName": "Setiawan",
              "homeLocation": {"label": "Jakarta"},
              "workHistories": [{"companyName": "Example Corp", "roleTitle": "Software Engineer"}],
              "hasVerifiedCredentials": true,
              "digitalIdentity": {"verifiedName": "Ada Setiawan", "isVerified": true},
              "isOwnedByLoggedInUser": false,
              "profileAvatarUrls": {"image512Url": "https://cdn.example.com/ada-512.png"}
            }
          }],
          "partialMatches": [],
          "serviceToken": "<sol-token>"
        }
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the app's public people search
    • field set mirrors the profile result cards and their verification badges

Data categories

  • job listings
  • job details
  • candidate profiles
  • applications
  • public people search
  • company reviews

Where teams use this data

  • SEA job-market pulse

    Nightly JobSearchV7 pulls for Jakarta (or other asia-4 locations) yield title, advertiser, salary displayValue, currency, workTypes and workArrangements so a labour-market dashboard can track hiring volume and advertised pay bands without scraping HTML.

  • Candidate CRM enrichment

    A recruiting CRM can call publicProfileSearch with searchQuery plus roleTitles, then join slug, firstName, lastName, homeLocation, workHistories and hasVerifiedCredentials onto outbound prospect records.

  • Application-pipeline audit

    HR ops bots can page GetAppliedJobs for events.status / timestamp and the related job title and advertiser, then reconcile SubmitApplicationSuccess.applicationId against an ATS so dropped applications surface the same day.

  • Employer review overlay

    JobDetails.companyProfile.reviewsSummary.overallRating and ApplicantCount insights can be joined onto a posting id so career-site widgets show review scores and applicant volume next to the same job the mobile app shows.

Frequently asked questions

Where does the Jobstreet Android app load job listings from?

Search results come from POST /v1/search/jobs. The request carries the search keywords and location plus a search context (brand, channel, sessionId, solVisitorId) and the viewer's locale and timezone. Each hit carries id, title, advertiser.name, salary.displayValue and workArrangements.

What candidate fields does the profile endpoint return?

POST /v1/candidates/profile returns the signed-in viewer's record: emailAddress, personalDetails (firstName, lastName, phoneNumber), currentLocation2, confirmedRoles, qualifications, skills2, resumes.fileMetadata, salaryPreferences2, rightsToWork, publicProfile.slug and profileInsights2 view counts.

How are Jobstreet applications submitted and tracked?

POST /v1/applications/submit sends the application input (jobId, personalDetails, resume, questionnaireAnswers) and returns applicationId on success. POST /v1/candidates/applications then pages the applied-jobs list with events.status, timestamp and the related job title and advertiser.

Can you look up people on Jobstreet without an employee ATS export?

Yes. POST /v1/profiles/search takes a search query plus market, role titles and locations and returns exact and partial matches with slug, firstName, lastName, homeLocation, workHistories and a digitalIdentity verification flag.

Topics

  • jobstreet data api
  • jobstreet job search
  • candidate profile fields
  • public profile search
  • applied jobs tracking
  • jobstreet indonesia

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