Stock Movements
Endpoints pour consulter l'historique des mouvements de stock
Stock Movements API
Endpoints pour accéder à l'historique des entrées, sorties et ajustements de stock.
Lister les mouvements de stock
GET /v1/public-api/stock-movements
Scope requis: read:stock-movements
Paramètres de requête
| Paramètre | Type | Description |
|---|---|---|
page | number | Numéro de page (défaut: 1) |
limit | number | Éléments par page (défaut: 20, max: 100) |
dateFrom | string | Date de début (ISO 8601) |
dateTo | string | Date de fin (ISO 8601) |
type | string | Type de mouvement : IN, OUT, ADJUSTMENT |
productId | string | Filtrer par produit |
warehouseId | string | Filtrer par entrepôt |
Exemple de requête
curl -X GET "https://api.nerpsuite.com/v1/public-api/stock-movements?dateFrom=2024-01-01&dateTo=2024-01-31&type=OUT" \
-H "X-API-Key: sk_live_xxx"
Réponse
{
"data": [
{
"id": "mov_001",
"batchId": "batch_abc",
"batchNumber": "LOT-2024-0042",
"productId": "prod_001",
"productName": "iPhone 15 Pro",
"sku": "IPHONE-15-PRO-128",
"warehouseId": "wh_001",
"warehouseName": "Entrepôt Central",
"type": "OUT",
"quantity": 2,
"previousQty": 50,
"newQty": 48,
"sourceType": "CUSTOMER_ORDER",
"sourceId": "ord_abc123",
"notes": null,
"createdAt": "2024-01-25T10:30:00Z"
},
{
"id": "mov_002",
"batchId": "batch_def",
"batchNumber": "LOT-2024-0038",
"productId": "prod_003",
"productName": "Coque iPhone 15",
"sku": "CASE-IPHONE-15-BLK",
"warehouseId": "wh_001",
"warehouseName": "Entrepôt Central",
"type": "OUT",
"quantity": 1,
"previousQty": 120,
"newQty": 119,
"sourceType": "CUSTOMER_ORDER",
"sourceId": "ord_abc123",
"notes": null,
"createdAt": "2024-01-25T10:30:00Z"
}
],
"total": 342,
"page": 1,
"limit": 20,
"totalPages": 18
}
Obtenir un mouvement
GET /v1/public-api/stock-movements/:id
Scope requis: read:stock-movements
Paramètres de chemin
| Paramètre | Type | Description |
|---|---|---|
id | string | ID du mouvement |
Exemple de requête
curl -X GET "https://api.nerpsuite.com/v1/public-api/stock-movements/mov_001" \
-H "X-API-Key: sk_live_xxx"
Réponse
Même format que dans la liste, mais pour un seul mouvement.
Champs de réponse
| Champ | Type | Description |
|---|---|---|
id | string | Identifiant unique |
batchId | string | ID du lot concerné |
batchNumber | string | Numéro de lot |
productId | string | ID du produit |
productName | string | Nom du produit |
sku | string | SKU du produit |
warehouseId | string | ID de l'entrepôt |
warehouseName | string | Nom de l'entrepôt |
type | string | Type de mouvement |
quantity | number | Quantité déplacée |
previousQty | number | Quantité avant mouvement |
newQty | number | Quantité après mouvement |
sourceType | string | Source du mouvement |
sourceId | string | ID de la source |
notes | string | Notes additionnelles |
createdAt | string | Date du mouvement (ISO 8601) |
Types de mouvement
| Type | Description |
|---|---|
IN | Entrée en stock (réception fournisseur, retour) |
OUT | Sortie de stock (vente, expédition) |
ADJUSTMENT | Ajustement manuel (inventaire, correction) |
Sources de mouvement
| Source | Description |
|---|---|
SUPPLIER_ORDER | Réception d'une commande fournisseur |
CUSTOMER_ORDER | Vente à un client |
ADJUSTMENT | Ajustement manuel |
TRANSFER | Transfert entre entrepôts |
DISPOSAL | Mise au rebut (expiration, dommage) |
Cas d'usage
Analyse de la rotation des stocks avec Power BI
async function getStockRotation(productId, dateFrom, dateTo) {
const response = await fetch(
`/v1/public-api/stock-movements?productId=${productId}&dateFrom=${dateFrom}&dateTo=${dateTo}`,
{ headers: { 'X-API-Key': apiKey } }
);
const { data } = await response.json();
const inQty = data.filter(m => m.type === 'IN').reduce((sum, m) => sum + m.quantity, 0);
const outQty = data.filter(m => m.type === 'OUT').reduce((sum, m) => sum + m.quantity, 0);
return { inQty, outQty, netChange: inQty - outQty };
}
Tracer les mouvements par entrepôt
async function getMovementsByWarehouse(warehouseId) {
let allMovements = [];
let page = 1;
let hasMore = true;
while (hasMore) {
const response = await fetch(
`/v1/public-api/stock-movements?warehouseId=${warehouseId}&page=${page}&limit=100`,
{ headers: { 'X-API-Key': apiKey } }
);
const result = await response.json();
allMovements = allMovements.concat(result.data);
hasMore = page < result.totalPages;
page++;
}
return allMovements;
}