API

Обновлено: 17.08.2026
📄 Документация API

title: "API" category: "developers" order: 3

API CRM "Леотехно"

Обзор

API построено на REST-принципах и работает через JSON. Доступно для авторизованных пользователей и менеджеров.

Базовый URL

📄 Формат данных

Формат данных

Все запросы и ответы — в формате JSON.

Успешный ответ:


{
  "status": "success",
  "data": { ... }
}
📄 Ошибка

{
  "status": "error",
  "message": "Описание ошибки"
}

📄 Аутентификация

🔐 
API использует API-ключ или сессию (если пользователь уже авторизован в системе).

Заголовки
Ключ  Значение  Обязательность
X-API-Key  Ваш API-ключ  ❌ (если есть сессия)
Content-Type  application/json  ✅

📄 Эндпоинт 1. Клиенты

📋 

 

Получить список клиентов

http

GET /api/clients.php

Параметры (опционально):

Параметр Тип Описание
limit int Количество записей (по умолчанию 20)
offset int Смещение для пагинации
search string Поиск по названию или email

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

json

{
  "status": "success",
  "data": [
    {
      "id": 2,
      "company_name": "ООО \"Тестовая компания\"",
      "email": "[email protected]",
      "contact_person": "Шлёма",
      "discount_percent": 10.00,
      "payment_delay": 10
    }
  ],
  "total": 42
}

Получить одного клиента

http

GET /api/clients.php?id={id}

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

json

{
  "status": "success",
  "data": {
    "id": 2,
    "company_name": "ООО \"Тестовая компания\"",
    "tax_id": "12345678977",
    "legal_address": "г. Минск, ул. Тестовая, 1",
    "email": "[email protected]",
    "contact_person": "Шлёма",
    "contact_phone": "33222222222",
    "discount_percent": 10.00,
    "payment_delay": 10,
    "phones": [
      {"phone": "+375291234567", "type": "work", "is_primary": false}
    ],
    "addresses": [
      {"address": "Северная улица, 22", "contact_person": "Валерий", "is_primary": false}
    ]
  }
}

Создать клиента

http

POST /api/clients.php

Тело запроса:

json

{
  "company_name": "Новая компания",
  "email": "[email protected]",
  "contact_person": "Иван Петров",
  "contact_phone": "+375291234567",
  "tax_id": "123456789",
  "legal_address": "г. Минск, ул. Новая, 1",
  "discount_percent": 0.00,
  "payment_delay": 30
}

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

json

{
  "status": "success",
  "message": "Клиент создан",
  "data": {
    "id": 11
  }
}

Обновить клиента

http

PUT /api/clients.php?id={id}

Тело запроса: (все поля опциональны)

json

{
  "company_name": "Обновленное название",
  "contact_person": "Петр Сидоров",
  "discount_percent": 15.00
}

Удалить клиента

http

DELETE /api/clients.php?id={id}

 

📄 Эндпоинт 2. Заказы

Получить список заказов

http

GET /api/orders.php

Параметры:

Параметр Тип Описание
client_id int Фильтр по клиенту
status string sentacceptedplannedshippedcancelled
date_from date С какой даты (YYYY-MM-DD)
date_to date По какую дату (YYYY-MM-DD)
limit int Количество записей
offset int Смещение

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

json

{
  "status": "success",
  "data": [
    {
      "id": 1,
      "invoice_number": "ORD-202608-0001",
      "client": {
        "id": 2,
        "company_name": "ООО \"Тестовая компания\""
      },
      "order_date": "2026-08-08",
      "status": "sent",
      "total_amount": "28.86",
      "discount_percent": 10.00
    }
  ],
  "total": 5
}

Получить один заказ

http

GET /api/orders.php?id={id}

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

json

{
  "status": "success",
  "data": {
    "id": 1,
    "invoice_number": "ORD-202608-0001",
    "client_id": 2,
    "order_date": "2026-08-08",
    "status": "sent",
    "subtotal": "24.05",
    "total_amount": "28.86",
    "discount_percent": 10.00,
    "discount_amount": "2.67",
    "comment": "",
    "items": [
      {
        "product_id": 9,
        "name": "ALBOSIL N, Клей-герметик",
        "quantity": 4,
        "price_at_time": "7.42",
        "total": "29.68"
      }
    ]
  }
}

Создать заказ

http

POST /api/orders.php

Тело запроса:

json

{
  "client_id": 2,
  "delivery_address_id": 5,
  "order_date": "2026-08-12",
  "desired_delivery_date": "2026-08-20",
  "payment_delay": 10,
  "comment": "Срочный заказ",
  "items": [
    {
      "product_id": 9,
      "quantity": 10
    },
    {
      "product_id": 7,
      "quantity": 5
    }
  ]
}

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

json

{
  "status": "success",
  "message": "Заказ создан",
  "data": {
    "id": 2,
    "invoice_number": "ORD-202608-0002",
    "total_amount": "156.40"
  }
}

Обновить статус заказа

http

PUT /api/orders.php?id={id}/status

Тело запроса:

json

{
  "status": "accepted",
  "comment": "Счет принят клиентом"
}

Доступные статусы: sentacceptedplannedshippedcancelled


Удалить заказ

http

DELETE /api/orders.php?id={id}

(Только для администраторов)


📄 Эндпоинт 3. Товары

Получить список товаров

http

GET /api/products.php

Параметры:

Параметр Тип Описание
group string Группа товара
search string Поиск по названию или GTIN
in_stock boolean Только товары в наличии
limit int Количество записей
offset int Смещение

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

json

{
  "status": "success",
  "data": [
    {
      "id": 1,
      "name": "Solaflex NGPU Клей-герметик полиуретановый",
      "product_group": "1. Полиуретаны",
      "price": "11.30",
      "stock_quantity": 35,
      "volume": 280,
      "unit": "мл"
    }
  ],
  "total": 29
}

Получить один товар

http

GET /api/products.php?id={id}

Создать товар

http

POST /api/products.php

Тело запроса:

json

{
  "product_group": "1. Полиуретаны",
  "name": "Новый герметик",
  "gtin": "4816381600999",
  "volume": 280,
  "unit": "мл",
  "per_box": 25,
  "color": "#FFFFFF",
  "price": 12.50,
  "stock_quantity": 100
}

Обновить товар

http

PUT /api/products.php?id={id}

Удалить товар

http

DELETE /api/products.php?id={id}

📄 Эндпоинт 4. Пользователи

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

http

GET /api/users.php

Параметры:

Параметр Тип Описание
role string adminmanagerviewer
is_active boolean Активен/неактивен

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

json

{
  "status": "success",
  "data": [
    {
      "id": 3,
      "username": "admin",
      "email": "[email protected]",
      "full_name": "Администратор",
      "role": "admin",
      "is_active": 1
    }
  ]
}

Создать пользователя

http

POST /api/users.php

Тело запроса:

json

{
  "username": "new_manager",
  "email": "[email protected]",
  "password": "SecurePass123!",
  "full_name": "Новый Менеджер",
  "role": "manager"
}

📄 Коды ответов
Код Описание
200 Успешный запрос
201 Успешно создано
400 Ошибка валидации
401 Не авторизован
403 Доступ запрещён
404 Ресурс не найден
500 Внутренняя ошибка сервера
📄 Ошибки

Пример ошибки валидации:

json

{
  "status": "error",
  "message": "Ошибка валидации",
  "errors": {
    "email": "Email уже занят",
    "company_name": "Поле обязательно для заполнения"
  }
}