OCC: Job Search (OCCMundial) data API
OCC: Job Search is the Android app of OCCMundial.com, the Mexican job board behind occ.com.mx, built for people looking for work in Mexico. Candidates search vacancies by keyword, location, category and salary range, narrow results with filters, and open a job-detail screen showing the description, requirements, benefits, salary band, work modality and the employer's sector, rating and verification badge, with a carousel of related openings underneath. Applying runs through screening (killer) questions and skill-level prompts, backed by an in-app CV builder covering skills, work experience, education, certifications and languages, with public or private visibility and an attached PDF or DOC résumé. After applying, a postulaciones tab tracks each application's status, a résumé-visits dashboard shows which companies' recruiters viewed the profile, and a chat inbox carries recruiter messages with unread badges. Saved favorites, keyword-and-location job alerts with a chosen delivery frequency, and affinity-ranked suggested jobs on the dashboard keep new matches coming. OCCMundial is one of Mexico's leading job boards, serving candidates across the country and competing for the same jobseekers with Computrabajo, Bumeran México, Indeed and LinkedIn.
OCCMundial vacancy records anchor the dataset: each posting carries a jobTitle, an employer shown as companyPrettyName with companySector, companyRating and an isCompanyVerified flag, a salaryMin/salaryMax band with its salaryInterval, a locationName, a jobModality or workplaceType, a publicationDate, and a hasKillerQuestions flag marking postings that screen applicants; detail records add description, requirements and jobBenefits, and every search returns facets and a total count for the query. On the candidate side, the structured CV breaks into skills with a levelId, jobExperiences, education, certification and language with a languageLevel, all under a visibility setting. Applications are logged with applicationId, applicationStatusId and applicationDate; recruiter interest arrives as totalRecruiterViews and totalCompanies counters plus chat threads with unreadMessagesCount; saved alerts keep their keywords, locationIds and frequency; and suggested and related vacancies are ranked by an affinityScore.
An applicant-tracking system can mirror OCCMundial's Mexico postings together with their salary bands and screening flags; a career-coach product can read skills, jobExperiences and résumé visibility to tell a jobseeker why an application would be blocked before it is sent; joining application status to recruiter-view totals shows which postulaciones employers are actually opening; and a workforce product can fan the same saved-alert criteria and affinity-ranked suggestions out as push or email without rebuilding OCCMundial's matching. openData Studio turns these vacancy, CV, application and recruiter-interest 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.
OAuth2 token (candidate login)
POST
/oauth/tokenosintExchanges an OCCMundial authorization code (or refresh_token) for the Bearer accessToken that the candidate sign-in and every later /v1 call attach.
Auth: Unauthenticated. Authorization-code + PKCE exchange. Later REST calls send Authorization: Bearer <accessToken>. Refresh uses grant_type=refresh_token on the same endpoint.
- grant_type
- code
- redirect_uri
- clientId
- code_verifier
- access_token
- refresh_token
- id_token
- token_type
- expires_in
- scope
- sub
POST /oauth/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded grant_type=authorization_code&code=<auth-code>&redirect_uri=<app-redirect-uri>&client_id=<portal-client-id>&code_verifier=<pkce-verifier>{ "access_token": "<accessToken>", "refresh_token": "<refreshToken>", "id_token": "<idToken>", "token_type": "Bearer", "expires_in": 3600, "scope": "openid profile email" }Search job offers
GET
/v1/ofertas/searchopendataReturns the vacancy listing used by the empleos search-results screen: jobTitle, companyPrettyName, salaryMin/salaryMax, locationName, facets and pagination.
Auth: Optional Bearer accessToken from POST /oauth/token. Anonymous search still sends a portal identifier; signed-in calls personalise isFavorite / isApplied.
- jobOffers
- jobOfferId
- encryptedId
- jobTitle
- companyName
- companyPrettyName
- companyLogoUrl
- companySector
- companyRating
- isCompanyVerified
- isCompanyConfidential
- salaryMin
- salaryMax
- salaryNegotiable
- salaryInterval
- isSalaryVisible
- locationId
- locationName
- publicationDate
- jobModality
- hasKillerQuestions
- isFavorite
- isApplied
- affinityScore
- facets
- selectedFacets
- pageNumber
- total
- hasMore
GET /v1/ofertas/search?keywords=ingeniero+software&locationIds=9&cityIds=555&categoryIds=12&salaryMin=20000&salaryMax=45000&pageNumber=1&pageSize=20&sortBy=publicationDate HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "jobOffers": [{ "jobOfferId": "18442091", "encryptedId": "enc-off-18442091", "jobTitle": "Ingeniero de software", "companyName": "Example Corp", "companyPrettyName": "Example Corp SA de CV", "companyLogoUrl": "https://cdn.example.com/logos/example.png", "companySector": "Tecnología", "companyRating": 4.2, "isCompanyVerified": true, "isCompanyConfidential": false, "salaryMin": 25000, "salaryMax": 38000, "salaryNegotiable": false, "salaryInterval": "monthly", "isSalaryVisible": true, "locationId": 9, "locationName": "Ciudad de México", "publicationDate": "2026-09-20T15:04:00Z", "jobModality": "hybrid", "hasKillerQuestions": true, "isFavorite": false, "isApplied": false, "affinityScore": 0.81, "jobFirstToApply": true }], "total": 1284, "pageNumber": 1, "hasMore": true, "facets": [{"facetId": "salary", "facetType": "salary", "count": 412}], "selectedFacets": [] }Fetch job offer by id
GET
/v1/ofertas/{jobId}opendataHydrates a single OCCMundial posting (description, requirements, jobBenefits, salary band, company verification) for the job-detail screen.
Auth: Optional Bearer accessToken. Personalised blocks (isApplied, isFavorite, affinityScore) require a signed-in candidate.
- jobOffer
- jobOfferId
- encryptedId
- jobTitle
- description
- requirements
- jobBenefits
- companyId
- companyPrettyName
- companyLogoUrl
- companySector
- companyRating
- isCompanyVerified
- isCompanyConfidential
- salaryMin
- salaryMax
- workplaceType
- contractTypeId
- publicationDate
- hasKillerQuestions
- hasSkills
- isExternal
- isFavorite
- isApplied
GET /v1/ofertas/18442091 HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "jobOffer": { "jobOfferId": "18442091", "encryptedId": "enc-off-18442091", "jobTitle": "Ingeniero de software", "description": "Construye servicios de marketplace en CDMX.", "requirements": "3+ años en Kotlin o Java.", "jobBenefits": ["SGMM", "home office 2 días"], "companyId": "co-441", "companyPrettyName": "Example Corp SA de CV", "companyLogoUrl": "https://cdn.example.com/logos/example.png", "companySector": "Tecnología", "companyRating": 4.2, "isCompanyVerified": true, "isCompanyConfidential": false, "salaryMin": 25000, "salaryMax": 38000, "salaryNegotiable": false, "locationName": "Ciudad de México", "workplaceType": "hybrid", "contractTypeId": 1, "publicationDate": "2026-09-20T15:04:00Z", "hasKillerQuestions": true, "hasSkills": true, "isExternal": false, "isFavorite": false, "isApplied": false } }Related job offers
GET
/v1/ofertas/{jobId}/relatedopendataReturns related vacancies for the job-detail carousel, scored with affinityScore.
Auth: Optional Bearer accessToken. Offers the candidate has hidden are filtered out before display.
- relatedJobOffers
- jobOfferId
- jobTitle
- companyPrettyName
- companyLogoUrl
- locationName
- salaryMin
- salaryMax
- affinityScore
- isSimilarJob
- isFavorite
- jobOffersAffinityScoreList
GET /v1/ofertas/18442091/related HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "relatedJobOffers": [{ "jobOfferId": "18443002", "jobTitle": "Desarrollador backend", "companyPrettyName": "Example Labs", "companyLogoUrl": "https://cdn.example.com/logos/labs.png", "locationName": "Guadalajara", "salaryMin": 22000, "salaryMax": 32000, "affinityScore": 0.74, "isSimilarJob": true, "isFavorite": false }], "jobOffersAffinityScoreList": [0.74] }Get signed-in candidate
GET
/v1/me/profileosintLoads the signed-in jobseeker record (name, email, phoneNumber, encryptedCurriculumId, resumeVisibility, feature flags) that gates the apply and chat screens.
Auth: Bearer accessToken from POST /oauth/token. An expired session triggers a token refresh and then sign-out if the refresh fails.
- candidate
- candidateId
- encryptedCandidateId
- firstName
- middleName
- lastName
- phoneNumber
- gender
- birthDate
- candidateStatusId
- curriculumId
- encryptedCurriculumId
- resumeVisibility
- features
- isVerified
GET /v1/me/profile HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "candidate": { "candidateId": 8845123, "encryptedCandidateId": "enc-cand-8845123", "firstName": "María", "middleName": "Elena", "lastName": "Hernández", "email": "[email protected]", "phoneNumber": "5512345678", "gender": "F", "birthDate": "1994-03-12", "candidateStatusId": 1, "curriculumId": 44189012, "encryptedCurriculumId": "enc-cv-44189012", "resumeVisibility": "public", "features": ["chatEnabled", "chargedApply"], "isVerified": true } }Get candidate CV / resume
GET
/v1/me/resumeosintReturns the structured OCCMundial CV (skills, jobExperiences, education, certification, language, visibility) that the curriculo screens display and edit.
Auth: Bearer accessToken from POST /oauth/token. Requires an active curriculumId on the candidate.
- resume
- resumeId
- curriculumId
- encryptedCurriculumId
- visibility
- isFirstJob
- jobTitle
- skills
- encryptedSkillId
- levelId
- jobExperiences
- company
- position
- startDate
- endDate
- isCurrent
- education
- institution
- certification
- encryptedCertificationId
- language
- languageId
- languageLevel
GET /v1/me/resume HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "resume": { "resumeId": 44189012, "curriculumId": 44189012, "encryptedCurriculumId": "enc-cv-44189012", "visibility": "public", "isFirstJob": false, "jobTitle": "Ingeniera de software", "skills": [{"encryptedSkillId": "enc-sk-91", "skill": "Kotlin", "levelId": 3}], "jobExperiences": [{ "company": "Example Corp", "position": "Ingeniera de software", "startDate": "2021-03-01", "endDate": null, "isCurrent": true, "expIsFirstJob": false }], "education": [{"institution": "UNAM", "year": 2017}], "certification": [{"encryptedCertificationId": "enc-cert-7", "institution": "Google", "year": 2024}], "language": [{"languageId": 1, "languageLevel": "C1"}] } }Upload CV file
POST
/v1/me/resume/fileosintUploads the candidate's attached CV file (PDF/DOC) and returns encryptedFileId / fileUri used to download, attach or set the default CV.
Auth: Bearer accessToken from POST /oauth/token. Multipart upload of the attached CV file.
- encryptedFileId
- fileName
- mimeType
- fileSize
- fileUri
- curriculumId
- encryptedCurriculumId
POST /v1/me/resume/file HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: multipart/form-data; boundary=----occ ------occ Content-Disposition: form-data; name="file"; filename="cv-maria.pdf" Content-Type: application/pdf <pdf-bytes> ------occ--{ "encryptedFileId": "enc-file-9081", "fileName": "cv-maria.pdf", "mimeType": "application/pdf", "fileSize": 184320, "fileUri": "https://files.example.com/v1/me/resume/file/enc-file-9081", "curriculumId": 44189012, "encryptedCurriculumId": "enc-cv-44189012" }Apply to a job offer
POST
/v1/ofertas/{jobId}/applyopendataSubmits a postulación to a vacancy with killerQuestionAnswers and skillAnswers; returns applicationId / applicationStatusId for the postulaciones list.
Auth: Bearer accessToken from POST /oauth/token. Candidate must have a complete CV; killerQuestionAnswers and skillAnswers are required when hasKillerQuestions / hasSkills is true.
- encryptedCandidateId
- jobOfferId
- encryptedCurriculumId
- killerQuestionAnswers
- skillAnswers
- applicationId
- jobApplicationId
- applicationDate
- applicationStatusId
- isApplied
- chargedApply
POST /v1/ofertas/18442091/apply HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "encryptedCandidateId": "enc-cand-8845123", "encryptedCurriculumId": "enc-cv-44189012", "killerQuestionAnswers": [{"questionId": 11, "answerText": "Sí"}], "skillAnswers": [{"encryptedSkillId": "enc-sk-91", "levelId": 3}] }{ "applicationId": "app-55201", "jobApplicationId": "app-55201", "jobOfferId": "18442091", "applicationDate": "2026-09-27T14:22:00Z", "applicationStatusId": 1, "isApplied": true, "chargedApply": false }List applied job offers
GET
/v1/me/applicationsopendataLists the vacancies the candidate already applied to for the postulaciones tab.
Auth: Bearer accessToken from POST /oauth/token.
- jobOffers
- jobOfferId
- jobTitle
- companyPrettyName
- companyLogoUrl
- applicationId
- applicationDate
- applicationStatusId
- isApplied
- locationName
- total
GET /v1/me/applications HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "jobOffers": [{ "jobOfferId": "18442091", "jobTitle": "Ingeniero de software", "companyPrettyName": "Example Corp SA de CV", "companyLogoUrl": "https://cdn.example.com/logos/example.png", "applicationId": "app-55201", "applicationDate": "2026-09-27T14:22:00Z", "applicationStatusId": 1, "isApplied": true, "locationName": "Ciudad de México" }], "total": 6 }List favorite job offers
GET
/v1/me/favoritesopendataReads saved vacancies keyed by encryptedFavoritesIds for the favorites screen.
Auth: Bearer accessToken from POST /oauth/token. Query encryptedFavoritesIds or typeId; the same resource is written when a favorite is toggled.
- favoriteJobOffers
- encryptedFavoritesIds
- typeId
- jobOfferId
- encryptedId
- jobTitle
- companyPrettyName
- locationName
- salaryMin
- salaryMax
- isFavorite
GET /v1/me/favorites?typeId=1 HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "favoriteJobOffers": [{ "jobOfferId": "18442091", "encryptedId": "enc-off-18442091", "jobTitle": "Ingeniero de software", "companyPrettyName": "Example Corp SA de CV", "locationName": "Ciudad de México", "salaryMin": 25000, "salaryMax": 38000, "isFavorite": true }], "encryptedFavoritesIds": ["enc-off-18442091"] }Recruiter profile views
GET
/v1/me/profile-viewsosintReturns which recruiters looked at the candidate plus totalRecruiterViews / totalCompanies for the resume-visits dashboard.
Auth: Bearer accessToken from POST /oauth/token.
- recruiterViews
- companyId
- companyPrettyName
- companyLogoUrl
- recruiterViewsCount
- createdAt
- totalRecruiterViews
- totalCompanyViews
- totalCompanies
GET /v1/me/profile-views HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "recruiterViews": [{ "companyId": "co-441", "companyPrettyName": "Example Corp SA de CV", "companyLogoUrl": "https://cdn.example.com/logos/example.png", "recruiterViewsCount": 3, "createdAt": "2026-09-26T11:00:00Z" }], "totalRecruiterViews": 17, "totalCompanyViews": 9, "totalCompanies": 9 }Job alert list
GET
/v1/me/alertsopendataLists saved empleo alerts that push matching vacancies to the candidate.
Auth: Bearer accessToken from POST /oauth/token.
- alertId
- keywords
- locationIds
- locationName
- salaryMin
- criteria
- frequency
- isActive
- receiveAlerts
GET /v1/me/alerts HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "alerts": [{ "alertId": "al-2201", "keywords": "ingeniero software", "locationIds": [9], "locationName": "Ciudad de México", "salaryMin": 20000, "criteria": {"categoryIds": [12], "jobModality": "hybrid"}, "frequency": "daily", "isActive": true, "receiveAlerts": true }] }Suggested jobs
GET
/v1/me/suggested-jobsopendataReturns personalised vacancy suggestions for the dashboard suggestions screen.
Auth: Bearer accessToken from POST /oauth/token. Requires an active curriculumId.
- suggestedJobOffers
- jobOfferId
- jobTitle
- companyPrettyName
- locationName
- salaryMin
- salaryMax
- affinityScore
- isFavorite
GET /v1/me/suggested-jobs HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "suggestedJobOffers": [{ "jobOfferId": "18445110", "jobTitle": "Desarrolladora Android", "companyPrettyName": "Example Mobile", "locationName": "Monterrey", "salaryMin": 28000, "salaryMax": 40000, "affinityScore": 0.88, "isFavorite": false }] }Recruiter chat conversations
GET
/v1/me/conversationsosintLists recruiter–candidate conversations with unreadMessagesCount for the in-app chat inbox.
Auth: Bearer accessToken from POST /oauth/token. Feature gated by the chatEnabled flag on the candidate profile.
- conversationId
- encryptedIdConversation
- companyPrettyName
- jobOfferId
- jobTitle
- unreadMessagesCount
- lastMessage
- messageCreationDate
- senderId
- totalMessagesCount
GET /v1/me/conversations HTTP/1.1 Authorization: Bearer <accessToken> Accept: application/json{ "conversations": [{ "conversationId": "conv-901", "encryptedIdConversation": "enc-conv-901", "companyPrettyName": "Example Corp SA de CV", "jobOfferId": "18442091", "jobTitle": "Ingeniero de software", "unreadMessagesCount": 2, "lastMessage": "¿Puedes entrevistarte el jueves?", "messageCreationDate": "2026-09-27T09:15:00Z", "senderId": "rec-44" }], "totalMessagesCount": 2 }
Data categories
- vacancies
- candidate profiles
- CVs and resumes
- job applications
- recruiter views
- job alerts
- recruiter chat
Where teams use this data
Mexico vacancy feed into an ATS
Poll GET /v1/ofertas/search (keywords, locationIds, salaryMin/salaryMax, selectedFacets) and hydrate each hit with GET /v1/ofertas/{jobId} so an applicant-tracking system can mirror OCCMundial postings with jobTitle, companyPrettyName, salary band and hasKillerQuestions.
Candidate CV completeness for apply-readiness
Read GET /v1/me/profile plus GET /v1/me/resume (skills, jobExperiences, education, visibility) and POST new files to /v1/me/resume/file so a career-coach product can tell a jobseeker why a job application would be blocked.
Application pipeline and recruiter interest
Join GET /v1/me/applications (applicationId, applicationStatusId, applicationDate) with GET /v1/me/profile-views (totalRecruiterViews, totalCompanies) to show which postulaciones are actually being looked at.
Alert-driven vacancy notifications
Sync GET /v1/me/alerts (keywords, locationIds, frequency, isActive) and GET /v1/me/suggested-jobs (affinityScore) so a workforce product can fan the same saved-search criteria out as push or email without re-implementing OCCMundial's matching.
Frequently asked questions
Which OCCMundial endpoints power job search?
The empleos results screen calls GET /v1/ofertas/search (keywords, locationIds, salaryMin/salaryMax, facets). Opening a card hydrates GET /v1/ofertas/{jobId}; the related carousel is GET /v1/ofertas/{jobId}/related.
How does OCC: Job Search authenticate?
Candidates sign in with OpenID Connect (authorization-code + PKCE). The app posts grant_type=authorization_code to POST /oauth/token and sends Authorization: Bearer <accessToken> on later /v1 calls. Refresh uses grant_type=refresh_token.
What candidate and CV fields are returned?
GET /v1/me/profile returns encryptedCandidateId, firstName, lastName, email, phoneNumber and encryptedCurriculumId. GET /v1/me/resume adds skills, jobExperiences, education, certification, language and resume visibility; file uploads go to POST /v1/me/resume/file.
Where do applications and recruiter views live?
Apply is POST /v1/ofertas/{jobId}/apply with killerQuestionAnswers. History is GET /v1/me/applications. Recruiter interest is GET /v1/me/profile-views (totalRecruiterViews, totalCompanies).
Apps similar to OCC: Job Search
- Indeed Job Search — Indeed is a job-search engine that indexes vacancies from company career pages and other boards, with filters, alerts and salary ranges used by seekers in Mexico.
- LinkedIn: Community & Network — LinkedIn is a professional network used in Mexico for corporate and senior vacancies, combining a job board with recruiter outreach and profile-based matching.
- Computrabajo — Computrabajo is a Latin American job board with a strong Mexico presence for sales, customer-service, administration and logistics vacancies, plus in-app alerts.
- Bumeran México — Bumeran México is Jobint's job-search app where candidates upload a CV, filter vacancies by area and location, and exchange messages with recruiters.
- Glassdoor | Jobs & Careers — Glassdoor combines job listings with anonymous employee reviews and salary information so seekers can research Mexican employers before applying.
- CornerJob — CornerJob is a mobile job app used in Mexico for simplified, fast applications to temporary and operational roles.
Topics
- OCCMundial API
- OCC job search API
- occ.com.mx vacancies
- candidate CV API
- recruiter views
- job alerts Mexico
- OCC apply endpoint
- OpenID Connect OCC
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