Rabota.ru Data API: vacancies, resumes and applications
Rabota.ru: Job search app is the official job-seeker app of Rabota.ru (Работа.ру), one of Russia's established online job boards. Candidates sign in with an email or phone number plus a password, or with a one-time code sent by SMS or email, then search vacancies by keyword and region with a minimum-salary filter and toggles to exclude relocation or show only listings with a phone contact, with a row of similar vacancies under the results. Vacancy pages show the salary range in rubles, the employer with a verified-company badge, workplace addresses, required skills, experience level and work schedule, and many vacancies accept a one-tap express resume. The My resumes section lets candidates build and publish resumes, follow counters of views, responses and matching vacancies, and see which companies opened each resume; the Responses tab tracks the status of every application and opens a chat thread with the recruiter. Favourites keeps saved vacancies, Alerts stores saved searches with optional email delivery of new matches, and a salary-insights screen shows what a profession pays across the board's listings. The app serves job seekers in Russia, where Rabota.ru competes with the larger boards hh.ru and SuperJob as well as Avito's jobs section, Zarplata.ru, the IT-focused Habr Career and the state-run Работа в России portal.
Region-filtered vacancy cards are the core records: each carries a title, a salary fork in from/to with its currencySign, an employer company object flagged isVerified or isInBlacklist, workplace places with a street address, a publish_start_at timestamp and an is_promoted marker, while every search returns total and relevant counts, facets and a similarVacancies list. Opened by id, a card adds the full description, skills, experience, operating_schedule and an is_allow_express_resume flag.
Resumes hold full_name, position, a desired salary, skills, experiences, educations and an is_published/visibility state; per-resume counters track views, viewsNew, responses and matching vacancies, and the viewer log records each employer visit by viewDate, isNew and company name and URL. Application rows carry status, hasNew, isAutoresponse and sentBy with createdAt/lastModifiedAt times, and each one threads recruiter messages with authorName, text, isEmployerMessage and sentAt. Saved vacancies add a responded_recently flag, alert subscriptions expose searchParams, newVacanciesQuantity and isReceiveEmails, the applicant profile adds region, confirmed phones, has_resume and is_available_autoresponse, and profession salary buckets pair a salary level with its vacancyCount.
Labour-market analysts can run a regional vacancy census of titles, pay forks and employers without scraping search pages; job-seeker tools can build a secondary inbox that surfaces only applications with new employer messages; career coaches can chart which companies opened a published resume on a resume-visibility dashboard; and offer-comparison tools can check a salary against the board's own per-profession distribution. openData Studio turns these Rabota.ru vacancy, resume, application and salary records into callable open data for exactly those integrations.
Screenshots
API surface
The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.
Password login and mint X-Token
POST
/v1/auth/passwordosintAuthenticates email or phone plus password (with recaptchaResponse) and returns the session token that every later signed-in call carries as X-Token, plus tokenV3 accessToken, expiresIn and signature.
Auth: Unauthenticated. Response token is sent as the X-Token header on later signed-in calls.
- login
- password
- recaptchaResponse
- success
- token
- tokenV3
- accessToken
- expiresIn
- signature
POST /v1/auth/password HTTP/1.1 Content-Type: application/json Accept: application/json { "login": "[email protected]", "password": "********", "recaptchaResponse": "03AGdBq25..." }{ "success": true, "token": "xt_7f3a9c2e1b", "tokenV3": { "accessToken": "at_9c1d4e77", "expiresIn": 2592000, "signature": "sig_b41e02" } }One-time-code login
POST
/v1/auth/codeosintCompletes the SMS or email access-code sign-in and mints the same X-Token session as password login.
Auth: Unauthenticated. login plus accessCode from the SMS/email code flow. Returns the same token / tokenV3 pair as password login.
- login
- accessCode
- success
- token
- tokenV3
- accessToken
- expiresIn
- signature
POST /v1/auth/code HTTP/1.1 Content-Type: application/json Accept: application/json { "login": "+79991234567", "accessCode": "482913" }{ "success": true, "token": "xt_8a21c0", "tokenV3": { "accessToken": "at_c0ffee", "expiresIn": 2592000, "signature": "sig_91ab" } }Fetch signed-in profile
POST
/v1/account/profileosintReturns the signed-in applicant profile (id, first_name, last_name, email, phones, has_resume, status, photo) used by the Me tab and resume editor.
Auth: X-Token header from password or one-time-code login.
- id
- first_name
- middle_name
- last_name
- value
- confirmed
- phones
- numberInternational
- extension
- isAccepted
- isMain
- isConfirmed
- has_resume
- status
- photo
- region
- birth_at
- is_available_autoresponse
- fields
POST /v1/account/profile HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "fields": ["id", "first_name", "last_name", "email", "phones", "has_resume", "status", "photo"] }{ "id": 4412001, "first_name": "Ivan", "middle_name": "Sergeevich", "last_name": "Petrov", "email": {"value": "[email protected]", "confirmed": true}, "phones": [{ "numberInternational": "+79991234567", "extension": null, "isAccepted": true, "isMain": true, "isConfirmed": true }], "has_resume": true, "status": {"id": "active"}, "photo": {"url": "https://cdn.example.org/photo/4412001.jpg"}, "region": {"id": 1, "name": "Москва"}, "birth_at": "1992-04-12", "is_available_autoresponse": true }Search vacancies with similar results
POST
/v1/jobs/queryopendataReturns a paged vacancy listing plus similarVacancies and facets for the search-results screen (title, salary.from/to/currencySign, company, places).
Auth: Optional X-Token. Signed-in calls populate is_favourite and response on each vacancy card.
- query
- location
- regionId
- filters
- salary
- disallowRelocation
- hasPhone
- offset
- limit
- fields
- total
- relevant
- vacancies
- similarVacancies
- facets
- id
- title
- from
- to
- currencySign
- short_description
- is_promoted
- is_favourite
- company
- name
- isVerified
- isInBlacklist
- isSbbol
- places
- address
- places_summary
- publish_start_at
- status
- contact_person
POST /v1/jobs/query HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "query": "product manager", "location": {"type": "region", "name": "Москва", "regionId": 1}, "filters": {"salary": 180000, "disallowRelocation": true, "hasPhone": true}, "offset": 0, "limit": 20, "fields": [ "vacancies.id", "vacancies.title", "vacancies.salary", "vacancies.short_description", "vacancies.is_promoted", "vacancies.is_favourite", "vacancies.company", "vacancies.places", "vacancies.response", "vacancies.places_summary", "facets", "vacancies.publish_start_at", "vacancies.status", "vacancies.contact_person" ] } }{ "response": { "total": 1284, "relevant": 412, "vacancies": [{ "id": 55102113, "title": "Product Manager", "salary": {"from": 180000, "to": 250000, "currencySign": "₽"}, "short_description": "Own the candidate experience squad.", "is_promoted": true, "is_favourite": false, "company": {"id": 1337, "name": "Example Corp", "type": "direct", "isVerified": true, "isInBlacklist": false, "isSbbol": false}, "places": [{"id": 1, "name": "Москва", "address": "Тверская 1"}], "places_summary": "Москва", "publish_start_at": "2026-09-20T10:15:00+03:00", "status": "published", "contact_person": {"name": "Anna Petrova"} }], "similarVacancies": [], "facets": {} } }Fetch vacancy cards by id
POST
/v1/jobs/cardsopendataHydrates vacancy-detail cards by vacancyIds (description, salary, company, places, skills, experience) for the vacancy screen and deep links.
Auth: Optional X-Token. Signed-in extras include is_favourite and response.
- vacancyIds
- regionId
- fields
- vacancies
- id
- title
- description
- salary
- from
- to
- currencySign
- company
- places
- skills
- experience
- is_allow_express_resume
- operating_schedule
- work_schedule_id
- publish_start_at
POST /v1/jobs/cards HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "vacancyIds": [55102113, 55102114], "regionId": 1, "fields": ["id", "title", "salary", "description", "company", "places", "skills", "experience"] } }{ "response": { "vacancies": [{ "id": 55102113, "title": "Product Manager", "description": "Lead the candidate experience squad.", "salary": {"from": 180000, "to": 250000, "currencySign": "₽"}, "company": {"id": 1337, "name": "Example Corp", "isVerified": true}, "places": [{"id": 1, "name": "Москва", "address": "Тверская 1"}], "skills": ["SQL", "product management"], "experience": {"id": 3}, "is_allow_express_resume": true, "operating_schedule": {"id": "fullDay"}, "work_schedule_id": 1, "publish_start_at": "2026-09-20T10:15:00+03:00" }] } }Apply to a vacancy
POST
/v1/applications/createopendataSubmits an application from a chosen resume to a vacancy and returns responseId when isSucceed is true.
Auth: X-Token required.
- vacancyId
- resumeId
- needCreateResponse
- responseId
- isSucceed
POST /v1/applications/create HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "vacancyId": 55102113, "resumeId": 88012, "needCreateResponse": true } }{ "response": { "responseId": 901334, "resumeId": 88012, "isSucceed": true } }List applications
POST
/v1/applicationsopendataPages the signed-in applicant's applications (id, createdAt, vacancy, status, hasNew, isAutoresponse, resume) for the Responses tab.
Auth: X-Token required.
- offset
- limit
- total
- rows
- id
- createdAt
- lastModifiedAt
- status
- hasNew
- isAutoresponse
- sentBy
- vacancy
- resume
- full_name
POST /v1/applications HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "offset": 0, "limit": 20 } }{ "response": { "total": 14, "rows": [{ "id": 901334, "createdAt": "2026-09-21T08:30:00+03:00", "lastModifiedAt": "2026-09-22T11:00:00+03:00", "status": "in_progress", "hasNew": true, "isAutoresponse": false, "sentBy": "applicant", "vacancy": {"id": 55102113, "title": "Product Manager"}, "resume": {"id": 88012, "full_name": "Ivan Petrov"} }] } }List my resumes
POST
/v1/cvosintReturns the signed-in applicant's resumes (full_name, position, salary, is_published, skills, experiences) used by My resumes and the apply picker.
Auth: X-Token required.
- resumes
- id
- full_name
- first_name
- last_name
- middle_name
- position
- phone
- salary
- is_published
- published_at
- visibility
- skills
- experiences
- educations
- region
POST /v1/cv HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": {} }{ "response": { "resumes": [{ "id": 88012, "full_name": "Ivan Petrov", "first_name": "Ivan", "last_name": "Petrov", "middle_name": "Sergeevich", "position": "Product Manager", "phone": "+79991234567", "email": "[email protected]", "salary": {"from": 220000, "currencySign": "₽"}, "is_published": true, "published_at": "2026-09-01T12:00:00+03:00", "visibility": "everyone", "skills": ["SQL", "product management"], "experiences": [{"company": "Example Corp", "position": "Product Manager"}], "educations": [{"organization": "MGU"}], "region": {"id": 1, "name": "Москва"} }] } }List resume views by employers
POST
/v1/cv/viewersosintLists employers who opened a resume (viewDate, isNew, company.id/name/url) for the resume-views screen.
Auth: X-Token required.
- resumeId
- offset
- limit
- total
- views
- viewDate
- isNew
- company
- id
- name
- url
- offerBranches
POST /v1/cv/viewers HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "resumeId": 88012, "offset": 0, "limit": 20 } }{ "response": { "total": 128, "views": [{ "viewDate": "2026-09-22T09:14:00+03:00", "isNew": true, "company": { "id": 1337, "name": "Example Corp", "url": "https://example.org/company/1337", "offerBranches": [] } }] } }Resume statistics
POST
/v1/cv/statsopendataReturns per-resume counters (views, viewsNew, responses, responsesNew, vacancies, vacanciesNew) shown on the My resumes dashboard.
Auth: X-Token required.
- statistics
- id
- views
- viewsNew
- responses
- responsesNew
- vacancies
- vacanciesNew
- query
- location
POST /v1/cv/stats HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": {} }{ "response": { "statistics": [{ "id": 88012, "views": 128, "viewsNew": 7, "responses": 14, "responsesNew": 2, "vacancies": 42, "vacanciesNew": 5, "query": "product manager", "location": {"type": "region", "name": "Москва", "regionId": 1} }] } }List favourite vacancies
POST
/v1/jobs/savedopendataPages saved vacancies for the Favourites tab (title, salary, company, is_favourite, responded_recently).
Auth: X-Token required.
- fields
- sort
- offset
- limit
- vacancies
- id
- title
- is_favourite
- salary
- company
- short_description
- publish_start_at
- responded_recently
- is_allow_express_resume
POST /v1/jobs/saved HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "fields": ["id", "places", "is_favourite", "title", "salary", "is_promoted", "company", "short_description", "response", "places_summary", "contact_person", "status", "publish_start_at", "responded_recently", "is_allow_express_resume"], "sort": "add_to_fav", "offset": 0, "limit": 20 } }{ "response": { "vacancies": [{ "id": 55102113, "title": "Product Manager", "is_favourite": true, "salary": {"from": 180000, "to": 250000, "currencySign": "₽"}, "company": {"id": 1337, "name": "Example Corp"}, "short_description": "Own the candidate experience squad.", "publish_start_at": "2026-09-20T10:15:00+03:00", "responded_recently": false }] } }List vacancy-alert subscriptions
POST
/v1/alertsopendataLists saved vacancy-alert subscriptions (id, isReceiveEmails, searchParams, newVacanciesQuantity) for the Alerts screen.
Auth: X-Token required.
- total
- subscriptions
- id
- isReceiveEmails
- newVacanciesQuantity
- searchParams
- query
- location
POST /v1/alerts HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": {} }{ "response": { "total": 3, "subscriptions": [{ "id": 77401, "isReceiveEmails": true, "newVacanciesQuantity": 12, "searchParams": { "query": "product manager", "location": {"type": "region", "name": "Москва", "regionId": 1} } }] } }Application recruiter chat
POST
/v1/messagesopendataPages recruiter/applicant messages for an application (authorName, text, isEmployerMessage, sentAt). Companion POST /v1/messages/send accepts responseId and text.
Auth: X-Token required.
- responseId
- limit
- offset
- messages
- id
- authorId
- sentAt
- authorName
- authorSurname
- text
- isEmployerMessage
- isNewMessage
- updatedAt
POST /v1/messages HTTP/1.1 X-Token: xt_7f3a9c2e1b Content-Type: application/json Accept: application/json { "request": { "responseId": 901334, "limit": 50, "offset": 0 } }{ "response": { "messages": [{ "id": 4401, "authorId": 1337, "sentAt": "2026-09-22T11:04:00+03:00", "authorName": "Anna", "authorSurname": "Petrova", "text": "When can you start?", "isEmployerMessage": true, "isNewMessage": true, "updatedAt": "2026-09-22T11:04:00+03:00" }] } }Profession salary aggregates
POST
/v1/insights/salaryopendataReturns profession salary buckets (salary, vacancyCount) plus name and slug for the career / salary-insights screen tied to a vacancy.
Auth: Optional X-Token.
- vacancyId
- id
- name
- slug
- specialization
- salaries
- salary
- vacancyCount
POST /v1/insights/salary HTTP/1.1 Content-Type: application/json Accept: application/json { "request": { "vacancyId": 55102113 } }{ "response": { "id": 73, "name": "Менеджер продукта", "slug": "product-manager", "specialization": {"id": 12, "name": "IT"}, "salaries": { "salaries": [ {"salary": 150000, "vacancyCount": 80}, {"salary": 220000, "vacancyCount": 40} ] } } }
Data categories
- session tokens
- applicant profiles
- vacancy listings
- employer cards
- applications
- resumes
- resume views
- saved vacancies
- vacancy alerts
- recruiter chat
- salary aggregates
Where teams use this data
Regional vacancy census
POST /v1/jobs/query with location.regionId and filters.salary to pull title, salary.from/to/currencySign, company.name and places, then hydrate full descriptions via /v1/jobs/cards — a labour-market overlay without scraping search HTML.
Application pipeline overlay
Poll /v1/applications for status, hasNew and isAutoresponse, then page /v1/messages (authorName, text, isEmployerMessage, sentAt) so a secondary inbox can surface only threads with new employer messages.
Resume visibility dashboard
Combine /v1/cv/stats (views, viewsNew, responses, vacancies) with /v1/cv/viewers (viewDate, isNew, company.name/url) to chart which employers opened a published resume.
Salary-band lookup
Call /v1/insights/salary with vacancyId to read profession name, slug and salaries[].salary/vacancyCount and compare an offer against the board's own distribution.
Frequently asked questions
How does the Rabota.ru Android app authenticate API calls?
Unauthenticated POST /v1/auth/password (login, password, recaptchaResponse) or /v1/auth/code (login, accessCode) returns token plus tokenV3.accessToken, expiresIn and signature. Every later signed-in call sends that token as the X-Token header.
Which endpoints power vacancy search?
POST /v1/jobs/query accepts query, location.regionId, filters.salary and a fields list, and returns total, relevant, vacancies[], similarVacancies[] and facets. Vacancy-detail cards are hydrated by POST /v1/jobs/cards with vacancyIds.
Where do resumes and applications live?
POST /v1/cv lists resumes (full_name, position, is_published). Apply with POST /v1/applications/create (vacancyId, resumeId). The Responses tab pages /v1/applications; recruiter chat is /v1/messages.
How are request bodies shaped?
The Android client posts JSON, with most v1 job/resume/application calls wrapping the payload as {request: ...}. Companion older web flows exist separately from this native surface.
Apps similar to Rabota.ru: Job search app
- hh: поиск работы — HeadHunter (hh.ru) is a Russian internet-recruitment site for vacancies and resumes, and The Moscow Times names it as a larger competitor to Rabota.ru.
- SuperJob — SuperJob is a Russian employment website that The Moscow Times lists with HeadHunter as a larger online-recruitment competitor to Rabota.ru.
- Avito — Avito is a Russian classifieds site with a dedicated jobs section, and VC.ru includes Avito Work among the main Russian hiring boards.
- Zarplata.ru — Zarplata.ru is a Russian job board for vacancy search in Moscow and other cities, listed among the country's employment sites on Workello.
- Habr Career — Habr Career is a Russian IT jobs platform for vacancies, resumes, courses and salary data, tagged on its site as helping people find work in IT.
- Работа в России — Работа в России (Rabota Rossii) appears on VC.ru's roundup of Russian sites for finding staff, alongside hh.ru, SuperJob, Avito Work and Rabota.ru.
Topics
- rabota.ru api
- rabota.ru android data api
- X-Token
- vacancy search
- resume views
- recruiter chat
- salary aggregates
- rabota.ru vacancy search
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