Saltar al contenido principal

Stock BETA

Endpoints para registrar movimientos de stock desde un sistema externo.

Endpoints en beta

Pueden cambiar de contrato, comportamiento o ser retirados antes de su release definitivo.

Movimiento de stock

Permite registrar un movimiento de stock (ingreso, egreso o transferencia).

POSTBETA/integraciones/terceros/stock/movimiento
Rate limiting

Este endpoint tiene un rate limit de 3 segundos entre requests consecutivas. Si se envía una request antes de que pase la ventana, la API responde 403 Forbidden.

Request

export interface StockMovimiento {
depositoId: number;
motivoId: number; // obligatorio — ver endpoint de motivos
tipo: TipoStockTransaccion;
fecha?: string; // ISO 8601 — si no se envía, usa fecha actual
detalle?: string;
sref?: string; // referencia externa

// solo para transferencias
sucursalDosId?: number; // sucursal del depósito destino
depositoDosId?: number; // depósito destino

articulos: StockArticulo[];
}
export interface StockArticulo {
articuloId: number;
cantidad: number;
colorId?: number;
talleId?: number;
precio?: number;
detalle?: string;
sref?: string; // referencia externa del item
}

Tipos de transacción

export enum TipoStockTransaccion {
INGRESO_MANUAL = 4,
EGRESO_MANUAL = 5,
TRANSFERENCIA = 10,
PRODUCCION = 19,
}
Nota

Para transferencias entre depósitos usar TRANSFERENCIA (10) junto con sucursalDosId y depositoDosId. El sucursalDosId correspondiente se obtiene desde GET /integraciones/terceros/depositos.

Respuesta

NxResultado

Validaciones

ReglaError
motivoId es obligatorio y debe ser mayor a 0"El motivoId es obligatorio para movimientos de terceros"
Una transferencia requiere sucursal y depósito destino"El sucursalDosId es obligatorio para transferencias de stock" / "El depositoDosId es obligatorio para transferencias de stock"
Todos los depósitos deben caer en una sucursal habilitada403 con "El deposito N pertenece a una sucursal no habilitada para esta integracion..."
Body inválido o malformado403 con "Los datos de stock recibidos son incorrectos"
Request dentro de la ventana de rate limit (3s)403 Forbidden
Sucursales habilitadas

El movimiento de stock es una escritura, así que se valida el perímetro completo: depositoId, depositoDosId, sucursalId, sucursalDosId y también los overrides por ítem (articulos[].depositoId / articulos[].depositoDosId). Todos tienen que caer en las sucursales habilitadas para tu integración; si alguno no, el request completo responde 403 sin registrar nada.

Ejemplo

curl --request POST \
--url https://api.test-ninox.com.ar/integraciones/terceros/stock/movimiento \
--header 'X-NX-TOKEN: {TU_TOKEN}' \
--header 'Content-Type: application/json' \
--data '{
"depositoId": 1,
"motivoId": 5,
"tipo": 6,
"detalle": "Ingreso desde sistema externo",
"articulos": [
{ "articuloId": 100, "cantidad": 10, "colorId": 1, "talleId": 2 },
{ "articuloId": 200, "cantidad": 5 }
]
}'

Motivos de stock

Devuelve los motivos disponibles para movimientos de stock. El motivoId retornado es el que debe enviarse en el endpoint de movimiento.

GETBETA/integraciones/terceros/motivos

Respuesta

export interface Motivo {
motivoId: number;
nombre: string;
creado: string;
modificado: string;
eliminado: boolean;
modulos: number[];
}

Ejemplo

curl --request GET \
--url https://api.test-ninox.com.ar/integraciones/terceros/motivos \
--header 'X-NX-TOKEN: {TU_TOKEN}' \
--header 'Content-Type: application/json'
Recomendación

Consultá este endpoint una vez y cacheá los motivos localmente. No cambian con frecuencia.

Flujo recomendado

  1. Consultar /motivos para obtener los motivos disponibles.
  2. Elegir el motivoId que corresponda a la operación.
  3. Armar el payload con el depósito, tipo de transacción, motivo y artículos.
  4. Enviar a /stock/movimiento.
  5. Verificar la respuesta NxResultado; si tipo es 1 (OK), el movimiento se registró correctamente.

Ver también