Към съдържанието

API документация

Този раздел съдържа техническата документация на REST API на Planograma за интегратори и партньори: endpoint-и, HTTP методи, параметри, структури от данни и примери за заявки и отговори. API се използва от външни системи (ERP системи, e-commerce платформи).

Note

Имената на полетата, параметрите, пътищата и примерите в JSON са представени точно така, както се появяват в приложението. Обяснителният текст е на български език, но техническите наименования остават непроменени.

Удостоверяване

Всички заявки към /api/** изискват заглавката Authorization; нейната липса връща 401 Unauthorized със съобщение Invalid API KEY.

Интеграционните endpoint-и (продукти, наличност, поръчки, NIR и др.) използват потребителските данни на потребител на Planograma, изпратени в заглавката Authorization, във вида потребител:парола:

Authorization: Bearer <потребител>:<парола>

Системата разделя стойността по символа : и удостоверява потребителя в рамките на текущия наемател (определен от поддомейна/хоста). Ако форматът не е правилен или данните за вход са невалидни, отговорът е 401 Unauthorized.

Warning

Използвайте специален интеграционен акаунт с минимално необходимите права. Данните за вход се предават само по HTTPS.

Форма на отговорите

Повечето интеграционни endpoint-и връщат стандартен плик BaseApiResponse:

Поле Тип Описание
error Boolean true, ако заявката е неуспешна
errorMessage String? съобщение за грешка (когато error=true)
status Int? код на статуса
data T? полезните данни (списък или обект, в зависимост от endpoint-а)

Endpoint-ите от тип "read" връщат в data списък от info обекти (например ProductInfo, OrderInfo).

Note

Ключовете за външна идентификация (thirdPartyReference, externalReference, externalOrderId, externalLineId) позволяват на интеграторите да свържат документите от Planograma със своите собствени записи, без да зависят от вътрешните ID-та на Planograma.


Интеграционно API

Продукти

Базов ресурс: /api/product.

Метод Път Описание
POST /api/product/read списък на продукти с филтри
PUT /api/product/add добавяне на продукт
POST /api/product/update актуализиране на продукти
DELETE /api/product/delete изтриване на продукти
GET /api/product/third-party-reference/{thirdPartyReference}/check проверява съществуването на продукт по външна референция (връща Boolean)

Четенето (POST /api/product/read) получава ReadProductsFilterRequest (странициране чрез page по подразбиране 1 и limit по подразбиране 100, плюс филтри: productIds, models, categoryIds, thirdPartyReferenceIds, active и др.) и връща ProductApiResponse със списък от ProductInfo.

Основни полета на ProductInfo:

productId, productName, productCode, sku, thirdPartyReference,
categoryId, categoryName, vatId, vatPercentage,
purchasePrice, sellingPrice, minimumStock,
totalQuantityInStock, totalReservedQuantity, totalFreeQuantity, stockInfo,
requiresSerialNumber, requiresBatchCode, requiresBatchDetails,
requiresProductionDate, requiresExpirationDate,
width, height, length, weight, volume, diameter, material, color, active

Добавянето (PUT /api/product/add) получава AddProductApiRequest (задължителни полета name, code; категорията се посочва чрез categoryId или categoryExternalReference; плюс атрибутите за проследимост requiresSerialNumber, requiresBatchCode и др.). Актуализирането (EditProductApiRequest) насочва продуктите чрез productIds, а изтриването (DeleteProductApiRequest) чрез productIds или productModels.

Наличност

Базов ресурс: api/stock.

Метод Път Описание
POST api/stock/remaining-stock/{productId} наличното количество за продукт
POST api/stock/all странициран списък на наличностите
POST api/stock/detailed-report подробен отчет за наличността

POST api/stock/remaining-stock/{productId} получава CheckStockClientRequest (source, includeReservations, location). Ако location=true, наличността се разбива по локации; в противен случай се връща агрегираната обща сума.

POST api/stock/all приема параметрите за странициране page (по подразбиране 0) и size (по подразбиране 10) и тялото GetStocksRequest:

{
  "includeReservations": false,
  "isActive": true,
  "location": false
}

Отговор PagedStockResponse:

content: [ StockResponse ], totalElements, totalPages, size, number

където StockResponse има: productId, productName, productCode, remainingQuantity и, когато location=true, locationCode и locationName.

POST api/stock/detailed-report приема параметрите page (0), size (50), sortBy (productName), sortDirection (asc) и връща подробен отчет.

Поръчки

Базов ресурс: /api/order.

Метод Път Описание
POST /api/order/read списък на поръчки с филтри
PUT /api/order/add добавяне на поръчка
POST /api/order/update актуализиране на поръчки
POST /api/order/order-ready проверява дали поръчката е готова
DELETE /api/order/delete изтриване на поръчки
PUT /api/order/print-document отпечатване на документ за поръчка
POST /api/order/picking-info информация за пикинг
POST /api/order/start-picking стартиране на пикинг
PATCH /api/order/update-status актуализиране на статуса на поръчка
PATCH /api/order/update-awb-link актуализиране на външен AWB линк
POST /api/order/check-orders-in-waiting-for-supply повторна проверка на поръчки в очакване на наличност

Четенето (ReadOrdersFilterRequest) филтрира по orderIds, externalOrderIds, companyExternalReferences, warehouseIds, statuses, orderType, thirdPartyReferenceIds и връща OrderApiResponse със списък от OrderInfo.

Основни полета на OrderInfo:

orderId, externalOrderId, thirdPartyReference,
warehouseId, warehouseName, warehouseCode, status, orderType,
requiresValidation, dateAdded, isReady, picked, comment,
awbExternalLink, invoiceExternalLink,
numberOfEnvelopes, numberOfPackages, totalWeight, fulfilledWeight,
orderProducts, orderRequirements,
companyThirdPartyReference, companyExternalReference

Добавянето (PUT /api/order/add) получава CreateOrderApiRequest. Опростен пример:

{
  "externalOrderId": "WEB-1001",
  "warehouseId": 1,
  "orderType": 1,
  "validationRequired": 1,
  "company": { "name": "Client SRL", "cui": "RO123" },
  "orderProducts": [
    { "productModel": "ABC-123", "quantity": 2, "externalLineId": "L1", "locationCode": "A-01" }
  ]
}

externalOrderId е задължителен и трябва да бъде уникален. Редовете (CreateOrderProductApiRequest) идентифицират продукта чрез productModel (или productId); locationCode резервира наличността от определена локация.

Актуализирането (UpdateOrderApiRequest) насочва поръчките чрез orderIds, externalOrderIds или thirdPartyReferenceIds, а новите полета се подават в updateFields. PATCH /api/order/update-status (UpdateOrderStatusRequest: orderId, status, awbExternalLink) променя статуса на поръчка.

POST /api/order/picking-info отговаря с PickingInfoApiResponse: picked, numberOfPackages, numberOfEnvelopes, totalWeight, pickerId, pickerUsername.

Приемания (NIR)

Базов ресурс: /api/nir.

Метод Път Описание
PUT /api/nir/add добавяне на NIR
PATCH /api/nir/update актуализиране на NIR
POST /api/nir/read списък на NIR с филтри
POST /api/nir/validation-info информация за валидиране
DELETE /api/nir/delete изтриване на NIR
PATCH /api/nir/update-external-reference актуализиране на външна референция
PATCH /api/nir/update-packaging-type актуализиране на типа опаковка

Добавянето (CreateNirApiRequest) изисква externalReference (задължително), warehouseId, supplierId, списък nirProducts (NirProductApiInfo: code и quantity задължителни, externalLineId) и validationRequired (по подразбиране true).

Четенето (ReadNirsFilterRequest) филтрира по nirIds, externalOrderIds, externalClientIds, warehouseIds, thirdPartyReferenceIds и връща NirApiResponse със списък от NirInfo (nirId, externalReference, warehouseId, validated, status, nirProducts, thirdPartyReference, purchaseOrders).

POST /api/nir/validation-info (NirValidationInfoApiRequest: nirId или externalReference) връща NirValidationInfoApiResponse с validated, scanInfoList, userUsername и др.

Връщания

Базов ресурс: /api/return.

Метод Път Описание
PUT /api/return/add добавяне на връщане
POST /api/return/read списък на връщания с филтри
POST /api/return/validation-info информация за валидиране на връщане

PUT /api/return/add получава CreateReturnApiRequest: externalReference и externalClientId (задължителни), warehouseId, initialExternalOrderId, списък returnedProducts (ReturnProductApiInfo: code, quantity).

Трансфери

Ресурси: /api/transfer и /api/transfer-product.

Метод Път Описание
POST /api/transfer/validate-transfer/{transferId} валидиране на трансфер
POST /api/transfer/change-transfer-status/{transferId}/{transferStatus} смяна на статуса на трансфер
DELETE /api/transfer/delete-transfer/{transferId} изтриване на трансфер
POST /api/transfer-product/add-transfer-product добавяне на продукт в трансфер
DELETE /api/transfer-product/delete-transfer-product/{transferProductId} изтриване на продукт от трансфер

Добавянето на продукт (ScanClientRequest) включва: documentId, productId, quantity, sourceLocationCode, destinationLocationCode, batchCode, sn, ssccCode и др. Отговорът е ClientBaseResponse (message, status).

Инвентаризация

Базов ресурс: /api/inventory.

Метод Път Описание
POST /api/inventory/stock-adjustment корекция на наличност
GET /api/inventory/{id} информация за инвентаризация
GET /api/inventory/{id}/delta разликите (delta) на инвентаризацията

POST /api/inventory/stock-adjustment получава StockAdjustmentRequest: locationCode, inventoryId, model, quantity, recordedQuantity, stockBatchId, snList, stockBatchCode, expirationDate, productionDate, validate.

Поръчки за доставка

Базов ресурс: /api/purchase-order (изисква правото PURCHASE_ORDER).

Метод Път Описание
POST /api/purchase-order/add добавяне на поръчка за доставка
GET /api/purchase-order/{purchaseOrderId} детайли за поръчка за доставка
PATCH /api/purchase-order/update актуализиране
PATCH /api/purchase-order/{purchaseOrderId}/status/{status} смяна на статус
PATCH /api/purchase-order/{purchaseOrderId}/close затваряне
DELETE /api/purchase-order/{purchaseOrderId} изтриване
POST /api/purchase-order/add-product добавяне на продукт
DELETE /api/purchase-order/remove-product/{id} изтриване на продукт

CreatePurchaseOrderDTO: date (задължително, формат dd.MM.yyyy), arrivalDate, supplier (задължително), warehouseId, nirs, comment, documentNumber.

Производство

Базов ресурс: /api/production.

Метод Път Описание
POST /api/production/read списък на производствени поръчки с филтри
PUT /api/production/add добавяне на производствена поръчка
POST /api/production/close-simplified-production/order/{orderId} затваряне на опростено производство

Добавянето (AddProductionOrderRequest) изисква productId, quantity и thirdPartyReference. Отговорът (ProductionOrderApiResponse) съдържа списък от ProductionOrderInfo.

Номенклатори

Категории (/api/category)

Метод Път Описание
POST /api/category/read списък на категории
PUT /api/category/add добавяне
POST /api/category/update актуализиране
DELETE /api/category/delete изтриване

CategoryInfo: categoryId, externalReference, categoryName, categoryDetails, thirdPartyReference, active.

Мерни единици (/api/measurement-unit)

Метод Път Описание
PUT /api/measurement-unit/add добавяне
POST /api/measurement-unit/read списък
POST /api/measurement-unit/update актуализиране
DELETE /api/measurement-unit/delete изтриване

MeasurementUnitInfo: muId, name, code, details, status, thirdPartyReference.

Компании (/api/company)

Метод Път Описание
POST /api/company/read списък на компании (клиенти/доставчици)
PUT /api/company/add добавяне
POST /api/company/update актуализиране
DELETE /api/company/delete изтриване
GET /api/company/third-party-reference/{thirdPartyReference}/check проверява съществуването по външна референция

CompanyInfo: companyId, externalReference, name, cui, regNo, bank, iban, address, phone, email, website, type, active, thirdPartyReference.

Метаданни

Базов ресурс: /api/metadata. Леки endpoint-и за проверка на съществуването/съответствието на записите преди пълна синхронизация.

Метод Път Описание
POST /api/metadata/category метаданни за категории
POST /api/metadata/product метаданни за продукти
POST /api/metadata/product/by_model метаданни за продукти по модел
POST /api/metadata/order метаданни за поръчки

Всички получават ReadMetadataApiRequest (active, thirdPartyReferenceIds, models).

Известия, документи и тригери

Метод Път Описание
POST /api/notifies изпраща вътрешно известие (ExternalNotifyRequest: title, message, recipientId)
POST /api/printable-document/notice/{orderId} генерира известието за поръчката във формат PDF (application/pdf)
GET /softone/trigger/order/{id} задейства синхронизацията на поръчка
GET /softone/trigger/nir/{id} задейства синхронизацията на NIR
GET /softone/trigger/delete/order/{id} задейства изтриването на поръчка

Note

Тази документация обхваща текущата структура на API. За нови интеграции се свържете с екипа на Planograma за интеграционен акаунт и за съответствието на статусите, специфични за вашата система.