Aller au contenu

Créer / mettre à jour des articles

POST /articles

Crée ou met à jour un ou plusieurs articles. Fonctionne en mode upsert : si un article avec la même combinaison activityCode + articleReference existe, il est mis à jour.

Les variantes logistiques sont calculées automatiquement à partir des dimensions que vous envoyez (netWeightPerUVC, quantityPerPCB, etc.).

Ne pas envoyer le champ logisticalVariants — l’API retourne l’erreur 200 si ce champ est présent.

ParamètreTypeDéfautDescription
validationOnlyboolfalseSi true, valide les données sans les persister

Un tableau JSON d’objets Article.

ChampTypeMaxDescription
activityCodestring3Code de l’activité. Doit correspondre à un de vos client_context.
activityNamestring30Libellé de l’activité
articleReferencestring16Référence unique de l’article. Format : ^[A-Z0-9_.#/\-]+$
longArticleDescriptionstring60Désignation longue de l’article
shortArticleDescriptionstring30Désignation courte de l’article
netWeightPerUVCintPoids net de l’UVC en grammes. Défaut : 0
ChampTypeMaxRequisDescription
articleTypeintNon0 = stockable, 1 = consommable, 2 = service. Défaut : 0
articleAnalysisCodestring1NonE = normal, C = comptable, D = échantillons. Défaut : E
articleCategorystring25NonCatégorie de l’article
articleRotationClassstring25NonClasse de rotation (A, B, C…)
articleFamilystring10NonFamille de l’article
articleSubFamilystring20NonSous-famille
articleBrandstring20NonMarque
articleSizestring10NonTaille
articleColorstring30NonCouleur
articleTypologystring20NonTypologie
modelReferencestring100NonRéférence du modèle
modelDescriptionstring100NonDescription du modèle
ChampTypeRequisDescription
netWeightPerUVCintOuiPoids net en grammes
grossWeightPerUVCintNonPoids brut en grammes. Défaut : 0
lengthPerUVCintNonLongueur en mm. Défaut : 0
widthPerUVCintNonLargeur en mm. Défaut : 0
heightPerUVCintNonHauteur en mm. Défaut : 0
ChampTypeRequisDescription
quantityPerPCBintNonNombre d’UVC par carton. Défaut : 0
grossWeightPerPCBintNonPoids brut du carton en grammes. Défaut : 0
lengthPerPCBintNonLongueur en mm. Défaut : 0
widthPerPCBintNonLargeur en mm. Défaut : 0
heightPerPCBintNonHauteur en mm. Défaut : 0
ChampTypeRequisDescription
quantityPerSPCBintNonNombre d’UVC par sous-palette. Défaut : 0
grossWeightPerSPCBintNonPoids brut. Défaut : 0
lengthPerSPCBintNonLongueur en mm. Défaut : 0
widthPerSPCBintNonLargeur en mm. Défaut : 0
heightPerSPCBintNonHauteur en mm. Défaut : 0
ChampTypeRequisDescription
uvcQuantityPerCartonOrPaletteintNonNombre d’UVC par palette. Défaut : 9999 si non renseigné
weightPerCartonOrPaletteintNonPoids brut. Défaut : 0
lengthPerCartonOrPaletteintNonLongueur en mm. Défaut : 0
widthPerCartonOrPaletteintNonLargeur en mm. Défaut : 0
heightPerCartonOrPaletteintNonHauteur en mm. Défaut : 0
ChampTypeMaxRequisDescription
receptionMethodstring25NonTaille emplacement dans le WMS
storageMethodstring25NonFamille de péremption. Défaut : "001"
preferredStorageZonestring25NonZone préférentielle de stockage
preferredStorageAislestring25NonFamille de stockage. Défaut selon config
storageClassstring25NonClasse de stockage
preparationMethodstring25NonFamille de préparation. Défaut selon config
articlePackagingstring30NonEmballage article
customsCodestring15NonCode douane
countryOfOriginCodestring15NonCode pays d’origine (ISO 3166-1 alpha-2)
minimumPriorityDateDayNumberintNonNombre de jours minimum de la date d’ordonnancement pour la réception. Plage autorisée : 0999. Verrouillé après la première réception.
ChampTypeMaxRequisDescription
supplierCodestring14NonCode fournisseur principal
supplierArticleReferencestring50NonRéférence de l’article chez le fournisseur
supplierArticleDescriptionstring100NonDésignation fournisseur
supplierArticleReference2 à 5string20NonRéférences fournisseurs additionnelles
brandCodestring8NonCode marque
ChampTypeMaxRequisDescription
dOReferenceCodestring30NonRéférence de l’article chez le client donneur d’ordre
ChampTypeRequisDescription
saleExpirationDateboolNonL’article a une date limite de vente
receptionDeadlineInDaysintNonDurée de vie minimale à la réception (en jours)
shippingDeadlineInDaysintNonDurée de vie minimale à l’expédition (en jours)
ChampTypeRequisDescription
serializedArticleboolNonGestion par numéro de série
lotTrackedArticleboolNonGestion par numéro de lot
miniArticlesManagedboolNonGestion de type mini-articles
quantityDeclarationManagedboolNonDéclaration de quantité à la préparation
fragileArticleboolNonArticle fragile (préparation spécifique)
nomenclatureManagedboolNonGestion de la nomenclature
ChampTypeRequisDescription
articlePrice1 à articlePrice4intNonPrix de l’article (en centimes)
ChampTypeÉcritureDescription
topHazardousMaterialboolNonArticle dangereux (géré par le module dangereux)
topAlcoholArticleboolOuiArticle alcool. Non défini automatiquement : doit être positionné explicitement même si l’objet alcool est renseigné.
topConsignedArticleboolOuiArticle consigné
disableProduitboolOuiArticle désactivé
ChampTypeMaxDescription
customField1, customField2DateTimeDates personnalisées
customField3 à customField11string256Texte libre
customField12 à customField16intEntiers personnalisés
customField17, customField18DateTimeDates personnalisées

Tableau d’objets Barcode :

ChampTypeMaxRequisDescription
codestring17OuiCode-barre (EAN, UPC, etc.)
isPrimaryboolNonCode-barre principal
barcodeUnitstring17NonUnité logistique. Défaut : "UVC". Valeurs acceptées : BID, BOI, BOU, CAR, CUV, DOS, ETU, FLA, FUT, KG, LIT, LTR, MET, PAC, PCB, ROU, SAC, SCH, SPC, SUP, UVC
barcodeQuantityintNonQuantité représentée par le code-barre. Défaut : 1
logisticalVariantCodestring3NonCode VL associé (10, 15, 20, 30)
disabledboolNonCode-barre désactivé

Objet optionnel :

ChampTypeMaxRequisDescription
articleReferencestring16OuiDoit correspondre à l’article parent
itemTypestring3Oui"010" = acquit, "020" = CRD
regieCodesstring2NonCode régie
degreedoubleNonDegré d’alcool
capacitydoubleNonContenance en ml
categoryOfTaxationstring50NonLibellé fiscal
customsBrandNamestring40NonMarque douanière
customsClassificationstring9NonRubrique douanière

Variantes logistiques (logisticalVariants) — mode managedVl uniquement

Section intitulée « Variantes logistiques (logisticalVariants) — mode managedVl uniquement »

Tableau d’objets LogisticalVariant :

ChampTypeRequisDescription
logisticalVariantCodestringOuiCode de la VL : 10, 15, 20, 30
lvTypeCodestringOuiType de la VL. Défaut auto : UVC, SPC, PCB, SUP
baseLvboolNontrue uniquement pour la VL 10
packagingLvboolNontrue uniquement pour la VL 30
managementLvboolNonVL de gestion
subpackagingLvCodestringConditionnelCode de la VL parent. Obligatoire sauf pour VL 10 avec baseLv=true
quantityInSubpackagingLvintConditionnelQuantité dans la VL parent. Obligatoire sauf pour VL 10 avec baseLv=true
quantityInBaseLvstringOuiQuantité en UVC de base
netWeightintNonPoids net (g). Défaut : 0
grossWeightintNonPoids brut (g). Défaut : 0
heightintNonHauteur (mm). Défaut : 0
widthintNonLargeur (mm). Défaut : 0
depthintNonProfondeur (mm). Défaut : 0
volumeintNonVolume (cm3). Défaut : 0
standardPriceintNonPrix standard (centimes). Défaut : 0
checkAtReceiptboolNonContrôle à réception. Défaut : false
repackingAtReceiptboolNonReconditionnement à réception. Défaut : false
hdTypeCodestringNonType de support (si packagingLv=true). Défaut : "434"
locationSizeCodestringNonTaille emplacement (si packagingLv=true). Défaut : "434"
storageGroupCodestringNonFamille de stockage (si packagingLv=true). Défaut : "E01"
preparationGroupCodestringNonFamille de préparation (si packagingLv=true). Défaut : "001"
bulkStorageGroupCodestringNonGroupe de stockage vrac
kitboolNonArticle kit. Défaut : false
specif1 à specif4DateTimeNonChamps spécifiques date
specif5 à specif8string (256)NonChamps spécifiques texte
specif9 à specif12intNonChamps spécifiques numériques
barcodesBarcode[]NonCodes-barres spécifiques à cette VL
subpackagingLvNbConstitutingLayerintNonNombre d’unités par couche (palettisation)
heightLayerdoubleNonHauteur de la couche en mm (palettisation)
disableVlboolLecture seule. Positionné automatiquement à true par le système quand une VL présente en base n’est plus dans l’envoi
newLvboolLecture seule. false pour la VL 10, true pour la VL 30 sur un nouvel article. Passe à false après la première réception WMS.
  • activityCode, activityName, articleReference, longArticleDescription, shortArticleDescription, netWeightPerUVC
  • articleReference : ^[A-Z0-9_.#/\-]+$ (majuscules, chiffres, et _, ., #, /, -) — erreur 104 si format invalide
  • articleType : 0, 1 ou 2 — erreur 202 si valeur invalide
  • articleAnalysisCode : E, C ou D — erreur 202 si valeur invalide
  • alcool.itemType : "010" ou "020" — erreur 202 si valeur invalide
  • countryOfOriginCode : ISO 3166-1 alpha-2
  • minimumPriorityDateDayNumber : entier entre 0 et 999 inclus — erreur 202 si hors plage
  • Chaque code doit être unique au sein de l’envoi (erreur 203 si doublon)
  • barcodeUnit doit être une des 21 valeurs autorisées
  • Pas de doublons dans les logisticalVariantCode (erreur 204)
  • Exactement une VL 10 avec baseLv=true (erreur 207)
  • Exactement une VL 30 avec packagingLv=true (erreur 207)
  • Une VL ne peut avoir qu’un seul flag actif parmi baseLv, packagingLv, managementLv
  • subpackagingLvCode doit référencer une VL existante avec un code inférieur ou égal
  • Les quantités doivent être cohérentes hiérarchiquement
  • En mode skipVl : après la première réception WMS, les champs de dimensions et quantités racine sont silencieusement ignorés.
  • En mode managedVl : quand la VL 30 a newLv = false, toutes les VL sont silencieusement gelées — modifications ignorées, status 0 retourné, article dans passed. Aucune erreur n’est retournée. L’erreur 209 n’est pas déclenchée par POST /articles.
CodeHTTPDescription
104400Caractères non autorisés dans articleReference (ou autre champ de format contrôlé)
200400logisticalVariants non autorisé en mode skipVl
201400Champ obligatoire manquant. Répété autant de fois qu’il y a de champs manquants (y compris par VL)
202400Valeur hors plage ou enum invalide : articleAnalysisCode, articleType, alcool.itemType, minimumPriorityDateDayNumber
203400Code-barre en doublon dans l’envoi
204400logisticalVariantCode en doublon dans logisticalVariants
206403Activité non autorisée — réponse HTTP 403 avec corps texte brut (hors OperationResult)
207400Structure des variantes logistiques invalide (VL manquante, flags incohérents, quantités incohérentes, parent inexistant)
209400Modification non autorisée — non déclenché par POST /articles (endpoint dédié VL uniquement)
[
{
"activityCode": "001",
"activityName": "Mon activité",
"articleReference": "ART-001",
"longArticleDescription": "T-shirt coton bio taille M bleu",
"shortArticleDescription": "T-shirt M bleu",
"netWeightPerUVC": 200,
"grossWeightPerUVC": 250,
"lengthPerUVC": 300,
"widthPerUVC": 200,
"heightPerUVC": 30,
"articleType": 0,
"quantityPerPCB": 12,
"grossWeightPerPCB": 3500,
"articleFamily": "TEXTILE",
"articleSubFamily": "TSHIRT",
"articleBrand": "EcoBrand",
"articleSize": "M",
"articleColor": "Bleu",
"supplierCode": "FOUR01",
"supplierArticleReference": "ECO-TSH-M-BLU",
"countryOfOriginCode": "PT",
"barcodes": [
{
"code": "3760001234567",
"isPrimary": true,
"barcodeUnit": "UVC",
"barcodeQuantity": 1
},
{
"code": "03760001234567",
"barcodeUnit": "PCB",
"barcodeQuantity": 12
}
],
"customField3": "Collection été 2024"
}
]
[
{
"activityCode": "001",
"activityName": "Mon activité",
"articleReference": "ART-002",
"longArticleDescription": "Boîte de céréales 500g",
"shortArticleDescription": "Céréales 500g",
"netWeightPerUVC": 0,
"logisticalVariants": [
{
"logisticalVariantCode": "10",
"lvTypeCode": "UVC",
"baseLv": true,
"quantityInBaseLv": "1",
"netWeight": 520
},
{
"logisticalVariantCode": "20",
"lvTypeCode": "PCB",
"managementLv": true,
"subpackagingLvCode": "10",
"quantityInSubpackagingLv": 6,
"quantityInBaseLv": "6",
"netWeight": 3200
},
{
"logisticalVariantCode": "30",
"lvTypeCode": "SUP",
"packagingLv": true,
"subpackagingLvCode": "20",
"quantityInSubpackagingLv": 4,
"quantityInBaseLv": "24",
"netWeight": 13000,
"hdTypeCode": "434",
"locationSizeCode": "434",
"storageGroupCode": "E01",
"preparationGroupCode": "001"
}
]
}
]
Fenêtre de terminal
curl -X POST "https://api.ezyconnect.com/articles" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '[
{
"activityCode": "001",
"activityName": "Mon activité",
"articleReference": "ART-001",
"longArticleDescription": "T-shirt coton bio taille M bleu",
"shortArticleDescription": "T-shirt M bleu",
"netWeightPerUVC": 200
}
]'

Le champ status est un entier : 0 = tout OK, 1 = partiel (certains passés, certains rejetés), 2 = tout rejeté.

Succès (status 0)

{
"status": 0,
"operationId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"errors": {},
"passed": ["ART-001"]
}

Partiel (status 1) — un article valide, un rejeté

{
"status": 1,
"operationId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"errors": {
"ART-002": [
{
"code": "104",
"description": "Ressource rejetée car présence de caractères pour [articleReference] non autorisés : [ART-002]"
}
]
},
"passed": ["ART-001"]
}

Tout rejeté (status 2) — plusieurs erreurs sur un même article

{
"status": 2,
"operationId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"errors": {
"ART-001": [
{
"code": "201",
"description": "Ressource rejetée car donnée obligatoire [longArticleDescription] manquante : [ART-001]"
},
{
"code": "201",
"description": "Ressource rejetée car donnée obligatoire [netWeightPerUVC] manquante : [ART-001]"
}
]
},
"passed": []
}