Rabota.ru: Job search app icon

Rabota.ru Data API: vacancies, resumes and applications

Работа.ру — поиск работы · Jobs & Careers

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

  • Rabota.ru: Job search app screenshot 1
  • Rabota.ru: Job search app screenshot 2
  • Rabota.ru: Job search app screenshot 3
  • Rabota.ru: Job search app screenshot 4
  • Rabota.ru: Job search app screenshot 5

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/password osint

    Authenticates 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/code osint

    Completes 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/profile osint

    Returns 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
    • email
    • 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/query opendata

    Returns 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/cards opendata

    Hydrates 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/create opendata

    Submits 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/applications opendata

    Pages 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/cv osint

    Returns 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
    • email
    • 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/viewers osint

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

    Returns 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/saved opendata

    Pages 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/alerts opendata

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

    Pages 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/salary opendata

    Returns 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

Get a quote