Computrabajo data API: ofertas, CV, postulaciones
Computrabajo Ofertas de Empleo is DGNET LTD.'s Spanish-language job-board app for candidates hunting work across Spain and Latin America. Seekers pick a country portal — Spain, Mexico, Argentina, Chile and other Spanish-speaking markets — search ofertas by keyword, city, contract type and salary band, open a posting with the company profile, description, benefits and screening (killer) questions, and apply from an in-app curriculum that covers experience, education, skills, languages, a cover letter and an optional video presentation. After applying, Mis postulaciones tracks each candidacy, Empresas que han visto tu CV lists recruiters who opened the profile, a chat inbox carries recruiter messages, and saved searches plus job alerts keep new matches coming. Favorites, company follow and company valuations sit around that loop. DGNET Ltd. (company no. 189977) publishes the Android client; it competes with InfoJobs in Spain, OCC in Mexico and Bumeran in Argentina as a classifieds job board rather than a freelance marketplace.
Oferta records keyed by jobOfferId carry jobTitle, companyName, salaryMin/salaryMax, contractType, locationName, HasKillerQuestions and isApplied — the same card the search, recommended-by-profession and related-offer carousels hydrate. Signed-in postulaciones add applicationId, applicationStatusId and applicationDate; the curriculum returns curriculumId, jobExperienceId, skills, resumeVisibility and employabilityIndex; recruiter-view rows expose companyId, totalViews and totalProfileVisits.
ATS and labour-market tools can page the vacancy feed, score a CV against killer questions, watch who opened a profile and keep alert criteria in sync. openData Studio turns that surface 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.
OpenID Connect token
POST
/oauth/tokenosintExchanges an OpenID authorization code (or refresh_token) for the accessToken that later candidate REST calls attach as Bearer.
Auth: Unauthenticated. Authorization-code grant (or grant_type=refresh_token). Later REST calls send Authorization: Bearer <accessToken>, X-Portal-Id, X-XSRF-TOKEN and X-Version-Id.
- grant_type
- code
- client_id
- scope
- access_token
- refresh_token
- id_token
- accessToken
- refreshToken
- idToken
POST /oauth/token HTTP/1.1 Content-Type: application/x-www-form-urlencoded X-Portal-Id: es grant_type=authorization_code&code=<auth-code>&client_id=<mobile-client-id>&scope=openid%20offline_access{ "access_token": "<accessToken>", "refresh_token": "<refreshToken>", "id_token": "<idToken>", "accessToken": "<accessToken>", "refreshToken": "<refreshToken>", "idToken": "<idToken>", "scope": "openid offline_access" }Portal configuration
GET
/v1/portals/currentopendataReturns the active country portal metadata that later REST calls stamp via X-Portal-Id.
Auth: Optional Bearer accessToken. X-Portal-Id selects the country site (es, mx, ar, cl, …).
- portalId
- portalName
- PortalCode
- PortalCurrency
- CountryIsoCode
- locale
- src_portal_url
- src_portal_site
- src_portal_site_id
- src_portal_domain
GET /v1/portals/current HTTP/1.1 X-Portal-Id: es X-Version-Id: 4.0.5 X-PLATFORM-ID: android Accept: application/json{ "portalId": "es", "portalName": "España", "PortalCode": "es", "PortalCurrency": "EUR", "CountryIsoCode": "ES", "locale": "es-ES", "src_portal_url": "https://portal.example", "src_portal_site": "portal.example", "src_portal_site_id": "es", "src_portal_domain": "portal.example" }Search job offers
GET
/v1/ofertas/searchopendataReturns the paginated vacancy listing used by the search-results screen: jobTitle, companyName, salaryMin/salaryMax, locationName and HasKillerQuestions.
Auth: Optional Bearer accessToken. Anonymous search still pages; signed-in calls personalise isApplied and isOfferFavorite. X-Portal-Id selects the country site.
- page
- pageSize
- total
- hasMore
- jobOffers
- jobOfferId
- encryptedId
- EncryptedIdOffer
- jobTitle
- companyName
- companyId
- companyLogoUrl
- isCompanyVerified
- salaryMin
- salaryMax
- salaryRangeId
- contractType
- contractTypeId
- locationName
- cityId
- provinceName
- publicationDate
- numVacancies
- HasKillerQuestions
- isApplied
- isOfferFavorite
GET /v1/ofertas/search?query=ingeniero+software&cityId=280&contractTypeId=1&salaryRangeId=3&page=1&pageSize=20&sortBy=publicationDate HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es X-XSRF-TOKEN: <xsrf> X-Version-Id: 4.0.5 Accept: application/json{ "page": 1, "pageSize": 20, "total": 1842, "hasMore": true, "jobOffers": [{ "jobOfferId": "A1B2C3D4", "encryptedId": "enc-off-A1B2C3D4", "EncryptedIdOffer": "enc-off-A1B2C3D4", "jobTitle": "Ingeniero de software", "companyName": "Example Corp SA", "companyId": "c-9001", "companyLogoUrl": "https://cdn.example/logos/example.png", "isCompanyVerified": true, "salaryMin": 28000, "salaryMax": 38000, "salaryRangeId": 3, "contractType": "Indefinido", "contractTypeId": 1, "locationName": "Madrid", "cityId": 280, "provinceName": "Madrid", "publicationDate": "2026-09-28T11:04:00Z", "numVacancies": 2, "HasKillerQuestions": true, "isApplied": false, "isOfferFavorite": false }] }Job offer detail
GET
/v1/ofertas/{jobOfferId}opendataHydrates the offer-detail screen: jobDescription, benefits, salary band, companyRating and the killerQuestions the apply flow must answer.
Auth: Optional Bearer accessToken. Signed-in calls add isApplied, isOfferFavorite and killerQuestions. X-Portal-Id required.
- jobOfferId
- EncryptedIdOffer
- jobTitle
- jobDescription
- companyId
- companyName
- companyLogoUrl
- companyRating
- isCompanyVerified
- sector
- salaryMin
- salaryMax
- contractType
- locationName
- cityId
- benefits
- numVacancies
- publicationDate
- HasKillerQuestions
- killerQuestions
- encryptedKillerDataId
- killerQuestion
- killerQuestionAnswers
- isApplied
- isOfferFavorite
- candidatesAdequacyPercentage
GET /v1/ofertas/A1B2C3D4 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es X-XSRF-TOKEN: <xsrf> Accept: application/json{ "jobOfferId": "A1B2C3D4", "EncryptedIdOffer": "enc-off-A1B2C3D4", "jobTitle": "Ingeniero de software", "jobDescription": "Desarrollo de APIs en Java y Spring.", "companyId": "c-9001", "companyName": "Example Corp SA", "companyLogoUrl": "https://cdn.example/logos/example.png", "companyRating": 4.2, "isCompanyVerified": true, "sector": "Tecnología", "salaryMin": 28000, "salaryMax": 38000, "contractType": "Indefinido", "locationName": "Madrid", "cityId": 280, "benefits": ["Seguro médico", "Teletrabajo híbrido"], "numVacancies": 2, "publicationDate": "2026-09-28T11:04:00Z", "HasKillerQuestions": true, "killerQuestions": [{ "encryptedKillerDataId": "kq-12", "killerQuestion": "¿Tienes experiencia con Spring Boot?", "killerQuestionAnswers": ["Sí", "No"] }], "isApplied": false, "isOfferFavorite": false, "candidatesAdequacyPercentage": 72 }Recommended offers by profession
GET
/v1/ofertas/recommendedopendataHydrates the home recommended-ofertas carousel from the seeker's profession on the CV.
Auth: Bearer accessToken. Ranked from the signed-in curriculum's profession.
- profession
- page
- jobOffers
- jobOfferId
- jobTitle
- companyName
- salaryMin
- salaryMax
- locationName
- publicationDate
GET /v1/ofertas/recommended?profession=ingeniero+de+software&page=1 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "profession": "ingeniero de software", "page": 1, "jobOffers": [{ "jobOfferId": "B2C3D4E5", "jobTitle": "Backend Java", "companyName": "Fintech Norte", "salaryMin": 30000, "salaryMax": 42000, "locationName": "Barcelona", "publicationDate": "2026-09-29T08:12:00Z" }] }Related job offers
GET
/v1/ofertas/{offerId}/relatedopendataReturns similar vacancies for the job-detail carousel, keyed by the open offerId.
Auth: Optional Bearer accessToken. Hidden offers are filtered before display.
- offerId
- EncryptedSimilarOfferIds
- relatedOfferId
- jobTitle
- companyName
- locationName
- salaryMin
- salaryMax
GET /v1/ofertas/A1B2C3D4/related HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "offerId": "A1B2C3D4", "EncryptedSimilarOfferIds": ["enc-rel-1", "enc-rel-2"], "relatedJobOffers": [{ "relatedOfferId": "C3D4E5F6", "jobTitle": "Desarrollador backend", "companyName": "Consultora Andes", "locationName": "Valencia", "salaryMin": 26000, "salaryMax": 34000 }] }Apply to a job offer
POST
/v1/candidacies/{candidateId}/applyosintSubmits a postulacion from the signed-in curriculum, answering killer questions, and returns applicationId plus applicationStatusId.
Auth: Authorization: Bearer accessToken. Body names the offerId, curriculumId and any killerQuestionAnswers.
- offerId
- curriculumId
- coverLetter
- applicationCoverLetter
- killerQuestionAnswers
- encryptedKillerDataId
- applicationId
- candidateId
- applicationDate
- applicationStatusId
- applicationStatus
- applicationNumber
POST /v1/candidacies/cand-441902/apply HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es X-XSRF-TOKEN: <xsrf> Content-Type: application/json { "offerId": "A1B2C3D4", "curriculumId": "cv-7781", "coverLetter": "cl-12", "applicationCoverLetter": true, "killerQuestionAnswers": [{ "encryptedKillerDataId": "kq-12", "answer": "Sí" }] }{ "applicationId": "app-99021", "offerId": "A1B2C3D4", "candidateId": "cand-441902", "curriculumId": "cv-7781", "applicationDate": "2026-10-02T14:22:11Z", "applicationStatusId": 1, "applicationStatus": "enviada", "applicationNumber": 38 }List applications
GET
/v1/me/postulacionesopendataPages Mis postulaciones: each row is an applicationId with applicationStatusId, applicationDate and the offer the seeker applied to.
Auth: Authorization: Bearer accessToken. Scoped to the signed-in candidateId and X-Portal-Id.
- page
- total
- applicationId
- offerId
- jobTitle
- companyName
- applicationDate
- applicationStatusId
- applicationStatus
- applicationNumber
- curriculumId
GET /v1/me/postulaciones?page=1&pageSize=20 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "page": 1, "total": 12, "applications": [{ "applicationId": "app-99021", "offerId": "A1B2C3D4", "jobTitle": "Ingeniero de software", "companyName": "Example Corp SA", "applicationDate": "2026-10-02T14:22:11Z", "applicationStatusId": 2, "applicationStatus": "CV leído", "applicationNumber": 38, "curriculumId": "cv-7781" }] }Candidate CV resume
GET
/v1/me/curriculumosintReturns the in-app curriculum used at apply time: identity, profession, jobExperienceId rows, skills, languages, resumeVisibility and employabilityIndex.
Auth: Authorization: Bearer accessToken. Optional curriculumId query selects a non-default CV.
- curriculumId
- encryptedCurriculumId
- candidateId
- firstName
- lastName
- phone
- profession
- cityName
- cityId
- mobility
- resumeVisibility
- employabilityIndex
- candidateEmployabilityIndex
- jobExperiences
- jobExperienceId
- formations
- formationId
- skills
- languages
- videoPresentationUrl
GET /v1/me/curriculum?curriculumId=cv-7781 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "curriculumId": "cv-7781", "encryptedCurriculumId": "enc-cv-7781", "candidateId": "cand-441902", "firstName": "Ana", "lastName": "García", "email": "[email protected]", "phone": "+34 600 000 000", "profession": "Ingeniero de software", "cityName": "Madrid", "cityId": 280, "mobility": "hybrid", "resumeVisibility": "public", "employabilityIndex": 78, "candidateEmployabilityIndex": 78, "jobExperiences": [{ "jobExperienceId": "exp-11", "title": "Backend developer", "companyName": "Startup Sur" }], "formations": [{ "formationId": "edu-4", "title": "Ingeniería informática" }], "skills": ["Java", "Spring", "SQL"], "languages": ["es", "en"], "linkedin": "https://www.linkedin.com/in/example", "videoPresentationUrl": null }Companies that viewed the CV
GET
/v1/me/cv-viewsosintPages the recruiter-view dashboard: which companies opened the CV, with companyId, totalViews and totalProfileVisits.
Auth: Authorization: Bearer accessToken. Pages Empresas que han visto tu CV.
- page
- totalViews
- totalProfileVisits
- recruiterViews
- companyId
- companyName
- companyLogoUrl
- profileVisits
- publicationDate
GET /v1/me/cv-views?page=1 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "page": 1, "totalViews": 27, "totalProfileVisits": 27, "recruiterViews": [{ "companyId": "c-9001", "companyName": "Example Corp SA", "companyLogoUrl": "https://cdn.example/logos/example.png", "totalViews": 3, "profileVisits": 3, "publicationDate": "2026-10-01T09:14:00Z" }] }Job alerts
GET
/v1/me/job-alertsopendataLists saved job alerts that email new ofertas matching keywords, cityId and salaryRangeId.
Auth: Authorization: Bearer accessToken. Create/update uses the same alert and saved-search resources.
- page
- alertId
- searchId
- keywords
- cityId
- locationName
- contractTypeId
- salaryRangeId
- frequency
- query
GET /v1/me/job-alerts?page=1 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "page": 1, "alerts": [{ "alertId": "al-331", "searchId": "ss-12", "keywords": "ingeniero software", "cityId": 280, "locationName": "Madrid", "contractTypeId": 1, "salaryRangeId": 3, "frequency": "daily", "query": "ingeniero software Madrid" }] }Favorite job offers
GET
/v1/me/saved-ofertasopendataReturns the Mis Favoritos list of saved ofertas, keyed by favoriteId and offerId.
Auth: Authorization: Bearer accessToken. Remove uses the favorite id on the same resource family.
- page
- favoriteId
- encryptedId
- encryptedFavoritesIds
- offerId
- jobTitle
- companyName
- locationName
- typeId
- isOfferFavorite
GET /v1/me/saved-ofertas?typeId=1&page=1 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "page": 1, "favorites": [{ "favoriteId": "fav-19", "encryptedId": "enc-fav-19", "encryptedFavoritesIds": ["enc-fav-19"], "offerId": "A1B2C3D4", "jobTitle": "Ingeniero de software", "companyName": "Example Corp SA", "locationName": "Madrid", "typeId": 1, "isOfferFavorite": true }] }Followed companies
GET
/v1/me/followed-empresasopendataPages the companies the seeker follows, keyed by companyFollowerId, for the company-follow list and follow notifications.
Auth: Authorization: Bearer accessToken. Follow/unfollow mutations use the same follower resource family.
- page
- totalFollowedCompanies
- followedCompanies
- companyId
- companyName
- companyLogoUrl
- companyFollowerId
- followId
- followerId
GET /v1/me/followed-empresas?page=1 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "page": 1, "totalFollowedCompanies": 6, "followedCompanies": [{ "companyId": "c-9001", "companyName": "Example Corp SA", "companyLogoUrl": "https://cdn.example/logos/example.png", "companyFollowerId": "fl-441902-9001", "followId": "fl-19", "followerId": "cand-441902" }] }Recruiter messages
GET
/v1/me/inboxosintPages the recruiter chat inbox: conversationId threads with unreadMessagesCount, subject and message body.
Auth: Authorization: Bearer accessToken. A pager-only variant exists on the same inbox resource.
- page
- unreadMessagesCount
- conversationId
- companyId
- companyName
- encryptedIdResponser
- subject
- messageId
- body
- publicationDate
GET /v1/me/inbox?page=1 HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "page": 1, "unreadMessagesCount": 2, "conversations": [{ "conversationId": "conv-55", "companyId": "c-9001", "companyName": "Example Corp SA", "encryptedIdResponser": "enc-resp-9001", "subject": "Entrevista para Ingeniero de software", "unread": true, "messages": [{ "messageId": "msg-901", "body": "¿Puedes confirmar disponibilidad el martes?", "publicationDate": "2026-10-03T16:40:00Z" }] }] }Cover letter list
GET
/v1/me/cartasopendataLists cover letters the seeker can attach at apply time, including AI-generated drafts (Carta generada con IA).
Auth: Authorization: Bearer accessToken. GenAI drafts use a create-description action on the same cover-letter resource.
- coverLetter
- title
- body
- attachedCoverLetter
- aiCoverLetter
- applicationCoverLetter
- candidateId
GET /v1/me/cartas HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "coverLetters": [{ "coverLetter": "cl-12", "title": "Carta backend Madrid", "body": "Me presento para el puesto de ingeniero de software...", "attachedCoverLetter": true, "aiCoverLetter": false, "applicationCoverLetter": true, "candidateId": "cand-441902" }] }Company valuations
GET
/v1/empresas/{companyId}/valuationsopendataReturns employer reviews and an averageSalary figure for the company-profile evaluaciones tab.
Auth: Optional Bearer accessToken. Empresa: evaluaciones tab.
- companyId
- companyName
- valuationAverage
- totalValuations
- averageSalary
- generalValuation
- ratingCEO
- ratingEnvironment
- ratingRecommend
- valuationId
- rating
- ratingSalary
- body
- valuationDate
GET /v1/empresas/c-9001/valuations HTTP/1.1 Authorization: Bearer <accessToken> X-Portal-Id: es Accept: application/json{ "companyId": "c-9001", "companyName": "Example Corp SA", "valuationAverage": 4.2, "totalValuations": 86, "averageSalary": 34500, "generalValuation": 4.1, "ratingCEO": 4.0, "ratingEnvironment": 4.3, "ratingRecommend": 4.2, "valuations": [{ "valuationId": "val-44", "rating": 4, "ratingSalary": 4, "body": "Buen ambiente y salario acorde.", "valuationDate": "2026-08-12T10:00:00Z" }] }
Data categories
- job ads
- applications
- CVs
- recruiter views
- alerts
- messages
- company reviews
- followed companies
- auth-sessions
Where teams use this data
Spanish-language vacancy feed into an ATS
A recruiting back office pages vacancy search by query, cityId, contractTypeId and salaryRangeId, then hydrates each jobOfferId with jobTitle, companyName, salaryMin/salaryMax, HasKillerQuestions and publicationDate so an ATS can keep Computrabajo listings in the same pipeline as InfoJobs or OCC.
Postulaciones pipeline by applicationStatusId
HR ops pull the signed-in applications list for a candidateId and group rows by applicationStatusId, applicationDate and applicationNumber, reconciling each oferta the seeker already applied to without scraping Mis postulaciones.
CV completeness before apply
A career coach reads the curriculum for curriculumId, jobExperienceId, skills, formations, languages, resumeVisibility and employabilityIndex, then flags missing cover letters from the cover-letter list before the seeker hits apply.
Recruiter-view signal for outbound follow-up
Outbound tools watch recruiter-view rows for companyId, companyName, totalViews and totalProfileVisits so a candidate can follow up with employers who opened the CV, using the same Empresas que han visto tu CV list the app shows.
Frequently asked questions
How does Computrabajo authenticate API calls?
The app uses OpenID Connect. Sign-in exchanges an authorization code at POST /oauth/token for access_token, refresh_token and id_token. Later REST calls send Authorization: Bearer plus X-Portal-Id, X-XSRF-TOKEN and X-Version-Id. Scope is openid plus offline_access for the mobile client. These are first-party endpoints after sign-in, not a public developer API.
Which endpoints expose job ads and applications?
Vacancy search is GET /v1/ofertas/search (query, cityId, contractTypeId, salaryRangeId). Detail is GET /v1/ofertas/{jobOfferId}. Recommended and related feeds are GET /v1/ofertas/recommended and GET /v1/ofertas/{offerId}/related. Apply is POST /v1/candidacies/{candidateId}/apply; the postulaciones list is GET /v1/me/postulaciones.
What CV and recruiter-view fields are returned?
GET /v1/me/curriculum returns curriculumId, firstName, lastName, email, jobExperienceId, skills, formations, languages, resumeVisibility and employabilityIndex. GET /v1/me/cv-views pages companies that opened the CV with companyId, companyName and totalViews. Cover letters live at GET /v1/me/cartas.
Which country portals does the API distinguish?
Each call carries X-Portal-Id for the active country site (es, mx, ar, cl and other Spanish-language portals). GET /v1/portals/current returns portalId, portalName, PortalCode, PortalCurrency, CountryIsoCode and locale for that site. Search, apply and CV calls are all scoped to the signed-in portal.
Apps similar to Computrabajo Ofertas de Empleo
- InfoJobs - Job Search — InfoJobs is Adevinta's Spanish job board: offer search by province and telework, curriculum apply and application tracking.
- OCC: Job Search — OCCMundial is Mexico's classifieds job board: vacancy search, CV, apply and recruiter-view screens.
- Bumeran — Bumeran is Jobint's classifieds job board for Spanish-speaking Latin America, with Argentina as the home market.
- Vagas de Emprego: Catho — Catho is a Brazilian vacancy board with curriculum, ranking scores and recruiter inbox threads.
- Indeed Job Search — Indeed is a global job-search app: keyword search, apply, application status and recruiter messages.
- LinkedIn: Community & Network — LinkedIn is the professional network overlapping Computrabajo's candidate profile and recruiter inbox.
Topics
- Computrabajo API
- Computrabajo ofertas search
- Computrabajo curriculum
- Computrabajo postulaciones
- Computrabajo recruiter views
- DGNET job board API
- Spanish job board OpenID
- ofertas de empleo API
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