> ## 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.

# Intégration

> Calendrier d'intégration offsite, architecture des comptes et étapes de configuration.

export const OffsiteVendorAccountArchitectureDiagram = () => <div className="offsite-vendor-account-architecture not-prose" style={{
  margin: "1.5rem 0",
  overflowX: "auto"
}}>
    <style>{`
      .offsite-vendor-account-architecture svg {
        display: block;
        width: 100%;
        max-width: 882px;
        height: auto;
      }

      .offsite-vendor-account-architecture .marketplace-box {
        fill: #dcfce7;
        stroke: #16a34a;
      }

      .offsite-vendor-account-architecture .topsort-box {
        fill: #dbeafe;
        stroke: #2563eb;
      }

      .offsite-vendor-account-architecture .section-title,
      .offsite-vendor-account-architecture .box-label,
      .offsite-vendor-account-architecture .legend-label,
      .offsite-vendor-account-architecture .column-label {
        fill: #111827;
        font-family: Inter, system-ui, -apple-system, sans-serif;
      }

      .offsite-vendor-account-architecture .section-title {
        font-size: 15px;
        font-weight: 700;
      }

      .offsite-vendor-account-architecture .box-label {
        font-size: 12px;
        font-weight: 600;
      }

      .offsite-vendor-account-architecture .column-label,
      .offsite-vendor-account-architecture .legend-label {
        font-size: 11px;
        font-weight: 500;
      }

      .offsite-vendor-account-architecture .connector {
        stroke: #6b7280;
        stroke-width: 1.5;
        fill: none;
      }

      .dark .offsite-vendor-account-architecture .marketplace-box {
        fill: #14532d;
        stroke: #4ade80;
      }

      .dark .offsite-vendor-account-architecture .topsort-box {
        fill: #1e3a8a;
        stroke: #60a5fa;
      }

      .dark .offsite-vendor-account-architecture .section-title,
      .dark .offsite-vendor-account-architecture .box-label,
      .dark .offsite-vendor-account-architecture .legend-label,
      .dark .offsite-vendor-account-architecture .column-label {
        fill: #f3f4f6;
      }

      .dark .offsite-vendor-account-architecture .connector {
        stroke: #9ca3af;
      }
    `}</style>

    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 882 540" role="img" aria-label="Diagram of Google and Meta offsite account architecture showing retailer and Topsort-managed brand accounts">
      <text className="section-title" x="221" y="28" textAnchor="middle">
        Google Offsite Accounts
      </text>
      <text className="section-title" x="662" y="28" textAnchor="middle">
        Meta Offsite Accounts
      </text>

      <line className="connector" x1="477" y1="40" x2="477" y2="470" strokeDasharray="4 4" />

      <text className="column-label" x="144" y="58" textAnchor="middle">
        Merchant Center
      </text>
      <text className="column-label" x="360" y="58" textAnchor="middle">
        Ad Accounts
      </text>

      <rect className="marketplace-box" x="63" y="72" width="162" height="44" rx="8" strokeWidth="2" />
      <text className="box-label" x="144" y="99" textAnchor="middle">
        Retailer MCA
      </text>

      <line className="connector" x1="144" y1="116" x2="144" y2="132" />

      <rect className="topsort-box" x="86" y="132" width="117" height="32" rx="6" strokeWidth="2" />
      <text className="box-label" x="144" y="153" textAnchor="middle">
        Brand MC Acct 1
      </text>

      <line className="connector" x1="144" y1="164" x2="144" y2="176" />

      <rect className="topsort-box" x="86" y="176" width="117" height="32" rx="6" strokeWidth="2" />
      <text className="box-label" x="144" y="197" textAnchor="middle">
        Brand MC Acct 2
      </text>

      <text className="column-label" x="144" y="224" textAnchor="middle">
        ...
      </text>

      <line className="connector" x1="144" y1="232" x2="144" y2="244" />

      <rect className="topsort-box" x="86" y="244" width="117" height="32" rx="6" strokeWidth="2" />
      <text className="box-label" x="144" y="265" textAnchor="middle">
        Brand MC Acct N
      </text>

      <rect className="marketplace-box" x="279" y="72" width="162" height="44" rx="8" strokeWidth="2" />
      <text className="box-label" x="360" y="99" textAnchor="middle">
        Retailer MCC
      </text>

      <line className="connector" x1="360" y1="116" x2="360" y2="132" />

      <rect className="topsort-box" x="279" y="132" width="162" height="44" rx="8" strokeWidth="2" />
      <text className="box-label" x="360" y="159" textAnchor="middle">
        Topsort MCC
      </text>

      <line className="connector" x1="360" y1="176" x2="360" y2="192" />

      <rect className="topsort-box" x="302" y="192" width="117" height="32" rx="6" strokeWidth="2" />
      <text className="box-label" x="360" y="213" textAnchor="middle">
        Brand Ad Acct 1
      </text>

      <line className="connector" x1="360" y1="224" x2="360" y2="236" />

      <rect className="topsort-box" x="302" y="236" width="117" height="32" rx="6" strokeWidth="2" />
      <text className="box-label" x="360" y="257" textAnchor="middle">
        Brand Ad Acct 2
      </text>

      <text className="column-label" x="360" y="284" textAnchor="middle">
        ...
      </text>

      <line className="connector" x1="360" y1="292" x2="360" y2="304" />

      <rect className="topsort-box" x="302" y="304" width="117" height="32" rx="6" strokeWidth="2" />
      <text className="box-label" x="360" y="325" textAnchor="middle">
        Brand Ad Acct N
      </text>

      <rect className="marketplace-box" x="572" y="72" width="180" height="44" rx="8" strokeWidth="2" />
      <text className="box-label" x="662" y="99" textAnchor="middle">
        Retailer Business Manager
      </text>

      <line className="connector" x1="662" y1="116" x2="662" y2="145" />
      <line className="connector" x1="590" y1="145" x2="734" y2="145" />
      <line className="connector" x1="590" y1="145" x2="590" y2="165" />
      <line className="connector" x1="734" y1="145" x2="734" y2="165" />

      <rect className="topsort-box" x="536" y="165" width="108" height="36" rx="6" strokeWidth="2" />
      <text className="box-label" x="590" y="188" textAnchor="middle">
        Brand Ad Acct 1
      </text>

      <rect className="topsort-box" x="536" y="215" width="108" height="36" rx="6" strokeWidth="2" />
      <text className="box-label" x="590" y="238" textAnchor="middle">
        Brand Ad Acct 2
      </text>

      <text className="column-label" x="590" y="272" textAnchor="middle">
        ...
      </text>

      <rect className="topsort-box" x="536" y="285" width="108" height="36" rx="6" strokeWidth="2" />
      <text className="box-label" x="590" y="308" textAnchor="middle">
        Brand Ad Acct N
      </text>

      <rect className="topsort-box" x="680" y="165" width="108" height="36" rx="6" strokeWidth="2" />
      <text className="box-label" x="734" y="188" textAnchor="middle">
        Brand Child BM 1
      </text>

      <rect className="topsort-box" x="680" y="215" width="108" height="36" rx="6" strokeWidth="2" />
      <text className="box-label" x="734" y="238" textAnchor="middle">
        Brand Child BM 2
      </text>

      <text className="column-label" x="734" y="272" textAnchor="middle">
        ...
      </text>

      <rect className="topsort-box" x="680" y="285" width="108" height="36" rx="6" strokeWidth="2" />
      <text className="box-label" x="734" y="308" textAnchor="middle">
        Brand Child BM N
      </text>

      <rect className="marketplace-box" x="36" y="470" width="18" height="18" rx="3" strokeWidth="2" />
      <text className="legend-label" x="61" y="484">
        Marketplace provides and manages
      </text>

      <rect className="topsort-box" x="320" y="470" width="18" height="18" rx="3" strokeWidth="2" />
      <text className="legend-label" x="345" y="484">
        Topsort creates and manages
      </text>
    </svg>
  </div>;

export const LastUpdatedFr = ({date}) => {
  const label = "Dernière mise à jour:";
  return <>
      <style>{`
        .last-updated-component {
          display: inline-flex;
          align-items: center;
          gap: 8px;
          padding: 10px 16px;
          border-radius: 8px;
          margin-top: 12px;
          margin-bottom: 16px;
          font-size: 14px;
          background-color: rgba(0, 0, 0, 0.05);
          border: 1px solid rgba(0, 0, 0, 0.12);
          color: rgba(0, 0, 0, 0.75);
          line-height: 1;
        }

        .last-updated-component svg {
          flex-shrink: 0;
          vertical-align: middle;
        }

        .last-updated-component span {
          display: inline-flex !important;
          align-items: center !important;
          line-height: 1 !important;
        }

        [data-theme="dark"] .last-updated-component {
          background-color: #3a3a3a;
          border: 2px solid #888888;
          color: #ffffff;
        }

        [data-theme="dark"] .last-updated-component svg {
          stroke: #ffffff;
        }
      `}</style>
      <div className="last-updated-component">
        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
          <circle cx="12" cy="12" r="10" />
          <polyline points="12 6 12 12 16 14" />
        </svg>
        <span>
          <strong style={{
    fontWeight: 600
  }}>{label}</strong> 
          <time dateTime={date}>{date}</time>
        </span>
      </div>
    </>;
};

## Aperçu

Pour lancer des annonces offsite sur une plateforme donnée, le marketplace accorde à Topsort l'accès aux comptes publicitaires requis, met en place le suivi des événements offsite et Topsort gère le reste de l'intégration (par exemple, synchronisation du catalogue et des événements offline avec le marketplace, validation).

Topsort exécute un calendrier d'implémentation de 2 semaines pour chaque plateforme offsite (par exemple, Google ou Meta) afin d'assurer un lancement POC réussi, avec des ressources cross-fonctionnelles dédiées du client :

* **Ingénierie :** \~1 jour d'effort d'un ingénieur marketplace (intégration et validation). Le développement peut probablement être terminé lors d'un seul appel de 90 minutes avec les ingénieurs Topsort.
* **Ad Operations :** \~1 jour de support ad ops marketplace pour la configuration des campagnes, le QA et le lancement.

## Architecture des comptes

L'approvisionnement automatisé des comptes s'adapte à des milliers de vendeurs avec une séparation claire des budgets et une configuration manuelle minimale. Voici la structure de comptes recommandée.

<OffsiteVendorAccountArchitectureDiagram />

### Google

* **Le marketplace fournit :** Accès au MCC (compte administrateur) + MCA (compte multiclient Merchant Center)
* **Topsort crée :** Comptes Google Ads par vendeur avec le lien Merchant Center requis

### Meta

* **Le marketplace fournit :** Accès au Business Manager parent
* **Topsort crée :** Business Manager enfant et compte publicitaire par vendeur

### TikTok

* **Le marketplace fournit :** Accès au TikTok Business Center / Business Manager, avec permission de gérer les comptes annonceurs et les assets
* **Topsort crée :** Un compte publicitaire TikTok dédié pour l'intégration offsite Topsort, généralement un compte publicitaire pour le marketplace/distributeur, pas un par vendeur

### Snap

* **Le marketplace fournit :** Accès au Snap Business Manager / Organization, avec permission de gérer les comptes publicitaires et la facturation/assets
* **Topsort crée :** Un compte publicitaire Snap dédié pour l'intégration offsite Topsort, généralement un compte publicitaire pour le marketplace/distributeur, pas un par vendeur

## Étapes de configuration

### Configuration des comptes

#### Accès aux comptes (marketplace)

Le marketplace accorde à Topsort un accès administrateur aux comptes de plateforme publicitaire de niveau supérieur requis pour les canaux en cours d'intégration. Consultez [Architecture des comptes](#architecture-des-comptes) ci-dessus pour les comptes spécifiques auxquels accorder l'accès sur chaque plateforme.

#### Création de comptes (Topsort)

Topsort provisionne la structure de comptes au niveau vendeur sous ces conteneurs marketplace, y compris les comptes publicitaires enfants, business managers ou comptes Merchant Center nécessaires à l'intégration. Consultez [Architecture des comptes](#architecture-des-comptes) ci-dessus pour ce que Topsort crée sur chaque plateforme. Le marketplace peut fournir à Topsort une liste de vendeurs à activer pour offsite.

### Synchronisation du catalogue (Topsort)

Lorsque des formats offsite basés sur le catalogue sont concernés, Topsort synchronise le catalogue du marketplace avec la plateforme offsite, en mappant les produits de chaque vendeur dans la structure de compte de plateforme correspondante pour ce vendeur.

### Configuration du suivi des événements (marketplace)

Le seul domaine où le marketplace devra développer est le suivi des événements. Pour signaler des événements offsite, utilisez le même endpoint [`/v2/events`](/fr/api-reference/events/report-events) que pour les événements onsite, en passant des paramètres supplémentaires dans le corps de la requête.

#### ID utilisateur opaque

Le même `opaqueUserId` utilisé pour les événements onsite doit également être réutilisé pour l'attribution offsite. Aucun identifiant offsite séparé n'est requis. Topsort a besoin d'un identifiant utilisateur persistant et respectueux de la vie privée pour relier clics et achats entre canaux.

Les mêmes exigences onsite s'appliquent à l'usage offsite :

* **Persistance :** Doit rester stable pendant la fenêtre d'attribution (généralement 7–30 jours).
* **Cohérence :** Le même utilisateur doit recevoir le même ID sur les visites et canaux lorsque possible.
* **Respect de la vie privée :** Ne doit pas contenir de PII telles qu'email, numéro de téléphone ou nom.

#### URL de clic

L'URL que l'utilisateur a lorsqu'il arrive sur votre site depuis un clic d'annonce offsite comportera des paramètres de requête importants.

Exemple d'URL de clic :

```
https://www.retailer.com/search?q=shampoo&
externalCampaignId=9d2d7d7d-5d4f-4d8e-a8d0-2d7a6f9c1234&
externalVendorId=vendor_abc123&
gclid=CjwKCAj_example123&
utm_source=google&
utm_medium=c
```

Paramètres de requête :

* `gclid` — ID de clic attaché par Google
* `externalCampaignId` et `externalVendorId` — paramètres de requête contenant l'ID de campagne et l'ID vendeur Topsort, attachés par Topsort. Doivent persister avec l'état d'attribution de l'utilisateur pendant au moins la durée de la fenêtre d'attribution (configurable 7–30 jours). Doivent survivre à la navigation et aux visites répétées pour que les événements d'achat ultérieurs puissent être correctement reliés au clic d'annonce offsite d'origine.

#### Signalement des clics

Envoyez l'événement ci-dessous lorsqu'un utilisateur arrive sur votre site depuis un clic d'annonce offsite. Tous les champs sont obligatoires.

```http theme={null}
POST /v2/events
```

```json theme={null}
{
  "clicks": [
    {
      "occurredAt": "2023-11-07T05:31:56Z",
      "opaqueUserId": "<string>",
      "id": "<string>",
      "entity": {
        "id": "product1",
        "type": "product"
      },
      "externalCampaignId": "<Topsort UUID>",
      "externalVendorId": "<Topsort externalVendorId>",
      "dsp_metadata": {
        "gclid": "<Google click ID>"
      },
      "channel": "offsite"
    }
  ]
}
```

#### Signalement des achats

Tous les champs sont obligatoires.

```http theme={null}
POST /v2/events
```

```json theme={null}
{
  "purchases": [
    {
      "occurredAt": "2023-11-07T05:31:56Z",
      "opaqueUserId": "<string>",
      "id": "<string>",
      "items": [
        {
          "productId": "product1",
          "vendorId": "<externalVendorId>",
          "unitPrice": 75.0,
          "quantity": 1
        },
        {
          "productId": "product2",
          "vendorId": "<externalVendorId>",
          "unitPrice": 25.0,
          "quantity": 1
        }
      ]
    }
  ]
}
```

#### Partage des événements avec les plateformes offsite

Le client n'a pas besoin de signaler séparément les événements de conversion à la plateforme offsite. Topsort envoie automatiquement les événements d'achat éligibles liés à l'ID de clic correspondant (par exemple, Google Click ID ou GCLID) via l'API de conversions offline de la plateforme.

## Calendrier d'intégration

### Semaine 1 – Accès et configuration du suivi des événements

* Accorder l'accès aux comptes requis
* Lancer la mise en place du suivi des événements
* Synchroniser le catalogue si nécessaire avec la plateforme offsite
* Commencer la configuration initiale du système

### Semaine 2 – Intégration et configuration des données

* Terminer l'intégration et commencer les tests
* Valider le suivi des événements et la structure/qualité du catalogue
* Une fois tout configuré, valider avec une campagne en direct et surveiller les performances

***

<LastUpdatedFr date="2026-05-23" />
