Aller au contenu
Commencer

Documentation FITLD

Tout ce qu'il faut pour ajouter FITLD à votre boutique et lire les résultats. Bloqué ? Écrivez à contact@fitld.com.

Bien démarrer

Votre boutiqueComment installerQui vous facture
ShopifyL'app Shopify FITLD : sans code, les commandes se connectent toutes seulesShopify, sur votre facture Shopify
ShopifyLe script FITLD, collé dans votre thèmeFITLD, sur fitld.com
Tout autre siteLe script FITLD, collé avant </body>FITLD, sur fitld.com
  1. Créez un compte marque sur fitld.com/signup
  2. Ouvrez Installation dans votre tableau de bord et copiez le code (il contient votre identifiant de widget)
  3. Shopify : Boutique en ligne → Thèmes → ⋯ → Modifier le code → ouvrez layout/theme.liquid et collez avant </body>. Site sur mesure : collez avant </body> sur vos pages produit.
  4. De retour dans le tableau de bord, dans Installation → Vérifier qu'il est en ligne, collez l'adresse d'une page produit pour confirmer que le widget, votre identifiant et le guide des tailles sont bien en place.
Code recommandé — n'apparaît que sur les pages produit
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-mode="product">
</script>

Installer avec l'app Shopify

1. Installer l'app

  1. Dans le Shopify App Store, ouvrez FITLD Size Finder et cliquez sur Installer. Shopify affiche ce que FITLD peut voir : approuvez.
  2. Choisissez un forfait. Il est ajouté à votre facture Shopify.
  3. Vous avez déjà un compte FITLD ? Si l'e-mail de votre boutique dans Shopify est celui que vous utilisez sur fitld.com, l'app vous propose de vous connecter et relier les deux. Vos guides des tailles et résultats restent dans un seul compte, et un forfait payé sur fitld.com continue.

2. Suivre les trois étapes de l'accueil

La page d'accueil de l'app FITLD pendant la configuration : étape 1 terminée, étape 2 ouverte avec ses instructions et un bouton Ajouter des guides des tailles, étape 3 en attente.
L'accueil pendant la configuration. L'étape ouverte est celle à faire maintenant.
  1. Activez le bouton Trouver ma taille. Cliquez sur Ouvrir l'éditeur de thème : FITLD y est déjà activé dans les intégrations d'app. Cliquez sur Enregistrer, puis sur C'est enregistré dans l'app.
  2. Donnez un guide des tailles à vos produits. Cliquez sur Ajouter des guides des tailles, cochez vos produits et cliquez sur Ajouter un guide des tailles. Choisissez un guide standard, ou utilisez Importer un guide des tailles pour lire celui que vous utilisez déjà.
  3. Essayez-le sur votre boutique. Ouvrez un produit, appuyez sur Trouver ma taille et indiquez quelques mesures. De retour dans l'app, cliquez sur Vérifier à nouveau.
La page Guides des tailles de l'app FITLD : trois conseils numérotés en haut, puis les produits de la boutique avec l'état de leur guide.
Guides des tailles : cochez les produits, puis cliquez sur Ajouter un guide des tailles.

3. Voir vos résultats

Vérifier ou refaire une étape

Installer sur Shopify avec le script

1. Ajoutez le widget à votre thème

  1. Dans l'administration Shopify, ouvrez Boutique en ligne → Thèmes. À côté de votre thème actif, choisissez ⋯ → Modifier le code.
  2. Ouvrez layout/theme.liquid.
  3. Collez le code ci-dessous juste avant la balise </body>, remplacez wgt_YOUR_WIDGET_ID par le vôtre et cliquez sur Enregistrer.
theme.liquid — avant </body>
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-mode="product"
  async>
</script>

2. Associez vos produits

3. Connectez commandes et remboursements

  1. Dans le tableau de bord FITLD, ouvrez Installation → Connecter vos commandes. Saisissez votre adresse your-store.myshopify.com et copiez l'adresse du webhook.
  2. Dans l'administration Shopify, ouvrez Paramètres → Notifications → Webhooks et cliquez sur Créer un webhook. Événement : Paiement de commande. Format : JSON. URL : celle que vous avez copiée. Enregistrez.
  3. Créez un second webhook avec l'événement Création de remboursement, au format JSON, et la même URL.
  4. Shopify affiche une clé de signature sous la liste des webhooks (« Vos webhooks seront signés avec… »). Copiez-la et collez-la dans le tableau de bord FITLD.
  5. Cliquez sur Envoyer une notification de test dans Shopify, ou passez une commande test. Le tableau de bord indique quand la dernière commande est arrivée.

4. Vérifiez une page produit

Vérifier qu'il est en ligne

  1. Ouvrez Installation → Vérifier qu'il est en ligne et collez l'adresse d'une page produit en ligne (par exemple https://your-store.com/products/classic-tee).
  2. FITLD récupère la page, détecte votre plateforme et essaie de l'associer à un produit de votre catalogue.
  3. Passez en revue les contrôles ci-dessous : chacun passe au vert quand il est validé.
ContrôleCe qu'il confirme
Widget script installedLe code FITLD est présent sur la page.
Brand credentials matchL'identifiant de widget ou la clé API de la page appartient à votre compte.
Product connected to a size chartLa page est reliée à un produit du catalogue qui a des mesures.
Size chart readyCe produit a au moins une taille avec des valeurs.
Size buttons presentUn sélecteur de taille que FITLD peut mettre en évidence a été détecté (au mieux).

Boutiques protégées par mot de passe

Modes du widget

Automatique sur les produits (recommandé)

Balise script mode produit
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-mode="product">
</script>

Ancrer à un sélecteur

Balise script ancrée
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-attach-to=".product-size-selector">
</script>

Plusieurs produits

Balise script
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID">
</script>
Boutons sur vos produits
<button class="my-size-btn" data-pid="SKU001">Find My Size</button>
<button class="my-size-btn" data-pid="SKU002">Find My Size</button>
Script de configuration
<script>
  document.querySelectorAll('.my-size-btn').forEach(function(btn) {
    btn.addEventListener('click', function() {
      FitAPI.setProduct(this.dataset.pid);
      FitAPI.open();
    });
  });
</script>

Bouton flottant (facultatif)

Balise script du bouton flottant
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-mode="fab">
</script>

Sélection automatique de la taille

Sélecteur de taille ancré
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-fitld-size-target="#size-picker">
</script>
AttributCe qu'il fait
data-fitld-size-targetSélecteur CSS de votre choix de taille ; détection automatique par défaut
data-fitld-autoselectMettez "false" pour le mode conseil (pas de sélection automatique sur la page)
data-fitld-cart-attrsMettez "false" pour ne pas marquer le panier Shopify avec la session
data-hide-unconnectedAvec data-mode="product", le bouton n'apparaît que sur les produits qui ont un guide des tailles FITLD. Mettez "false" pour l'afficher sur toutes les pages produit. Les pages sans guide sont listées dans Products, dans votre tableau de bord.

Produits et import en masse

Téléchargez le modèle

Remplissez-le

ColonneObligatoireRemarques
Products · productNameOuiNom affiché
Products · productIdOuiSKU unique : relie les deux feuilles
Products · sizesCountNoNombre de tailles du produit : l'envoi prépare autant de lignes de taille dans l'aperçu
Products · audienceOuiMen · Women · Unisex (liste déroulante)
Products · ageGroupOuiAdult · Kids · Toddler · Baby (liste déroulante)
Products · categoryOuiVoir la feuille Categories (liste déroulante)
Products · unitNoUnité des longueurs de ce produit : cm ou in (cm par défaut)
Products · subcategory, fitType, stretchLevel, fabric, color, price, currencyNoDétail produit facultatif
Size chart · productIdOuiChoisissez dans la liste ; laissez vide pour reprendre le SKU du dessus
Size chart · sizeOuiN'importe quel libellé : M · 42 · 6-12M · 34/36
Size chart · chest, waist, footLength, …NoUne colonne par mesure ; nombres dans l'unité du produit. Les tranches bébé/enfant utilisent heightMin/Max, ageMonthsMin/Max, weightMin/Max

Personnalisation

Option 1 — Balise script (recommandée)

Balise script personnalisée
<script src="https://fitld.com/fitld-widget.js"
  data-widget-id="wgt_YOUR_WIDGET_ID"
  data-brand-logo="https://your-site.com/logo.svg"
  data-brand-name="Your Brand"
  data-accent-color="#b08a52">
</script>
AttributCe qu'il fait
data-brand-logoRemplace le logo FITLD par le vôtre
data-brand-logo-lightLogo alternatif affiché en thème clair, recommandé pour les logos blancs ou clairs
data-brand-nameLe nom de votre marque, utilisé comme texte alternatif de votre logo
data-accent-colorLes boutons et éléments mis en avant prennent votre couleur
data-accent-hoverTeinte au survol des éléments d'accent

Recommandations pour le logo

Option 2 — JavaScript

Personnalisation en JavaScript
<script>
  FitAPI.init({
    brandLogo: "https://your-site.com/logo.svg",
    brandAccent: "#b08a52",
    brandName: "Your Brand"
  });
</script>

API JavaScript

FitAPI.bind(buttonElement, productId)

Relie un bouton à un produit. Ajoute automatiquement le gestionnaire de clic.

FitAPI.setProduct(productId)

Définit l'identifiant du produit actif avant d'ouvrir le widget.

FitAPI.open()

Ouvre la fenêtre du widget avec le produit défini.

FitAPI.attachButton(targetElement)

Crée et insère un bouton Trouver ma taille après l'élément cible.

FitAPI.render(containerElement)

Affiche le bouton dans un élément conteneur.

FitAPI.setTheme('light' | 'dark')

Force le thème clair ou sombre de la fenêtre du widget.

FitAPI.init({ brandLogo, brandAccent, brandName })

Définit les options de personnalisation. À appeler après le chargement du script.

FitAPI.selectSize(size)

Applique une taille au sélecteur de votre page. Renvoie "selected" | "out_of_stock" | "not_found" | "opted_out".

FitAPI.setSizeTarget(cssSelector)

Indique à la sélection automatique votre propre sélecteur, pendant l'exécution.

document "fitld:size-selected"

CustomEvent déclenché après l'application d'une taille sur la page ; detail : { size, source }.

API REST

Test mode

POST /v1/widget/recommend

Requête (invité)
{
  "widgetId": "wgt_YOUR_WIDGET_ID",
  "productId": "SKU001",
  "measurements": {
    "unit": "cm",
    "chest": 96,
    "waist": 80,
    "hips": 98
  }
}
Réponse
{
  "recommended_size": "M",
  "confidence": 0.87,
  "fit_quality": "great",
  "measurement_gap_cm": 1.2,
  "category": "Tops",
  "guest": true
}

POST /v1/recommend-size/guest

Requête
POST https://api.fitld.com/v1/recommend-size/guest
Headers: x-api-key: fit_sk_YOUR_API_KEY

{
  "productId": "SKU001",
  "measurements": { "chest": 96, "waist": 80 }
}

POST /v1/products/resolve

Requête
{
  "widgetId": "wgt_YOUR_WIDGET_ID",
  "productId": "SKU001"
}
Réponse
{
  "productId": "SKU001",
  "productName": "Classic Oxford",
  "category": "Tops"
}

Errors and request IDs

Error response (HTTP 401)
{
  "error": "Authentication required. Provide x-api-key or widgetId.",
  "code": "authentication_required",
  "requestId": "req_8fK2xQm1Lw0aZt7c"
}

Commandes et remboursements

Attribut du panierPropriété de ligneValeur
fitld_sid_fitld_sidIdentifiant de session
fitld_size_fitld_sizeTaille confirmée
fitld_space_fitld_spaceEspace de taille (par ex. adulte / enfant)
fitld_variant_fitld_variantVariante, si connue

Comment les commandes sont associées

Remboursements

Webhooks

EventSent when
order.attributedA Shopify order includes items bought after using FITLD: the size bought, FITLD’s size and whether they matched.
refund.createdItems bought after using FITLD were refunded.
return.recordedSuch an item was returned, with the reason (<code>size_too_small</code>, <code>size_too_large</code>, …).
fit_feedback.receivedA shopper answered “How did it fit?”: <code>too_small</code>, <code>right</code> or <code>too_large</code>.
product.unmatchedA product page without a FITLD size chart was seen for the first time.
usage.threshold_reachedRecommendations this month reached 80% or 100% of your plan.
pingYou pressed <strong>Send test event</strong>.
Example: order.attributed
{
  "id": "evt_Q2xmN0VtZ3pDbFh0",
  "type": "order.attributed",
  "created": "2026-11-10T14:02:11.402Z",
  "livemode": true,
  "api_version": "v1",
  "data": {
    "order_id": "5890112340",
    "order_name": "#1042",
    "currency": "EUR",
    "paid_at": "2026-11-10T14:01:58.000Z",
    "lines": [{
      "product_id": "OXFORD-SHIRT",
      "sku": "OXF-BLU-M",
      "product_name": "Classic Oxford",
      "size": "M",
      "recommended_size": "M",
      "size_matched": true,
      "quantity": 1
    }]
  }
}

Check the signature

Node.js (Express)
const crypto = require("crypto");

// Use the raw request body, exactly as received (before JSON parsing).
function verifyFitld(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const age = Math.abs(Date.now() / 1000 - Number(parts.t));
  if (!parts.t || !parts.v1 || age > 300) return false; // older than 5 minutes
  const expected = crypto.createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`).digest("hex");
  return expected.length === parts.v1.length &&
    crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

app.post("/fitld/webhooks", express.raw({ type: "application/json" }), (req, res) => {
  if (!verifyFitld(req.body.toString("utf8"), req.get("FITLD-Signature") || "", process.env.FITLD_WEBHOOK_SECRET)) {
    return res.status(400).end();
  }
  const event = JSON.parse(req.body);
  // Answer quickly, then do the work: FITLD waits 10 seconds at most.
  res.status(200).end();
  handle(event); // e.g. event.type === "order.attributed"
});

Retries

Formules et limites

FormuleRecommandations / moisPrix
Free1,000$0
Starter5,000$19/mo
Growth15,000$79/mo
Pro100,000$249/mo
EnterpriseDéfini avec vousSur mesure

Codes d'erreur

HTTPcodeCommon cause
400invalid_request, invalid_jsonA required field is missing or malformed, or the body isn’t valid JSON.
401authentication_requiredNo API key, an invalid one, or an expired shopper sign-in.
403api_key_browser_originA secret API key was sent from a website. Use the widget ID in storefront code.
404not_found, unknown_endpointUnknown widget ID or product, or no such endpoint in /v1.
409conflictA product with this SKU already exists.
422invalid_requestRequired measurements missing (chest, waist, etc.).
429rate_limited, quota_exceededToo many requests, or the plan limit is reached. Wait for the Retry-After header.
5xxserver_errorA problem on our side. Retry with backoff, and quote the request ID if it continues.

Dépannage

  1. Le widget n'apparaît pas : utilisez Installation → Vérifier qu'il est en ligne ; il contrôle le script, votre identifiant de widget et le guide des tailles sur votre page en ligne. Vous pouvez aussi ouvrir la console du navigateur (F12) et vérifier que l'URL du script se charge sans erreur.
  2. « Ce produit n'est pas encore relié à un guide des tailles FITLD » : FITLD n'a pas pu relier la page à un produit. Avec l'app Shopify, ouvrez Size charts et vérifiez que le produit en a un. Un produit n'est relié que si ses tailles figurent dans le guide : s'il apparaît comme ignoré, choisissez un guide qui contient ses tailles. Avec le script, l'identifiant du produit dans FITLD doit être son handle (la fin de son adresse), son SKU ou l'adresse de sa page.
  3. « Aucune taille de ce produit ne convient » : les mesures du client sont en dehors de toutes les tailles du guide. FITLD le dit au lieu de recommander la taille la plus proche. Si cela arrive souvent, ajoutez les tailles manquantes au guide.
  4. Mauvaise taille recommandée : vérifiez que vos guides des tailles sont complets dans Produits. Les mesures manquantes réduisent la précision.
  5. Your site sets a Content-Security-Policy: allow FITLD's two addresses: script-src https://fitld.com, connect-src https://api.fitld.com https://fitld.com and font-src https://fitld.com. The widget loads its size window from fitld.com and asks api.fitld.com for sizes; it calls nothing else.
  6. Boutique protégée par mot de passe : les clients arrivent sur la page de mot de passe au lieu de votre produit, le widget ne peut donc pas se charger pour eux. Retirez le mot de passe pour mettre la boutique en ligne ; la vérification peut toujours lire la page si vous fournissez le mot de passe.
  7. Page anti-robots : si la vérification signale un contrôle anti-robots, la boutique est accessible aux vrais visiteurs mais bloque les contrôles automatisés. Vérifiez le widget visuellement dans un navigateur.
  8. « Secret API keys can't be used from a website » : vous avez utilisé data-api-key ou envoyé x-api-key depuis une boutique. Utilisez data-widget-id à la place, et régénérez la clé dans les paramètres si elle a été publiée.
  9. Contacter le support : toujours bloqué ? Écrivez à contact@fitld.com.