Création de campagnes à flux produits via l'API Ads

Idée centrale

Ce processus documente le workflow API complet des campagnes fondées sur un flux produits (« product feed ») : quatre composants s'articulent — le flux produits (catalogue), la campagne (mode: "product_feed"), l'ensemble de produits (product_set, sélection et filtres) et le modèle d'annonce produit (product_ad_template, remplissage automatique à partir du produit sélectionné). C'est la contrepartie technique/API de Création de campagnes à partir de flux produits (Product Feeds), qui documente le même sujet côté interface Ads Manager.

Définition

Le parcours de création par programmation d'une campagne à flux produits via l'API Ads REST (api.ads.openai.com/v1), depuis la sélection des produits jusqu'à la mesure des performances par article, à l'exception de la connexion initiale du flux et du téléversement du catalogue, qui restent hors de cette API (voir « Fonctionnement »).

Contexte

S'appuie sur les endpoints documentés dans Campagnes et annonces dans l'API Ads (POST /campaigns, POST /ads) et sur le groupe d'annonces (POST /ad_groups, page de référence absente du lot de sources traité — voir Campagnes et annonces dans l'API Ads). Distinct de mais complémentaire à Création de campagnes à partir de flux produits (Product Feeds), qui décrit le même flux fonctionnel côté interface (clics dans Ads Manager) : les deux pages ne sont pas fusionnées, car elles s'adressent à des publics différents (annonceur UI vs développeur/intégrateur API) avec un niveau de détail technique différent. Capturée le 2026-08-08.

Fonctionnement

Les quatre composants de la hiérarchie

ComposantRôle
Product feed (flux produits)Fournit le catalogue courant du marchand.
Campaign (campagne)Définit budget, calendrier, ciblage, et le mode product_feed.
Product set (ensemble de produits)Sélectionne un flux lié et filtre optionnellement les produits éligibles à servir.
Product-ad template (modèle d'annonce produit)Définit comment les valeurs du produit sélectionné apparaissent dans l'annonce.

Prérequis

Un compte annonceur éligible à la création d'annonces ; un flux produits lié à ce compte ; l'identifiant du flux affiché dans Ads Manager ; une clé API Ads émise depuis l'onglet « Settings » du compte (voir Authentification, compte publicitaire et fichiers dans l'API Ads).

Configuration du flux — hors API publique

La connexion du flux et le téléversement initial du catalogue se font exclusivement dans Ads Manager, pas via l'API publique. La zone « Feeds » d'Ads Manager génère les identifiants de connexion, et le catalogue se téléverse par SFTP. POST /upload (voir Authentification, compte publicitaire et fichiers dans l'API Ads) sert uniquement aux ressources créatives statiques, pas au catalogue produit. Après le téléversement initial, Mise à jour incrémentale d'un flux produit (Delta Feeds API) permet de mettre à jour la disponibilité ou les titres de variantes existantes sans retéléverser tout le catalogue.

Conséquence pratique : un intégrateur ne peut pas automatiser de bout en bout la création d'un flux produits Ads par API seule ; l'étape de connexion initiale reste manuelle.

Schéma de flux

Les flux produits Ads utilisent le schéma de la spécification stable de flux produits (developers.openai.com/commerce/specs/file-upload/products, non détaillée par cette source) et ajoutent une exigence d'éligibilité par produit :

Type de fluxSchéma requis
Flux produits non-AdsChaque champ marqué Required dans la spécification stable. is_ads_eligible optionnel ; l'omettre ou le mettre à false exclut le produit du traitement Ads.
Flux produits AdsChaque champ de base Required, plus is_ads_eligible: true pour chaque produit qu'Ads doit traiter. L'alias hérité is_eligible_ads est accepté, mais utiliser le champ canonique pour les nouveaux flux.

Avertissement explicite de la source : utiliser is_ads_eligible, pas is_ads_enabled. L'ingestion des flux Ads lit is_ads_eligible et l'alias hérité is_eligible_ads ; elle ne lit pas is_ads_enabled.

Création d'une campagne à flux produits

Créer avec mode: "product_feed" et l'identifiant d'un flux lié au compte. Le mode ne peut pas être changé après création.

curl -X POST "https://api.ads.openai.com/v1/campaigns" \
  -H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Running shoes catalog",
    "status": "active",
    "mode": "product_feed",
    "product_feed_id": "product_feed_123",
    "budget": { "lifetime_spend_limit_micros": 25000000 }
  }'

L'oCPC (enchère optimisée pour la conversion) est en bêta ouverte pour les campagnes standard comme pour les campagnes à flux produits, via les mêmes endpoints — voir Campagnes optimisées pour la conversion via l'API Ads (oCPC) pour le détail complet, y compris la configuration d'enchère au niveau du groupe d'annonces.

Sélection des produits dans un groupe d'annonces

Les groupes d'annonces à flux produits héritent automatiquement du flux de la campagne. N'inclure product_set que pour spécifier des filtres ; son product_feed_id doit correspondre au flux de la campagne. Omettre product_set utilise tous les produits éligibles du flux.

curl -X POST "https://api.ads.openai.com/v1/ad_groups" \
  -H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "cmpn_101",
    "name": "Example Brand running shoes",
    "status": "active",
    "bidding_config": {
      "billing_event_type": "impression",
      "max_bid_micros": 60000
    },
    "product_set": {
      "product_feed_id": "product_feed_123",
      "filters": [
        { "field": "brand", "operator": "in", "values": ["Example Brand"] }
      ]
    }
  }'

Règles sur filters : chaque objet doit contenir field, operator, values. Opérateurs pris en charge : in, gt, gte, lt, lte. Les valeurs se transmettent en chaînes, y compris les valeurs numériques (ex. "4.5"). Ne pas répéter le même field au sein d'un même ensemble de produits.

Création du modèle d'annonce produit

Une seule créative product_ad_template par groupe d'annonces. OpenAI remplace les tokens du modèle par les données du produit sélectionné au moment de la diffusion.

curl -X POST "https://api.ads.openai.com/v1/ads" \
  -H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "ad_group_id": "adgrp_301",
    "name": "Running shoe product template",
    "status": "active",
    "creative": {
      "type": "product_ad_template",
      "title": "{{product.title}}",
      "body": "{{product.body}}",
      "price": "{{product.price}}"
    }
  }'

Un groupe d'annonces à flux produits ne peut contenir qu'un seul modèle d'annonce produit non archivé au maximum. Contrairement à un chat_card (voir Campagnes et annonces dans l'API Ads), un modèle produit ne requiert ni file_id ni target_url : l'article de flux sélectionné fournit son image et son URL de destination.

Requêtage des performances par produit

Demander le segment product à n'importe quel endpoint insights (voir Insights et reporting dans l'API Ads) pour ventiler les résultats par article de flux :

curl -sS -G "https://api.ads.openai.com/v1/ad_account/insights" \
  -H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
  --data-urlencode "time_granularity=daily" \
  --data-urlencode "aggregation_level=ad_account" \
  --data-urlencode "segments[]=product" \
  --data-urlencode "fields[]=product.feed_id" \
  --data-urlencode "fields[]=product.item_id" \
  --data-urlencode "fields[]=product.title" \
  --data-urlencode "fields[]=product.impressions" \
  --data-urlencode "fields[]=product.clicks"

Tableau récapitulatif des points de terminaison

RessourcePoints de terminaison publicsUsage flux produits
Mises à jour de fluxPATCH /feeds/{feed_id}/productsDisponibilité et titres des variantes existantes — voir Mise à jour incrémentale d'un flux produit (Delta Feeds API).
CampagnesPOST /campaigns, GET /campaigns, GET /campaigns/{campaign_id}, POST /campaigns/{campaign_id}Créer/gérer une campagne mode: "product_feed".
État de campagne.../activate, /pause, /archiveContrôler la diffusion de la campagne.
Groupes d'annoncesPOST /ad_groups, GET /ad_groups?campaign_id=..., GET /ad_groups/{id}, POST /ad_groups/{id}Gérer la sélection de flux et les filtres produits.
État du groupe d'annonces.../activate, /pause, /archiveContrôler la diffusion de l'ensemble de produits.
AnnoncesPOST /ads, GET /ads?ad_group_id=..., GET /ads/{id}, POST /ads/{id}Créer/gérer le product_ad_template.
État de l'annonce.../activate, /pause, /archiveContrôler la diffusion du modèle.
InsightsGET /ad_account/insights, /campaigns/{id}/insights, /ad_groups/{id}/insights, /ads/{id}/insightsPerformances segmentées par produit.

Précision explicite : les API de connexion de flux d'Ads Manager et les API internes de traitement/débogage de flux d'OpenAI ne font pas partie de l'API Advertiser publique.

Éligibilité à la diffusion

Téléverser un flux ne rend pas automatiquement chaque produit publicitaire. Un produit doit être marqué éligible aux annonces, rester disponible, contenir des données exploitables, et réussir le traitement de flux et la revue. La campagne, le groupe d'annonces et l'annonce liés doivent aussi être actifs, financés et éligibles à la diffusion. Utiliser les insights segmentés par produit pour vérifier quels produits ont reçu des impressions et des clics.

Éléments essentiels

Distinctions importantes

Ne pas confondre cette page (workflow API complet) avec Création de campagnes à partir de flux produits (Product Feeds) (même fonctionnalité, décrite depuis l'interface Ads Manager) : les deux sont complémentaires et non fusionnées, ni l'une ni l'autre ne rend l'autre obsolète.

Ne pas confondre is_ads_eligible (champ canonique lu par l'ingestion des flux Ads) avec is_ads_enabled (nom incorrect, non lu par l'ingestion) : seule la confusion avec is_ads_enabled est explicitement mise en garde par la source.

Cas pratiques

Aucun cas pratique disponible : identifiants et exemples (Running shoes catalog, Example Brand) manifestement fictifs et illustratifs.

Erreurs fréquentes

Ne pas tenter de connecter un flux ou de téléverser un catalogue via l'API publique : ces étapes se font exclusivement dans Ads Manager par SFTP.

Ne pas utiliser is_ads_enabled pour marquer un produit éligible aux annonces : ce champ n'est pas lu par l'ingestion des flux Ads, contrairement à is_ads_eligible.

Ne pas créer plus d'un modèle d'annonce produit non archivé par groupe d'annonces.

Limites et nuances

Relations

Points à vérifier

Sources