# Синхронизация пользовательских данных через HTTP API

## Получение ключа API

Обратитесь к разделу [Ключи API](/auth-verification/api-keys). Убедитесь, что роль, связанная с ключом API, имеет необходимые разрешения для синхронизации пользовательских данных.

## Обзор API

### Пример

```bash
curl 'https://localhost:13000/api/userData:push' \
  -H 'Authorization: Bearer <token>' \
  --data-raw '{"dataType":"user","records":[]}' # Подробное описание тела запроса см. ниже
```

### Конечная точка

```bash
POST /api/userData:push
```

### Формат пользовательских данных

#### UserData

| Параметр   | Тип                                | Описание                                                                 |
| ---------- | ---------------------------------- | ------------------------------------------------------------------------ |
| `dataType` | `'user' \| 'department'`           | Обязательно. Тип передаваемых данных. Для пользовательских данных используйте `user`. |
| `matchKey` | `'username' \| 'email' \| 'phone'` | Необязательно. Используется для сопоставления с существующими пользователями системы на основе указанного поля. |
| `records`  | `UserRecord[]`                     | Обязательно. Массив записей пользовательских данных.                     |

#### UserRecord

| Параметр      | Тип        | Описание                                                                                                 |
| ------------- | ---------- | -------------------------------------------------------------------------------------------------------- |
| `uid`         | `string`   | Обязательно. Уникальный идентификатор исходных пользовательских данных, используемый для связывания исходных данных с пользователем системы. Неизменяем для одного пользователя. |
| `nickname`    | `string`   | Необязательно. Псевдоним пользователя.                                                                   |
| `username`    | `string`   | Необязательно. Имя пользователя.                                                                         |
| `email`       | `string`   | Необязательно. Адрес электронной почты пользователя.                                                     |
| `phone`       | `string`   | Необязательно. Номер телефона пользователя.                                                              |
| `departments` | `string[]` | Необязательно. Массив UID отделов, к которым принадлежит пользователь.                                    |
| `isDeleted`   | `boolean`  | Необязательно. Указывает, удалена ли запись.                                                             |
| `<field>`     | `any`      | Необязательно. Пользовательские поля в таблице пользователей.                                            |

### Формат данных отдела

:::info
Для передачи данных отдела необходимо установить и активировать плагин [Отделы](../../departments).
:::

#### DepartmentData

| Параметр   | Тип                      | Описание                                                                 |
| ---------- | ------------------------ | ------------------------------------------------------------------------ |
| `dataType` | `'user' \| 'department'` | Обязательно. Тип передаваемых данных. Для данных отдела используйте `department`. |
| `records`  | `DepartmentRecord[]`     | Обязательно. Массив записей данных отдела.                               |

#### DepartmentRecord

| Параметр    | Тип       | Описание                                                                                                       |
| ----------- | --------- | -------------------------------------------------------------------------------------------------------------- |
| `uid`       | `string`  | Обязательно. Уникальный идентификатор исходных данных отдела, используемый для связывания исходных данных с отделом системы. Неизменяем. |
| `title`     | `string`  | Обязательно. Название отдела.                                                                                  |
| `parentUid` | `string`  | Необязательно. UID родительского отдела.                                                                       |
| `isDeleted` | `boolean` | Необязательно. Указывает, удалена ли запись.                                                                   |
| `<field>`   | `any`     | Необязательно. Пользовательские поля в таблице отделов.                                                        |

:::info

1.  Многократная передача данных является идемпотентной операцией.
2.  Если при передаче данных отдела родительский отдел еще не создан, связь не может быть установлена. Вы можете повторно передать данные после создания родительского отдела.
3.  Если при передаче пользовательских данных отдел еще не создан, пользователь не может быть связан с этим отделом. Вы можете повторно передать пользовательские данные после передачи данных отдела.

:::