Skip to content

Variable API

Variable API даёт внешним системам единый read-only способ узнать, какие поля доступны в SNABZHENETS+, и получить значения по конкретной сущности. Те же paths используются в документах, API-интеграциях и будущих донастройках.

Авторизация

Variable API поддерживает два способа доступа:

  • JWT текущего пользователя: права берутся из роли пользователя в портале.
  • API key: ключ передаётся в заголовке X-API-Key и должен иметь scope variables.read плюс доменный read-scope.

Примеры доменных scopes:

ScopeДоступ
catalog.readНоменклатура и связанные каталоговые переменные
price_lists.readПрайсы
warehouses.readСклады и остатки
counterparties.readКонтрагенты
suppliers.readПоставщики
procurements.readЗаявки и закупки
documents.readДокументы
customer_documents.readКП, исходящие счета, договоры
supplier_documents.readRFQ, ответы поставщиков, входящие счета
company.read или settings.readКомпания и региональные настройки
users.readПользователи

API key без variables.read не может получить ни каталог переменных, ни resolved values.

Каталог переменных

http
GET /api/v1/variables?domain=catalog&entityType=catalogItem&search=sku&includeCustom=true
Authorization: Bearer <accessToken>

Или через ключ:

http
GET /api/v1/variables?entityType=priceList
X-API-Key: spk_...

Ответ содержит плоский список items, сгруппированный список groups для UI и meta.

json
{
  "items": [
    {
      "path": "catalogItem.sku",
      "label": "SKU",
      "domain": "catalog",
      "entityTypes": ["catalogItem"],
      "valueType": "string",
      "scopes": ["catalog.read"]
    }
  ],
  "groups": [],
  "meta": {
    "total": 1,
    "includeCustom": true,
    "authType": "apiKey"
  }
}

Resolve values

http
POST /api/v1/variables/resolve
X-API-Key: spk_...
Content-Type: application/json

{
  "entityType": "catalogItem",
  "entityId": "22222222-2222-4222-8222-222222222222",
  "paths": [
    "catalogItem.id",
    "catalogItem.sku",
    "catalogItem.stock.available",
    "custom.vendorCode"
  ]
}

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

json
{
  "entityType": "catalogItem",
  "entityId": "22222222-2222-4222-8222-222222222222",
  "values": {
    "catalogItem.id": "22222222-2222-4222-8222-222222222222",
    "catalogItem.sku": "SKU-001",
    "catalogItem.stock.available": "8",
    "custom.vendorCode": "A-104"
  },
  "unresolved": [],
  "resolvedAt": "2026-05-11T09:00:00.000Z"
}

Если path недоступен по scope, отсутствует в каталоге или не имеет значения у сущности, он попадает в unresolved; генерация документов и интеграции не должны падать из-за пустого значения.

Формат paths

Path строится как namespace.path:

  • procurement.id
  • catalogItem.sku
  • priceList.items[].price
  • document.totalAmount
  • custom.vendorCode

[] означает массив строк или связанных записей. В v1 Variable API только читает данные; запись выполняется через обычные доменные endpoints.

Custom fields

Индивидуальные поля портала описываются в настройках:

МетодПутьНазначение
GET/api/v1/settings/custom-fields?entityType=catalogItemСписок определений
POST/api/v1/settings/custom-fieldsСоздать определение
PATCH/api/v1/settings/custom-fields/:idОбновить label/type/options/status
DELETE/api/v1/settings/custom-fields/:idАрхивировать определение
GET/api/v1/settings/custom-fields/values?entityType=catalogItem&entityId=...Значения сущности
PUT/api/v1/settings/custom-fields/:id/valuesЗаписать значение сущности

После создания определения key=vendorCode для catalogItem в каталоге переменных этого портала появляется custom.vendorCode. Custom variables tenant-scoped: другой портал не увидит и не сможет resolve-ить это поле.

Документация платформы SNABZHENETS+.