> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pubrio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Фильтры по людям + компаниям

> Комбинируйте фильтры уровня людей и уровня компаний в одном вызове /people/search — тот же движок фильтров, что и у /companies/search.

<Note>
  `POST /people/search` принимает каждый фильтр компании, который принимает `POST /companies/search`. Больше не нужно предварительно получать компании, собирать их ID и передавать во второй запрос по людям — один запрос выполняет оба уровня.
</Note>

## Два семейства параметров, одно тело

Тело запроса `/people/search` концептуально делится на два семейства фильтров. Они находятся на одном уровне в JSON, и вы свободно их смешиваете.

<Tabs>
  <Tab title="Уровень людей">
    Фильтрация по атрибутам *человека*:

    | Параметр               | Описание                                             |
    | ---------------------- | ---------------------------------------------------- |
    | `people_titles`        | Должности (свободный текст или slug)                 |
    | `management_levels`    | `founder`, `c_suite`, `vp`, `director`, `manager`, … |
    | `departments`          | `master_engineering`, `master_sales`, …              |
    | `department_functions` | Slug-и подотделов / функций                          |
    | `people_locations`     | Коды стран для местоположения человека               |
    | `people_groups`        | ID сохранённых групп                                 |
    | `peoples`              | Конкретные значения `people_search_id`               |
    | `linkedin_urls`        | URL профилей LinkedIn человека                       |
    | `social_media`         | Никнеймы в соцсетях по каждой сети                   |
  </Tab>

  <Tab title="Уровень компании">
    Фильтрация по атрибутам *компании*, в которой работает человек — те же имена, что и у `/companies/search`, с небольшим набором ключей локации с префиксом `company_`:

    | Параметр                    | Описание                                                              |
    | --------------------------- | --------------------------------------------------------------------- |
    | `technologies`              | Slug ID технологий, используемых компанией                            |
    | `categories`                | Slug ID категорий                                                     |
    | `verticals`                 | Slug ID вертикалей                                                    |
    | `vertical_categories`       | Slug ID категорий вертикалей                                          |
    | `vertical_sub_categories`   | Slug ID подкатегорий вертикалей                                       |
    | `keywords`                  | Ключевые слова свободного текста, сопоставляемые с описанием компании |
    | `founded_dates`             | Диапазон года основания, напр. `[2015, 2023]`                         |
    | `employees`                 | Диапазоны по числу сотрудников, напр. `[[100, 500], [501, 1000]]`     |
    | `revenues`                  | Диапазоны выручки в USD                                               |
    | `company_locations`         | Коды стран для штаб-квартиры компании                                 |
    | `company_exclude_locations` | Коды стран для исключения                                             |
    | `company_places`            | Названия городов/регионов для включения                               |
    | `company_exclude_places`    | Названия городов/регионов для исключения                              |
    | `companies`                 | Конкретные значения `domain_search_id`                                |
    | `domains`                   | Конкретные домены компаний                                            |
    | `company_linkedin_urls`     | URL LinkedIn компании                                                 |
  </Tab>
</Tabs>

<Note>
  Префикс `company_` существует только у фильтров локации/места, потому что голые имена `places` / `locations` уже используются для адреса *человека*. Всё остальное использует голое имя компании (`technologies`, а не `company_technologies`).
</Note>

***

## Постройте запрос за четыре шага

<Steps>
  <Step title="Определите предикат по людям">
    Кто именно? Должность, старшинство, отдел, страна. Держите этот слой на **верхнем уровне** тела запроса — предикат по компании обычно выполняет работу по точности.
  </Step>

  <Step title="Определите предикат по компаниям">
    В каких компаниях они должны работать? Отрасль, размер, год основания, страна штаб-квартиры, технологический стек. Группируйте их под объектом **`company_filters: {...}`**, чтобы было понятно, к какому слою относится каждый ключ.
  </Step>

  <Step title="Выберите AND/OR для каждого фильтра через filter_conditions">
    Для любого мультизначного фильтра, требующего точности (например, «использует *все* эти технологии»), добавьте запись в `filter_conditions` *внутри* `company_filters`. По умолчанию — OR.
  </Step>

  <Step title="Отправьте запрос">
    `POST /people/search`. Принимаются оба стиля, но `company_filters: {...}` читается яснее и соответствует форме payload'а [Monitors](/ru/developer-guides/introduction).
  </Step>
</Steps>

### Полный пример

Запрос: вице-президенты по инженерии или технические директора в компаниях среднего рынка в США, основанных между 2015 и 2023 годами, с числом сотрудников от 100 до 5 000, использующие *одновременно* Kubernetes и Docker, но исключая компании со штаб-квартирой в Сан-Франциско.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.pubrio.com/people/search \
    -H "Content-Type: application/json" \
    -H "pubrio-api-key: YOUR_API_KEY" \
    -d '{
      "people_titles": ["VP of Engineering", "CTO"],

      "company_filters": {
        "company_locations": ["US"],
        "company_exclude_places": ["San Francisco"],
        "founded_dates": [2010, 2024],
        "employees": [[100, 500], [501, 1000], [1001, 5000]],
        "technologies": ["Kubernetes", "Docker"],
        "is_enable_similarity_search": true
      },

      "per_page": 25,
      "page": 1
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://api.pubrio.com/people/search",
      headers={
          "Content-Type": "application/json",
          "pubrio-api-key": "YOUR_API_KEY",
      },
      json={
          "people_titles": ["VP of Engineering", "CTO"],

          "company_filters": {
              "company_locations": ["US"],
              "company_exclude_places": ["San Francisco"],
              "founded_dates": [2010, 2024],
              "employees": [[100, 500], [501, 1000], [1001, 5000]],
              "technologies": ["Kubernetes", "Docker"],
              "is_enable_similarity_search": True,
          },

          "per_page": 25,
          "page": 1,
      },
  )
  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const response = await fetch("https://api.pubrio.com/people/search", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "pubrio-api-key": "YOUR_API_KEY",
    },
    body: JSON.stringify({
      people_titles: ["VP of Engineering", "CTO"],

      company_filters: {
        company_locations: ["US"],
        company_exclude_places: ["San Francisco"],
        founded_dates: [2010, 2024],
        employees: [[100, 500], [501, 1000], [1001, 5000]],
        technologies: ["Kubernetes", "Docker"],
        is_enable_similarity_search: true,
      },

      per_page: 25,
      page: 1,
    }),
  });
  console.log(await response.json());
  ```
</CodeGroup>

***

## Справочник переименования ключей

Когда `/people/search` передаёт фильтры компании общему движку, ключи локации/места переименовываются в свои голые формы. Голые имена — это то, что действительно видит движок — и `filter_conditions[].key`:

| Вы отправляете (имя в people-API)                                                                                                                 | Движок видит (имя в company-API) |
| ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| `company_locations`                                                                                                                               | `locations`                      |
| `company_exclude_locations`                                                                                                                       | `exclude_locations`              |
| `company_places`                                                                                                                                  | `places`                         |
| `company_exclude_places`                                                                                                                          | `exclude_places`                 |
| `technologies`, `verticals`, `vertical_categories`, `vertical_sub_categories`, `categories`, `keywords`, `founded_dates`, `employees`, `revenues` | передаются без изменений         |

Именно поэтому `filter_conditions[].key` для локаций уровня компании использует голые имена:

```json theme={null}
{
  "company_places": ["New York", "Boston"],
  "filter_conditions": [
    { "key": "places", "operator": "and" }
  ]
}
```

<Warning>
  `{ "key": "company_places", "operator": "and" }` молча игнорируется — движок не распознаёт имя с префиксом. Всегда указывайте в `filter_conditions` имя движка.
</Warning>

***

## Соединения (joins) за кадром

Добавление *любого* фильтра уровня компании переключает соединение людей с компаниями с `LEFT JOIN` на `INNER JOIN`. Люди без распознанной компании в записи исключаются из результата, даже если они соответствуют каждому фильтру уровня людей.

<Info>
  Если ваш поиск падает до нуля строк в тот момент, когда вы добавляете `company_locations` или `technologies`, проверьте, есть ли в вашем наборе данных компании, связанные с ожидаемыми людьми. Здесь движок предпочитает корректность полноте — он никогда не выдумывает компании для удовлетворения фильтра.
</Info>

Это же поведение соединения отражается в ответе: каждый возвращённый человек включает заполненный объект `company`, когда был применён любой фильтр по компании.

***

## Распространённые паттерны

<AccordionGroup>
  <Accordion title="Account-Based Marketing (ABM)" icon="bullseye">
    Нацельтесь на фиксированный список компаний (`companies` или `domains`), затем наложите фильтры уровня людей, чтобы найти нужных покупателей внутри каждой из них.

    ```json theme={null}
    {
      "people_titles": ["VP Marketing", "CMO"],
      "management_levels": ["vp", "c_suite"],
      "company_filters": {
        "companies": ["67c4696b-…", "f1e2d3c4-…", "0a9b8c7d-…"]
      }
    }
    ```
  </Accordion>

  <Accordion title="Поиск Ideal Customer Profile (ICP)" icon="user-plus">
    Опишите форму компании, а не конкретные аккаунты. Используйте диапазоны и вертикали — движок вернёт подходящих людей.

    ```json theme={null}
    {
      "people_titles": ["Head of Engineering"],
      "company_filters": {
        "verticals": [12, 47],
        "company_locations": ["US", "CA"],
        "founded_dates": [2015, 2023],
        "employees": [[51, 200], [201, 500]],
        "filter_conditions": [
          { "key": "verticals", "operator": "and" }
        ]
      }
    }
    ```
  </Accordion>

  <Accordion title="Технологически-ориентированный поиск потенциальных клиентов" icon="microchip">
    Найдите покупателей в компаниях, использующих определённый стек. AND по `technologies` — типичное переопределение.

    ```json theme={null}
    {
      "people_titles": ["RevOps", "Sales Operations"],
      "departments": ["master_sales"],
      "company_filters": {
        "technologies": [114, 287, 452],
        "filter_conditions": [
          { "key": "technologies", "operator": "and" }
        ]
      }
    }
    ```
  </Accordion>

  <Accordion title="Вытеснение конкурентов" icon="arrows-rotate">
    Найдите лиц, принимающих решения, в компаниях, использующих продукт конкурента (одна технология), но не ваш (исключается через `categories` или отдельный проход фильтрации).

    ```json theme={null}
    {
      "people_titles": ["VP Sales"],
      "management_levels": ["vp"],
      "company_filters": {
        "technologies": [287]
      }
    }
    ```

    Затем повторите запрос с `technologies: [114]` (ID тега вашего продукта) и сравните на стороне клиента.
  </Accordion>
</AccordionGroup>

***

## Следующие шаги

<CardGroup cols={2}>
  <Card title="filter_conditions" icon="code-merge" href="/ru/developer-guides/filters/filter-conditions">
    Полный справочник — каждый ключ, каждое значение по умолчанию, готовые к копированию рецепты AND/OR.
  </Card>

  <Card title="Filters Overview" icon="filter" href="/ru/developer-guides/filters/overview">
    Ментальная модель единого движка фильтров.
  </Card>

  <Card title="Справочник People Search" icon="user" href="/ru/api-reference/endpoint/people/search">
    Полная схема запроса/ответа для `/people/search`.
  </Card>

  <Card title="Справочник Company Search" icon="building" href="/ru/api-reference/endpoint/companies/search">
    Полная схема запроса/ответа для `/companies/search`.
  </Card>
</CardGroup>
