API Documentation¶
This section contains the technical documentation of the Planograma REST API for integrators and partners: endpoints, HTTP methods, parameters, data structures and examples of requests and responses. The API is used by external systems (ERPs, e-commerce platforms).
Note
Field names, parameters, paths and JSON examples are presented exactly as they appear in the application. The explanatory text is in English, but the technical names remain unchanged.
Authentication¶
All requests to /api/** require the Authorization header; its absence returns
401 Unauthorized with the message Invalid API KEY.
The integration endpoints (products, stock, orders, NIRs, etc.) use the Planograma user
credentials sent in the Authorization header, in the form user:password:
Authorization: Bearer <user>:<password>
The system splits the value on the : character and authenticates the user within the current
tenant (determined from the subdomain/host). If the format is incorrect or the credentials are
invalid, the response is 401 Unauthorized.
Warning
Use a dedicated integration account with the minimum required permissions. Credentials are transmitted only over HTTPS.
Response format¶
Most integration endpoints return a standard BaseApiResponse envelope:
| Field | Type | Description |
|---|---|---|
error |
Boolean | true if the request failed |
errorMessage |
String? | the error message (when error=true) |
status |
Int? | the status code |
data |
T? | the useful payload (list or object, depending on the endpoint) |
"Read" endpoints return in data a list of info objects (for example
ProductInfo, OrderInfo).
Note
The external identification keys (thirdPartyReference, externalReference, externalOrderId,
externalLineId) allow integrators to link Planograma documents to their own
records, without depending on the internal Planograma IDs.
Integration API¶
Products¶
Base resource: /api/product.
| Method | Path | Description |
|---|---|---|
| POST | /api/product/read |
list products with filters |
| PUT | /api/product/add |
add product |
| POST | /api/product/update |
update products |
| DELETE | /api/product/delete |
delete products |
| GET | /api/product/third-party-reference/{thirdPartyReference}/check |
check the existence of a product by external reference (returns Boolean) |
Reading (POST /api/product/read) receives ReadProductsFilterRequest (pagination via page
default 1 and limit default 100, plus filters: productIds, models, categoryIds,
thirdPartyReferenceIds, active, etc.) and returns ProductApiResponse with a list of
ProductInfo.
Main ProductInfo fields:
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
Adding (PUT /api/product/add) receives AddProductApiRequest (required field name,
code; the category is indicated through categoryId or categoryExternalReference; plus the
traceability attributes requiresSerialNumber, requiresBatchCode, etc.). Updating
(EditProductApiRequest) targets products through productIds, while deletion
(DeleteProductApiRequest) through productIds or productModels.
Stock¶
Base resource: api/stock.
| Method | Path | Description |
|---|---|---|
| POST | api/stock/remaining-stock/{productId} |
the available stock for a product |
| POST | api/stock/all |
paginated listing of stocks |
| POST | api/stock/detailed-report |
detailed stock report |
POST api/stock/remaining-stock/{productId} receives CheckStockClientRequest (source,
includeReservations, location). If location=true, the stock is broken down by location;
otherwise the aggregated total is returned.
POST api/stock/all accepts the pagination parameters page (default 0) and size (default 10) and
the body GetStocksRequest:
{
"includeReservations": false,
"isActive": true,
"location": false
}
Response PagedStockResponse:
content: [ StockResponse ], totalElements, totalPages, size, number
where StockResponse has: productId, productName, productCode, remainingQuantity and,
when location=true, locationCode and locationName.
POST api/stock/detailed-report accepts the parameters page (0), size (50), sortBy
(productName), sortDirection (asc) and returns a detailed report.
Orders¶
Base resource: /api/order.
| Method | Path | Description |
|---|---|---|
| POST | /api/order/read |
list orders with filters |
| PUT | /api/order/add |
add order |
| POST | /api/order/update |
update orders |
| POST | /api/order/order-ready |
check whether an order is ready |
| DELETE | /api/order/delete |
delete orders |
| PUT | /api/order/print-document |
print order document |
| POST | /api/order/picking-info |
picking information |
| POST | /api/order/start-picking |
start picking |
| PATCH | /api/order/update-status |
update order status |
| PATCH | /api/order/update-awb-link |
update external AWB link |
| POST | /api/order/check-orders-in-waiting-for-supply |
recheck orders waiting for stock |
Reading (ReadOrdersFilterRequest) filters by orderIds, externalOrderIds,
companyExternalReferences, warehouseIds, statuses, orderType, thirdPartyReferenceIds and
returns OrderApiResponse with a list of OrderInfo.
Main OrderInfo fields:
orderId, externalOrderId, thirdPartyReference,
warehouseId, warehouseName, warehouseCode, status, orderType,
requiresValidation, dateAdded, isReady, picked, comment,
awbExternalLink, invoiceExternalLink,
numberOfEnvelopes, numberOfPackages, totalWeight, fulfilledWeight,
orderProducts, orderRequirements,
companyThirdPartyReference, companyExternalReference
Adding (PUT /api/order/add) receives CreateOrderApiRequest. Simplified example:
{
"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 is required and must be unique. The lines (CreateOrderProductApiRequest)
identify the product through productModel (or productId); locationCode reserves the stock from
a specific location.
Updating (UpdateOrderApiRequest) targets orders through orderIds, externalOrderIds or
thirdPartyReferenceIds, and the new fields are passed in updateFields. PATCH
/api/order/update-status (UpdateOrderStatusRequest: orderId, status, awbExternalLink)
changes the status of an order.
POST /api/order/picking-info responds with PickingInfoApiResponse: picked, numberOfPackages,
numberOfEnvelopes, totalWeight, pickerId, pickerUsername.
Goods receipts (NIR)¶
Base resource: /api/nir.
| Method | Path | Description |
|---|---|---|
| PUT | /api/nir/add |
add NIR |
| PATCH | /api/nir/update |
update NIR |
| POST | /api/nir/read |
list NIRs with filters |
| POST | /api/nir/validation-info |
validation information |
| DELETE | /api/nir/delete |
delete NIRs |
| PATCH | /api/nir/update-external-reference |
update external reference |
| PATCH | /api/nir/update-packaging-type |
update packaging type |
Adding (CreateNirApiRequest) requires externalReference (required), warehouseId,
supplierId, the list nirProducts (NirProductApiInfo: code and quantity required,
externalLineId) and validationRequired (default true).
Reading (ReadNirsFilterRequest) filters by nirIds, externalOrderIds, externalClientIds,
warehouseIds, thirdPartyReferenceIds and returns NirApiResponse with a list of NirInfo
(nirId, externalReference, warehouseId, validated, status, nirProducts,
thirdPartyReference, purchaseOrders).
POST /api/nir/validation-info (NirValidationInfoApiRequest: nirId or externalReference)
returns NirValidationInfoApiResponse with validated, scanInfoList, userUsername, etc.
Returns¶
Base resource: /api/return.
| Method | Path | Description |
|---|---|---|
| PUT | /api/return/add |
add return |
| POST | /api/return/read |
list returns with filters |
| POST | /api/return/validation-info |
return validation information |
PUT /api/return/add receives CreateReturnApiRequest: externalReference and externalClientId
(required), warehouseId, initialExternalOrderId, the list returnedProducts
(ReturnProductApiInfo: code, quantity).
Transfers¶
Resources: /api/transfer and /api/transfer-product.
| Method | Path | Description |
|---|---|---|
| POST | /api/transfer/validate-transfer/{transferId} |
validate transfer |
| POST | /api/transfer/change-transfer-status/{transferId}/{transferStatus} |
change transfer status |
| DELETE | /api/transfer/delete-transfer/{transferId} |
delete transfer |
| POST | /api/transfer-product/add-transfer-product |
add product to transfer |
| DELETE | /api/transfer-product/delete-transfer-product/{transferProductId} |
remove product from transfer |
Adding a product (ScanClientRequest) includes: documentId, productId, quantity,
sourceLocationCode, destinationLocationCode, batchCode, sn, ssccCode, etc. The response is
ClientBaseResponse (message, status).
Inventory¶
Base resource: /api/inventory.
| Method | Path | Description |
|---|---|---|
| POST | /api/inventory/stock-adjustment |
stock adjustment |
| GET | /api/inventory/{id} |
inventory information |
| GET | /api/inventory/{id}/delta |
the inventory differences (delta) |
POST /api/inventory/stock-adjustment receives StockAdjustmentRequest: locationCode,
inventoryId, model, quantity, recordedQuantity, stockBatchId, snList,
stockBatchCode, expirationDate, productionDate, validate.
Purchase orders¶
Base resource: /api/purchase-order (requires the PURCHASE_ORDER permission).
| Method | Path | Description |
|---|---|---|
| POST | /api/purchase-order/add |
add purchase order |
| GET | /api/purchase-order/{purchaseOrderId} |
purchase order details |
| PATCH | /api/purchase-order/update |
update |
| PATCH | /api/purchase-order/{purchaseOrderId}/status/{status} |
change status |
| PATCH | /api/purchase-order/{purchaseOrderId}/close |
close |
| DELETE | /api/purchase-order/{purchaseOrderId} |
delete |
| POST | /api/purchase-order/add-product |
add product |
| DELETE | /api/purchase-order/remove-product/{id} |
remove product |
CreatePurchaseOrderDTO: date (required, format dd.MM.yyyy), arrivalDate, supplier
(required), warehouseId, nirs, comment, documentNumber.
Production¶
Base resource: /api/production.
| Method | Path | Description |
|---|---|---|
| POST | /api/production/read |
list production orders with filters |
| PUT | /api/production/add |
add production order |
| POST | /api/production/close-simplified-production/order/{orderId} |
close simplified production |
Adding (AddProductionOrderRequest) requires productId, quantity and thirdPartyReference.
The response (ProductionOrderApiResponse) contains a list of ProductionOrderInfo.
Nomenclatures¶
Categories (/api/category)¶
| Method | Path | Description |
|---|---|---|
| POST | /api/category/read |
list categories |
| PUT | /api/category/add |
add |
| POST | /api/category/update |
update |
| DELETE | /api/category/delete |
delete |
CategoryInfo: categoryId, externalReference, categoryName, categoryDetails,
thirdPartyReference, active.
Measurement units (/api/measurement-unit)¶
| Method | Path | Description |
|---|---|---|
| PUT | /api/measurement-unit/add |
add |
| POST | /api/measurement-unit/read |
list |
| POST | /api/measurement-unit/update |
update |
| DELETE | /api/measurement-unit/delete |
delete |
MeasurementUnitInfo: muId, name, code, details, status, thirdPartyReference.
Companies (/api/company)¶
| Method | Path | Description |
|---|---|---|
| POST | /api/company/read |
list companies (clients/suppliers) |
| PUT | /api/company/add |
add |
| POST | /api/company/update |
update |
| DELETE | /api/company/delete |
delete |
| GET | /api/company/third-party-reference/{thirdPartyReference}/check |
check existence by external reference |
CompanyInfo: companyId, externalReference, name, cui, regNo, bank, iban,
address, phone, email, website, type, active, thirdPartyReference.
Metadata¶
Base resource: /api/metadata. Lightweight endpoints for checking the existence/mapping
of records, before a full synchronization.
| Method | Path | Description |
|---|---|---|
| POST | /api/metadata/category |
category metadata |
| POST | /api/metadata/product |
product metadata |
| POST | /api/metadata/product/by_model |
product metadata by model |
| POST | /api/metadata/order |
order metadata |
All receive ReadMetadataApiRequest (active, thirdPartyReferenceIds, models).
Notifications, documents and triggers¶
| Method | Path | Description |
|---|---|---|
| POST | /api/notifies |
send an internal notification (ExternalNotifyRequest: title, message, recipientId) |
| POST | /api/printable-document/notice/{orderId} |
generate the order notice in PDF format (application/pdf) |
| GET | /softone/trigger/order/{id} |
trigger the synchronization of an order |
| GET | /softone/trigger/nir/{id} |
trigger the synchronization of a NIR |
| GET | /softone/trigger/delete/order/{id} |
trigger the deletion of an order |
Note
This documentation covers the current structure of the API. For new integrations, contact the Planograma team for an integration account and for the mapping of the statuses specific to your system.