Guide · store:write · orders:write
Gérer une boutique Bloop
Connectez votre entrepôt, votre e-commerce ou votre tableur à votre boutique Bloop sur Linework : produits, stocks, commandes et expédition.
Scopes : store:read, store:write, orders:read, orders:write.
Les paiements sont gérés par Linework dans l'application. L'API ne déplace jamais d'argent : vous gérez le catalogue et l'exécution des commandes, les acheteurs paient dans Linework comme d'habitude.
Les endpoints#
| Endpoint | Usage |
|---|---|
GET /store | Votre boutique. |
POST /store | Créer votre boutique, si vous n'en avez pas encore. |
PATCH /store | Mettre à jour le nom, la description et les autres informations de la boutique. |
GET /store/products | Lister vos produits (paginé). |
POST /store/products | Créer un produit. |
PATCH /store/products/{id} | Mettre à jour un produit. |
DELETE /store/products/{id} | Supprimer un produit. |
PATCH /store/products/{id}/stock | Définir la quantité disponible. |
GET /store/orders | Commandes reçues (paginé). |
GET /store/orders/{id} | Une commande avec ses articles et l'adresse de livraison. |
POST /store/orders/{id}/ship | Marquer une commande comme expédiée, avec le suivi. |
1. Vérifier votre boutique#
curl https://api.linework.app/open/v1/store \
-H "Authorization: Bearer $LINEWORK_API_KEY"
Si vous n'avez pas encore de boutique, GET /store renvoie 404 NOT_FOUND : créez-la avec POST /store (champs décrits dans la Référence de l'API).
2. Créer un produit#
Importez d'abord les photos avec POST /media (voir Publier avec des médias), puis créez le produit avec leurs mediaId.
curl https://api.linework.app/open/v1/store/products \
-H "Authorization: Bearer $LINEWORK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Linen shirt",
"description": "100% Italian linen, made in Biella.",
"price": 59.00,
"currency": "EUR",
"stock": 25,
"sku": "SHIRT-LIN-M",
"mediaIds": ["m_8f2c1a"]
}'
const res = await fetch("https://api.linework.app/open/v1/store/products", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LINEWORK_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Linen shirt",
description: "100% Italian linen, made in Biella.",
price: 59.0,
currency: "EUR",
stock: 25,
sku: "SHIRT-LIN-M",
mediaIds: [mediaId],
}),
});
const product = await res.json();
import os, requests
API = "https://api.linework.app/open/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['LINEWORK_API_KEY']}"
product = s.post(API + "/store/products", json={
"title": "Linen shirt",
"description": "100% Italian linen, made in Biella.",
"price": 59.00,
"currency": "EUR",
"stock": 25,
"sku": "SHIRT-LIN-M",
"mediaIds": [media_id],
}, timeout=30).json()
3. Synchroniser les stocks#
Utilisez l'endpoint dédié au stock : il est léger et ne touche pas au reste du produit.
curl -X PATCH https://api.linework.app/open/v1/store/products/7781/stock \
-H "Authorization: Bearer $LINEWORK_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "stock": 12 }'
Une tâche de synchronisation type lit les quantités depuis votre système et ne met à jour que les produits qui ont changé :
const API = "https://api.linework.app/open/v1";
const headers = { Authorization: `Bearer ${process.env.LINEWORK_API_KEY}`, "Content-Type": "application/json" };
const warehouse = { "SHIRT-LIN-M": 12, "SHIRT-LIN-L": 0 }; // from your system
let cursor = null;
do {
const url = `${API}/store/products?limit=100${cursor ? `&cursor=${encodeURIComponent(cursor)}` : ""}`;
const page = await fetch(url, { headers }).then((r) => r.json());
for (const p of page.data) {
const qty = warehouse[p.sku];
if (qty !== undefined && qty !== p.stock) {
await fetch(`${API}/store/products/${p.id}/stock`, {
method: "PATCH", headers, body: JSON.stringify({ stock: qty }),
});
}
}
cursor = page.next_cursor;
} while (cursor);
warehouse = {"SHIRT-LIN-M": 12, "SHIRT-LIN-L": 0} # from your system
cursor = None
while True:
params = {"limit": 100, **({"cursor": cursor} if cursor else {})}
page = s.get(API + "/store/products", params=params, timeout=30).json()
for p in page["data"]:
qty = warehouse.get(p.get("sku"))
if qty is not None and qty != p["stock"]:
s.patch(f"{API}/store/products/{p['id']}/stock", json={"stock": qty}, timeout=30)
cursor = page.get("next_cursor")
if not cursor:
break
Avec un stock à 0, le produit reste dans le catalogue en tant qu'épuisé. Pour le retirer, utilisez DELETE /store/products/{id}.
4. Lire les nouvelles commandes#
curl "https://api.linework.app/open/v1/store/orders?limit=50" \
-H "Authorization: Bearer $LINEWORK_API_KEY"
Les commandes sont renvoyées de la plus récente à la plus ancienne. Chaque commande comporte un identifiant, un statut, ses articles, les totaux et, pour GET /store/orders/{id}, l'adresse de livraison. Récupérez la liste toutes les quelques minutes et traitez les commandes payées et pas encore expédiées. Le schéma complet des commandes et les valeurs de statut figurent dans la Référence de l'API.
Les commandes contiennent des données personnelles des acheteurs (nom, adresse). Utilisez-les uniquement pour exécuter la commande, protégez-les et ne les partagez pas. Consultez les Conditions de l'API.
5. Marquer comme expédiée#
curl https://api.linework.app/open/v1/store/orders/50213/ship \
-H "Authorization: Bearer $LINEWORK_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "carrier": "BRT", "trackingNumber": "084512345678" }'
L'acheteur est averti dans l'application avec les informations de suivi. Expédier deux fois une commande, ou une commande qui ne peut pas être expédiée (par exemple annulée), échoue avec 409 CONFLICT.