Référence technique
Présentation de l’API
API AuditStock
Change logs
v9.0 → v10.0
- La v10.0 devient la version de référence et la version recommandée de l'API.
- ** ⚠️ Important !** À partir de la v10.0, la méthode
start-import-sessionnécessite d'indiquer dans le corps de la requête s'il s'agit d'un inventaire de début ou d'un inventaire de fin pour l'import de l'inventaire produit (tarif/quantité). VoirPOST /api/v10.0/imports/start-import-sessionpour plus de détails. - Nouveau endpoint
POST /api/v10.0/imports/import-product-list-from-filepour importer la liste initiale des produits via un fichiermultipart/form-data. - Nouveau endpoint
GET /api/v10.0/imports/initial-product-list-from-file-result/{longTaskId}pour récupérer le résultat asynchrone de l'import fichier. - Tous les endpoints d'import disponibles en v9.0 restent disponibles en v10.0.
v8.0 → v9.0
- Sur
Delivery, vous pouvez maintenant indiquer le code client de manière optionnelle .
v7.0 → v8.0
- Sur la commande client, vous pouvez maintenant indiquer le nom du client en plus du code client .
Cette API permet l'import de données depuis vos systèmes externes vers AuditStock.
⚠️⚠️ BREAKING CHANGE ⚠️⚠️
Toutes les versions de l'API de v1.0 à v8.0 sont désormais OBSOLÈTES.
Merci de migrer vers la version v10.0 dès que possible.
Les versions obsolètes resteront disponibles temporairement pour assurer la transition, mais leur support sera arrêté prochainement.
Dernière version disponible : v10.0
Version recommandée : v10.0
Résumé des nouveautés v10.0
- La v10.0 est désormais la version de référence de la documentation.
- Les endpoints déjà disponibles en v9.0 restent utilisables en v10.0.
- L'import initial du catalogue peut maintenant être lancé à partir d'un fichier en
multipart/form-data. - Le résultat de cet import fichier est récupérable de manière asynchrone via un identifiant de tâche longue.
- Dans les URLs d'appel, continuez d'utiliser explicitement le segment de version
v10.0.
Méthodes d'import disponibles
Gestion de la date d'import
1. Démarrer une session d'import
Endpoint: POST /api/v{version}/imports/start-import-session
Versions d'API supportées : ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
⚠️ NOUVELLE MÉTHODE en v7.0 - Remplace set-date pour les versions antérieures
Permet de démarrer une session d'import massif.
Cette méthode :
- Configure le systeme en mode file d'attente pour les imports
- Définit le sens de traitement des données importées
Il faudra aller jusqu'a la fin de l'import pour finaliser la session via la methode Process-Import
⚠️ Important à partir de la v10.0
Il faut désormais indiquer dans le corps de la requête la direction de l'inventaire produit.
Cette information concerne uniquement l'import d'inventaire produit (notamment tarif et quantité) et permet d'indiquer si les données envoyées correspondent :
FromEnd: il s'agit d'un inventaire de finFromStart: il s'agit d'un inventaire de début
Ce paramètre change donc le sens métier du traitement appliqué à l'inventaire importé.
Par exemple :
- utilisez
FromStartsi vous importez un inventaire de début - utilisez
FromEndsi vous importez un inventaire de fin
Autrement dit, ce paramètre ne sert pas à décrire un simple ordre technique de lecture de fichier, mais bien à préciser la nature de l'inventaire produit importé.
Modèle : StartImportSessionRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Valeurs possibles |
|---|---|---|---|---|
direction |
string | ✅ | Type d'inventaire produit importé | FromEnd = inventaire de fin, FromStart = inventaire de début |
Exemple de requête:
{
"direction": "FromEnd"
}
Exemple alternatif:
{
"direction": "FromStart"
}
Valeur par défaut côté contrat : FromEnd
Réponse : HTTP 202 Accepted
2. Finaliser la session d'import
Endpoint: POST /api/v{version}/imports/process-import
Versions d'API supportées : ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
⚠️ NOUVELLE MÉTHODE en v7.0 - Remplace reset-date pour les versions antérieures
Permet de finaliser la session d'import en cours et de revenir à l'état normal.
⚠️ Information importante
- Cette méthode ne doit être appelée qu'à la fin de l'import massif.
- Traite et finalise toutes les données importées
- Calcule les KPI finaux
- Réautorise les imports pour la prochaine session
- Le traitement peut prendre plusieurs heures selon le volume de données importées
Cette méthode :
- Rétablit l'utilisation de la date système actuelle
- Finalise tous les calculs de la session d'import
- Passe l'état d'import en mode "Allowed"
- Aucun paramètre n'est requis
Paramètres : Aucun (corps de requête vide)
Exemple de requête:
{}
Réponse : HTTP 200 OK avec rapport de traitement
3. Rapport d'import
Endpoint: GET /api/v{version}/imports/report
Versions d'API supportées : ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 5.0 de l'API.
Permet de récupérer un rapport synthétique des derniers imports effectués dans le système. Important : Cette méthode est en lecture seule et ne nécessite aucun paramètre.
Cette méthode retourne :
- Les informations sur la dernière commande client importée (vente)
- Les informations sur la dernière livraison importée
- Les informations sur la dernière commande fournisseur importée (achat)
- Les informations sur la dernière réception fournisseur importée
- Le nombre total d'éléments importés pour chaque type
Réponse: ImportReport
| Champ | Type | Description |
|---|---|---|
ImportAllowed |
bool | Indique qu'il est possible d'importer des données |
LastImportedSaleCode |
string | Code de la dernière commande client importée |
LastImportedSaleDate |
datetime | Date de la dernière commande client |
ImportedSaleCount |
int | Nombre total de commandes clients importées |
LastImportedDeliveryCode |
string | Code de la dernière livraison importée |
LastImportedDeliveryDate |
datetime | Date de la dernière livraison |
ImportedDeliveryCount |
int | Nombre total de livraisons importées |
LastImportedPurchaseCode |
string | Code de la dernière commande fournisseur importée |
LastImportedPurchaseDate |
datetime | Date de la dernière commande fournisseur |
ImportedPurchaseCount |
int | Nombre total de commandes fournisseur importées |
LastImportedReceptionCode |
string | Code de la dernière réception importée |
LastImportedReceptionDate |
datetime | Date de la dernière réception |
ImportedReceptionCount |
int | Nombre total de réceptions importées |
Exemple de réponse:
{
"lastImportedSaleCode": "SO-2025-0542",
"lastImportedSaleDate": "2025-01-15T14:30:00Z",
"importedSaleCount": 542,
"lastImportedDeliveryCode": "DEL-2025-0489",
"lastImportedDeliveryDate": "2025-01-15T16:45:00Z",
"importedDeliveryCount": 489,
"lastImportedPurchaseCode": "PO-2025-0128",
"lastImportedPurchaseDate": "2025-01-14T09:00:00Z",
"importedPurchaseCount": 128,
"lastImportedReceptionCode": "REC-2025-0095",
"lastImportedReceptionDate": "2025-01-15T11:20:00Z",
"importedReceptionCount": 95
}
Cas d'usage: Idéal pour surveiller l'état des imports, vérifier que les synchronisations fonctionnent correctement, diagnostiquer des problèmes d'import, ou afficher un tableau de bord des imports dans votre application.
4. Import de la liste de produits initiale
Endpoint: POST /api/v{version}/imports/import-product-list
Versions d'API supportées : ⚠️ v1.0 | ⚠️ v2.0 | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Permet d'importer une liste de produits avec leur stock initial dans un entrepôt spécifique.
⚠️ Informations importantes
- Cet import n'est à réaliser qu'une seule fois lors de la création initiale du catalogue produit
- La date initiale permet de définir à quelle date le stock initial a été constaté
- Si la date initiale est antérieure à la date du jour, le système calculera automatiquement l'historique des stocks
- L'entrepôt sera créé automatiquement s'il n'existe pas
Cette méthode :
- Traite les produits en stock par lots de 100 pour optimiser les performances (limite de 100 produits par requête)
- Ignore les produits déjà existants sans générer d'erreur
- Valide chaque ligne individuellement et continue le traitement en cas d'erreur
- Retourne un résultat détaillé avec le nombre de produits importés et la liste des erreurs
- Crée automatiquement l'entrepôt spécifié s'il n'existe pas
- Enregistre le stock initial à la date spécifiée
Modèle: ImportProductListRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ImportList |
List<ProductImport> | ✅ | Liste des produits à importer | Max 100 produits |
WarehouseName |
string | ✅ | Nom de l'entrepôt où importer le stock | Max 200 caractères, créé si inexistant |
InitialDate |
datetime | ✅ | Date de référence du stock initial | Format ISO 8601, doit être ⇐ date du jour |
Champs obligatoires pour chaque ProductImport:
Code: Code unique du produit (max 100 caractères)Designation: Désignation du produit (max 500 caractères)Quantity: Quantité initiale (décimale, >= 0)PurchasePriceWithoutTax: Prix d'achat HT (>= 0)
Réponse: ProductImportResult
ImportedRowCount: Nombre de produits importés avec succèsErrorList: Liste des erreurs avec numéro de ligne et raison de l'échec
Exemple de requête:
{
"importList": [
{
"code": "LAPTOP-DELL-XPS15",
"designation": "Ordinateur portable Dell XPS 15",
"quantity": 10,
"purchasePriceWithoutTax": 1299.99
},
{
"code": "MOUSE-LOGITECH",
"designation": "Souris sans fil Logitech",
"quantity": 50,
"purchasePriceWithoutTax": 29.99
}
],
"warehouseName": "ENTREPOT PRINCIPAL",
"initialDate": "2025-01-01T00:00:00Z"
}
Exemple de réponse en cas de succès:
{
"importedRowCount": 2,
"errorList": [],
"status": "Success"
}
Exemple de réponse avec erreurs:
{
"importedRowCount": 1,
"errorList": [
{
"rowIndex": 2,
"failReason": "Le code produit est obligatoire"
}
],
"status": "Success"
}
Validations effectuées :
- Vérification que la liste contient au maximum 100 produits
- Validation que le nom de l'entrepôt est renseigné
- Validation que la date initiale est valide et non future
- Pour chaque produit :
- Vérification que le code est unique et non vide (max 100 caractères)
- Vérification que la désignation est renseignée (max 500 caractères)
- Validation que la quantité est >= 0
- Validation que le prix d'achat est >= 0
Cas d'usage :
- Initialisation d'un nouveau catalogue produit
- Migration depuis un système externe avec inventaire initial
- Reprise de stock à une date donnée (inventaire physique)
- Import d'un stock de départ pour un nouvel entrepôt
Notes :
- Si vous devez importer plus de 100 produits, effectuez plusieurs appels successifs
- Les produits existants avec le même code sont ignorés (pas de mise à jour)
- La date initiale est cruciale pour le calcul correct des KPI et de l'historique des stocks
4 bis. Import de la liste de produits initiale depuis un fichier
Endpoint: POST /api/v10.0/imports/import-product-list-from-file
Versions d'API supportées : ✅ v10.0
Permet d'importer le catalogue produit initial à partir d'un fichier envoyé en multipart/form-data.
Cette méthode :
- lance un traitement en tâche longue
- retourne une URL de résultat via
HTTP 202 Accepted - accepte un fichier avec les paramètres de contexte d'import
Paramètres du formulaire :
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
file |
fichier | ✅ | Fichier à traiter |
warehouseName |
string | ✅ | Nom de l'entrepôt cible |
initialDate |
datetime | ✅ | Date de référence du stock initial |
Réponse : HTTP 202 Accepted avec l'URL de récupération du résultat.
Exemple de réponse :
/api/v10.0/imports/initial-product-list-from-file-result/{longTaskId}
Récupération du résultat d'import fichier
Endpoint: GET /api/v10.0/imports/initial-product-list-from-file-result/{longTaskId}
Versions d'API supportées : ✅ v10.0
Permet de récupérer le résultat d'un import de produits initial lancé depuis un fichier.
Réponse : ImportInitialProductListFromFileResult
- Retourne
HTTP 200 OKsi le résultat est prêt - Retourne
HTTP 404 Not Foundsi le résultat n'est pas encore disponible ou a expiré
5. Import de commandes clients (Sales)
Endpoint: POST /api/v{version}/imports/import-sale
Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Permet d'importer une commande client avec ses lignes de commande. Important : Si la commande existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed. Cette méthode :
- Crée automatiquement les produits s'ils n'existent pas
- Génère une hiérarchie de catégories de produits basée sur le
ProductCategoryBreadcrumb - Détermine automatiquement le type d'unité (entier/décimal) selon les quantités
- À partir de la v8.0, permet de renseigner le
CustomerNamedans la commande ; le client est ajouté à la volée lors de l'import s'il n'existe pas encore
Synchronisation automatique :
- Si une commande avec le même
Codeest envoyée à nouveau, le système synchronise automatiquement toutes les informations - Les lignes de commande sont mises à jour (ajout, modification, suppression)
- Les informations produits sont actualisées si elles ont changé
- Cette fonctionnalité permet de corriger des erreurs ou de mettre à jour des commandes existantes
Modèle: Sale avec collection de SaleItem

6. Import de livraisons clients (Deliveries)
Endpoint: POST /api/v{version}/imports/import-delivery
Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Permet d'importer une livraison de commande client. Important : Si la livraison existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed.
Cette méthode :
- Soustrait du stock physique les quantités livrées
- Met à jour le stock physique de l'entrepôt spécifié
- Calcule automatiquement la consommation moyenne quotidienne
- Crée l'entrepôt automatiquement s'il n'existe pas
- À partir de la v9.0, permet de renseigner le
CustomerCode(optionnel) pour renforcer le rattachement client lors de l'import ; cette possibilité reste disponible en v10.0
Synchronisation automatique :
- Si une livraison avec le même
Codeest envoyée à nouveau, le système synchronise automatiquement toutes les informations - Les lignes de livraison sont mises à jour (ajout, modification, suppression)
- Les mouvements de stock sont recalculés pour refléter les changements
- Utile pour corriger des erreurs de saisie ou mettre à jour des livraisons partielles
Import sans commande préalable :
- Si la commande client référencée par
SaleCoden'existe pas dans le système, la livraison n'est PAS créée - MAIS le système synchronise quand même les stocks pour les produits existants
- Cela permet de mettre à jour les stocks même si la commande n'a pas été importée au préalable
- Les produits inexistants sont ignorés (pas de création automatique dans ce cas)
Modèle: Delivery avec collection de DeliveryItem

7. Import de commandes fournisseur (Purchases)
Endpoint: POST /api/v{version}/imports/import-purchase
Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Permet d'importer une commande fournisseur. Important : Si la commande existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed.
Cette méthode :
- Crée automatiquement le fournisseur s'il n'existe pas
- Crée automatiquement les produits et catégories s'ils n'existent pas
- Gère les quantités décimales pour les unités fractionnées
Synchronisation automatique :
- Si une commande avec le même
Codeest envoyée à nouveau, le système synchronise automatiquement toutes les informations - Les lignes de commande sont mises à jour (ajout, modification, suppression)
- Les informations produits et fournisseur sont actualisées si elles ont changé
- Cette fonctionnalité permet de corriger des erreurs ou de mettre à jour des commandes existantes
Modèle: Purchase avec collection de PurchaseItem

8. Import de réceptions fournisseur (Receptions)
Endpoint: POST /api/v{version}/imports/import-reception
Versions d'API supportées : ⚠️ v1.0 (deprecated) | ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Permet d'importer une réception de commande fournisseur. Important : Si la réception existe déjà et que rien n'a changé, alors rien ne sera effectué en base, le statut de l'import sera AlreadyProcessed.
Cette méthode :
- Met à jour le stock physique (addition des quantités reçues)
- Calcule le délai d'approvisionnement moyen (lead time)
- Crée l'entrepôt automatiquement s'il n'existe pas
Synchronisation automatique :
- Si une réception avec le même
Codeest envoyée à nouveau, le système synchronise automatiquement toutes les informations - Les lignes de réception sont mises à jour (ajout, modification, suppression)
- Les mouvements de stock sont recalculés pour refléter les changements
- Utile pour corriger des erreurs de saisie ou mettre à jour des réceptions partielles
Import sans commande préalable :
- Si la commande fournisseur référencée par
PurchaseCoden'existe pas dans le système, la réception n'est PAS créée - MAIS le système synchronise quand même les stocks pour les produits existants
- Cela permet de mettre à jour les stocks même si la commande fournisseur n'a pas été importée au préalable
- Les produits inexistants sont ignorés (pas de création automatique dans ce cas)
Modèle: Reception avec collection de ReceptionItem

9. Import de transferts de stock entre entrepôts
Endpoint: POST /api/v{version}/imports/import-stock-transfer
Versions d'API supportées : ⚠️ v2.0 (deprecated) | ⚠️ v3.0 | ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Permet d'importer un ou plusieurs transferts de stock entre entrepôts.
⚠️ Informations importantes
- Si un entrepôt source ou destination n'existe pas, une erreur d'importation sera générée
- De la même manière, si un produit n'existe pas, une erreur est générée
- Le stock source doit être suffisant pour effectuer le transfert
- Les entrepôts source et destination doivent être différents
Cette méthode :
- Décrémente le stock de l'entrepôt source
- Incrémente le stock de l'entrepôt de destination
- Valide que le stock source est suffisant avant le transfert
- Gère les quantités décimales pour les unités fractionnées
- Enregistre la date du transfert pour un historique précis
Modèle: ImportStockTransferListRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
StockTransfers |
List<StockTransfer> | ✅ | Liste des transferts à effectuer | Au moins 1 transfert |
Champs obligatoires pour chaque StockTransfer:
| Champ | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
TransferDate |
datetime | ✅ | Date du transfert de stock | Format ISO 8601 |
ProductCode |
string | ✅ | Code unique du produit à transférer | Max 100 caractères |
SourceWarehouseName |
string | ✅ | Nom de l'entrepôt source | Doit exister |
DestinationWarehouseName |
string | ✅ | Nom de l'entrepôt de destination | Doit exister |
Quantity |
decimal | ✅ | Quantité à transférer | > 0 |
Exemple de requête:
{
"stockTransfers": [
{
"transferDate": "2025-01-15T10:00:00Z",
"productCode": "LAPTOP-DELL-XPS15",
"sourceWarehouseName": "ENTREPOT PRINCIPAL",
"destinationWarehouseName": "MAGASIN TOULOUSE",
"quantity": 5.0
},
{
"transferDate": "2025-01-15T11:30:00Z",
"productCode": "MOUSE-LOGITECH",
"sourceWarehouseName": "ENTREPOT PRINCIPAL",
"destinationWarehouseName": "MAGASIN PARIS",
"quantity": 10.0
}
]
}
Exemple de réponse en cas de succès:
{
"status": "Success",
"importedRowCount": 2,
"errorList": [],
"warnings": []
}
Exemple de réponse avec erreurs:
{
"status": "Success",
"importedRowCount": 1,
"errorList": [
{
"rowIndex": 2,
"failReason": "Stock insuffisant dans l'entrepôt source ENTREPOT PRINCIPAL pour le produit MOUSE-LOGITECH"
}
],
"warnings": []
}
Validations effectuées:
- Vérification de l'existence du produit dans le système
- Vérification de l'existence de l'entrepôt source
- Vérification de l'existence de l'entrepôt de destination
- Validation que la date du transfert est valide (non future)
- Validation que la quantité est strictement positive (> 0)
- Validation que les entrepôts source et destination sont différents
- Vérification du stock disponible dans l'entrepôt source (doit être >= quantité)
Cas d'usage :
- Gérer les mouvements de stock entre différents points de vente ou entrepôts
- Réaliser des transferts inter-magasins
- Équilibrer les stocks entre plusieurs emplacements
- Réorganiser les stocks en fonction des besoins géographiques
- Traçabilité complète des mouvements avec date et heure précises
Notes :
- Les transferts sont traités individuellement, une erreur sur un transfert n'empêche pas les autres de s'effectuer
- La date du transfert permet de maintenir un historique précis des mouvements de stock
- Si le stock source est insuffisant, le transfert est rejeté avec un message d'erreur explicite
- Les mouvements de stock sont enregistrés dans l'historique pour traçabilité
10. Retour client
Endpoint: POST /api/v{version}/imports/customer-delivery-return
Versions d'API supportées : ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 4.0 de l'API.
Permet d'enregistrer le retour d'un ou plusieurs produits par un client suite à une livraison. Important : Le retour client ajoute la quantité retournée au stock physique de l'entrepôt d'origine.
Cette méthode :
- Vérifie que la commande client (SaleCode) et la livraison (DeliveryCode) existent
- Vérifie que le produit existe et a bien été livré dans la livraison référencée
- Ajoute la quantité retournée au stock physique de l'entrepôt
- Crée un mouvement de stock de type "Retour client"
- Valide que la quantité retournée est positive
- Enregistre la date du retour pour traçabilité
Modèle: AddCustomerDeliveryReturnRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
CustomerDeliveryReturns |
List |
✅ | Liste des retours à enregistrer | Au moins 1 retour |
CreationDate |
datetime | ✅ | Date du retour | Format ISO 8601 |
Champs obligatoires pour chaque CustomerDeliveryReturn:
| Champ | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code unique du produit retourné | Max 100 caractères |
SaleCode |
string | ✅ | Code de la commande client d'origine | Doit exister |
DeliveryCode |
string | ✅ | Code de la livraison concernée | Doit exister |
Quantity |
decimal | ✅ | Quantité retournée | > 0 |
Exemple de requête:
{
"customerDeliveryReturns": [
{
"productCode": "LAPTOP-DELL-XPS15",
"saleCode": "SO-2025-0542",
"deliveryCode": "DEL-2025-0489",
"quantity": 1.0
},
{
"productCode": "MOUSE-LOGITECH",
"saleCode": "SO-2025-0542",
"deliveryCode": "DEL-2025-0489",
"quantity": 2.0
}
],
"creationDate": "2025-01-16T09:30:00Z"
}
Exemple de réponse en cas de succès:
{
"status": "Success",
"importedRowCount": 2,
"errorList": [],
"warnings": []
}
Exemple de réponse avec erreurs:
{
"status": "Success",
"importedRowCount": 1,
"errorList": [
{
"rowIndex": 2,
"failReason": "Le produit MOUSE-LOGITECH n'a pas été livré dans la livraison DEL-2025-0489"
}
],
"warnings": []
}
Validations effectuées:
- Validation que la date de retour est valide (non future)
- Vérification de l'existence de la commande client
- Vérification de l'existence de la livraison
- Vérification de l'existence du produit
- Validation que le produit faisait partie de la livraison
- Validation que la quantité est strictement positive (> 0)
- Validation que la quantité retournée ne dépasse pas la quantité livrée
Cas d'usage:
- Gérer les retours produits des clients
- Traiter les produits défectueux ou non conformes
- Gérer les erreurs de livraison
- Annuler partiellement des livraisons
- Traçabilité complète des retours avec date précise
Notes :
- Les retours sont traités individuellement, une erreur sur un retour n'empêche pas les autres de s'effectuer
- Le stock de l'entrepôt d'origine est augmenté de la quantité retournée
- Un mouvement de stock est enregistré pour traçabilité
11. Retour fournisseur
Endpoint: POST /api/v{version}/imports/supplier-reception-return
Versions d'API supportées : ⚠️ v4.0 | ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 4.0 de l'API.
Permet d'enregistrer le retour d'un ou plusieurs produits à un fournisseur suite à une réception. Important : Le retour fournisseur retire la quantité retournée du stock physique de l'entrepôt.
Cette méthode :
- Vérifie que la commande fournisseur (PurchaseCode) et la réception (ReceptionCode) existent
- Vérifie que le produit existe et a bien été reçu dans la réception référencée
- Retire la quantité retournée du stock physique de l'entrepôt
- Crée un mouvement de stock de type "Retour fournisseur"
- Valide que la quantité retournée est positive
- Protège contre les stocks négatifs (stock ramené à 0 avec création d'anomalie si nécessaire)
- Enregistre la date du retour pour traçabilité
Modèle: AddSupplierReceptionReturnRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
SupplierReceptionReturns |
List |
✅ | Liste des retours à enregistrer | Au moins 1 retour |
CreationDate |
datetime | ✅ | Date du retour | Format ISO 8601 |
Champs obligatoires pour chaque SupplierReceptionReturn:
| Champ | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code unique du produit retourné | Max 100 caractères |
PurchaseCode |
string | ✅ | Code de la commande fournisseur d'origine | Doit exister |
ReceptionCode |
string | ✅ | Code de la réception concernée | Doit exister |
Quantity |
decimal | ✅ | Quantité retournée | > 0 |
Exemple de requête:
{
"supplierReceptionReturns": [
{
"productCode": "LAPTOP-DELL-XPS15",
"purchaseCode": "PO-2025-0128",
"receptionCode": "REC-2025-0095",
"quantity": 2.0
},
{
"productCode": "MOUSE-LOGITECH",
"purchaseCode": "PO-2025-0128",
"receptionCode": "REC-2025-0095",
"quantity": 5.0
}
],
"creationDate": "2025-01-16T10:00:00Z"
}
Exemple de réponse en cas de succès:
{
"status": "Success",
"importedRowCount": 2,
"errorList": [],
"warnings": []
}
Exemple de réponse avec erreurs:
{
"status": "Success",
"importedRowCount": 1,
"errorList": [
{
"rowIndex": 2,
"failReason": "Le produit MOUSE-LOGITECH n'a pas été reçu dans la réception REC-2025-0095"
}
],
"warnings": []
}
Validations effectuées:
- Validation que la date de retour est valide (non future)
- Vérification de l'existence de la commande fournisseur
- Vérification de l'existence de la réception
- Vérification de l'existence du produit
- Validation que le produit faisait partie de la réception
- Validation que la quantité est strictement positive (> 0)
- Validation que la quantité retournée ne dépasse pas la quantité reçue
Gestion des anomalies :
- Si le stock disponible est insuffisant, une anomalie de stock est automatiquement créée
- Le stock est ramené à 0 et la différence est enregistrée comme anomalie
- Cette protection évite les stocks négatifs tout en conservant la traçabilité
Cas d'usage:
- Gérer les retours de produits défectueux ou non conformes aux fournisseurs
- Traiter les erreurs de réception
- Annuler partiellement des réceptions
- Gérer les produits endommagés pendant le transport
- Traçabilité complète des retours avec date précise
Notes :
- Les retours sont traités individuellement, une erreur sur un retour n'empêche pas les autres de s'effectuer
- Le stock de l'entrepôt est diminué de la quantité retournée
- Un mouvement de stock est enregistré pour traçabilité
12. Ajout de stock libre
Endpoint: POST /api/v{version}/imports/add-free-product-stock
Versions d'API supportées : ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 5.0 de l'API.
Permet d'ajouter manuellement du stock pour un produit dans un entrepôt spécifique, sans lien avec une réception ou un document source. Important : Cette méthode est idéale pour les ajustements de stock positifs, les inventaires, ou les entrées de stock exceptionnelles.
Cette méthode :
- Vérifie que le produit existe dans le système
- Vérifie que l'entrepôt existe dans le système
- Ajoute la quantité spécifiée au stock physique de l'entrepôt
- Crée un mouvement de stock de type "Entrée manuelle"
- Enregistre le motif de l'ajustement pour traçabilité
- Enregistre la date de l'ajustement pour historique
Modèle: AddFreeProductStockRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductStock |
ProductStock | ✅ | Données du produit et ajustement | Voir tableau ci-dessous |
CreationDate |
datetime | ✅ | Date de l'ajustement | Format ISO 8601 |
Champs obligatoires pour ProductStock:
| Champ | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code unique du produit | Max 100 caractères |
WarehouseName |
string | ✅ | Nom de l'entrepôt concerné | Doit exister |
Quantity |
decimal | ✅ | Quantité à ajouter | > 0 |
Reason |
string | ✅ | Motif de l'ajustement | Obligatoire pour traçabilité |
Exemple de requête:
{
"productStock": {
"productCode": "LAPTOP-DELL-XPS15",
"warehouseName": "MAGASIN TOULOUSE",
"quantity": 10.0,
"reason": "Inventaire annuel - Correction positive"
},
"creationDate": "2025-01-16T14:00:00Z"
}
Exemple de réponse en cas de succès:
{
"status": "Success",
"importedRowCount": 1,
"errorList": [],
"warnings": []
}
Exemple de réponse avec erreurs:
{
"status": "Failed",
"importedRowCount": 0,
"errorList": [
{
"rowIndex": 1,
"failReason": "Le produit LAPTOP-DELL-XPS15 n'existe pas dans le système"
}
],
"warnings": []
}
Validations effectuées:
- Validation que la date d'ajustement est valide (non future)
- Vérification de l'existence du produit
- Vérification de l'existence de l'entrepôt
- Validation que la quantité est strictement positive (> 0)
- Validation que le motif est renseigné et non vide
Cas d'usage:
- Corrections d'inventaire positives
- Entrées de stock exceptionnelles (dons, échantillons)
- Régularisations suite à erreur de comptage
- Ajustements manuels lors d'un inventaire physique
- Traçabilité complète avec date et motif précis
13. Retrait de stock libre
Endpoint: POST /api/v{version}/imports/remove-free-product-stock
Versions d'API supportées : ⚠️ v5.0 | ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 5.0 de l'API.
Permet de retirer manuellement du stock pour un produit dans un entrepôt spécifique, sans lien avec une livraison ou un document source. Important : Cette méthode est idéale pour les ajustements de stock négatifs, les pertes, les casses, ou les sorties de stock exceptionnelles.
Cette méthode :
- Vérifie que le produit existe dans le système
- Vérifie que l'entrepôt existe dans le système
- Retire la quantité spécifiée du stock physique de l'entrepôt
- Crée un mouvement de stock de type "Sortie manuelle"
- Enregistre le motif de l'ajustement pour traçabilité
- Protège contre les stocks négatifs (crée une anomalie de stock si la quantité est insuffisante)
- Enregistre la date de l'ajustement pour historique
Modèle: RemoveFreeProductStockRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductStock |
ProductStock | ✅ | Données du produit et ajustement | Voir tableau ci-dessous |
CreationDate |
datetime | ✅ | Date de l'ajustement | Format ISO 8601 |
Champs obligatoires pour ProductStock:
| Champ | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code unique du produit | Max 100 caractères |
WarehouseName |
string | ✅ | Nom de l'entrepôt concerné | Doit exister |
Quantity |
decimal | ✅ | Quantité à retirer | > 0 |
Reason |
string | ✅ | Motif de l'ajustement | Obligatoire pour traçabilité |
Exemple de requête:
{
"productStock": {
"productCode": "LAPTOP-DELL-XPS15",
"warehouseName": "MAGASIN TOULOUSE",
"quantity": 5.0,
"reason": "Casse - Produit endommagé lors du transport"
},
"creationDate": "2025-01-16T14:30:00Z"
}
Exemple de réponse en cas de succès:
{
"status": "Success",
"importedRowCount": 1,
"errorList": [],
"warnings": []
}
Exemple de réponse avec stock insuffisant (anomalie créée):
{
"status": "Success",
"importedRowCount": 1,
"errorList": [],
"warnings": [
"Stock insuffisant pour LAPTOP-DELL-XPS15 dans MAGASIN TOULOUSE. Anomalie de stock créée."
]
}
Validations effectuées:
- Validation que la date d'ajustement est valide (non future)
- Vérification de l'existence du produit
- Vérification de l'existence de l'entrepôt
- Validation que la quantité est strictement positive (> 0)
- Validation que le motif est renseigné et non vide
Gestion des anomalies:
- Si le stock disponible est insuffisant, une anomalie de stock est automatiquement créée
- Le stock est ramené à 0 et la différence est enregistrée comme anomalie
- Cette protection évite les stocks négatifs tout en conservant la traçabilité
- Un avertissement est retourné dans la réponse pour informer de la création d'anomalie
Cas d'usage:
- Corrections d'inventaire négatives
- Pertes et vols
- Produits cassés ou périmés
- Sorties exceptionnelles (échantillons, dons)
- Régularisations suite à erreur de comptage
- Traçabilité complète avec date et motif précis
14. Import de vente directe (membre)
Endpoint: POST /api/v{version}/imports/import-direct-sale
Versions d'API supportées : ⚠️ v6.0 | ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 6.0 de l'API.
Permet d'importer une vente directe (vente membre) qui impacte directement le stock sans passer par le processus classique commande/livraison. Important : Cette méthode est idéale pour les ventes au comptoir, les ventes en boutique physique, ou toute vente nécessitant une sortie immédiate du stock.
Cette méthode :
- Crée automatiquement une commande client de type "Vente directe" (MemberOrder)
- Retire immédiatement la quantité vendue du stock physique de l'entrepôt
- Crée automatiquement les produits s'ils n'existent pas
- Détermine automatiquement le type d'unité (entier/décimal) selon les quantités
- Crée un mouvement de stock de type "Vente directe"
Synchronisation automatique :
- Si une vente directe avec le même
Codeest envoyée à nouveau, le système synchronise automatiquement toutes les informations - Les lignes de vente sont mises à jour (ajout, modification, suppression)
- Les mouvements de stock sont recalculés pour refléter les changements
- Les informations produits et client sont actualisées si elles ont changé
- Cette fonctionnalité permet de corriger des erreurs ou de mettre à jour des ventes existantes
Différence avec import-sale + import-delivery :
import-salecrée une commande client sans impacter le stockimport-deliveryretire le stock lors de la livraison de la commandeimport-direct-salefait les deux en une seule opération : création de la vente ET retrait du stock immédiat- Idéal pour les flux de vente où il n'y a pas de séparation entre la commande et la livraison
Modèle: ImportDirectSaleRequest avec DirectSale contenant une collection de DirectSaleItem
Champs obligatoires pour DirectSale:
Code: Code unique de la vente directe (max 100 caractères)SaleDate: Date de la vente (format ISO 8601)CustomerCode: Code unique du client (max 100 caractères)CustomerName: Nom du client (max 500 caractères)WarehouseName: Nom de l'entrepôt où le stock sera retiréItems: Liste des lignes de vente (au moins 1 ligne)
Champs obligatoires pour DirectSaleItem:
ProductCode: Code unique du produit (max 100 caractères)ProductDesignation: Désignation du produit (max 500 caractères)Quantity: Quantité vendue (décimale, > 0)UnitPriceWithoutTax: Prix unitaire HT (>= 0)
Champs optionnels pour DirectSaleItem:
ProductCategoryBreadcrumb: Hiérarchie de catégories (ex: "Électronique > Ordinateurs > Portables")DiscountRate: Taux de remise en pourcentage (0-100)
Exemple de requête:
{
"directSale": {
"code": "DS-2025-0001",
"saleDate": "2025-01-15T14:30:00Z",
"customerCode": "CUST001",
"customerName": "Dupont Jean",
"warehouseName": "MAGASIN TOULOUSE",
"items": [
{
"productCode": "PROD001",
"productDesignation": "Ordinateur portable Dell",
"productCategoryBreadcrumb": "Électronique > Ordinateurs > Portables",
"quantity": 1.0,
"unitPriceWithoutTax": 750.00,
"discountRate": 10.0
},
{
"productCode": "PROD002",
"productDesignation": "Souris sans fil",
"productCategoryBreadcrumb": "Électronique > Accessoires",
"quantity": 2.0,
"unitPriceWithoutTax": 15.00,
"discountRate": 0.0
}
]
}
}
Validations effectuées:
- Vérification que le code de vente est unique (ou déjà existant pour synchronisation)
- Validation que la date de vente est cohérente avec la date d'import définie
- Vérification de l'existence de l'entrepôt (création automatique si nécessaire)
- Validation que toutes les quantités sont strictement positives
- Vérification du stock disponible dans l'entrepôt (création d'anomalie si stock insuffisant)
- Validation de la cohérence des prix (>= 0)
- Validation des taux de remise (0-100%)
Gestion des anomalies:
- Si le stock disponible est insuffisant pour un produit, une anomalie de stock est automatiquement créée
- Le stock est ramené à 0 et la différence est enregistrée comme anomalie
- La vente est quand même créée pour maintenir la traçabilité des opérations
Cas d'usage: Idéal pour les ventes au comptoir, les ventes en boutique physique, les ventes événementielles (salons, marchés), les ventes directes aux membres d'une association, ou toute situation où la commande et la livraison sont simultanées.
15. Annulation d'un bon de livraison client
Endpoint: POST /api/v{version}/imports/cancel-delivery
Versions d'API supportées : ⚠️ v7.0 | ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 7.0 de l'API.
Permet d'annuler un bon de livraison client existant identifié par son code. Important : L'annulation restitue intégralement les quantités livrées en stock et recalcule le statut de la commande associée.
Cette méthode :
- Vérifie que le bon de livraison identifié par
DeliveryCodeexiste - Restitue les quantités livrées au stock physique de l'entrepôt d'origine
- Supprime toutes les lignes du bon de livraison
- Supprime le bon de livraison
- Recalcule automatiquement le statut de la commande client associée (passage de
Balanced/ClosedàWaitingDelivery/Open) - Archive les entités supprimées pour traçabilité
Modèle: CancelDeliveryRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
DeliveryCode |
string | ✅ | Code unique du bon de livraison à annuler | Doit exister |
Reason |
string | ✅ | Motif de l'annulation | Non vide |
CancelDate |
datetime | ✅ | Date de l'annulation | Format ISO 8601 |
Exemple de requête :
{
"deliveryCode": "DEL-2025-0489",
"reason": "Erreur de saisie - livraison annulée à la demande du client",
"cancelDate": "2025-01-16T10:00:00Z"
}
Exemple de réponse en cas de succès :
{
"status": "Success",
"errors": {},
"warnings": []
}
Exemple de réponse en cas d'échec (code inconnu) :
{
"status": "Failed",
"errors": {
"DeliveryCode": "No delivery found with code DEL-2025-0489"
},
"warnings": []
}
Validations effectuées :
- Vérification de l'existence du bon de livraison
- Vérification que l'entrepôt de l'origine est accessible
- Vérification du stock disponible pour la restitution (création d'anomalie si nécessaire)
Comportement selon l'état d'import :
- Mode
Processing: retourne400 BadRequest(imports désactivés) - Mode
Preparation: mis en file d'attente, retourne202 Acceptedavec l'identifiant de l'activité - Mode
Allowed: traitement immédiat, retourne200 OK
Cas d'usage :
- Corriger une livraison envoyée par erreur
- Annuler une livraison suite à un retour complet du client
- Remettre une commande en attente de livraison après correction
16. Annulation d'une réception fournisseur
Endpoint: POST /api/v{version}/imports/cancel-reception
Versions d'API supportées : ⚠️ v8.0 | ⚠️ v9.0 | ✅ v10.0
Note : Cette fonctionnalité est disponible à partir de la version 8.0 de l'API.
Permet d'annuler une réception fournisseur existante identifiée par son code. Important : L'annulation retire intégralement les quantités reçues du stock et recalcule le statut de la commande fournisseur associée.
Cette méthode :
- Vérifie que la réception identifiée par
ReceptionCodeexiste - Retire les quantités reçues du stock physique de l'entrepôt
- Supprime toutes les lignes de la réception
- Supprime la réception
- Recalcule automatiquement le statut de la commande fournisseur associée (passage de
BalancedàSubmitted) - Archive les entités supprimées pour traçabilité
Cas particulier : Si la réception ne contient aucune ligne (réception vide), elle est simplement supprimée et un avertissement est retourné.
Modèle: CancelReceptionRequest
Paramètres de la requête :
| Paramètre | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ReceptionCode |
string | ✅ | Code unique de la réception fournisseur à annuler | Doit exister |
Reason |
string | ✅ | Motif de l'annulation | Non vide |
CancelDate |
datetime | ✅ | Date de l'annulation | Format ISO 8601 |
Exemple de requête :
{
"receptionCode": "REC-2025-0095",
"reason": "Réception importée par erreur - marchandise non reçue",
"cancelDate": "2025-01-16T11:00:00Z"
}
Exemple de réponse en cas de succès :
{
"status": "Success",
"errors": {},
"warnings": []
}
Exemple de réponse - réception vide supprimée :
{
"status": "Success",
"errors": {},
"warnings": ["Reception had no items, it has been deleted"]
}
Exemple de réponse en cas d'échec (code inconnu) :
{
"status": "Failed",
"errors": {
"ReceptionCode": "No reception found with code REC-2025-0095"
},
"warnings": []
}
Validations effectuées :
- Vérification de l'existence de la réception
- Vérification du stock disponible pour le retrait (protégé contre les stocks négatifs)
- Rollback transactionnel en cas d'erreur sur l'un des articles
Comportement selon l'état d'import :
- Mode
Processing: retourne400 BadRequest(imports désactivés) - Mode
Preparation: mis en file d'attente, retourne202 Acceptedavec l'identifiant de l'activité - Mode
Allowed: traitement immédiat, retourne200 OK
Cas d'usage :
- Corriger une réception saisie par erreur
- Annuler une réception dont la marchandise a été refusée ou retournée intégralement
- Remettre une commande fournisseur soldée en attente de réception
Modèles de données d'import
Cette section détaille tous les modèles de données utilisés dans l'API d'import AuditStock avec des exemples concrets et des explications sur chaque propriété.
ProductImport - Import de produit
Représente un produit à importer dans le système lors de l'import initial du catalogue.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
Code |
string | ✅ | Code unique du produit | Max 100 caractères |
Designation |
string | ✅ | Nom ou description du produit | Max 500 caractères |
Quantity |
decimal | ✅ | Quantité initiale en stock | >= 0 |
PurchasePriceWithoutTax |
decimal | ✅ | Prix d'achat HT | >= 0, 2 décimales |
Exemple JSON :
{
"code": "LAPTOP-DELL-XPS15",
"designation": "Ordinateur portable Dell XPS 15 - Intel i7 - 16Go RAM",
"quantity": 10,
"purchasePriceWithoutTax": 1299.99
}
Notes importantes :
- Les produits existants avec le même code sont ignorés sans générer d'erreur
- La quantité peut être 0 si le produit n'a pas encore de stock initial
- Le prix d'achat est utilisé pour les calculs de valorisation du stock
Sale - Commande client
Représente une commande client avec ses lignes de commande.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
Code |
string | ✅ | Code unique de la commande | Max 100 caractères, unique |
CustomerCode |
string | ✅ | Code du client | Max 100 caractères |
CustomerName |
string | ❌ | Nom du client (v8.0+) | Max 500 caractères |
CreationDate |
datetime | ✅ | Date de création de la commande | Format ISO 8601 |
Items |
List |
✅ | Liste des lignes de commande | Au moins 1 ligne |
Exemple JSON complet :
{
"code": "SO-2025-0542",
"customerCode": "CUST-12345",
"customerName": "Dupont Jean",
"creationDate": "2025-01-15T10:30:00Z",
"items": [
{
"productCode": "LAPTOP-DELL-XPS15",
"productDesignation": "Dell XPS 15 - Intel i7",
"productUrl": "https://exemple.com/products/dell-xps15",
"productImageUrl": "https://exemple.com/images/dell-xps15.jpg",
"productCategoryBreadcrumb": "Informatique/Ordinateurs/Portables",
"barCode": "1234567890123",
"quantity": 2,
"unitSalePriceWithoutTax": 1599.00,
"discountRate": 5.0
},
{
"productCode": "MOUSE-LOGITECH-MX3",
"productDesignation": "Souris Logitech MX Master 3",
"productCategoryBreadcrumb": "Informatique/Périphériques/Souris",
"quantity": 2,
"unitSalePriceWithoutTax": 99.99,
"discountRate": 0.0
}
]
}
SaleItem - Ligne de commande client
Représente une ligne dans une commande client.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
ProductDesignation |
string | ✅ | Nom du produit | Max 500 caractères |
ProductUrl |
string | ❌ | URL de la fiche produit | URL valide |
ProductImageUrl |
string | ❌ | URL de l'image produit | URL valide |
ProductCategoryBreadcrumb |
string | ❌ | Hiérarchie de catégories | Séparées par "/" |
BarCode |
string | ❌ | Code-barres EAN/UPC | Max 50 caractères |
Quantity |
decimal | ✅ | Quantité commandée | > 0 |
UnitSalePriceWithoutTax |
decimal | ✅ | Prix unitaire de vente HT | >= 0 |
DiscountRate |
decimal | ❌ | Taux de remise (%) | 0-100 |
Notes :
- Si le produit n'existe pas, il est créé automatiquement
- À partir de la v8.0, si
CustomerNameest renseigné lors de l'import d'uneSale, le client est ajouté à la volée s'il n'existe pas - Le
ProductCategoryBreadcrumbpermet de créer une hiérarchie de catégories (ex: "Électronique/Audio/Casques") - Le type d'unité (entier/décimal) est déterminé automatiquement selon les quantités
Delivery - Livraison client
Représente une livraison de commande client qui impacte le stock.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
Code |
string | ✅ | Code unique de la livraison | Max 100 caractères, unique |
SaleCode |
string | ✅ | Code de la commande client | Doit exister |
CustomerCode |
string | ❌ | Code du client | Optionnel (v9.0+) |
WarehouseName |
string | ✅ | Nom de l'entrepôt | Créé si inexistant |
DeliveryDate |
datetime | ✅ | Date de livraison | Format ISO 8601 |
Items |
List |
✅ | Liste des lignes livrées | Au moins 1 ligne |
Exemple JSON complet :
{
"code": "DEL-2025-0489",
"saleCode": "SO-2025-0542",
"customerCode": "CUST-12345",
"warehouseName": "ENTREPOT TOULOUSE",
"deliveryDate": "2025-01-15T14:30:00Z",
"items": [
{
"productCode": "LAPTOP-DELL-XPS15",
"quantity": 2
},
{
"productCode": "MOUSE-LOGITECH-MX3",
"quantity": 2
}
]
}
Important :
- La livraison retire la quantité du stock physique de l'entrepôt
- Si la commande n'existe pas, la livraison n'est pas créée MAIS le stock est synchronisé pour les produits existants
- Permet de corriger une livraison existante en renvoyant le même code avec des modifications
DeliveryItem - Ligne de livraison
Représente une ligne dans une livraison client.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
Quantity |
decimal | ✅ | Quantité livrée | > 0 |
Purchase - Commande fournisseur
Représente une commande passée à un fournisseur.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
Code |
string | ✅ | Code unique de la commande | Max 100 caractères, unique |
SupplierCode |
string | ✅ | Code du fournisseur | Max 100 caractères |
SupplierName |
string | ✅ | Nom du fournisseur | Max 500 caractères |
CreationDate |
datetime | ✅ | Date de création | Format ISO 8601 |
Items |
List |
✅ | Liste des lignes | Au moins 1 ligne |
Exemple JSON complet :
{
"code": "PO-2025-0128",
"supplierCode": "SUP-DELL-FR",
"supplierName": "Dell France",
"creationDate": "2025-01-10T09:00:00Z",
"items": [
{
"productCode": "LAPTOP-DELL-XPS15",
"productDesignation": "Dell XPS 15 - Intel i7",
"productCategoryBreadcrumb": "Informatique/Ordinateurs/Portables",
"quantity": 20,
"unitPurchasePriceWithoutTax": 1299.99
}
]
}
Notes :
- Le fournisseur est créé automatiquement s'il n'existe pas
- Les produits sont créés automatiquement s'ils n'existent pas
PurchaseItem - Ligne de commande fournisseur
Représente une ligne dans une commande fournisseur.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
ProductDesignation |
string | ✅ | Nom du produit | Max 500 caractères |
ProductCategoryBreadcrumb |
string | ❌ | Hiérarchie de catégories | Séparées par "/" |
Quantity |
decimal | ✅ | Quantité commandée | > 0 |
UnitPurchasePriceWithoutTax |
decimal | ✅ | Prix d'achat unitaire HT | >= 0 |
Reception - Réception fournisseur
Représente une réception de marchandises d'un fournisseur qui augmente le stock.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
Code |
string | ✅ | Code unique de la réception | Max 100 caractères, unique |
PurchaseCode |
string | ✅ | Code de la commande fournisseur | Doit exister |
WarehouseName |
string | ✅ | Nom de l'entrepôt | Créé si inexistant |
ReceptionDate |
datetime | ✅ | Date de réception | Format ISO 8601 |
Items |
List |
✅ | Liste des lignes reçues | Au moins 1 ligne |
Exemple JSON complet :
{
"code": "REC-2025-0095",
"purchaseCode": "PO-2025-0128",
"warehouseName": "ENTREPOT TOULOUSE",
"receptionDate": "2025-01-15T11:20:00Z",
"items": [
{
"productCode": "LAPTOP-DELL-XPS15",
"quantity": 20
}
]
}
Important :
- La réception ajoute la quantité au stock physique de l'entrepôt
- Si la commande fournisseur n'existe pas, la réception n'est pas créée MAIS le stock est synchronisé pour les produits existants
- Calcule automatiquement le délai d'approvisionnement (lead time)
ReceptionItem - Ligne de réception
Représente une ligne dans une réception fournisseur.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
Quantity |
decimal | ✅ | Quantité reçue | > 0 |
StockTransfer - Transfert de stock
Représente un transfert de stock entre deux entrepôts.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
TransferDate |
datetime | ✅ | Date du transfert | Format ISO 8601 |
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
SourceWarehouseName |
string | ✅ | Entrepôt source | Doit exister |
DestinationWarehouseName |
string | ✅ | Entrepôt destination | Doit exister |
Quantity |
decimal | ✅ | Quantité transférée | > 0 |
Exemple JSON complet :
{
"transferDate": "2025-01-15T16:00:00Z",
"productCode": "LAPTOP-DELL-XPS15",
"sourceWarehouseName": "ENTREPOT TOULOUSE",
"destinationWarehouseName": "MAGASIN PARIS",
"quantity": 5
}
Validations :
- Le produit doit exister
- Les deux entrepôts doivent exister
- Le stock source doit être suffisant
- Les entrepôts source et destination doivent être différents
DirectSale - Vente directe
Représente une vente directe (membre) qui crée la commande et retire le stock immédiatement.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
Code |
string | ✅ | Code unique de la vente | Max 100 caractères, unique |
SaleDate |
datetime | ✅ | Date de la vente | Format ISO 8601 |
CustomerCode |
string | ✅ | Code du client | Max 100 caractères |
CustomerName |
string | ✅ | Nom du client | Max 500 caractères |
WarehouseName |
string | ✅ | Entrepôt de prélèvement | Créé si inexistant |
Items |
List |
✅ | Liste des lignes vendues | Au moins 1 ligne |
Exemple JSON complet :
{
"code": "DS-2025-0001",
"saleDate": "2025-01-15T14:30:00Z",
"customerCode": "MEMBER-12345",
"customerName": "Dupont Jean",
"warehouseName": "MAGASIN TOULOUSE",
"items": [
{
"productCode": "LAPTOP-DELL-XPS15",
"productDesignation": "Dell XPS 15 - Intel i7",
"productCategoryBreadcrumb": "Informatique/Ordinateurs/Portables",
"quantity": 1,
"unitPriceWithoutTax": 1599.00,
"discountRate": 10.0
}
]
}
Différence avec Sale + Delivery :
import-salecrée une commande sans impacter le stockimport-deliveryretire le stock lors de la livraisonimport-direct-salefait les deux en une seule opération
DirectSaleItem - Ligne de vente directe
Représente une ligne dans une vente directe.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
ProductDesignation |
string | ✅ | Nom du produit | Max 500 caractères |
ProductCategoryBreadcrumb |
string | ❌ | Hiérarchie de catégories | Séparées par "/" |
Quantity |
decimal | ✅ | Quantité vendue | > 0 |
UnitPriceWithoutTax |
decimal | ✅ | Prix unitaire HT | >= 0 |
DiscountRate |
decimal | ❌ | Taux de remise (%) | 0-100 |
CustomerDeliveryReturn - Retour client
Représente le retour d'un produit par un client.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit retourné | Max 100 caractères |
SaleCode |
string | ✅ | Code de la commande client | Doit exister |
DeliveryCode |
string | ✅ | Code de la livraison | Doit exister |
Quantity |
decimal | ✅ | Quantité retournée | > 0 |
Exemple JSON :
{
"customerDeliveryReturns": [
{
"productCode": "LAPTOP-DELL-XPS15",
"saleCode": "SO-2025-0542",
"deliveryCode": "DEL-2025-0489",
"quantity": 1
}
]
}
Effet : Ajoute la quantité retournée au stock physique de l'entrepôt d'origine.
SupplierReceptionReturn - Retour fournisseur
Représente le retour d'un produit à un fournisseur.
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit retourné | Max 100 caractères |
PurchaseCode |
string | ✅ | Code de la commande fournisseur | Doit exister |
ReceptionCode |
string | ✅ | Code de la réception | Doit exister |
Quantity |
decimal | ✅ | Quantité retournée | > 0 |
Exemple JSON :
{
"supplierReceptionReturns": [
{
"productCode": "LAPTOP-DELL-XPS15",
"purchaseCode": "PO-2025-0128",
"receptionCode": "REC-2025-0095",
"quantity": 2
}
]
}
Effet : Retire la quantité retournée du stock physique de l'entrepôt (protégé contre les stocks négatifs).
ProductStock - Ajustement de stock libre
Représente un ajustement manuel de stock (ajout ou retrait).
Propriétés :
| Propriété | Type | Obligatoire | Description | Contraintes |
|---|---|---|---|---|
ProductCode |
string | ✅ | Code du produit | Max 100 caractères |
WarehouseName |
string | ✅ | Nom de l'entrepôt | Doit exister |
Quantity |
decimal | ✅ | Quantité à ajuster | > 0 |
Reason |
string | ✅ | Motif de l'ajustement | Obligatoire pour traçabilité |
Exemple JSON (ajout) :
{
"productStock": {
"productCode": "LAPTOP-DELL-XPS15",
"warehouseName": "MAGASIN TOULOUSE",
"quantity": 10,
"reason": "Inventaire annuel - Correction positive"
}
}
Exemple JSON (retrait) :
{
"productStock": {
"productCode": "LAPTOP-DELL-XPS15",
"warehouseName": "MAGASIN TOULOUSE",
"quantity": 3,
"reason": "Casse - Produit endommagé lors du transport"
}
}
Cas d'usage :
- Corrections d'inventaire
- Pertes et casses
- Vols
- Dons et échantillons
- Régularisations
ImportResult - Résultat d'import
Retour standard pour toutes les opérations d'import.
Propriétés :
| Propriété | Type | Description |
|---|---|---|
Status |
ImportStatus | Statut de l'import (Success, Failed, Invalid, etc.) |
ImportedRowCount |
int | Nombre de lignes importées avec succès |
ErrorList |
List |
Liste des erreurs rencontrées |
Warnings |
List |
Avertissements (non bloquants) |
Valeurs de ImportStatus :
Success: Import réussiCreated: Entité crééeUpdated: Entité mise à jourAlreadyProcessed: Déjà traité (aucune modification)Enqueued: Mis en file d'attente (mode préparation)Failed: Échec de l'importInvalid: Données invalides
Exemple de réponse :
{
"status": "Success",
"importedRowCount": 5,
"errorList": [],
"warnings": [
"Product PROD001 already exists, skipped"
]
}
ProductImportError - Erreur d'import
Détail d'une erreur lors de l'import.
Propriétés :
| Propriété | Type | Description |
|---|---|---|
RowIndex |
int | Numéro de ligne en erreur |
FailReason |
string | Description de l'erreur |
Exemple :
{
"rowIndex": 3,
"failReason": "Le code produit est obligatoire"
}
Récapitulatif des versions d'API
Mise à jour v10.0 : la version de référence est désormais
v10.0. Sauf mention contraire, les endpoints disponibles en v9.0 restent disponibles en v10.0.
| Endpoint | v1.0 | v2.0 | v3.0 | v4.0 | v5.0 | v6.0 | v7.0 | v8.0 | v9.0 | v10.0 |
|---|---|---|---|---|---|---|---|---|---|---|
| ping | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| start-import-session | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| process-import | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| set-date | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ |
| reset-date | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ |
| import-product-list | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| import-product-list-from-file | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| initial-product-list-from-file-result | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |
| import-sale | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| import-delivery | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| import-purchase | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| import-reception | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| import-stock-transfer | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| customer-delivery-return | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| supplier-reception-return | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| add-free-product-stock | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| remove-free-product-stock | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| report | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| import-direct-sale | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| cancel-delivery | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ✅ |
| cancel-reception | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ⚠️ | ⚠️ | ✅ |
Légende : ✅ Disponible et supporté | ⚠️ Deprecated (obsolète) | ❌ Non disponible
Changements majeurs en v8.0 :
- ✅ Nouvelle méthode :
cancel-delivery— annulation d'un bon de livraison client avec restitution du stock (disponible depuis v7.0, recommandé en v8.0) - ✅ Nouvelle méthode :
cancel-reception— annulation d'une réception fournisseur avec retrait du stock (introduite en v8.0, toujours disponible en v10.0) - ⚠️ v7.0 désormais obsolète : migrer vers v8.0 dès que possible
Changements majeurs en v9.0 :
- ✅ Delivery enrichi : nouveau paramètre optionnel
CustomerCodesurimport-delivery
Changements majeurs en v10.0 :
- ✅ Version de référence : la documentation et les nouveaux usages s'appuient désormais sur
v10.0 - ✅ Nouveau endpoint :
import-product-list-from-filepour importer la liste initiale via un fichiermultipart/form-data - ✅ Nouveau endpoint :
initial-product-list-from-file-result/{longTaskId}pour consulter le résultat asynchrone - ✅ Continuité fonctionnelle : tous les endpoints d'import exposés en
v9.0restent disponibles env10.0
Changements majeurs en v7.0 :
- ✅ Nouvelle méthode :
start-import-sessionremplaceset-date(sans paramètres, utilise automatiquement la date du jour) - ✅ Nouvelle méthode :
process-importremplacereset-date(finalise la session d'import) - ❌ Supprimées :
set-dateetreset-datene sont plus disponibles en v7.0 - 🎯 Simplification : Plus besoin de gérer manuellement les dates, le système utilise automatiquement la date du jour
Flux d'import recommandé en v10.0 :
POST /api/v10.0/imports/start-import-session→ Démarre la session (aucun paramètre)- Importer vos données (produits, ventes, livraisons, commandes fournisseur, réceptions, etc.)
- Vérifier l'état avec
GET /api/v10.0/imports/report POST /api/v10.0/imports/process-import→ Finalise la session (aucun paramètre)- En cas d'erreur après import :
POST /api/v10.0/imports/cancel-deliveryouPOST /api/v10.0/imports/cancel-reception