# Настройка аффилиатора

Этот API предоставляет возможность управления пользователями и получения информации о них. Для доступа к API требуется передача заголовков `Accept: application/json`    `Content type: application/json` и `Authorization: Bearer <Token>`вместе с запросом.

## Получение токена аутентификации

Для доступа к защищенным эндпоинтам необходимо получить токен аутентификации. Это можно сделать через механизм аутентификации Sanctum. Токен должен быть использован в заголовке `Authorization` для всех последующих запросов.

## Эндпоинты

### Добавить пользователя

**POST /api/import/users**\
Этот эндпоинт позволяет добавить нового пользователя.

**Параметры:**

* `email` (string, required)
* `password` (string, optional)
* `first_name` (string, required)
* `last_name` (string, required)
* `phone` (string, required)
* `fa2` (string, optional)
* `political_figure` (string, optional)
* `sales_status` (string, optional)
* `retention_status` (string, optional)
* `age` (integer, optional)
* `leverage_active` (boolean, optional)
* `leverage` (string, optional)
* `additional_info` (string, optional)
* `country` (string, optional) - код страны в формате ISO3166-1 alpha-2
* `region` (boolean, optional)
* `city` (string, optional)
* `address` (string, optional)
* `zip_code` (string, optional)
* `utm_source` (string, optional) - ресурс, на котором была размещена воронка
* `utm_medium` (string, optional) - канал, с которого пришел пользователь (баннер, линк и т.д.)
* `utm_campaign` (string, required) - название маркетинговой воронки
* `utm_content` (string, optional) - название элемента маркетинговой воронки
* `utm_term` (string, optional) - ключевые слова воронки
* `admins_ids` (array, optional)
* `comment` (string, optional)

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

```http
POST /api/import/users
Accept: application/json
Content-Type: application/json
Authorization: Bearer <your_access_token>

{
    "email": "johndoe@example.com",
    "first_name": "John",
    "last_name": "Doe",
    "phone": "+111111111",
    "password": "securepassword"
}
```

**Пример ответа:**

```http
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "user": {
            "id": 55946339,
            "sales_status": null,
            "email": "johndoe@example.com",
            "phone": "111111111",
            "first_name": "John",
            "last_name": "Doe",
            "country": null,
            "region": null,
            "city": null,
            "address": null,
            "zip_code": null,
            "utm_source": null,
            "utm_medium": null,
            "utm_campaign": null,
            "utm_content": null,
            "utm_term": null,
            "login_url": "/login url"   
        }
    },
    "status": 201,
    "errors": null,
    "notification": null,
    "warning": null,
    "_token": null
}
```

### Получение списка пользователей

**GET /api/users**\
Этот эндпоинт позволяет получить список всех пользователей.

**Параметры:**

* `filter[start_date]` (date, optional)
* `filter[end_date]` (date, optional)
* `per_page` (string, optional)
* `page` (string, optional)

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

```http
GET /api/users
Accept: application/json
Content-Type: application/json
Authorization: Bearer <your_access_token>
```

**Пример запроса с использованием фильтров:**

```http
GET /api/users?filter[start_date]=2025-01-01&filter[end_date]=2025-01-28&per_page=50&page=1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <your_access_token>
```

**Пример ответа:**

```http
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "users": {
            "data": [
                {
                    "id": 55946339,
                    "sales_status": "new",
                    "email": "johndoe@example.com",
                    "phone": "111111111",
                    "first_name": "John",
                    "last_name": "Doe",
                    "country": null,
                    "region": null,
                    "city": null,
                    "address": null,
                    "zip_code": null,
                    "utm_source": null,
                    "utm_medium": null,
                    "utm_campaign": null,
                    "utm_content": null,
                    "utm_term": null,
                    "login_url": "/login url",
                    "comments": [
                        {
                            "comment": "comment",
                            "created_at": "2023-04-04T14:16:57.000000Z"
                        }
                    ],
                    "sales_status_crm": null    
                }
            ],
            "links": {
                "first": "/api/users?page=1",
                "last": "/api/users?page=1",
                "prev": null,
                "next": null
            },
            "meta": {
                "current_page": 1,
                "from": 1,
                "last_page": 1,
                "links": [
                    {
                        "url": null,
                        "label": "Prev",
                        "active": false
                    },
                    {
                        "url": "/api/users?page=1",
                        "label": "1",
                        "active": true
                    }
                ],
                "path": "/api/users",
                "per_page": 50,
                "to": 1,
                "total": 1
            }
        }
    },
    "status": 201,
    "errors": null,
    "notification": null,
    "warning": null,
    "_token": null
}
```

### Получение информации о конкретном пользователе

**GET /api/users/{id}**\
Этот эндпоинт позволяет получить информацию о конкретном пользователе по его идентификатору `{id}`.

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

```http
GET /api/users/55946339
Accept: application/json
Content-Type: application/json
Authorization: Bearer <your_access_token>
```

**Пример ответа:**

```http
HTTP/1.1 200 OK
Content-Type: application/json

{
    "response": {
        "user": {
            "id": 55946339,
            "sales_status": "new",
            "email": "johndoe@example.com",
            "phone": "111111111",
            "first_name": "John",
            "last_name": "Doe",
            "country": null,
            "region": null,
            "city": null,
            "address": null,
            "zip_code": null,
            "utm_source": null,
            "utm_medium": null,
            "utm_campaign": null,
            "utm_content": null,
            "utm_term": null,
            "login_url": "/login url",
            "comments": [
                        {
                            "comment": "comment",
                            "created_at": "2023-04-04T14:16:57.000000Z"
                        }
                    ],
            "sales_status_crm": null  
        }
    },
    "status": 201,
    "errors": null,
    "notification": null,
    "warning": null,
    "_token": null
}
```

## Обработка ошибок

В случае возникновения ошибок, API вернет соответствующий статус код и сообщение об ошибке в формате JSON.

#### Пример ошибки при добавлении уже существующего пользователя:

```json
{
    "response": null,
    "status": 400,
    "errors": {
        "message": [
            "Duplicate entry"
        ]
    },
    "notification": null,
    "warning": null,
    "_token": null
}
```

#### Пример ошибки аутентификации:

```http
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
    "message": "Unauthenticated"
}
```

#### Пример ошибки валидации данных:

```http
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json

{
    "message": "The first name field is required. (and 1 more error)",
    "errors": {
        "first_name": [
            "The first name field is required."
        ],
        "phone": [
            "The phone field is required."
        ]
    }
}
```

Вот текстовая версия данных, представленных в изображении:

#### Существующие sales\_statuses пользователей:

| Status          | Описание            |
| --------------- | ------------------- |
| new             | Новый лид           |
| deposit         | Депозит статус лида |
| wrong\_language |                     |
| wrong\_info     |                     |
| under\_age      |                     |
| duplicate       |                     |
| part\_deposit   |                     |
| potential       |                     |
| callback        |                     |
| not\_answer     |                     |
| not\_interested |                     |

#### Существующие retention\_statuses статусы пользователей:

| Status        |
| ------------- |
| new           |
| trades        |
| stop          |
| margin\_call  |
| load          |
| credit        |
| no\_potential |

###
