hh: поиск работы icon

hh: поиск работы Data API

HeadHunter · Jobs & Careers

hh: поиск работы is the official Android app of HeadHunter (hh.ru), the Moscow-based company that has run one of Russia's leading online recruitment platforms since 2000. Job seekers search vacancies by role, salary, region, required experience and work format — remote, hybrid or on-site — and can browse openings nearby or similar to ones they have viewed, with badges marking trusted employers and IT companies holding Russian state IT accreditation. The vacancy screen shows the full description, required key skills, salary range, schedule and working hours, professional role and office address, plus a contacts sheet that reveals the recruiter's phone when the employer chooses to show it; vacancy links shared from the HeadHunter website open straight into that screen. In My resumes, candidates build, edit and refresh their CVs, then apply to openings — some require a cover letter, others accept incomplete resumes — and follow each application in the responses tab, where they can chat with the hiring manager and see whether the employer has read it. A resume-views screen lists which companies opened a CV and when. Aimed at the Russian job market, it competes with Rabota.ru, SuperJob, Zarplata.ru, Avito's jobs section and the state-run Trudvsem portal as the mobile front end of HeadHunter's vacancy base.

Vacancy salary ranges anchor the hiring records: each listing returns salary_range with from, to, currency, a gross flag and pay frequency, alongside area, work_format, employment_form, required experience and an employer block flagged trusted or accredited_it_employer with its count of open_vacancies. The full vacancy card adds key_skills, professional_roles, schedule, working_hours, address and responses_count, and a contacts record splits the recruiter phone into country, city and number with a virtual_phone_state.

On the candidate side, a resume carries title, salary, skill_set, education, experience and professional_roles, plus total_views and new_views counters and a next_publish_at time for when it can next be refreshed; a views list records which employer opened it and when (created_at). Every application thread logs its state, read and viewed_by_opponent flags, messaging_status and chat_id, together with the employer's employer_responses_read_percent and manager_inactive_minutes.

That feeds comp-benchmarking pipelines that roll salary range, area, employer accreditation and work format up into pay-band maps per role and region; ATS integrations that mirror application state, read status and chat ids so recruiters work one pipeline instead of two inboxes; and job-seeker tools that line up resume views against edits to show which version actually gets attention. openData Studio makes HeadHunter's vacancy, resume and application records callable open data.

Screenshots

  • hh: поиск работы screenshot 1
  • hh: поиск работы screenshot 2
  • hh: поиск работы screenshot 3
  • hh: поиск работы screenshot 4
  • hh: поиск работы screenshot 5
  • hh: поиск работы screenshot 6
  • hh: поиск работы screenshot 7

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Search vacancies

    GET /v1/openings/search opendata

    Returns a paginated vacancy listing (title, salary_range, area, employer, work_format) used by the search-results screen, including nearby and similar-vacancy variants.

    Auth: Optional OAuth2 Bearer access token from the app's sign-in flow. Signed requests also send a generated User-Agent ({package}/{version}, Device, Android OS, UUID).

    • items
    • id
    • name
    • published_at
    • created_at
    • archived
    • alternate_url
    • url
    • salary_range
    • from
    • to
    • currency
    • gross
    • mode
    • frequency
    • area
    • employer
    • trusted
    • open_vacancies
    • accredited_it_employer
    • logo_urls
    • experience
    • employment_form
    • work_format
    • show_contacts
    • response_letter_required
    • found
    • page
    • pages
    • per_page
    GET /v1/openings/search?text=product+manager&area=1&page=0&per_page=20 HTTP/1.1
    User-Agent: <package>/<version>, Device: <device>, Android OS: <os> (UUID: <uuid>)
    Authorization: Bearer <access_token>
    {
      "items": [
        {
          "id": "123456789",
          "name": "Product Manager",
          "published_at": "2026-09-20T10:15:00+0300",
          "created_at": "2026-09-18T09:00:00+0300",
          "archived": false,
          "alternate_url": "https://example.org/vacancy/123456789",
          "url": "https://example.org/api/jobs/123456789",
          "salary_range": {"from": 180000, "to": 250000, "currency": "RUR", "gross": true, "mode": "MONTH", "frequency": "MONTH"},
          "area": {"id": "1", "name": "Москва", "url": "https://example.org/api/areas/1"},
          "employer": {"id": "1337", "name": "Example Corp", "alternate_url": "https://example.org/employer/1337", "trusted": true, "open_vacancies": 42, "accredited_it_employer": true, "logo_urls": {"90": "https://cdn.example.org/logo90.png", "240": "https://cdn.example.org/logo240.png", "original": "https://cdn.example.org/logo.png"}},
          "experience": {"id": "between3And6", "name": "От 3 до 6 лет"},
          "employment_form": {"id": "FULL", "name": "Полная занятость"},
          "work_format": [{"id": "HYBRID", "name": "Гибрид"}],
          "show_contacts": true,
          "response_letter_required": false,
          "accept_incomplete_resumes": true,
          "has_test": false
        }
      ],
      "found": 1284,
      "page": 0,
      "pages": 65,
      "per_page": 20,
      "alternate_url": "https://example.org/search/vacancy?text=product+manager&area=1"
    }
  • Fetch vacancy detail

    GET /v1/openings/{job_id} opendata

    Hydrates the vacancy card (description, key_skills, salary_range, employer, contacts, professional_roles) for the vacancy-detail screen and job deep links.

    Auth: Bearer access_token for signed-in extras (relations, show_contacts, chat flags). User-Agent as above.

    • id
    • name
    • description
    • key_skills
    • published_at
    • created_at
    • archived
    • alternate_url
    • apply_alternate_url
    • negotiations_url
    • salary_range
    • area
    • address
    • employer
    • experience
    • employment_form
    • work_format
    • schedule
    • working_hours
    • work_schedule_by_days
    • professional_roles
    • response_letter_required
    • accept_incomplete_resumes
    • show_contacts
    • contacts
    • email
    • phones
    • formatted
    • responses_count
    • allow_chat_with_manager
    • relations
    GET /v1/openings/123456789 HTTP/1.1
    User-Agent: <package>/<version>, Device: <device>, Android OS: <os> (UUID: <uuid>)
    Authorization: Bearer <access_token>
    {
      "id": "123456789",
      "name": "Product Manager",
      "description": "<p>Lead the candidate experience squad.</p>",
      "key_skills": [{"name": "product management"}, {"name": "SQL"}],
      "published_at": "2026-09-20T10:15:00+0300",
      "created_at": "2026-09-18T09:00:00+0300",
      "archived": false,
      "alternate_url": "https://example.org/vacancy/123456789",
      "apply_alternate_url": "https://example.org/applicant/vacancy_response?vacancyId=123456789",
      "negotiations_url": "https://example.org/api/applications?vacancy_id=123456789",
      "salary_range": {"from": 180000, "to": 250000, "currency": "RUR", "gross": true},
      "area": {"id": "1", "name": "Москва"},
      "address": {"city": "Москва", "street": "Тверская", "building": "1", "lat": 55.76, "lng": 37.61},
      "employer": {"id": "1337", "name": "Example Corp", "trusted": true, "accredited_it_employer": true},
      "experience": {"id": "between3And6", "name": "От 3 до 6 лет"},
      "employment_form": {"id": "FULL", "name": "Полная занятость"},
      "work_format": [{"id": "HYBRID", "name": "Гибрид"}],
      "schedule": {"id": "fullDay", "name": "Полный день"},
      "working_hours": [{"id": "HOURS_8", "name": "8 часов"}],
      "work_schedule_by_days": [{"id": "FIVE_ON_TWO_OFF", "name": "5/2"}],
      "professional_roles": [{"id": "73", "name": "Менеджер продукта"}],
      "response_letter_required": false,
      "accept_incomplete_resumes": true,
      "accept_temporary": false,
      "internship": false,
      "show_contacts": true,
      "contacts": {"name": "Anna Petrova", "email": "[email protected]", "call_tracking_enabled": true, "phones": [{"country": "7", "city": "495", "number": "1234567", "formatted": "+7 (495) 123-45-67"}]},
      "responses_count": 42,
      "allow_chat_with_manager": true,
      "relations": ["got_response"]
    }
  • Fetch applicant resume

    GET /v1/cv/{cv_id} osint

    Returns the signed-in applicant's full resume (name, birth_date, contact, education, experience, salary, views) used by My resumes and the resume editor.

    Auth: Bearer access_token required. The native resume screen asks for professional roles and credential extras via query flags.

    • id
    • last_name
    • first_name
    • middle_name
    • title
    • created_at
    • updated_at
    • birth_date
    • age
    • gender
    • area
    • salary
    • contact
    • education
    • experience
    • skill_set
    • skills
    • professional_roles
    • status
    • access
    • total_views
    • new_views
    • views_url
    • alternate_url
    • can_publish_or_update
    • next_publish_at
    • progress
    • creds
    GET /v1/cv/abc12defghijklmnopqrstuvwx?include=roles,credentials HTTP/1.1
    User-Agent: <package>/<version>, Device: <device>, Android OS: <os> (UUID: <uuid>)
    Authorization: Bearer <access_token>
    {
      "id": "abc12defghijklmnopqrstuvwx",
      "last_name": "Ivanov",
      "first_name": "Ivan",
      "middle_name": "Ivanovich",
      "title": "Product Manager",
      "created_at": "2024-03-01T12:00:00+0300",
      "updated_at": "2026-09-21T08:30:00+0300",
      "birth_date": "1992-04-12",
      "age": 34,
      "gender": {"id": "male", "name": "Мужской"},
      "area": {"id": "1", "name": "Москва"},
      "salary": {"amount": 220000, "currency": "RUR"},
      "contact": [{"kind": "email", "value": "[email protected]", "preferred": true}, {"kind": "cell", "value": {"formatted": "+7 999 123-45-67"}}],
      "education": {"level": {"id": "higher", "name": "Высшее"}, "primary": [{"organization": "MGU", "name": "Economics", "year": 2014}]},
      "experience": [{"company": "Example Corp", "position": "Product Manager", "start": "2020-01-01", "end": null}],
      "skill_set": ["SQL", "product management"],
      "skills": "Led marketplace growth.",
      "professional_roles": [{"id": "73", "name": "Менеджер продукта"}],
      "status": {"id": "published", "name": "Опубликовано"},
      "access": {"type": {"id": "clients", "name": "Видно всем компаниям"}},
      "total_views": 128,
      "new_views": 7,
      "views_url": "https://example.org/api/cv/abc12defghijklmnopqrstuvwx/viewers",
      "alternate_url": "https://example.org/resume/abc12defghijklmnopqrstuvwx",
      "can_publish_or_update": true,
      "next_publish_at": "2026-09-24T08:30:00+0300",
      "progress": {"percentage": 92},
      "creds": {"email": "[email protected]"}
    }
  • List negotiations (applications)

    GET /v1/applications osint

    Lists the applicant's vacancy responses (state, viewed_by_opponent, linked vacancy/resume, chat_id) for the responses / applications tab.

    Auth: Bearer access_token required. User-Agent as above.

    • items
    • id
    • state
    • hidden
    • read
    • created_at
    • updated_at
    • url
    • has_updates
    • viewed_by_opponent
    • messaging_status
    • decline_allowed
    • vacancy
    • resume
    • chat_id
    • employer_responses_read_percent
    • manager_inactive_minutes
    • source
    • employer_violates_rules
    • tags
    • found
    • page
    • pages
    • per_page
    GET /v1/applications?page=0&per_page=20 HTTP/1.1
    User-Agent: <package>/<version>, Device: <device>, Android OS: <os> (UUID: <uuid>)
    Authorization: Bearer <access_token>
    {
      "items": [
        {
          "id": "987654321",
          "state": {"id": "response", "name": "Отклик"},
          "hidden": false,
          "read": true,
          "created_at": "2026-09-19T11:00:00+0300",
          "updated_at": "2026-09-21T09:15:00+0300",
          "url": "https://example.org/api/applications/987654321",
          "has_updates": true,
          "viewed_by_opponent": true,
          "messaging_status": "has_new",
          "decline_allowed": true,
          "vacancy": {"id": "123456789", "name": "Product Manager", "alternate_url": "https://example.org/vacancy/123456789"},
          "resume": {"id": "abc12defghijklmnopqrstuvwx", "title": "Product Manager"},
          "chat_id": "c-555",
          "employer_responses_read_percent": 80,
          "manager_inactive_minutes": 120,
          "source": "search",
          "employer_violates_rules": false,
          "tags": []
        }
      ],
      "found": 12,
      "page": 0,
      "pages": 1,
      "per_page": 20
    }
  • List resume views

    GET /v1/cv/{cv_id}/viewers osint

    Returns who viewed the applicant's resume (employer id/name/logo, created_at, viewed flag) for the resume-views screen.

    Auth: Bearer access_token required. User-Agent as above.

    • items
    • created_at
    • viewed
    • employer
    • id
    • name
    • url
    • alternate_url
    • vacancies_url
    • logo_urls
    • resume
    • title
    • found
    • page
    • pages
    • per_page
    GET /v1/cv/abc12defghijklmnopqrstuvwx/viewers?page=0&per_page=20 HTTP/1.1
    User-Agent: <package>/<version>, Device: <device>, Android OS: <os> (UUID: <uuid>)
    Authorization: Bearer <access_token>
    {
      "items": [
        {
          "created_at": "2026-09-21T14:22:00+0300",
          "viewed": true,
          "employer": {
            "id": "1337",
            "name": "Example Corp",
            "url": "https://example.org/api/employers/1337",
            "alternate_url": "https://example.org/employer/1337",
            "vacancies_url": "https://example.org/api/jobs/search?employer_id=1337",
            "logo_urls": {"90": "https://cdn.example.org/logo90.png", "240": "https://cdn.example.org/logo240.png", "original": "https://cdn.example.org/logo.png"}
          }
        }
      ],
      "resume": {"id": "abc12defghijklmnopqrstuvwx", "title": "Product Manager", "url": "https://example.org/api/cv/abc12defghijklmnopqrstuvwx"},
      "found": 128,
      "page": 0,
      "pages": 7,
      "per_page": 20
    }
  • Fetch vacancy contact phones

    GET /v1/openings/{job_id}/phone osint

    Reveals the vacancy recruiter phone (country/city/number/formatted, virtual_phone_state) used by the vacancy-contacts sheet after show_contacts.

    Auth: Bearer access_token required. Shown after the applicant taps show contacts on the vacancy card.

    • comment
    • city
    • number
    • country
    • formatted
    • virtual_phone_state
    GET /v1/openings/123456789/phone HTTP/1.1
    User-Agent: <package>/<version>, Device: <device>, Android OS: <os> (UUID: <uuid>)
    Authorization: Bearer <access_token>
    {
      "comment": "HR desk, 10:00–18:00 MSK",
      "city": "495",
      "number": "1234567",
      "country": "7",
      "formatted": "+7 (495) 123-45-67",
      "virtual_phone_state": "enabled"
    }

Data categories

  • vacancies
  • resumes
  • applications
  • contacts
  • employers
  • profiles

Where teams use this data

  • Vacancy market analytics

    Comp-benchmarking pipelines aggregate vacancy search results — salary range, area, employer accreditation, work format — into pay-band maps per role and region.

  • Recruiter pipeline sync

    ATS integrations mirror the negotiations list — state, read/unread, viewed-by-opponent, chat id — so recruiters work one pipeline instead of two inboxes.

  • Resume performance tracking

    Job-seeker tools list which employers viewed a resume and when, correlating views with edits to show candidates which version actually gets attention.

Frequently asked questions

Which hh API calls power vacancy search?

The listing screen issues a paginated search request (text, area, page, per_page). Each hit carries id, name, salary_range (from/to/currency/gross), area, employer and published_at. Opening a card fetches the full vacancy detail with description, key_skills, contacts and professional_roles.

How does the app load an applicant resume?

A signed-in request for the applicant's CV returns last_name, first_name, birth_date, contact, education, experience, salary, skill_set, total_views and a views link. A separate mine-list variant enumerates the user's own resumes.

Where do applications and resume views come from?

The responses tab lists the applicant's applications with state, viewed_by_opponent, linked vacancy and resume, and a chat id. A separate resume-views feed returns employer id, name, logo and created_at, and recruiter phone numbers are revealed on demand from the vacancy card.

How is the hh API authenticated?

OAuth2 access tokens are minted during sign-in and attached as Authorization: Bearer, alongside a generated User-Agent naming the app version, device and Android OS build. Vacancy search and detail work anonymously; the resume, applications, resume-views and contact-phone calls all require the token.

Apps similar to hh: поиск работы

  • Rabota.ru — Rabota.ru is a Russian recruitment site acquired by Sberbank in 2019, listing vacancies with an emphasis on mid-level staff, students and internships.
  • SuperJob — SuperJob is a Russian job board operating since 2000 with vacancy search and a resume database, strong in sales, logistics, manufacturing and hospitality roles.
  • Zarplata.ru — Zarplata.ru is a Russian job board focused on local and regional listings, particularly in Siberia, the Far East and the Urals, covering hospitality, logistics and customer service roles.
  • Avito — Avito is a Russian classifieds platform whose jobs section is widely used for blue-collar, retail, construction and seasonal hiring.
  • Trudvsem — Trudvsem (Работа в России) is Russia's official government employment platform run by the Federal Labor Service, listing state-verified vacancies.
  • Habr Career — Habr Career, formerly known as Мой круг, is a Russian job platform specializing in IT and tech vacancies.
  • GorodRabot.ru — GorodRabot.ru is a Russian job aggregator that pulls listings from multiple sources across cities in Russia.
  • Indeed Job Search — Indeed is a global job-search engine whose presence in Russia has been limited since 2022, but it remains a common alternative for international job hunts.

Topics

  • hh api
  • headhunter vacancies api
  • hh resume endpoint
  • hh applications api
  • salary_range
  • first_name last_name
  • resume views employer
  • vacancy phone formatted

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