Publique
Ce que votre site appelle : la vitrine, le catalogue, le panier. Aucun secret, donc appelable depuis le navigateur.
- Storefront
- Catalogue
- Panier
- Checkout
Pas de thème à surcharger, pas de plugin à écrire : une API REST, des webhooks signés et un serveur MCP. Vous gardez votre stack.
GET /v1/shop/public/storefront/maison-aurore
GET /v1/shop/public/storefront/maison-aurore/products
POST /v1/shop/public/store/maison-aurore/carts
POST /v1/shop/public/store/maison-aurore/carts/{cartId}/items
POST /v1/shop/checkoutsCe que votre site appelle : la vitrine, le catalogue, le panier. Aucun secret, donc appelable depuis le navigateur.
Ce que votre back-office appelle, avec la session du marchand : catalogue, commandes, clients, remboursements, webhooks, jetons MCP.
Convention sur le fil : snake_case dans les payloads, montants en centimes entiers, horodatages UTC ISO 8601. Jamais de flottant sur une somme d'argent.
// Le panier est porté par la boutique : son slug est dans le chemin.
const base = "https://api.ts-services.com/v1/shop/public/store/maison-aurore";
// 1 · Créer le panier. Pas de corps : la boutique vient de l'URL.
const cart = await fetch(`${base}/carts`, { method: "POST" }).then((r) => r.json());
// 2 · Y ajouter un service. Le jeton de panier voyage dans X-Cart-Token,
// pas dans Authorization : ce n'est pas une session, c'est une clé d'accès
// à CE panier : anonyme, et rendue une seule fois.
await fetch(`${base}/carts/${cart.id}/items`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Cart-Token": cart.anonymous_token,
},
body: JSON.stringify({ product_id: "prod_123", quantity: 1 }),
});
// 3 · Envoyer l'acheteur sur le checkout hébergé. Le panier ET son jeton :
// sans les deux, la page ne peut pas prouver que ce panier est le sien.
const checkout = new URL("https://shop.ts-services.com/checkout/maison-aurore");
checkout.searchParams.set("cart", cart.id);
checkout.searchParams.set("token", cart.anonymous_token);
window.location.href = checkout.toString();Le jeton de panier n'est rendu qu'à la création et n'est pas stocké en clair : c'est lui qui autorise l'acheteur anonyme à retrouver son panier. Un SDK JavaScript / TypeScript est prévu pour éviter d'écrire ces appels à la main.
Chaque livraison porte un en-tête t=…,v1=… : l'empreinte HMAC du corps brut avec votre secret. Vérifiez-la avant de traiter quoi que ce soit.
Un endpoint indisponible est réessayé en backoff, et toute livraison peut être rejouée à la main depuis le back-office : la tentative d'origine reste dans l'historique.
{
"event_id": "evt_01J8…",
"type": "order.paid",
"created_at": "2026-04-30T12:32:11Z",
"data": {
"order_id": "ord_01J8…",
"order_number": "TS-2026-000001",
"total_incl_tax": 7900,
"currency": "EUR"
}
}API REST publique pour la vitrine et le panier, checkout hébergé pour le paiement.
Serveur MCP : elle lit la boutique et produit l'intégration.
Webhooks sortants signés vers votre CRM, votre ERP ou votre automatisation.
Le back-office suffit : catalogue, commandes, factures, remboursements.
Créez votre Store, ajoutez vos services et connectez Ts-Shop à votre site ou à votre IA.