Введение

API создано для интеграции со внешними системами.

Host: https://salesenergy.ru

Авторизация

Для мобильных и внешних приложений используется короткоживущий JWT access-токен и обновляемый refresh-токен. Во всех URL ниже рекомендуется сохранять завершающий символ /.

Access-токен передается в HTTP-заголовке:

Authorization: Bearer ACCESS_TOKEN
Метод API Описание
POST /api/v1/auth/login/ Проверяет логин и пароль. Возвращает access-токен, refresh-токен, пользователя, компанию, права и подключенные продукты.
POST /api/v1/auth/refresh/ Обновляет пару токенов. После успешного запроса старый refresh-токен использовать нельзя.
POST /api/v1/auth/logout/ Отзывает текущую сессию по access-токену или переданному refresh-токену.
GET /api/v1/auth/me/ Возвращает текущего пользователя и его актуальные права.

Вход

POST https://salesenergy.ru/api/v1/auth/login/
Content-Type: application/json

{
  "login": "user@example.com",
  "password": "user-password",
  "client_id": "mobile-app",
  "device_name": "Android phone",
  "platform": "android",
  "app_version": "1.0.0"
}

Пример успешного ответа:

{
  "success": true,
  "data": {
    "token_type": "Bearer",
    "access_token": "eyJ...",
    "expires_in": 900,
    "refresh_token": "session-id.random-secret",
    "refresh_expires_in": 2592000,
    "user": { "user_id": 1, "login": "user@example.com" },
    "corporation_id": 1,
    "permissions": {},
    "active_products": [],
    "is_system_admin": false
  },
  "error": null
}

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

POST https://salesenergy.ru/api/v1/auth/refresh/
Content-Type: application/json

{
  "refresh_token": "CURRENT_REFRESH_TOKEN"
}

При каждом обновлении сервер возвращает новый refresh-токен. Приложение должно атомарно заменить оба сохраненных токена. Повторное использование старого refresh-токена приводит к отзыву сессии.

Текущий пользователь

GET https://salesenergy.ru/api/v1/auth/me/
Authorization: Bearer ACCESS_TOKEN

Метод возвращает профиль пользователя, активную компанию, объект permissions, список active_products и признак системного администратора.

Выход

POST https://salesenergy.ru/api/v1/auth/logout/
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json

{}

Также можно выполнить выход без access-токена, передав в JSON поле refresh_token.

Основные объекты и методы

Доступ к обьектам осуществляется через API.

Пользователиv1

Методы Users API предназначены для административного просмотра пользователей. Они доступны только пользователю, чей ID присутствует в настройке users.admin_user_ids. Для обычного пользователя сервер возвращает HTTP 403.

Метод API Описание
GET /api/v1/users/ Постраничный список пользователей. Параметры: page, limit (не более 100), q — строка поиска.
GET /api/v1/users/:id/ Получение пользователя по числовому идентификатору.

Получение списка

GET https://salesenergy.ru/api/v1/users/?page=1&limit=25&q=Иванов
Authorization: Bearer ACCESS_TOKEN
{
  "success": true,
  "data": [
    {
      "user_id": 15,
      "login": "ivanov",
      "email": "user@example.com",
      "firstname": "Иван",
      "lastname": "Иванов",
      "active_flag": true
    }
  ],
  "meta": { "page": 1, "limit": 25 },
  "error": null
}

Получение пользователя

GET https://salesenergy.ru/api/v1/users/15/
Authorization: Bearer ACCESS_TOKEN

Пароль, password hash и служебные данные авторизации в ответах не возвращаются. Адрес старого формата /api/v1/user/:id/ больше не используется.

Коды ответа

200Запрос успешно выполнен.
401Токен отсутствует, недействителен, истек или сессия отозвана.
403У пользователя недостаточно прав либо аккаунт не активирован.
404Пользователь не найден.
405HTTP-метод не поддерживается.
422Не переданы обязательные поля.

Валютыv1

Через API можно получить список валют и их стандартные коды ISO.

Метод API Описание
GET /api/public/currencylist/ Метод для получения списка валют.

Заявкиv1

Через API можно настоить получение в систему заявок из внешних систем.

Метод API Описание
GET /api/v1/leads/ Получение активных заявок из CRM.
POST /api/v1/leads/
{
"title": "тестовый лид из-вне",
"lead": "описание лида",
"type": "Письмо",
"channel": "Рассылки",
"firstname": "Семен",
"secondname": "",
"lastname": "Г.",
"phone": "+73452578942",
"email": "s.grebenyuk@tcntr.ru",
"firm": {
"brandname": "\u042d\u041d\u0415\u0420\u0413\u041e\u0421\u041d\u0410\u0411",
"title": "\u041e\u041e\u041e \u00ab\u042d\u041d\u0415\u0420\u0413\u041e\u0421\u041d\u0410\u0411\u00bb",
"inn": "7203378552",
"kpp": "720301001",
"city": "\u0422\u044e\u043c\u0435\u043d\u044c"
},
"manager_id": 83
}
Создание заявки в CRM.

Номенклатураv1

Через API можно получить и изменять информацию позиций номенклатурного справочника.

Метод API Описание
GET /api/v1/nomenclature/ Получение список позиций номенлатурного справочника.
POST /api/v1/nomenclature/
{
"title": "Новый склад",
"identificator_1c": "asdf"
}
Создание новой единицы товара или услуги в номиенклатурном справочнике.
GET /api/v1/nomenclature/:id/
{
"title": "Новое название склада",
"identificator_1c": "asdf"
}
Получение информации по конкретной позиции номенклатурного справочника
PUT /api/v1/nomenclature/:id/
{
"title": "Новое название склада",
"identificator_1c": "asdf"
}
Обновление данных позиции номенклатурного справочника.
DELETE /api/v1/nomenclature/:id/ Удаление позиции номенклатурного справочника.

Складыv1

Через API можно получить информацию как о складах, так и о конкретном складе.

Метод API Описание
GET /api/v1/warehouses/ Получение информации о складах компании.
POST /api/v1/warehouses/
{
"title": "Новый склад",
"identificator_1c": "asdf"
}
Создание нового склада.
PUT /api/v1/warehouse/:id/
{
"title": "Новое название склада",
"identificator_1c": "asdf"
}
Обновление данных склада.
DELETE /api/v1/warehouse/:id/ Удаление склада, включая все го содержимое.

Товары на складахv1

Через API можно получить информацию как о товарных остатках. Также можно их обновлять.

Метод API Описание
GET /api/v1/positions/:id/ Получение информации о содержимом складе с id=1.
POST /api/v1/positions/:id/
[{
"quantity": 500,
"measure_code": 21, // единицу измерения как-то надо получить ?
"price_ppu": 0, // цена за ед без НДС, надо ли НДС отдельно передавать?
"currency_code": 0, // код валюты для цены ?
"title": "Sm-thing 1", // данные номенклатуры
"title_full": "Sm-thing full title 1",
... // еще данные номенклатуры
"identificator_1c": "asdfasfas" // идентификатор позиции
}, {
"quantity": 300,
"measure_code": 21,
"price_ppu": 300,
"currency_id": 14,
"title": "Sm-thing unusual",
"title_full": "Sm-thing full unusual title",
....
"identificator_1c": "sdhsfjrww"
}]
Создание позиций на выбранном складе.
DELETE /api/v1/positions/:id/ Учистка содержимого склада.