API des bons de commande
đ Pourquoi utiliser lâAPI des bons de commande?â
Les bons de commande sont des Ă©lĂ©ments essentiels de la gestion des stocks et de la logistique dans DataDocks. Ils reprĂ©sentent des ententes pour des produits devant ĂȘtre livrĂ©s dans vos entrepĂŽts (entrant) ou expĂ©diĂ©s Ă partir de ceux-ci (sortant). LâAPI des bons de commande vous permet de crĂ©er, suivre et gĂ©rer ces documents essentiels de façon automatisĂ©e, connectant ainsi directement vos systĂšmes de chaĂźne dâapprovisionnement Ă vos opĂ©rations dâentrepĂŽt.
ProblĂšmes rĂ©els rĂ©solus par cette APIâ
- Rationaliser le traitement des commandes : Créez et mettez à jour automatiquement des bons de commande depuis votre ERP ou votre systÚme de gestion des commandes
- Améliorer la visibilité sur les stocks : Suivez les arrivées et départs prévues avec des informations détaillées sur les produits
- Simplifier la gestion des transporteurs : Associez des transporteurs aux bons de commande pour optimiser la logistique
- AmĂ©liorer la planification : DĂ©finissez des horaires prĂ©vus pour mieux gĂ©rer les ressources de lâentrepĂŽt
- Activer lâanalyse avancĂ©e : AccĂ©dez Ă des donnĂ©es structurĂ©es de bons de commande pour le suivi et lâanalyse
DĂ©marrage rapide en 5 minutesâ
PrĂȘt Ă crĂ©er votre premier bon de commande via lâAPI? Suivez ces Ă©tapes simples :
- Obtenez votre jeton API auprĂšs du support
- Identifiez le sous-domaine de votre emplacement (ex. :
your-warehouse.datadocks.com) - Créez un bon de commande de base avec cette commande :
Voir exemple cURL
curl -X POST \
https://your-warehouse.datadocks.com/api/v1/purchase_orders \
-H 'Authorization: Token YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"purchase_order": {
"po_number": "PO-2023-001",
"carrier_name": "Express Logistics",
"outbound": false,
"expected_starts_at": "2023-06-01T08:00:00-04:00",
"expected_ends_at": "2023-06-01T16:00:00-04:00",
"purchase_order_items": [
{
"product_name": "Widgets",
"unit_name": "Pallet",
"quantity": 10,
"weight": 500
}
]
}
}'
- Câest fait ! Votre bon de commande est maintenant dans DataDocks. VĂ©rifiez votre tableau de bord pour le voir.
Architecture gĂ©nĂ©rale de lâAPIâ
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â Votre systĂšme ââââââââ¶â API DataDocks ââââââââ¶â OpĂ©rations â
â (ERP/OMS/TMS) ââââââââ†(REST/JSON) ââââââââ†dâentrepĂŽt â
âââââââââââââââââââ âââââââââââââââââââ âââââââââââââââââââ
â âČ
â â
⌠â
âââââââââââââââââââ
â Rendez-vous & â
â planification â
â â
âââââââââââââââââââ
Authentificationâ
Toutes les requĂȘtes API doivent inclure votre jeton dâAPI dans lâen-tĂȘte Authorization :
Authorization: Token YOUR_API_TOKEN
Lister les bons de commandeâ
Objectifâ
RĂ©cupĂ©rer une liste paginĂ©e de bons de commande avec filtrage optionnel par numĂ©ro de BC. Utilisez ce point de terminaison pour synchroniser les bons de commande avec vos systĂšmes, vĂ©rifier le statut des livraisons attendues ou prĂ©parer des rapports dâactivitĂ©s de lâentrepĂŽt.
Cas dâusages mĂ©tierâ
- Synchroniser les bons de commande avec votre ERP ou systĂšme de gestion des commandes
- GĂ©nĂ©rer des rapports sur les mouvements dâinventaire attendus
- Surveiller les prochaines livraisons ou expéditions
- Suivre la performance des transporteurs Ă travers les bons de commande
RequĂȘte HTTPâ
GET https://[location_subdomain].datadocks.com/api/v1/purchase_orders
ParamĂštres de requĂȘteâ
| ParamĂštre | Type | Obligatoire | Description | Exemple |
|---|---|---|---|---|
page | Integer | Non | Numéro de page pour la pagination (1 par défaut) | page=2 |
po_number | String | Non | Filtrer par le numéro de BC (insensible à la casse) | po_number=A-1000 |
Format de la rĂ©ponseâ
La rĂ©ponse contient un tableau dâobjets bon de commande, chacun avec les champs suivants :
| Champ | Type | Description |
|---|---|---|
id | Integer | Identifiant unique du bon de commande |
po_number | String | Numéro du bon de commande |
name | String | Nom généré automatiquement selon les détails du BC |
carrier_name | String | Nom du transporteur assigné |
location_name | String | Nom de lâemplacement dâentrepĂŽt |
outbound | Boolean | Sâil sâagit dâune commande sortante (true) ou entrante (false) |
expected_starts_at | String | Horodatage ISO8601 de début prévu |
expected_ends_at | String | Horodatage ISO8601 de fin prévu |
custom_values | Objet | Paires clé-valeur de champs personnalisés |
purchase_order_items | Tableau | Liste des articles associés à ce bon de commande |
Chaque article dans purchase_order_items comprend :
| Champ | Type | Description |
|---|---|---|
id | Integer | Identifiant unique de lâarticle |
customer_name | String | Nom du client associĂ© Ă lâarticle |
product_name | String | Nom du produit |
unit_name | String | Unité de mesure (ex. : « Palette », « Boßte ») |
quantity | Number | Quantité de produit |
weight | Number | Poids de lâarticle |
custom_values | Objet | Champs personnalisés pour cet article |
Exemples de codeâ
cURLâ
Voir exemple cURL
# Liste de base
curl -H "Authorization: Token YOUR_API_TOKEN" \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders
# Filtré par numéro de bon de commande
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders?po_number=A-1000"
JavaScriptâ
Voir exemple JavaScript
// Utilisation de fetch API avec filtre sur le numéro de BC
const getPurchaseOrders = async (poNumber) => {
const params = new URLSearchParams();
if (poNumber) params.append("po_number", poNumber);
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders?${params.toString()}`,
{
method: "GET",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
}
);
if (!response.ok) {
const errorData = await response.json();
throw new Error(
`Ăchec de rĂ©cupĂ©ration des bons de commande : ${JSON.stringify(errorData)}`
);
}
return response.json();
};
Exemple de rĂ©ponseâ
Voir exemple de réponse
[
{
"id": 1,
"po_number": "A-1000",
"name": "A-1000-FastCo-Cereal",
"carrier_name": "FastCo",
"location_name": "Toronto",
"outbound": false,
"expected_starts_at": "2020-10-09T13:35:00-04:00",
"expected_ends_at": "2020-10-15T13:35:00-04:00",
"custom_values": {
"expected_at": "2020-10-09",
"travel_type": "Plane",
"forklift_operator": "Joe"
},
"purchase_order_items": [
{
"id": 2,
"customer_name": "FishCo",
"product_name": "Trout",
"unit_name": "Skid",
"quantity": 16,
"weight": 102,
"custom_values": {}
},
{
"id": 1,
"customer_name": "FishCo",
"product_name": "Cereal",
"unit_name": "Skid",
"quantity": 33,
"weight": 581,
"custom_values": {}
}
]
}
]
RĂ©cupĂ©rer un bon de commande uniqueâ
Objectifâ
Obtenir lâinformation dĂ©taillĂ©e pour un bon de commande spĂ©cifique par identifiant. Utilisez ce point de terminaison lorsque vous avez besoin de toutes les donnĂ©es dâun bon de commande, y compris tous ses articles et champs personnalisĂ©s.
Cas dâusages mĂ©tierâ
- Afficher les dĂ©tails dâun bon de commande dans votre application
- Vérifier un bon de commande avant traitement/livraison/réception
- AccĂ©der Ă la liste complĂšte des articles dâune commande spĂ©cifique
- VĂ©rifier les valeurs de champs personnalisĂ©s pour lâintĂ©gration avec dâautres systĂšmes
RequĂȘte HTTPâ
GET https://[location_subdomain].datadocks.com/api/v1/purchase_orders/:id
ParamĂštres dâURLâ
| ParamĂštre | Type | Obligatoire | Description |
|---|---|---|---|
id | Integer | Oui | Identifiant unique du bon de commande |
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un 200 OK avec lâobjet complet du bon de commande (mĂȘme format que la rĂ©ponse de liste).
Exemples de codeâ
cURLâ
Voir exemple cURL
curl -H "Authorization: Token YOUR_API_TOKEN" \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/1
JavaScriptâ
Voir exemple JavaScript
const getPurchaseOrder = async (purchaseOrderId) => {
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders/${purchaseOrderId}`,
{
method: "GET",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
}
);
if (!response.ok) {
if (response.status === 404) {
throw new Error(`Bon de commande #${purchaseOrderId} introuvable`);
}
const errorData = await response.json();
throw new Error(
`Ăchec de rĂ©cupĂ©ration du bon de commande : ${JSON.stringify(errorData)}`
);
}
return await response.json();
} catch (error) {
console.error("Erreur lors de la récupération du bon de commande :", error);
throw error;
}
};
CrĂ©er un bon de commandeâ
Objectifâ
CrĂ©er un nouvel enregistrement de bon de commande dans DataDocks. Ce point de terminaison vous permet dâajouter de nouveaux bons de commande et leurs articles de ligne de façon automatisĂ©e, en intĂ©grant votre systĂšme de gestion de commandes directement Ă vos opĂ©rations dâentrepĂŽt.
Arbre de dĂ©cision : Quand crĂ©er un BC via APIâ
âââââââââââââââââââ
â Ajouter un bon â
â de commande ? â
ââââââââââŹâââââââââ
â
âŒ
âââââââââââââââââââââââ Oui ââââââââââââââââ
â IntĂ©gration avec ââââââââââââ¶â IdĂ©al API â
â votre ERP/SystĂšme ? â â â
ââââââââââŹâââââââââââââ ââââââââââââââââ
â Non
âŒ
ââââââââââââââââââââââ Oui ââââââââââââââââââ
â En crĂ©er plusieurs ââââââââââââââ¶â Utiliser importâ
â dâun coup ? â â en lot â
ââââââââââŹââââââââââââ ââââââââââââââââââ
â Non
âŒ
ââââââââââââââââââââââ
â Utiliser lâUI â
â web â
ââââââââââ ââââââââââââ
Cas dâusages mĂ©tierâ
- Intégration systÚme : Créez des bons de commande directement depuis votre ERP ou gestion de commandes
- Traitement automatisé : Convertissez automatiquement des commandes clients en bons de commande
- Intégration EDI : Transformez des documents EDI 850 en BC DataDocks
- Intégration fournisseurs : Permettez à vos fournisseurs de soumettre des bons via vos systÚmes
RequĂȘte HTTPâ
POST https://[location_subdomain].datadocks.com/api/v1/purchase_orders
Corps de la requĂȘteâ
| ParamÚtre | Type | Obligatoire | Description | Contraintes | Par défaut | Exemple |
|---|---|---|---|---|---|---|
po_number | String | Oui | NumĂ©ro de bon de commande | Doit ĂȘtre unique | Aucun | "PO-2023-001" |
carrier_name | String | Non * | Nom du transporteur | Aucun | Aucun | "Express Logistics" |
carrier_number | String | Non | Numéro de société du transporteur | Doit correspondre à un transporteur existant | Aucun | "EXP-001" |
location_name | String | Non | Nom de lâemplacement | Doit correspondre Ă un emplacement existant | Emplacement actuel | "Toronto Warehouse" |
outbound | Boolean | Non | Commande sortante ou non | Aucun | false | true |
expected_starts_at | String | Non | Horodatage ISO8601 du début prévu | Format ISO8601 valide | Aucun | "2023-06-01T08:00:00-04:00" |
expected_ends_at | String | Non | Horodatage ISO8601 de fin prévue | Format ISO8601 valide | Aucun | "2023-06-01T16:00:00-04:00" |
alternate_reference_number | String | Non | NumĂ©ro de rĂ©fĂ©rence alternatif | Doit ĂȘtre unique | Aucun | "REF-123" |
reference_numbers | Tableau | Non | Autres numéros de référence | Aucun | Aucun | ["BOL-123", "SHIP-456"] |
closed | Boolean | Non | Si le BC est fermé | Aucun | false | true |
custom_values | Objet | Non * | Valeurs de champs personnalisĂ©s. La clĂ© est en minuscules, les espaces remplacĂ©s par des tirets bas. | Selon la configuration de lâemplacement | {} | {"department": "Produce"} |
purchase_order_items | Tableau | Non | Articles pour le BC | Au moins un fortement recommandé | [] | Voir ci-dessous |
Chaque article dans purchase_order_items peut inclure :
| ParamĂštre | Type | Obligatoire | Description | Contraintes | Exemple |
|---|---|---|---|---|---|
customer_name | String | Non * | Nom du client | Aucun | "Acme Corp" |
customer_number | String | Non * | Numéro de société du client | Doit correspondre à un client existant | "ACME-001" |
product_name | String | Non * | Nom du produit | Aucun | "Widgets" |
unit_name | String | Non * | Unité de mesure | Aucun | "Pallet" |
quantity | Number | Non * | QuantitĂ© du produit | Doit ĂȘtre positif | 10 |
weight | Number | Non * | Poids de lâarticle | Doit ĂȘtre positif | 500 |
custom_values | Objet | Non * | Champs personnalisĂ©s pour cet article. MĂȘme convention que ci-dessus. | Selon emplacement | {"color": "Blue"} |
* Certains champs peuvent ĂȘtre obligatoires selon la configuration de lâemplacement
RĂ©ponseâ
Une requĂȘte rĂ©ussie retourne un 200 OK avec lâobjet complet du bon de commande, incluant lâid gĂ©nĂ©rĂ© et autres valeurs attribuĂ©es par le systĂšme.
Exemples de codeâ
cURLâ
Voir exemple cURL
curl -H "Authorization: Token YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-X POST \
-d '{
"purchase_order": {
"po_number": "PO-2023-001",
"carrier_name": "Express Logistics",
"outbound": false,
"expected_starts_at": "2023-06-01T08:00:00-04:00",
"expected_ends_at": "2023-06-01T16:00:00-04:00",
"custom_values": {
"department": "Electronics",
"priority": "High"
},
"purchase_order_items": [
{
"product_name": "Laptops",
"unit_name": "Box",
"quantity": 50,
"weight": 250,
"custom_values": {
"model": "XPS 13"
}
},
{
"product_name": "Monitors",
"unit_name": "Pallet",
"quantity": 10,
"weight": 500,
"custom_values": {
"size": "27-inch"
}
}
]
}
}' \
https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders
JavaScriptâ
Voir exemple JavaScript
const createPurchaseOrder = async (purchaseOrderData) => {
try {
const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/purchase_orders`,
{
method: "POST",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({ purchase_order: purchaseOrderData }),
}
);
if (!response.ok) {
const errorData = await response.json();
const errorMessages = Object.entries(errorData.errors || {})
.map(([field, messages]) => `${field}Â : ${messages.join(", ")}`)
.join("\n");
throw new Error(`Ăchec de crĂ©ation du bon de commande :\n${errorMessages}`);
}
return await response.json();
} catch (error) {
console.error("Erreur APIÂ :", error);
throw error;
}
};
Mettre Ă jour un bon de commandeâ
Objectifâ
Mettre Ă jour les dĂ©tails dâun bon de commande existant. Ce point de terminaison vous permet de modifier tout aspect dâun bon de commande, y compris ses articles, dates, information transporteur et champs personnalisĂ©s.