# Экспорт клиентов
## Общий контракт постановки задачи экспорта

Общий контракт постановки задачи экспорта описан [здесь](https://developers.mindbox.ru/docs/%D0%BE%D0%B1%D1%89%D0%B8%D0%B9-%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF-%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2) 

## Контракт экспорта клиентов

**Пример запроса** 

```json title="JSON"
https://api.mindbox.ru/v3/operations/sync?endpointId={endpointId}&operation={operation}

Accept: application/json
Content-Type: application/json
Authorization: SecretKey {Секретный ключ}

{
  "sinceDateTimeUtc": "<Начальная дата и время диапазона включительно (UTC, YYYY-MM-DD hh:mm)>",
  "tillDateTimeUtc": "<Конечная дата и время диапазона (UTC, YYYY-MM-DD hh:mm)>",
  "segment": {
    "ids": {
      "externalId": "<Внешний идентификатор сегмента по клиентам>"
    }
  }
}
```

Во входных параметрах можно указать:

* Дату «от» в формате UTC `sinceDateTimeUtc` — в выгрузку попадут только клиенты, у которых дата последнего изменения больше или равна указанной.
* Дату «до» в формате UTC `tillDateTimeUtc` — в выгрузку попадут только клиенты, у которых дата последнего изменения меньше указанной.
* `externalId` сегмента клиентов — если сегмент не был выбран в настройках шага операции.

:::info

Фильтрация выполняется только **по дате последнего изменения клиента**. Создание клиента считается одним из видов изменения, поэтому отдельно по дате создания выгрузка не фильтруется.

:::

Условие попадания клиента в выгрузку:

`Дата «от» ≤ дата последнего изменения клиента < Дата «до»`

## Формат выгружаемого файла

**Описание базовых полей экспорта**

```json title="JSON"
{
  "customers": [
    {
      "ids": {
        "mindboxId": "<Идентификатор Mindbox>",
        "<Системное имя идентификатора>": "<Занчение идентификатора>"
      },
      "firstName": "<Имя>",
      "middleName": "<Отчество>",
      "lastName": "<Фамилия>",
      "email": "<Адрес электронной почты>",
      "isEmailInvalid": "<Адрес электронной почты невалиден>",
      "mobilePhone": "<Номер мобильного телефона>",
      "isMobilePhoneInvalid": "<Мобильный телефон невалиден>",
      "area": {
        "ids": {
          "externalId": "<Идентификатор географической зоны клиента>"
        },
        "name": "<Название географической зоны клиента>"
      },
      "birthDate": "<Дата рождения в формате yyyy-MM-dd>",
      "sex": "<Пол>"
      "changeDateTimeUtc": "<Дата регистрации/редактирования в формате yyyy-MM-dd HH:mm:ss.fff>",
      "ianaTimeZone": "<Часовой пояс>",
      "timeZoneSource": "<Источник информации о часовом поясе>",
    }
  ]
}
```

* контакты могут быть исключены из выгрузки, а также выгружаться в хешированном формате. 
  * алгоритм хеширования выбирается в настройках операции и может быть md5 или sha256
  * телефон будет без всех символов, кроме цифр, без пробелов, с кодом страны
  * email в формате хеша будет в нижнем регистре, без пробелов

**Дополнительные поля** 

```json title="JSON"
{
  "customers": [
    {
      <базовые поля>,
      "customFields": {
        "<Системное имя кастом поля>": "<Значение кастом поля>"
      }
    }
  ]
}
```

В настройках операции могут быть выбраны конкретные дополнительные поля, которые должны попасть в выгрузку.

**Подписки** 

```json title="JSON"
{
  "customers": [
    {
      <базовые поля>,
      "subscriptions": [
        {
          "brand": "<Бренд>",
          "pointOfContact": "<Точка контакта>",
          "topic": "<Тематика>",
          "isSubscribed": "<true/false>"
        }
      ]
    }
  ]
}
```

* в настройках операции может быть указан конкретный бренд, тогда только подписки выбранного бренда попадут в выгрузку

**Дисконтные карты** 

```json title="JSON"
{
  "customers": [
    {
      <базовые поля>,
      "discountCards": [
        {
           "ids": {
             "number":"<номер дисконтной карты>",
           }
           "status":"<active/blocked>",
           "type": {
             "ids": {
               "externalId": "<Идентификатор типа дисконтной карты>"
             },
             "name":"<Имя типа дисконтной карты>"
           },
           "customFields": {
             "<Системное имя кастом поля>": "<Значение кастом поля>"
           }
        }
      ]
    }
  ]
}
```

* могут выгружены только в форматах xml и json

**Бальные счета** 

```json title="JSON"
{
  "customers": [
    {
      <базовые поля>,
      "balances": [
        {
          "balanceType": {
            "ids": {
              "systemName": "<Системное имя балльного счёта>"
            },
            "name": "<Название балльного счёта>"
          },
          "total": "<Суммарный баланс>",
          "available": "<Доступный баланс>",
          "blocked": "<Заблокированный баланс>",
        }
      ]
    }
  ]
}
```

**Отношение к сегментациям** 

```json title="JSON"
{
  "customers": [
    {
      <базовые поля>,
      "segmentations": [
        {
          "ids": {
              "externalId": "<Внешний ид сегментации>"
            },
          "name": "<Название сегментации>",
          "segment": 
            {
              "ids": {
                "externalId": "<Внешний ид сегмента>"
              },
              "name": "<Название сегмента>"
            }
        }
      ]
    }
  ]
}
```
