Documentación de la API¶
Esta sección contiene la documentación técnica de la API REST de Planograma para integradores y socios: endpoints, métodos HTTP, parámetros, estructuras de datos y ejemplos de solicitudes y respuestas. La API la utilizan los sistemas externos (ERP, plataformas de comercio electrónico).
Note
Los nombres de los campos, los parámetros, las rutas y los ejemplos JSON se presentan exactamente tal como aparecen en la aplicación. El texto explicativo está en español, pero las denominaciones técnicas permanecen sin cambios.
Autenticación¶
Todas las solicitudes a /api/** requieren la cabecera Authorization; su ausencia devuelve
401 Unauthorized con el mensaje Invalid API KEY.
Los endpoints de integración (productos, stock, pedidos, NIR, etc.) usan las credenciales de
usuario de Planograma enviadas en la cabecera Authorization, con el formato usuario:contraseña:
Authorization: Bearer <utilizator>:<parola>
El sistema divide el valor por el carácter : y autentica al usuario dentro del tenant
actual (determinado a partir del subdominio/host). Si el formato no es correcto o las credenciales son
inválidas, la respuesta es 401 Unauthorized.
Warning
Usa una cuenta dedicada de integración con los permisos mínimos necesarios. Las credenciales se transmiten únicamente por HTTPS.
Formato de las respuestas¶
La mayoría de los endpoints de integración devuelven un sobre estándar BaseApiResponse:
| Campo | Tipo | Descripción |
|---|---|---|
error |
Boolean | true si la solicitud ha fallado |
errorMessage |
String? | el mensaje de error (cuando error=true) |
status |
Int? | el código de estado |
data |
T? | los datos útiles (lista u objeto, según el endpoint) |
Los endpoints de tipo "read" devuelven en data una lista de objetos info (por ejemplo
ProductInfo, OrderInfo).
Note
Las claves de identificación externa (thirdPartyReference, externalReference, externalOrderId,
externalLineId) permiten a los integradores vincular los documentos de Planograma con sus propios
registros, sin depender de los ID internos de Planograma.
API de integración¶
Productos¶
Recurso base: /api/product.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/product/read |
listar productos con filtros |
| PUT | /api/product/add |
añadir producto |
| POST | /api/product/update |
actualizar productos |
| DELETE | /api/product/delete |
eliminar productos |
| GET | /api/product/third-party-reference/{thirdPartyReference}/check |
comprueba la existencia de un producto por referencia externa (devuelve Boolean) |
La lectura (POST /api/product/read) recibe ReadProductsFilterRequest (paginación mediante page
por defecto 1 y limit por defecto 100, más filtros: productIds, models, categoryIds,
thirdPartyReferenceIds, active, etc.) y devuelve ProductApiResponse con una lista de
ProductInfo.
Campos principales de 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
La adición (PUT /api/product/add) recibe AddProductApiRequest (campo obligatorio name,
code; la categoría se indica mediante categoryId o categoryExternalReference; más los atributos de
trazabilidad requiresSerialNumber, requiresBatchCode, etc.). La actualización
(EditProductApiRequest) apunta a los productos mediante productIds, y la eliminación
(DeleteProductApiRequest) mediante productIds o productModels.
Stock¶
Recurso base: api/stock.
| Método | Ruta | Descripción |
|---|---|---|
| POST | api/stock/remaining-stock/{productId} |
el stock disponible de un producto |
| POST | api/stock/all |
listado paginado de los stocks |
| POST | api/stock/detailed-report |
informe detallado de stock |
POST api/stock/remaining-stock/{productId} recibe CheckStockClientRequest (source,
includeReservations, location). Si location=true, el stock se desglosa por ubicaciones; de lo contrario
se devuelve el total agregado.
POST api/stock/all acepta los parámetros de paginación page (por defecto 0) y size (por defecto 10) y
el cuerpo GetStocksRequest:
{
"includeReservations": false,
"isActive": true,
"location": false
}
Respuesta PagedStockResponse:
content: [ StockResponse ], totalElements, totalPages, size, number
donde StockResponse tiene: productId, productName, productCode, remainingQuantity y,
cuando location=true, locationCode y locationName.
POST api/stock/detailed-report acepta los parámetros page (0), size (50), sortBy
(productName), sortDirection (asc) y devuelve un informe detallado.
Pedidos¶
Recurso base: /api/order.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/order/read |
listar pedidos con filtros |
| PUT | /api/order/add |
añadir pedido |
| POST | /api/order/update |
actualizar pedidos |
| POST | /api/order/order-ready |
comprueba si un pedido está listo |
| DELETE | /api/order/delete |
eliminar pedidos |
| PUT | /api/order/print-document |
imprimir documento de pedido |
| POST | /api/order/picking-info |
información de picking |
| POST | /api/order/start-picking |
iniciar picking |
| PATCH | /api/order/update-status |
actualizar estado del pedido |
| PATCH | /api/order/update-awb-link |
actualizar enlace AWB externo |
| POST | /api/order/check-orders-in-waiting-for-supply |
reverificación de pedidos en espera de stock |
La lectura (ReadOrdersFilterRequest) filtra por orderIds, externalOrderIds,
companyExternalReferences, warehouseIds, statuses, orderType, thirdPartyReferenceIds y
devuelve OrderApiResponse con una lista de OrderInfo.
Campos principales de OrderInfo:
orderId, externalOrderId, thirdPartyReference,
warehouseId, warehouseName, warehouseCode, status, orderType,
requiresValidation, dateAdded, isReady, picked, comment,
awbExternalLink, invoiceExternalLink,
numberOfEnvelopes, numberOfPackages, totalWeight, fulfilledWeight,
orderProducts, orderRequirements,
companyThirdPartyReference, companyExternalReference
La adición (PUT /api/order/add) recibe CreateOrderApiRequest. Ejemplo simplificado:
{
"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 es obligatorio y debe ser único. Las líneas (CreateOrderProductApiRequest)
identifican el producto mediante productModel (o productId); locationCode reserva el stock de una
ubicación determinada.
La actualización (UpdateOrderApiRequest) apunta a los pedidos mediante orderIds, externalOrderIds o
thirdPartyReferenceIds, y los campos nuevos se indican en updateFields. PATCH
/api/order/update-status (UpdateOrderStatusRequest: orderId, status, awbExternalLink)
cambia el estado de un pedido.
POST /api/order/picking-info responde con PickingInfoApiResponse: picked, numberOfPackages,
numberOfEnvelopes, totalWeight, pickerId, pickerUsername.
Entradas (NIR)¶
Recurso base: /api/nir.
| Método | Ruta | Descripción |
|---|---|---|
| PUT | /api/nir/add |
añadir NIR |
| PATCH | /api/nir/update |
actualizar NIR |
| POST | /api/nir/read |
listar NIR con filtros |
| POST | /api/nir/validation-info |
información de validación |
| DELETE | /api/nir/delete |
eliminar NIR |
| PATCH | /api/nir/update-external-reference |
actualizar referencia externa |
| PATCH | /api/nir/update-packaging-type |
actualizar tipo de embalaje |
La adición (CreateNirApiRequest) requiere externalReference (obligatorio), warehouseId,
supplierId, la lista nirProducts (NirProductApiInfo: code y quantity obligatorios,
externalLineId) y validationRequired (por defecto true).
La lectura (ReadNirsFilterRequest) filtra por nirIds, externalOrderIds, externalClientIds,
warehouseIds, thirdPartyReferenceIds y devuelve NirApiResponse con la lista de NirInfo
(nirId, externalReference, warehouseId, validated, status, nirProducts,
thirdPartyReference, purchaseOrders).
POST /api/nir/validation-info (NirValidationInfoApiRequest: nirId o externalReference)
devuelve NirValidationInfoApiResponse con validated, scanInfoList, userUsername, etc.
Devoluciones¶
Recurso base: /api/return.
| Método | Ruta | Descripción |
|---|---|---|
| PUT | /api/return/add |
añadir devolución |
| POST | /api/return/read |
listar devoluciones con filtros |
| POST | /api/return/validation-info |
información de validación de devolución |
PUT /api/return/add recibe CreateReturnApiRequest: externalReference y externalClientId
(obligatorios), warehouseId, initialExternalOrderId, la lista returnedProducts
(ReturnProductApiInfo: code, quantity).
Transferencias¶
Recursos: /api/transfer y /api/transfer-product.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/transfer/validate-transfer/{transferId} |
validar transferencia |
| POST | /api/transfer/change-transfer-status/{transferId}/{transferStatus} |
cambiar estado de la transferencia |
| DELETE | /api/transfer/delete-transfer/{transferId} |
eliminar transferencia |
| POST | /api/transfer-product/add-transfer-product |
añadir producto a la transferencia |
| DELETE | /api/transfer-product/delete-transfer-product/{transferProductId} |
eliminar producto de la transferencia |
La adición de un producto (ScanClientRequest) incluye: documentId, productId, quantity,
sourceLocationCode, destinationLocationCode, batchCode, sn, ssccCode, etc. La respuesta es
ClientBaseResponse (message, status).
Inventario¶
Recurso base: /api/inventory.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/inventory/stock-adjustment |
ajuste de stock |
| GET | /api/inventory/{id} |
información de inventario |
| GET | /api/inventory/{id}/delta |
las diferencias (delta) del inventario |
POST /api/inventory/stock-adjustment recibe StockAdjustmentRequest: locationCode,
inventoryId, model, quantity, recordedQuantity, stockBatchId, snList,
stockBatchCode, expirationDate, productionDate, validate.
Órdenes de compra¶
Recurso base: /api/purchase-order (requiere el permiso PURCHASE_ORDER).
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/purchase-order/add |
añadir orden de compra |
| GET | /api/purchase-order/{purchaseOrderId} |
detalles de la orden de compra |
| PATCH | /api/purchase-order/update |
actualizar |
| PATCH | /api/purchase-order/{purchaseOrderId}/status/{status} |
cambiar estado |
| PATCH | /api/purchase-order/{purchaseOrderId}/close |
cerrar |
| DELETE | /api/purchase-order/{purchaseOrderId} |
eliminar |
| POST | /api/purchase-order/add-product |
añadir producto |
| DELETE | /api/purchase-order/remove-product/{id} |
eliminar producto |
CreatePurchaseOrderDTO: date (obligatorio, formato dd.MM.yyyy), arrivalDate, supplier
(obligatorio), warehouseId, nirs, comment, documentNumber.
Producción¶
Recurso base: /api/production.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/production/read |
listar órdenes de producción con filtros |
| PUT | /api/production/add |
añadir orden de producción |
| POST | /api/production/close-simplified-production/order/{orderId} |
cerrar producción simplificada |
La adición (AddProductionOrderRequest) requiere productId, quantity y thirdPartyReference.
La respuesta (ProductionOrderApiResponse) contiene una lista de ProductionOrderInfo.
Nomencladores¶
Categorías (/api/category)¶
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/category/read |
listar categorías |
| PUT | /api/category/add |
añadir |
| POST | /api/category/update |
actualizar |
| DELETE | /api/category/delete |
eliminar |
CategoryInfo: categoryId, externalReference, categoryName, categoryDetails,
thirdPartyReference, active.
Unidades de medida (/api/measurement-unit)¶
| Método | Ruta | Descripción |
|---|---|---|
| PUT | /api/measurement-unit/add |
añadir |
| POST | /api/measurement-unit/read |
listar |
| POST | /api/measurement-unit/update |
actualizar |
| DELETE | /api/measurement-unit/delete |
eliminar |
MeasurementUnitInfo: muId, name, code, details, status, thirdPartyReference.
Empresas (/api/company)¶
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/company/read |
listar empresas (clientes/proveedores) |
| PUT | /api/company/add |
añadir |
| POST | /api/company/update |
actualizar |
| DELETE | /api/company/delete |
eliminar |
| GET | /api/company/third-party-reference/{thirdPartyReference}/check |
comprueba la existencia por referencia externa |
CompanyInfo: companyId, externalReference, name, cui, regNo, bank, iban,
address, phone, email, website, type, active, thirdPartyReference.
Metadatos¶
Recurso base: /api/metadata. Endpoints ligeros para verificar la existencia/mapeo de los
registros, antes de una sincronización completa.
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/metadata/category |
metadatos de categorías |
| POST | /api/metadata/product |
metadatos de productos |
| POST | /api/metadata/product/by_model |
metadatos de productos por modelo |
| POST | /api/metadata/order |
metadatos de pedidos |
Todos reciben ReadMetadataApiRequest (active, thirdPartyReferenceIds, models).
Notificaciones, documentos y disparadores¶
| Método | Ruta | Descripción |
|---|---|---|
| POST | /api/notifies |
envía una notificación interna (ExternalNotifyRequest: title, message, recipientId) |
| POST | /api/printable-document/notice/{orderId} |
genera el albarán del pedido en formato PDF (application/pdf) |
| GET | /softone/trigger/order/{id} |
dispara la sincronización de un pedido |
| GET | /softone/trigger/nir/{id} |
dispara la sincronización de un NIR |
| GET | /softone/trigger/delete/order/{id} |
dispara la eliminación de un pedido |
Note
Esta documentación cubre la estructura actual de la API. Para nuevas integraciones, contacta con el equipo de Planograma para obtener una cuenta de integración y para el mapeo de los estados específicos de tu sistema.