Aller au contenu principal

Le pixel publicitaire de ChatGPT et le cookie __obi

Intermédiaire
What you'll learn
  • Distinguer les trois cookies de la chaîne publicitaire d'OpenAI — deux sur le domaine de l'annonceur, un sur .openai.com — et comprendre pourquoi seul le troisième vous relie réellement
  • Suivre le flux de synchronisation : un JWT RS256 valable 60 secondes, généré par ChatGPT et envoyé en POST cross-site à un collecteur qui pose la clé de jonction
  • Comprendre pourquoi le "refuser marketing" d'une bannière de cookies peut laisser ce mécanisme actif, et pourquoi le bouton de consentement de l'annonceur lui-même ne peut pas le désactiver
  • Voir ce que l'Automatic Advanced Matching récupère sur une page que personne n'a configurée pour cela — et quels champs, d'après la propre documentation d'OpenAI, circulent non hachés
  • Savoir précisément où le mécanisme ne fonctionne pas (et pourquoi un iPhone constitue un modèle de menace différent d'un Android)
  • Vérifier votre propre navigateur en cinq minutes, et durcir votre propre pixel en deux réglages

La plupart des gens se représentent la publicité ChatGPT comme une boîte fermée : les publicités apparaissent dans ChatGPT, personnalisées par ce que vous avez dit dans ChatGPT, et la boîte est étanche. Les annonceurs achètent des emplacements ; ils ne voient jamais vos conversations. Cette partie est vraie, et OpenAI le dit clairement.

La partie en dehors de la boîte est la partie intéressante. OpenAI diffuse aussi un pixel de mesure que les annonceurs installent sur leurs propres sites web, de la même façon qu'ils installent ceux de Meta ou de Google. Les pixels de mesure ont besoin d'une clé de jonction : un identifiant qui affirme que le navigateur qui a vu la publicité est le navigateur qui est arrivé jusqu'au paiement. En septembre 2026, un chercheur indépendant a retracé comment cette clé de jonction est créée, et il s'avère qu'elle est générée par ChatGPT lui-même, remise à un collecteur publicitaire d'OpenAI, puis transportée par votre navigateur vers chaque site d'annonceur exécutant le pixel.

Ce flux n'est ni une fuite ni un bug. C'est un pipeline de mesure publicitaire conçu comme tel — la même architecture que Meta et Google exploitent depuis dix ans. Ce qui justifie cette page, c'est un choix de conception précis concernant la classification du consentement, ainsi qu'un réglage par défaut activé en août 2026 qui a discrètement transformé de nombreux sites d'annonceurs en collecteurs d'identité.

Trois cookies, deux domaines​

Lisez n'importe quel article sur le sujet et vous verrez __obi, __obref et __oppref utilisés presque comme des synonymes. Ce sont trois choses différentes avec trois profils de confidentialité différents, et les confondre conduit soit à une réaction excessive, soit à une fausse impression de sécurité fondée sur le mauvais contrôle.

CookiePosé surPosé parDurée de vieCe que c'est
__opprefle domaine propre de l'annonceurle SDK du pixel30 jours à partir de chaque écritureID d'attribution capturé depuis l'URL de la page d'atterrissage. Suivi de clic classique.
__obrefle domaine propre de l'annonceurle SDK du pixel365 joursUne référence de navigateur aléatoire, limitée à cet unique annonceur.
__obi.openai.combzr.openai.com365 jours (Max-Age=31536000)La clé de jonction cross-site. HttpOnly, Secure, SameSite=None.

Les deux premiers sont documentés par OpenAI dans sa documentation publique pour annonceurs. Ils sont propres (first-party) à l'annonceur et, à eux seuls, ne vous relient pas d'un site à l'autre — la capture du chercheur le confirme : 2 828 des 2 860 valeurs __obref observées apparaissaient sous exactement un seul annonceur, ce qui correspond au comportement attendu d'un cookie par site.

__obi est celui qui n'est pas limité à un site. Il vit sur .openai.com avec SameSite=None, ce qui est précisément la configuration permettant à un navigateur de l'attacher à des requêtes émises depuis la page de quelqu'un d'autre. Sur 30 valeurs __obi distinctes observées par le chercheur, 12 apparaissaient sous plus d'un annonceur — l'une d'elles sous dix. C'est le graphe cross-site, mesuré.

★ __obi est HttpOnly. Aucun JavaScript sur aucune page ne peut le lire, y compris celui du pixel. Cela paraît protecteur, mais ça ne l'est presque pas : le navigateur l'attache automatiquement aux requêtes visant bzr.openai.com, si bien que le pixel n'a jamais besoin de le lire. HttpOnly empêche les scripts de page de voler l'identifiant ; cela n'empêche en rien l'identifiant d'être utilisé.

Comment la jonction est créée​

Guided walkthrough1 of 4
  1. Le client web de ChatGPT génère 16 octets aléatoires et envoie une requête POST à /backend-api/bazaar/obi/sync-token sur chatgpt.com — ou /backend-anon/… lorsque vous êtes déconnecté. La réponse est un JWT RS256 avec une expiration de 60 secondes.

Sur 932 jetons de synchronisation décodés par le chercheur, 736 portaient subject_type: account_user, et 196 étaient anonymes. Donc, dans à peu près quatre synchronisations observées sur cinq, l'identifiant posé avait été généré dans le contexte d'un compte ChatGPT connecté.

L'auteur reste prudent sur ce que cela prouve ou non, et vous devriez l'être aussi : la jonction entre __obi et un compte a été déduite de la conception du jeton, pas observée directement. Ce qui est observé, c'est que ChatGPT génère un jeton lié à un compte, qu'un collecteur le convertit en un cookie cross-site de longue durée, et que ce cookie apparaît ensuite chez plusieurs annonceurs sans lien entre eux.

La classification du consentement, c'est tout l'enjeu​

Voici ce qui distingue ce cas d'un simple « Meta a aussi un pixel ».

La politique de cookies d'OpenAI classe __obi dans la catégorie analytique. Les cookies de mesure de campagne de Google, Meta, LinkedIn, TikTok, Reddit et Microsoft se trouvent dans la catégorie marketing dans la même interface. Le JWT qui déclenche la synchronisation porte consent_decision: "analytics_allowed" — pas un consentement marketing.

Suivez la conséquence à travers une bannière de cookies européenne classique :

  • Vous cliquez sur « Refuser marketing, autoriser analytique » — un choix que fait une grande partie des utilisateurs soucieux de leur vie privée, et que de nombreuses plateformes de consentement présentent comme l'option raisonnable.
  • Le consentement analytique est accordé, donc le jeton de synchronisation est émis.
  • __obi est posé sur .openai.com pour un an.
  • Chaque pixel d'annonceur que vous rencontrez ensuite le reçoit.

Vous avez refusé la catégorie à laquelle appartient ce comportement, et le comportement s'est produit quand même, parce qu'il était classé dans une autre catégorie. Le chercheur a interrogé OpenAI précisément sur ce point — pourquoi __obi est classé comme analytique, et si les utilisateurs refusant le consentement marketing le reçoivent quand même — par courriel à press@openai.com et privacy@openai.com le 14/09/2026. Le support OpenAI a accusé réception de la demande et n'a répondu à aucune des deux questions.

★ Le bouton de consentement de l'annonceur ne peut pas vous aider. La documentation d'OpenAI fournit aux annonceurs oaiq("consent", false), qui « supprime les deux cookies » — c'est-à-dire __obref et __oppref, les deux qui se trouvent sur le domaine propre de l'annonceur. Cela n'a aucune portée sur .openai.com. Un site qui verrouille parfaitement le pixel derrière sa plateforme de gestion du consentement (CMP) ne fait que verrouiller les deux cookies qui n'ont jamais posé de problème de liaison cross-site.

Il existe un contrôle distinct, et réel, dans ChatGPT lui-même : Paramètres → Contrôles des données → Confidentialité marketing, signalé comme activé par défaut pour les comptes gratuits et désactivé pour les comptes payants. Considérez sa relation avec __obi comme non résolue : l'enquête n'a pas testé si le désactiver arrête la synchronisation, OpenAI n'a pas répondu à la question posée, et un réglage intitulé marketing qui gouvernerait un cookie classé analytique constitue exactement l'incohérence en cause. Désactivez-le — c'est le bon réflexe — mais ne supposez pas que c'est celui qui arrête le comportement réseau tant que personne n'aura capturé le trafic avec ce réglage désactivé.

Automatic Advanced Matching : le pixel lit la page​

Le problème d'un pixel de conversion, c'est que les identifiants de clic disparaissent souvent — bloqués, supprimés, ou perdus au fil d'une redirection. La réponse du secteur, c'est l'advanced matching : envoyer une identité hachée en plus de l'événement, pour que la plateforme publicitaire puisse faire la jonction autrement. Meta le propose depuis des années. La version d'OpenAI a une particularité qu'il vaut la peine de connaître.

L'Automatic Advanced Matching (AAM), version automatique, n'attend pas que l'annonceur transmette quoi que ce soit. La documentation d'OpenAI indique que le pixel « détecte automatiquement les informations client prises en charge sur votre site ». La capture du chercheur montre quatre sources de collecte étiquetées :

ÉtiquetteSourceComment la valeur est obtenue
inFournie par l'annonceurLe site la transmet délibérément
fmChamps de formulaireRécupérée dans des champs de saisie reconnaissables sur la page
htTexte de la pageExtraite du contenu affiché
jsGestionnaire de balisesLue depuis window.dataLayer, la couche de données Adobe, ou des couches GTM renommées

Dans les événements observés, l'identité récupérée automatiquement dépassait l'identité fournie par l'annonceur dans un ratio de 685 contre 255. Le pixel, la plupart du temps, collectait des données que personne ne lui avait demandé de collecter.

Haché ou en clair — directement d'après la documentation d'OpenAI. L'e-mail, le téléphone, l'ID externe, le prénom et le nom de famille sont normalisés puis hachés en SHA-256 dans le navigateur. Le pays (code ISO), la région, la ville et le code postal sont listés comme des champs en clair. La formule d'OpenAI « les informations client brutes ne sont pas envoyées à OpenAI via l'advanced matching automatique » est limitée à l'ensemble « identité » ; la géographie n'en fait pas partie. La capture le confirme : le code postal était le champ de formulaire le plus récupéré, 100 événements sur 28 sites, non haché.

Il existe une liste d'exclusion — OpenAI exclut les mots de passe, les codes à usage unique, les numéros de carte, les numéros de sécurité sociale, les dates de naissance, les antécédents médicaux, les diagnostics et les champs liés à des procédures judiciaires. C'est une atténuation réelle et qui mérite d'être reconnue. C'est aussi une liste d'exclusion, ce qui signifie qu'elle protège les catégories auxquelles quelqu'un a pensé.

L'identité n'est pas la seule charge utile transmise. Les événements transportent aussi le chemin d'URL de la page qui les a déclenchés — pages produit, URL d'articles, étapes de paiement — les termes de recherche en chaîne de requête étant signalés comme supprimés. Pour un commerçant, cela signifie les articles précis que vous avez consultés ; pour un éditeur, cela signifie les articles précis que vous avez lus.

★ Le réglage par défaut a basculé le 17/08/2026. L'AAM était déjà activé par défaut pour les nouveaux pixels Web ; à cette date, OpenAI l'a activé aussi pour les pixels existants, en opt-out plutôt qu'en opt-in. Le chercheur a trouvé l'AAM activé sur 638 des 881 pixels dont les réglages étaient visibles. Si vous avez installé un pixel OpenAI début 2026 et n'y avez plus touché depuis, votre site s'est mis à récupérer des champs de formulaire en août sans aucun déploiement de votre côté.

Là où ça ne fonctionne pas​

Ce n'est pas un traceur universel, et les exceptions comptent plus que d'habitude :

  • Chrome pour Android — la plateforme sur laquelle le chercheur a reproduit le mécanisme. Concerné.
  • Safari, et Chrome sur iOS — non concernés. L'Intelligent Tracking Prevention de Safari bloque le cookie tiers, et tout navigateur iOS s'appuie sur WebKit, donc « Chrome sur iPhone » hérite du même blocage. Un utilisateur d'iPhone et un utilisateur d'Android sont réellement dans des modèles de menace différents ici.
  • Chrome sur ordinateur de bureau — non testé dans les travaux publiés. Inconnu, pas sûr pour autant.
  • La couverture est de toute façon partielle. Seulement environ 20 % des sessions ChatGPT observées ont produit un jeton de synchronisation; le client web mobile diffuse des publicités sans synchroniser. Le graphe qui existe est clairsemé, pas total.

Ce dernier chiffre joue dans les deux sens. Il signifie que l'identifiant est loin d'être universel — et il signifie que « j'ai vérifié une fois et je n'ai rien vu » n'est pas une preuve d'absence.

Vérifiez votre propre navigateur​

Cinq minutes, aucun outil au-delà des DevTools. Faites-le sur Chrome Android si vous voulez voir le mécanisme se produire réellement.

Repérez la synchronisation, puis le cookie

# 1. Open ChatGPT with DevTools → Network, filter: obi
#    Look for a POST to:
#      /backend-api/bazaar/obi/sync-token      (logged in)
#      /backend-anon/bazaar/obi/sync-token     (logged out)
#    then a cross-site POST to:
#      https://bzr.openai.com/v1/obi/sync

# 2. Paste the JWT from the sync-token response into a local decoder.
#    You are looking for these claims:
#      iss: "chatgpt-wadi"    aud: "bzr.openai.com"
#      purpose: "obi_sync"    consent_decision: "analytics_allowed"
#      subject_type: "account_user" | "anonymous"

# 3. Application → Cookies → https://chatgpt.com
#    Look for __obi on domain .openai.com, Max-Age 31536000,
#    HttpOnly, Secure, SameSite=None.

# 4. Now visit a retailer that runs the pixel and filter for:
#      bzrcdn.openai.com/sdk/oaiq.min.js
#      bzr.openai.com/v1/sdk/events
#    Check the Cookies tab of that events request: __obi riding along
#    is the cross-site join, observed on your own machine.

Décodez le JWT localement. Coller un jeton contenant un sub lié à un compte dans un décodeur web revient à remettre cet identifiant à un tiers — une façon un peu absurde de conclure une enquête sur la vie privée.

Si vous exploitez le pixel​

Vous êtes ici un responsable de traitement d'une manière que le snippet d'installation du pixel n'a pas rendue évidente. Deux réglages et une habitude :

Guided walkthrough1 of 4
  1. Ads Manager → Tools → Conversions → Data Source → Edit pixel, puis désactivez l'Automatic Advanced Matching (ou confirmez que vous le voulez activé). Le réglage est par pixel — si vous en exploitez plusieurs, vous devez tous les modifier. Depuis le 17/08/2026, le réglage par défaut est activé, donc l'inaction est aussi une décision.

★ Haché n'est pas anonyme. Le SHA-256 d'une adresse e-mail est un identifiant déterministe : quiconque possède la même adresse calcule le même condensat. C'est précisément le principe — c'est ainsi que la jonction fonctionne. Traitez l'identité hachée comme une donnée personnelle pseudonymisée dans votre analyse de conformité, pas comme une donnée anonymisée.

Si vous ne faites qu'utiliser ChatGPT​

  • Désactivez Paramètres → Contrôles des données → Confidentialité marketing. Le bon réflexe à avoir ; effet sur __obi non confirmé, comme indiqué plus haut.
  • Utilisez le gestionnaire de cookies, pas seulement le réglage du compte — pour la navigation déconnectée, le lien de pied de page « Gérer les cookies » / « Vos choix de confidentialité » est la seule surface dont vous disposez.
  • Envoyez le Global Privacy Control. OpenAI déclare respecter le GPC comme signal d'opt-out juridiquement valide. Firefox et Brave l'envoient nativement ; des extensions existent pour Chrome. C'est un signal lisible par machine avec un poids réglementaire réel en Californie et dans plusieurs autres juridictions.
  • Le choix du navigateur est ici un contrôle réel. Safari bloque le mécanisme aujourd'hui. Ce n'est pas un argument pour changer de navigateur à cause d'un seul cookie — c'est un rappel que la politique relative aux cookies tiers pèse davantage sur votre posture de confidentialité que n'importe quel bouton que vous trouverez dans un écran de réglages.

Ce qui est réellement établi, et ce qui ne l'est pas​

À garder bien distinct, car la couverture médiatique brouille souvent la frontière :

Établi par la capture : les points de terminaison, les attributs des cookies, les revendications du JWT y compris consent_decision, les quatre sources de collecte, la répartition champ par champ entre haché et en clair (que la propre documentation d'OpenAI confirme), les chiffres — 936 pixels sur 1 029 noms d'hôte, 12 valeurs __obi sur 30 apparaissant chez plusieurs annonceurs, 638 pixels sur 881 avec l'AAM activé.

Déduit, et présenté comme tel par l'auteur : le fait que __obi soit relié côté serveur à un compte ChatGPT. La conception du jeton pointe dans cette direction ; la jonction elle-même n'a pas été observée.

Sans réponse de la part d'OpenAI : pourquoi __obi est classé comme analytique, et si refuser le consentement marketing empêche quand même la synchronisation.

Non testé : Chrome sur ordinateur de bureau, et si le réglage Confidentialité marketing arrête le comportement réseau.

La chaîne publicitaire, en huit termes
Appuyez sur Entrée ou Espace pour retourner la carte. Utilisez les flèches gauche et droite pour naviguer entre les cartes.Terme affiché.
1 / 8

Vérifiez vos connaissances

0/5
  1. Un utilisateur européen clique sur « Refuser marketing, autoriser analytique » dans une bannière de cookies. Que se passe-t-il pour la synchronisation __obi ?
  2. Un annonceur appelle oaiq("consent", false) à chaque chargement de page avant le consentement. Que supprime réellement cet appel ?
  3. Quels champs, d'après la propre documentation du pixel d'OpenAI, sont transmis SANS hachage ?
  4. Pourquoi un utilisateur d'iPhone est-il dans une situation différente d'un utilisateur d'Android ici ?
  5. Vous avez installé un pixel publicitaire OpenAI en mars 2026 et n'avez pas touché aux réglages depuis. Qu'est-ce qui a changé le 17/08/2026 ?

Sources et lectures complémentaires​

Suite​