> ## Documentation Index
> Fetch the complete documentation index at: https://docs.topsort.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Flux de produits

> Intégrez votre catalogue de produits avec Topsort en utilisant un flux de produits

export const IntegrationsCard1AFr = () => {
  return <>
      <style>{`
        .integrations-card-1a-fr {
          display: flex;
          flex-direction: column;
          background-color: #f0f2f4;
          border: 1px solid rgba(0, 0, 0, 0.08);
          border-radius: 12px;
          padding: 1.25rem 1.5rem;
          gap: 0.25rem;
          color: #25253b;
          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
          transition: box-shadow 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
          margin-top: 2rem;
        }

        .integrations-card-1a-fr:hover {
          box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
          border-color: rgba(0, 0, 0, 0.12);
        }

        .dark .integrations-card-1a-fr {
          background-color: #25253b;
          color: #f6f8fa;
          border-color: rgba(255, 255, 255, 0.08);
          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
        }

        .dark .integrations-card-1a-fr:hover {
          box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
          border-color: rgba(255, 255, 255, 0.12);
        }

        .integrations-card-1a-fr-avatar-row {
          display: flex;
          margin-left: 14px;
          flex-wrap: wrap;
        }

        .integrations-card-1a-fr-avatar {
          width: 44px;
          height: 44px;
          border-radius: 50%;
          border: 2px solid #f0f2f4;
          margin-left: -14px;
          object-fit: cover;
          box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
          pointer-events: none;
          cursor: default;
        }

        .dark .integrations-card-1a-fr-avatar {
          border-color: #25253b;
          box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
        }

        .integrations-card-1a-fr h2 {
          margin: 0;
          line-height: 1.25;
          font-size: clamp(1.25rem, calc(0.875rem + 1.25vw), 1.75rem);
          font-weight: 700;
          letter-spacing: -0.025em;
          color: #111827;
        }

        .dark .integrations-card-1a-fr h2 {
          color: #f9fafb;
        }

        .integrations-card-1a-fr-subtitle {
          font-size: 0.9375rem;
          font-weight: 500;
          line-height: 1.5;
          color: #4b5563;
          margin: 0;
        }

        .dark .integrations-card-1a-fr-subtitle {
          color: #d1d5db;
        }

        .integrations-card-1a-fr p {
          margin: 0;
          line-height: 1.5;
          font-size: 0.875rem;
          color: #374151;
        }

        .dark .integrations-card-1a-fr p {
          color: #d1d5db;
        }

        .integrations-card-1a-fr a {
          color: #0500ff;
          text-decoration: none;
          font-weight: 500;
          transition: color 0.15s ease;
        }

        .integrations-card-1a-fr a:hover {
          color: #0400cc;
        }

        .dark .integrations-card-1a-fr a {
          color: #8280ff;
        }

        .dark .integrations-card-1a-fr a:hover {
          color: #a19fff;
        }

        @media (max-width: 640px) {
          .integrations-card-1a-fr-avatar {
            width: 38px;
            height: 38px;
            margin-left: -12px;
          }

          .integrations-card-1a-fr-avatar-row {
            margin-left: 12px;
          }
        }

        @media (min-width: 1280px) {
          .integrations-card-1a-fr p {
            font-size: 0.6875rem;
            line-height: 1.4;
            letter-spacing: -0.01em;
          }

          .integrations-card-1a-fr h2 {
            font-size: clamp(1rem, calc(0.75rem + 1vw), 1.25rem);
          }

          .integrations-card-1a-fr-subtitle {
            font-size: 0.75rem;
          }
        }
      `}</style>
      <div className="integrations-card-1a-fr">
        <div className="integrations-card-1a-fr-avatar-row">
          <img src="/images/integration-team/agustin.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/amelia.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/bernardita.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/borumy.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/felipe.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/gui.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/javiera.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/linn.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/marcio.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/mateus.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/max.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
          <img src="/images/integration-team/rodrigo.webp" alt="" loading="lazy" className="integrations-card-1a-fr-avatar" />
        </div>

        <h2>Besoin d'aide avec votre intégration Topsort ?</h2>

        <p className="integrations-card-1a-fr-subtitle">
          Parlez-nous, l'équipe d'ingénierie des intégrations.
        </p>

        <p>
          Contactez-nous via <strong>votre canal de messagerie dédié</strong> ou à{" "}
          <a href="mailto:support@topsort.com">support@topsort.com</a>.
        </p>

        <p>
          Si vous n'êtes pas encore client,{" "}
          <a href="https://www.topsort.com/book-a-demo">planifiez une démo</a> avec notre
          équipe de vente.
        </p>
      </div>
    </>;
};

Un flux de produits vous permet de partager votre catalogue avec Topsort, de synchroniser les données et de maintenir les campagnes à jour. Pendant le processus d'intégration, vous pouvez nous fournir l'URL de votre flux de produits et nous veillerons à ce que votre catalogue reste à jour. Notre plateforme prend en charge plusieurs formats :

* Spécification des données de produits Google.
* Valeurs séparées par des tabulations (TSV).
* Valeurs séparées par des virgules (CSV).

<Frame>
  <img src="https://mintcdn.com/topsort/HTqrDOAU92Pz87gg/images/ad-server/catalog/product-feed.svg?fit=max&auto=format&n=HTqrDOAU92Pz87gg&q=85&s=8871159c49704007c2959ce535bec21c" alt="Topsort récupère les données d'un flux de produits" width="480" height="150" data-path="images/ad-server/catalog/product-feed.svg" />
</Frame>

Si votre catalogue de produits se trouve déjà sur une plateforme tierce comme Algolia ou VTEX, nous pouvons nous intégrer directement avec eux pour les mises à jour et la synchronisation, en veillant à ce que les informations sur les produits soient exactes. Pour des instructions détaillées sur la configuration de ces connexions et les exigences spécifiques pour chaque plateforme, veuillez vous référer à la section "Intégrations tierces - Partenaires" de notre documentation.

## Spécification des données de produits Google

Partagez votre catalogue avec Topsort en utilisant des flux de produits Google existants. Nous prenons en charge la [Spécification des données de produits Google](https://support.google.com/merchants/answer/7052112?hl=en).

## TSV et CSV

Nous prenons en charge le partage de votre catalogue en utilisant des flux TSV et CSV. Les instructions de cette section s'appliquent aux deux formats.

<Note>
  **Quel format devez-vous utiliser ?**

  Nous vous recommandons d'utiliser TSV plutôt que CSV. CSV est plus sujet aux erreurs en raison des virgules souvent présentes dans les données du catalogue.

  **Si le nom de votre produit ou le nom de votre catégorie contient des virgules, vous devez utiliser TSV.**
</Note>

### Colonnes prises en charge

| Nom                       | Requis                               | Par défaut                                         | Description                                                                                                                            |
| :------------------------ | :----------------------------------- | :------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                      | oui                                  | -                                                  | Identifiant unique pour chaque produit.                                                                                                |
| `active`                  | non                                  | true                                               | Si le produit peut faire partie de campagnes ou d'enchères. Les produits inactifs seront retirés des campagnes existantes.             |
| `title`                   | oui                                  | -                                                  | Nom du produit                                                                                                                         |
| `category.0.name`         | oui                                  | -                                                  | Nom de catégorie de la catégorie principale pour ce produit.                                                                           |
| `category.0.id`           | non                                  | Slug du nom de catégorie                           | ID de la catégorie principale pour ce produit.                                                                                         |
| `vendor.0.name`           | oui si n'utilise pas `seller_name`   | -                                                  | Vendeur du produit. C'est l'entité qui a son propre budget pour faire la publicité de ce produit et qui concurrence d'autres vendeurs. |
| `vendor.0.id`             | oui si n'utilise pas `seller_name`   | Slug du nom du vendeur                             | ID du vendeur de ce produit.                                                                                                           |
| `seller_name`             | oui si n'utilise pas `vendor.0.name` |                                                    | Nom du vendeur du produit, même valeur que `vendor.0.name`.                                                                            |
| `google_product_category` | oui                                  | Catégories fournies au format de taxonomie Google. |                                                                                                                                        |
| `price`                   | non                                  | -                                                  | Prix du produit.                                                                                                                       |
| `image_link`              | non                                  | -                                                  | URL vers une image du produit.                                                                                                         |
| `availability`            | non                                  | -                                                  | Statut de stock. Doit être `in stock`, `out of stock` ou `preorder`.                                                                   |
| `description`             | non                                  | -                                                  | Description détaillée du produit.                                                                                                      |

Les catégories peuvent être fournies de plusieurs façons. Mais une seule est requise.

Vous pouvez associer un produit à plusieurs catégories et vendeurs. Voir la section ci-dessous.

### Exemples de fichiers

#### Exemple TSV utilisant vendor.0.name

```tsv theme={null}
id	name	description	vendor.0.id	vendor.0.name	vendor.0.image_link	category.0.id	category.0.name	category.1.id	category.1.name	image_link	price	availability
1293	Masque vert	Masque vert pour éliminer les imperfections, utiliser de nuit ou de jour	1710000087	Derma Laboratories		10000087	Soins de la peau	61	Beauté & Santé	https://i.postimg.cc/0QxMWmbd/shampoo.png	23935.29	out of stock
1302	Gel nettoyant	N/A	17829100	Shiny Laboratories		10000087	Soins de la peau			https://i.postimg.cc/0QxMWmbd/shampoo.png	16050.42	in stock
```

#### Exemple CSV utilisant vendor.0.name

```csv theme={null}
id,name,description,vendor.0.id,vendor.0.name,vendor.0.image_link,category.0.id,category.0.name,category.1.id,category.1.name,image_link,price,availability
1293,Masque vert,"Masque vert pour éliminer les imperfections, utiliser de nuit ou de jour",1710000087,Derma Laboratories,,10000087,Soins de la peau,61,Beauté & Santé,https://i.postimg.cc/0QxMWmbd/shampoo.png,23935.29,out of stock
1302,Gel nettoyant,N/A,17829100,Shiny Laboratories,,10000087,Soins de la peau,,,https://i.postimg.cc/0QxMWmbd/shampoo.png,16050.42,in stock
```

### Plusieurs catégories et vendeurs

Les produits peuvent être associés à plusieurs catégories et/ou vendeurs.

Comme vous l'avez peut-être remarqué, les colonnes de catégorie et de vendeur contiennent des indices. Vous pouvez ajouter des colonnes supplémentaires de catégorie et/ou de vendeur tant que vous augmentez l'indice de manière appropriée.

Par exemple, un produit avec trois catégories et deux vendeurs aurait au moins ces colonnes :

```txt theme={null}
category.0.id
category.1.id
category.2.id
vendor.0.id
vendor.1.id
```

### Format de taxonomie Google

Alternativement, vous pouvez utiliser le [format de taxonomie de Google](https://support.google.com/merchants/answer/7052112?hl=en#product_category) comme noms de catégories. Cela vous permet de décrire des relations hiérarchiques plus complexes.

Par exemple, cette hiérarchie :

```txt theme={null}
Apparel & Accessories > Clothing > Dresses
```

Résultera en trois catégories :

```json theme={null}
[
  {
    "id": "apparel-and-accessories",
    "name": "Apparel & Accessories",
    "path": "apparel_and_accessories"
  },
  {
    "id": "clothing",
    "name": "Clothing",
    "path": "apparel_and_accessories.clothing",
    "parentId": "apparel-and-accessories"
  },
  {
    "id": "dresses",
    "name": "Dresses",
    "path": "apparel_and_accessories.clothing.dresses",
    "parentId": "clothing"
  }
]
```

<Note>
  Le champ `path` est recommandé pour les nouvelles intégrations. Le champ `parentId` reste entièrement pris en charge — il n'est pas prévu de le supprimer.
</Note>

## Hébergement de votre flux de produits

Votre flux de produits doit être continuellement accessible à Topsort afin que nous puissions maintenir nos données à jour.

Nous pouvons actuellement accéder aux flux de produits publics ou aux flux protégés par [l'autorisation HTTP de base](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Authorization).

De plus, utilisez les [en-têtes de réponse ETag](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) pour nous aider à déterminer si un flux de produits a été mis à jour depuis la dernière récupération.

## Suppression de produits

Les produits peuvent être "supprimés en douceur" en définissant la propriété `active` sur `false`. Cela peut être fait à la fois [via l'API](/fr/api-reference/catalog-api/upsert-products) et via le flux de produits.

Les produits inactifs ne seront pas inclus dans les nouvelles campagnes ou enchères et seront retirés de toutes les campagnes actives dont ils font partie.

Pour supprimer définitivement des produits du système de Topsort, [utilisez l'API](/fr/api-reference/catalog-api/delete-products).

## Slugs générés

Lorsque les catégories ou les vendeurs n'ont pas d'ID, nous en générons un à la volée.

<Warning>
  **Préférez utiliser des ID explicites**

  Il est recommandé de fournir les ID explicitement dans votre flux de produits, ces ID sont utilisés comme références lors de la gestion des campagnes et des enchères.

  Si vous utilisez des ID générés, vous devrez utiliser le même algorithme côté marketplace pour créer ces références.
</Warning>

Ces ID utilisent un **slug** dérivé du nom. Un slug est une chaîne formatée en kebab case qui convient à l'inclusion dans les URL.

Par exemple, `Hello world` devient `hello-world`.

Le format est basé sur la bibliothèque [npm slugify](https://www.npmjs.com/package/slugify).

## Outils pour développeurs

Les marketplaces qui envoient leur catalogue via un flux de produits peuvent ouvrir **Dev Tools > Catalogue** dans le tableau de bord d'administration du marketplace pour surveiller la santé de l'ingestion sans ouvrir de ticket de support.

L'onglet Catalogue présente les principales métriques de synchronisation en un coup d'œil :

* **Heure de la dernière synchronisation** : quand la synchronisation du catalogue la plus récente a été exécutée
* **Durée moyenne de synchronisation** : combien de temps prennent généralement les synchronisations
* **Taux de réussite** : sur les 14 dernières exécutions
* **Exécutions de synchronisation récentes** : chaque ingestion avec le nombre d'enregistrements traités ou ignorés

Grâce à cette vue, les équipes d'ingénierie peuvent confirmer que les flux s'exécutent comme prévu et repérer rapidement les échecs ou les exécutions comportant de nombreux enregistrements ignorés.

<IntegrationsCard1AFr />
