Les fournisseurs dans Codenica API
Le nom technique de cette ressource dans la Public API est vendors et le type renvoyé par l'API est vendor. Une fiche fournisseur peut contenir le nom de l'entreprise, les coordonnées, les informations d'immatriculation, le statut et une description de la relation commerciale.
Avant d'envoyer votre première requête, préparez la clé décrite dans Codenica API - introduction. Le parcours ci-dessous couvre toutes les étapes : consulter le schéma et les listes, créer et modifier un fournisseur, gérer les cibles de relation autorisées, utiliser les fichiers, traiter des opérations batch et supprimer une fiche.
- lire les listes de fournisseurs avec pagination, tri et filtres ;
- ne demander que les champs nécessaires à l'intégration ;
- créer des fiches fournisseurs et appliquer des mises à jour partielles ;
- protéger les modifications avec ETag et
If-Match; - répéter les opérations d'écriture en toute sécurité grâce à
Idempotency-Key; - utiliser les cibles de relation exposées par le schéma des fournisseurs ;
- téléverser, télécharger, rattacher et supprimer des fichiers ;
- lire les statistiques, les valeurs de champs et traiter des opérations batch.
Les champs obligatoires et les valeurs acceptées peuvent dépendre de la configuration de votre base de données. Consultez le schéma actuel avant toute écriture.
Fournisseurs - adresse de l'API et type d'installation
Envoyez les requêtes à l'adresse publique à laquelle votre installation Codenica est accessible. N'utilisez pas l'adresse de la base de données, d'un conteneur ou d'un port accessible uniquement à l'intérieur du serveur. Les chemins des fournisseurs commencent par :
{BASE_URL}/api/v1/vendorsDans Codenica Cloud, utilisez le domaine attribué à votre installation :
export BASE_URL="https://votre-entreprise.codenica.com"Dans l'installation On-Premise par défaut, Codenica Discovery enregistre le service localement à l'adresse suivante :
export BASE_URL="http://codenica.local:5150"Si l'administrateur a publié l'installation On-Premise avec un domaine d'entreprise, un reverse proxy, HTTPS ou un autre port externe, utilisez l'adresse exacte qui vous a été communiquée :
export BASE_URL="https://api.votre-entreprise.example"La base de données est sélectionnée à partir de l'adresse de l'hôte. Ne la sélectionnez pas avec tenantId, un paramètre supplémentaire de query string ou une valeur dans le body. N'utilisez pas localhost si le programme d'intégration s'exécute sur un autre ordinateur.
BASE_URL ne doit pas contenir le suffixe final /api/v1 :
# Codenica Cloud :
export BASE_URL="https://votre-entreprise.codenica.com"
# On-Premise par défaut avec Codenica Discovery :
# export BASE_URL="http://codenica.local:5150"
# On-Premise avec une adresse publiée par l'administrateur :
# export BASE_URL="https://api.votre-entreprise.example"Fournisseurs - clé API et scopes d'accès
Créez la clé destinée à une intégration externe dans Codenica, sous Paramètres - API - Clés API. Donnez-lui un nom qui indique l'application, l'environnement et l'usage, par exemple Achats - Fournisseurs - production. Sélectionnez uniquement les scopes nécessaires, puis enregistrez une seule fois le Client ID et le Client Secret affichés dans un coffre-fort de secrets.
Le parcours complet de cet article nécessite :
vendors:read,vendors:writeetvendors:delete- lecture, création, modification et suppression des fiches ;vendors:schema- champs et cibles de relation ;vendors:stats- statistiques et valeurs de champs ;vendors:relationships:readetvendors:relationships:write- lecture et modification des relations ;vendors:files:readetvendors:files:write- opérations sur les fichiers.
Si l'intégration lit des Documents ou une autre cible de relation, ajoutez également son scope de lecture, par exemple documents:read. Le scope des relations fournisseurs ne remplace pas l'accès à l'objet cible.
Une intégration en lecture seule nécessite généralement :
vendors:read
vendors:schemaLes limites de clés dépendent de la licence :
Le panneau API conserve les clés créées pour votre base de données. Une clé distincte pour chaque application et chaque environnement facilite le contrôle des accès, la rotation d'un secret ou la suppression d'une intégration sans interrompre les autres. Une clé supprimée ne peut plus authentifier de requêtes et n'est pas comptée comme active.
Le Client Secret n'est affiché qu'à la création ou à la rotation d'une clé. Ne le stockez pas dans un dépôt, une URL, des journaux, l'historique des commandes ou du code exécuté dans le navigateur.
Fournisseurs - en-têtes d'authentification
L'application externe envoie des requêtes de serveur à serveur avec deux en-têtes qui identifient la clé :
export CLIENT_ID="cna_votre_client_id"
export CLIENT_SECRET="cns_votre_client_secret"
curl --request GET --url "$BASE_URL/api/v1/vendors" \
--header "Accept: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Dans ce scénario, n'envoyez ni JWT d'administrateur ni cookies de session du panneau. L'intégration utilise la clé API attribuée à cette base de données et une installation de production doit être accessible en HTTPS.
Toute opération qui modifie les données nécessite un en-tête unique :
Idempotency-Key: public-api-vendors-create-20260905111218Les mises à jour, les suppressions, les changements de relation et les opérations sur les fichiers nécessitent l'ETag actuel de la fiche :
If-Match: "etag-actuel-du-fournisseur"Après chaque modification réussie, enregistrez le nouvel ETag renvoyé dans l'en-tête et dans data.meta.etag. Pour répéter la même opération logique, conservez le même Idempotency-Key et un body identique.
Fournisseurs - vérifier le contexte de l'installation
Lisez le contexte avant de commencer la synchronisation :
curl --request GET --url "$BASE_URL/api/v1/context" \
--header "Accept: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Vérifiez apiVersion, contractVersion, l'identifiant de la base, tenant.resolvedDomain, caller.authentication égal à api_key, les scopes requis et la présence de vendors dans capabilities.resources. Lisez également les limites de pagination, de fichiers, de batch et de requêtes.
Une intégration complète doit normalement exposer supportsBatch, supportsRelationships, supportsFiles, supportsETag et supportsIdempotency. Conservez meta.requestId de chaque réponse. Il est nécessaire pour analyser une erreur ou contacter l'administrateur.
Si le contexte indique une autre base ou si un scope nécessaire manque, arrêtez la synchronisation et corrigez l'adresse ou la clé. N'essayez pas de modifier la base dans le body de la requête.
Fournisseurs - schéma des champs et cibles de relation
Lisez le schéma avant la première écriture :
curl --request GET --url "$BASE_URL/api/v1/vendors/schema" \
--header "Accept: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Dans la réponse, data.itemType vaut vendor. Le schéma indique le type du champ, s'il peut être lu ou écrit, son caractère obligatoire, sa longueur maximale, son unicité et sa génération automatique. Dans le schéma actuel, name est obligatoire et peut contenir 300 caractères au maximum :
namestringLes champs les plus courants appartiennent à plusieurs groupes :
- identification :
customId,name,displayName,type,category,role,status; - localisation :
location,department,address,city,country,state,zipCode; - contact :
email,phone,phoneWork,phoneMobile,contactName,contactPhone,contactMobile,contactEmail; - registres et repères :
website,tag,taxId,idNumber,registryNumber,link,number; - description et état :
comments,description,notification,value,isLicensed,isVerified.
Le schéma renvoie également le catalogue des cibles de relation. Dans le modèle actuel des fournisseurs, il s'agit de documents, notes, worktasks et requesteditems. Ne supposez pas que toutes les ressources visibles dans le contexte peuvent être une cible de relation.
Fournisseurs - carte des endpoints
Cette carte regroupe les principales opérations sur les fiches fournisseurs. Remplacez les valeurs entre accolades par les UUID renvoyés dans les réponses précédentes.
GET /api/v1/vendors- liste ;GET /api/v1/vendors/schema- schéma des champs et des relations ;GET /api/v1/vendors/stats- statistiques ;GET /api/v1/vendors/values- valeurs de champs ;GET /api/v1/vendors/{id}- fiche unique ;POST /api/v1/vendors- création ;PATCH /api/v1/vendors/{id}- mise à jour partielle ;DELETE /api/v1/vendors/{id}- suppression ;POST /api/v1/vendors:batch- opérations de création, mise à jour et suppression ;GET /api/v1/vendors/{id}/relationships- liste des relations ;POST /api/v1/vendors/{id}/relationships- ajout d'une relation ;POST /api/v1/vendors/{id}/relationships:batch- modification groupée des relations ;DELETE /api/v1/vendors/{id}/relationships/{targetDataSet}/{targetId}- suppression d'une relation ;GET /api/v1/vendors/{id}/files- liste des fichiers ;POST /api/v1/vendors/{id}/files- téléversement ;POST /api/v1/vendors/{id}/files/{fileId}- rattachement d'un fichier existant ;PUT /api/v1/vendors/{id}/files/{fileId}/main- définition du fichier principal ;DELETE /api/v1/vendors/{id}/files/{fileId}- suppression d'un fichier ;GET /api/v1/vendors/{id}/files/{fileId}/content- téléchargement du contenu.
Si un endpoint renvoie 403, vérifiez d'abord le scope attribué à la clé, puis les autorisations de son propriétaire.
Fournisseurs - liste, tri et pagination
Lisez la liste page par page. Cet exemple renvoie les vingt premières fiches et les trie par nom :
curl --request GET --url "$BASE_URL/api/v1/vendors?page=1&pageSize=20&sort=name&direction=asc" \
--header "Accept: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"L'enveloppe de collection contient items, page, pageSize, totalItems, totalPages et hasNextPage. Lorsque hasNextPage vaut true, lisez la page suivante. Pour une synchronisation reproductible, définissez explicitement le tri.
Lisez la limite pageSize dans le contexte. Ne supposez pas que la première page contient toutes les fiches ni que l'ordre par défaut restera inchangé.
Fournisseurs - recherche et filtrage
Après la création d'une fiche, retrouvez-la avec son identifiant interne et son statut :
curl --request GET --url "$BASE_URL/api/v1/vendors?customId=PUBLIC-API-VEN-20260905111218-SOURCE&status=Active&sort=customId&direction=asc&page=1&pageSize=10" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Utilisez search pour rechercher un texte :
curl --request GET --url "$BASE_URL/api/v1/vendors?search=technology&page=1&pageSize=20" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Selon le schéma, vous pouvez notamment utiliser ids, search, name, displayName, email, status, category, type, role, location, department, customId, tag, createdAfter, createdBefore, updatedAfter et updatedBefore.
Pour des conditions plus précises, utilisez filter :
filter=status:eq:Active
filter=name:contains:Technology
filter=category:in:Technology,Hardware
filter=description:notEmpty:Les opérateurs permettent de comparer des valeurs, de rechercher un fragment de texte, de choisir une valeur parmi plusieurs et de tester les champs vides. Encodez les espaces et les caractères spéciaux selon les règles des URL avant d'envoyer le filtre.
Fournisseurs - sélectionner les champs et inclure des données
Le paramètre fields limite la réponse aux propriétés nécessaires à l'intégration :
curl --request GET --url "$BASE_URL/api/v1/vendors?fields=id,itemType,customId,displayName,email,status" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Utilisez include pour lire les fichiers et les relations avec la fiche :
curl --request GET --url "$BASE_URL/api/v1/vendors/a8156781-3b1c-4fa5-9cf2-05077e5d1399?fields=customId,displayName,email,status,description&include=files,relationships" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"La réponse peut contenir les attributs demandés ainsi que les collections files et relationships. L'accès aux données incluses doit être accordé séparément. L'absence de vendors:files:read ou de vendors:relationships:read ne peut pas être contournée par fields=*.
Fournisseurs - créer une fiche
Utilisez POST /api/v1/vendors pour créer une fiche. Placez les champs inscriptibles dans attributes. La requête minimale exige name, mais il est utile d'envoyer immédiatement l'identifiant du système source et les coordonnées principales :
{
"attributes": {
"customId": "ERP-VENDOR-2026-001",
"name": "Northwind Technology Services",
"displayName": "Northwind Technology Services",
"email": "[email protected]",
"category": "Technology",
"type": "Supplier",
"role": "Supplier",
"status": "Active",
"description": "Fournisseur de services d'infrastructure informatique."
}
}curl --request POST --url "$BASE_URL/api/v1/vendors" \
--header "Content-Type: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "Idempotency-Key: public-api-vendors-create-erp-vendor-2026-001" \
--data @vendor-create.jsonUne réponse correcte renvoie le statut 201 Created. Enregistrez data.id, data.meta.etag et l'en-tête HTTP ETag. Dans la fiche de démonstration, l'API a renvoyé itemType: vendor et l'identifiant a8156781-3b1c-4fa5-9cf2-05077e5d1399.
Fournisseurs - répéter la création en toute sécurité
Si un délai d'attente survient ou si la réponse est perdue après l'envoi, ne créez pas immédiatement une seconde fiche. Répétez exactement la même requête avec la même clé :
Idempotency-Key: public-api-vendors-create-erp-vendor-2026-001Le body doit être identique et la clé doit être réservée à cette seule opération logique. La répétition avec la même clé ne créera pas un second fournisseur. Ne réutilisez pas cette clé pour une autre fiche, une mise à jour ou une suppression.
L'idempotence s'applique aux opérations d'écriture. Chaque nouvelle écriture doit recevoir une clé unique.
Fournisseurs - lire une fiche
Après sa création ou sa recherche, lisez la fiche avec l'UUID renvoyé par l'API :
VENDOR_ID="a8156781-3b1c-4fa5-9cf2-05077e5d1399"
curl --request GET --url "$BASE_URL/api/v1/vendors/$VENDOR_ID" \
--header "Accept: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"La réponse 200 OK contient data.itemType: vendor ; l'ETag actuel se trouve dans l'en-tête HTTP et dans data.meta.etag. N'utilisez pas l'identifiant du système source à la place de l'UUID, sauf si vous avez d'abord recherché la fiche.
Fournisseurs - mise à jour partielle avec ETag
Commencez par lire la fiche et utilisez l'ETag renvoyé. PATCH ne modifie que les propriétés transmises dans attributes :
CURRENT_ETAG='"ao_LJiJqs-uhBu9oDENCFJH6JY8qwbl_vt77Gl5cjGQ"'
curl --request PATCH --url "$BASE_URL/api/v1/vendors/$VENDOR_ID" \
--header "Content-Type: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-update-20260905111218" \
--data '{"attributes":{"displayName":"Northwind Technology Services - service achats","description":"Données fournisseur mises à jour par l'intégration."}}'Une réponse réussie renvoie 200 OK. N'envoyez pas les propriétés que vous ne voulez pas modifier. Après l'opération, remplacez l'ETag enregistré par la nouvelle valeur, par exemple "ek44P2KnmKSAB1xX4Ycs_NgIn0I3NLoDdqsezEUgBTY".
Fournisseurs - éviter d'écraser une modification
Si deux processus ont lu la même fiche, le second peut déjà posséder une version obsolète. La Public API rejette cette mise à jour avec le code if_match_failed et le statut 412 Precondition Failed :
{
"type": "https://docs.codenica.com/errors/if_match_failed",
"title": "Precondition failed.",
"status": 412,
"detail": "The supplied ETag is not the current vendor version.",
"code": "if_match_failed"
}L'absence de If-Match lors d'une mise à jour ou d'une suppression renvoie 428 Precondition Required avec le code if_match_required. Après un 412 ou un 428, relisez la fiche, examinez son état actuel et décidez seulement ensuite s'il faut recommencer. N'envoyez pas un ETag choisi au hasard.
Fournisseurs - catalogue limité des relations
Tout objet disponible dans le système ne peut pas être une cible de relation d'un fournisseur. La source de vérité est relationshipTargets, renvoyé par /api/v1/vendors/schema. Le modèle actuel expose :
documents
notes
worktasks
requesteditemsNe reliez pas les fournisseurs à clients ni à assets. Ne déduisez pas la prise en charge d'une autre collection simplement parce qu'elle apparaît dans capabilities.resources. La liste des ressources de l'installation est plus large que celle des cibles de relation d'un objet donné.
Les relations entre objets fournisseurs n'utilisent pas relationshipType. Ne l'envoyez pas dans le body et n'ajoutez pas relationshipType=related à la query string. Si un endpoint de fichiers utilise relationshipType=documentation ou relationshipType=manual, cette valeur est une métadonnée du fichier et ne représente pas une relation avec un autre objet.
Fournisseurs - ajouter et lire une relation
Lisez un ETag récent du fournisseur avant de modifier une relation. Le body contient la cible, la collection et, lorsque l'objet cible l'exige, son targetItemType :
{
"targetId": "31fe2881-6236-4100-9a87-2c018cbaf709",
"targetDataSet": "documents",
"targetItemType": "warranty"
}curl --request POST --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/relationships" \
--header "Content-Type: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-relationship-document-a-20260905111218" \
--data '{"targetId":"31fe2881-6236-4100-9a87-2c018cbaf709","targetDataSet":"documents","targetItemType":"warranty"}'Un ajout réussi renvoie 201 Created. Lisez ensuite les relations séparément :
curl --request GET --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/relationships?targetDataSet=documents&page=1&pageSize=50" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"La réponse contient notamment targetId, targetDataSet, targetItemType, customId et status. La liste des relations ne contient pas de paramètre relationshipType.
Fournisseurs - batch de relations et suppression d'un lien
Utilisez relationships:batch pour ajouter ou supprimer plusieurs relations dans une seule requête :
{
"add": [
{
"targetId": "31eed973-79cf-4650-ac0e-1e3ef5513d9f",
"targetDataSet": "documents",
"targetItemType": "warranty"
}
],
"remove": []
}curl --request POST --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/relationships:batch" \
--header "Content-Type: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-relationship-batch-20260905111218" \
--data @vendor-relationships-batch.jsonLe résultat contient les compteurs added, removed et skipped. Supprimez une relation avec :
curl --request DELETE --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/relationships/documents/31fe2881-6236-4100-9a87-2c018cbaf709" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-relationship-delete-20260905111218"N'ajoutez pas relationshipType. Relisez la collection après l'opération pour confirmer l'état de la relation.
Fournisseurs - lister les fichiers
Les fichiers forment une collection distincte rattachée à la fiche fournisseur :
curl --request GET --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/files?page=1&pageSize=50" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Une collection vide contient notamment items: [], totalItems: 0 et hasNextPage: false. Après chaque opération sur un fichier, relisez la collection : elle montre les valeurs réelles de isMain, de relationshipType, de la taille et de l'adresse de téléchargement.
Fournisseurs - téléverser un fichier
Lisez l'ETag actuel du fournisseur avant le téléversement. L'envoi utilise une requête multipart :
curl --request POST --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/files?makeMain=true&relationshipType=documentation" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-file-upload-20260905111218" \
--form "[email protected];type=text/plain"Ici, relationshipType=documentation décrit le fichier et non une relation entre objets. La réponse 201 Created contient notamment l'identifiant du fichier, son nom, son type de contenu, sa taille et downloadUrl. Confirmez dans la liste que le fichier possède isMain: true.
Lisez la limite d'envoi dans data.capabilities.limits.maxUploadBytes. Dans l'installation d'exemple, elle était de 20971520 octets.
Fournisseurs - télécharger un fichier et changer le fichier principal
Téléchargez le contenu avec downloadUrl ou avec l'endpoint équivalent :
FILE_ID="025222b9-abef-4bad-a2ba-28229a0d73fb"
curl --request GET --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/files/$FILE_ID/content" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--output vendors-primary-downloaded.txtLa réponse doit contenir 200 OK, le bon Content-Type et un en-tête Content-Disposition. Pour ajouter un second fichier sans modifier le fichier principal, utilisez makeMain=false et, par exemple, relationshipType=manual. Définissez-le ensuite comme fichier principal :
curl --request PUT --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/files/cc182dea-47d3-4ca2-818b-c639cde5a124/main" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-file-set-main-20260905111218"Après une nouvelle lecture, le nouveau fichier doit avoir isMain: true et le précédent isMain: false.
Fournisseurs - rattacher un fichier existant
Vous pouvez rattacher à une autre fiche un fichier conservé avec un fournisseur sans téléverser à nouveau son contenu. Il s'agit d'une opération sur un fichier : relationshipType est donc une métadonnée du fichier :
TARGET_VENDOR_ID="4bfece8f-5bb3-438c-a95b-f14ccf93cce3"
TARGET_ETAG='"l5sRayy308rVRi4PNmUReFFcJGowi0KZUi8-hOGGlr0"'
curl --request POST --url "$BASE_URL/api/v1/vendors/$TARGET_VENDOR_ID/files/2a1f9727-0990-405d-b22c-fbd93273cc6e?makeMain=true&relationshipType=manual" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $TARGET_ETAG" \
--header "Idempotency-Key: public-api-vendors-file-attach-20260905111218"Le détachement supprime le rattachement chez le fournisseur cible sans supprimer le fichier de la fiche propriétaire :
curl --request DELETE --url "$BASE_URL/api/v1/vendors/$TARGET_VENDOR_ID/files/2a1f9727-0990-405d-b22c-fbd93273cc6e" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $TARGET_ETAG" \
--header "Idempotency-Key: public-api-vendors-file-detach-20260905111218"Après le détachement, vérifiez la liste des fichiers du fournisseur cible et du propriétaire.
Fournisseurs - supprimer un fichier
La suppression d'un fichier nécessite également l'ETag actuel de la fiche fournisseur :
curl --request DELETE --url "$BASE_URL/api/v1/vendors/$VENDOR_ID/files/cc182dea-47d3-4ca2-818b-c639cde5a124" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-file-delete-20260905111218"Si vous supprimez le fichier principal actuel, le système peut choisir automatiquement un autre fichier restant comme fichier principal. Après 200 OK, relisez la liste et vérifiez totalItems et isMain. Détacher un fichier n'est pas la même chose que supprimer le fichier conservé chez son propriétaire.
Fournisseurs - statistiques et valeurs de champs
Les statistiques aident à voir la répartition des données dans les fiches fournisseurs :
curl --request GET --url "$BASE_URL/api/v1/vendors/stats?field=status&limit=20" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Le résultat peut contenir le nombre total de fiches, le nom du champ et les valeurs accompagnées de compteurs. Les valeurs proviennent de votre base de données. Par exemple, active, Active et fournisseur actif peuvent être des entrées différentes si elles proviennent de sources distinctes.
Utilisez l'endpoint values pour construire des suggestions de filtres :
curl --request GET --url "$BASE_URL/api/v1/vendors/values?field=status&search=Act&limit=20" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET"Les statistiques et les valeurs sont des opérations en lecture seule et ne modifient pas les données.
Fournisseurs - création par batch
Un batch permet de créer plusieurs fiches dans une seule requête. Chaque élément contient operation: create et un objet create :
{
"items": [
{
"operation": "create",
"create": {
"attributes": {
"customId": "ERP-VENDOR-BATCH-A",
"name": "Northwind Batch A",
"email": "[email protected]",
"category": "Technology",
"type": "Supplier",
"role": "Supplier",
"status": "Active"
}
}
},
{
"operation": "create",
"create": {
"attributes": {
"customId": "ERP-VENDOR-BATCH-B",
"name": "Northwind Batch B",
"email": "[email protected]",
"category": "Technology",
"type": "Supplier",
"role": "Supplier",
"status": "Active"
}
}
}
]
}curl --request POST --url "$BASE_URL/api/v1/vendors:batch" \
--header "Content-Type: application/json" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "Idempotency-Key: public-api-vendors-batch-create-20260905111218" \
--data @vendors-batch-create.jsonLe résultat contient le statut de la requête complète et le statut de chaque opération dans data.items. Un batch réussi peut renvoyer 200 OK, succeeded: 2, failed: 0 et deux éléments au statut 201. Enregistrez chaque UUID et chaque ETag séparément.
Fournisseurs - mise à jour, suppression et réussite partielle par batch
Une mise à jour par batch exige id, l'ifMatch actuel et un objet update :
{
"items": [
{
"operation": "update",
"id": "76d1698d-dfdb-47a3-9d84-3e476fa7894c",
"ifMatch": "ETAG_FROM_GET",
"update": {
"attributes": {
"displayName": "Northwind Batch A - mise à jour",
"description": "Modification effectuée par l'opération batch des fournisseurs."
}
}
},
{
"operation": "invalid"
}
]
}Si une opération réussit et qu'une autre est invalide, l'API renvoie 207 Multi-Status. Ne considérez pas 207 comme un échec total ni comme une réussite totale. Traitez chaque élément de data.items séparément. La suppression suit la même règle : envoyez l'identifiant et l'ifMatch actuel :
{
"operation": "delete",
"id": "9462d541-c405-44bf-9c75-000d8b862136",
"ifMatch": "ETAG_FROM_GET"
}Après une suppression par batch, effectuez un GET de contrôle. La fiche supprimée doit renvoyer 404 avec le code vendor_not_found.
Fournisseurs - supprimer une fiche
Relisez la fiche avant sa suppression afin de disposer d'un ETag actuel :
curl --request DELETE --url "$BASE_URL/api/v1/vendors/$VENDOR_ID" \
--header "X-Codenica-Client-Id: $CLIENT_ID" \
--header "X-Codenica-Client-Secret: $CLIENT_SECRET" \
--header "If-Match: $CURRENT_ETAG" \
--header "Idempotency-Key: public-api-vendors-delete-20260905111218"Une suppression réussie renvoie 200 OK et data: true. Une lecture ultérieure renvoie 404 Not Found avec le code vendor_not_found. Vous pouvez également filtrer sur votre customId et confirmer totalItems: 0.
Si la réponse DELETE a été perdue, n'envoyez pas immédiatement une nouvelle opération avec une autre clé. Conservez l'Idempotency-Key initial, vérifiez l'état de la fiche et décidez ensuite de la suite.
Fournisseurs - erreurs, limites et parcours d'intégration
Les erreurs de la Public API utilisent le format Problem Details. Fondez la logique de l'application sur le champ stable code et conservez requestId lorsqu'un problème est signalé.
400- champ, cible de relation ou élément batch invalide ;401- identifiants absents ou invalides ;403- scope ou autorisation manquant ;404- fiche, fichier ou cible inexistante ou invisible ;409- conflit de données ou d'unicité ;412- ETag obsolète ;413- fichier trop volumineux ;422- erreur de validation métier ;428-If-MatchouIdempotency-Keymanquant ;429- limite de requêtes dépassée ;207- batch partiellement exécuté.
Lisez X-RateLimit-Limit et X-RateLimit-Remaining. Pour 429, utilisez Retry-After lorsqu'il est renvoyé et augmentez le délai entre les tentatives. Ne journalisez jamais X-Codenica-Client-Secret, les secrets ou le contenu sensible des fichiers.
Ordre conseillé :
- Définissez
BASE_URLsur l'installation correcte. - Créez une clé dans Paramètres - API - Clés API avec les scopes minimaux.
- Lisez
/api/v1/contextet/api/v1/vendors/schema. - Créez un fournisseur avec un
Idempotency-Keyunique, puis conservez son UUID et son ETag. - Lisez les listes avec pagination, filtres et
includefacultatif. - Modifiez la fiche uniquement avec l'
If-Matchactuel. - Ajoutez des relations uniquement vers les cibles du schéma et sans
relationshipType. - Utilisez les endpoints de fichiers dédiés et contrôlez la liste après chaque changement.
- Pour les volumes importants, examinez le résultat de chaque opération batch.
- Relisez l'ETag actuel avant suppression et effectuez un GET de contrôle ensuite.
Les exemples utilisent le préfixe de démonstration PUBLIC-API-VEN-20260905111218. Votre intégration doit utiliser les identifiants renvoyés par votre propre base, et non les valeurs affichées sur cette page.
