Mise à jour incrémentale d'un flux produit (Delta Feeds API)
Idée centrale
La Delta Feeds API met à jour la disponibilité et le titre de variantes déjà existantes dans un flux produit lié, sans retéléverser l'intégralité du catalogue. C'est un mécanisme d'optimisation opérationnelle qui présuppose systématiquement un flux et un catalogue initial déjà en place, documentés dans Création de campagnes à flux produits via l'API Ads : elle ne crée pas de flux, ne téléverse pas de catalogue complet, et n'ajoute pas de produits absents du flux.
Définition
Le point de terminaison PATCH /feeds/{feed_id}/products de l'API Ads, qui accepte des mises à jour partielles (« deltas ») de disponibilité et de titre sur des produits et variantes déjà présents dans un flux lié à un compte publicitaire.
Contexte
Route activée par compte publicitaire, non universellement disponible : une réponse 403 portant le code product_feed_api_disabled ou product_feed_delta_api_disabled signifie que la fonctionnalité n'est pas activée pour ce compte, à résoudre en contactant l'équipe de compte OpenAI. Prérequis : une clé API Ads (voir Authentification, compte publicitaire et fichiers dans l'API Ads), un flux produit déjà lié au compte avec son identifiant, un catalogue initial déjà téléversé, et les identifiants existants du produit parent et de ses variantes. Capturée le 2026-08-08.
Fonctionnement
Mettre à jour des variantes de produits — PATCH /feeds/{feed_id}/products
curl -X PATCH \
"https://api.ads.openai.com/v1/feeds/product_feed_123/products" \
-H "Authorization: Bearer $OPENAI_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"products": [
{
"id": "running-shoe-001",
"variants": [
{
"id": "running-shoe-001-black-9",
"availability": { "available": false }
},
{
"id": "running-shoe-001-white-9",
"title": "Running shoe - white, size 9",
"availability": { "status": "in_stock" }
}
]
}
]
}'
Réponse en cas de succès, 200 OK :
{ "id": "product_feed_123", "accepted": true }
Sémantique de accepted: true : « accepted: true means the update was accepted by feed processing. It doesn't mean downstream indexing, ad eligibility, or serving has already updated. » — il faut vérifier accepted avant de considérer la requête réussie, mais cela ne garantit pas la propagation en aval.
Champs de la requête
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
products | object[] | Oui | Un ou plusieurs produits existants à mettre à jour. |
products[].id | string | Oui | Identifiant du produit parent, issu du catalogue existant. |
products[].variants | object[] | Oui | Une ou plusieurs variantes existantes du produit parent. |
products[].variants[].id | string | Oui | Identifiant existant de la variante, issu du catalogue. |
products[].variants[].title | string | Non | Titre mis à jour pour cette variante. |
products[].variants[].availability | object | Non | Disponibilité mise à jour. |
availability.available | boolean | Non | true = in_stock ; false = out_of_stock. |
availability.status | string | Non | Disponibilité explicite (in_stock, out_of_stock). Prévaut sur available si les deux sont présents. |
Contraintes : products et chaque variants doivent contenir au moins un élément ; les identifiants doivent être non vides ; une même variante ne doit pas apparaître deux fois dans une même requête. Les champs shop_id, scoped_offer_id et target_country ne doivent pas être envoyés : la propriété du flux, l'identité du produit et les pays pris en charge sont résolus à partir du flux lié.
Application des changements
Le téléversement initial fournit l'enregistrement produit complet ; une requête delta ne modifie que les champs spécifiés sur des variantes existantes et préserve le reste des données. Une fois la mise à jour acceptée, les systèmes en aval appliquent le changement de façon asynchrone. Un produit passé hors stock cesse d'être éligible à la diffusion une fois le changement propagé ; marquer un produit en stock ne garantit pas sa diffusion — le produit, la campagne, le groupe d'annonces et l'annonce doivent toujours satisfaire les conditions normales d'éligibilité (voir Création de campagnes à flux produits via l'API Ads). La réponse d'acceptation ne contient ni horodatage de complétion ni résultat du traitement en aval.
Erreurs courantes
| Statut | Cause | Action |
|---|---|---|
400 | Champ obligatoire manquant, liste de produits/variantes vide, ou champ inconnu dans la requête. | Vérifier le corps de la requête. |
401 | Clé API Ads manquante ou invalide. | Utiliser une clé API Ads active dans l'en-tête Authorization: Bearer. |
403 | Accès à l'API de flux désactivé, ou permission insuffisante. | Vérifier les permissions du compte, contacter l'équipe de compte OpenAI. |
404 | Flux inexistant ou non lié au compte associé à la clé API. | Vérifier l'identifiant du flux et la clé API du compte propriétaire. |
Éléments essentiels
- Cette route est réservée aux campagnes construites à partir d'un flux produit ; sans objet pour les campagnes ne reposant pas sur un catalogue de produits.
- Le couple
available(booléen simplifié) /status(chaîne explicite plus riche) dansavailability— la seconde prévaut en cas de conflit — est une convention récurrente de cette documentation développeur.
Distinctions importantes
Ne pas confondre accepted: true (la requête a passé le traitement du flux) avec une confirmation que le changement est déjà indexé, éligible aux annonces, ou en diffusion : ce sont trois étapes distinctes, asynchrones.
Ne pas confondre cette route (PATCH, mises à jour incrémentales de variantes existantes) avec la connexion initiale du flux ou le téléversement complet du catalogue, qui restent hors de l'API publique et se font par SFTP depuis Ads Manager — voir Création de campagnes à flux produits via l'API Ads.
Cas pratiques
Aucun cas pratique disponible : identifiants et exemples (running-shoe-001, product_feed_123) manifestement fictifs et illustratifs.
Erreurs fréquentes
Ne pas envoyer shop_id, scoped_offer_id ou target_country dans le corps de la requête : ces champs sont résolus automatiquement à partir du flux lié et provoquent une erreur 400 s'ils sont inclus (champ inconnu).
Ne pas considérer un produit remis en stock (availability.status: "in_stock") comme immédiatement servi : la campagne, le groupe d'annonces et l'annonce doivent aussi satisfaire les conditions normales d'éligibilité.
Ne pas répéter une même variante deux fois dans la même requête.
Limites et nuances
- Source unique, page de documentation développeur officielle récupérée par le web (dérogation ponctuelle autorisée), sans SHA-256 de fichier local.
- Note de fidélité de récupération : une première tentative de récupération avait produit un texte visiblement reformulé et résumé, sans l'exemple
curlni les tableaux ; seule une seconde tentative, plus insistante sur la fidélité verbatim, a été retenue comme base de cette page. - Valeurs possibles de
availability.statusau-delà dein_stocketout_of_stocknon exhaustivement documentées. - Cette page ne définit pas le schéma complet du catalogue produit initial ni les mécanismes d'authentification au-delà de l'en-tête Bearer — voir Création de campagnes à flux produits via l'API Ads et Authentification, compte publicitaire et fichiers dans l'API Ads.
Relations
- Création de campagnes à flux produits via l'API Ads — prérequis direct (flux et catalogue initial), même ressource
feeds/{feed_id}. - Authentification, compte publicitaire et fichiers dans l'API Ads — mécanisme d'authentification partagé.
Points à vérifier
- Contenu intégral de la page « api-overview » (accès et limites de l'API annonceur), référencée en lien « Next steps » de la source mais absente du lot de vingt sources traité — page potentiellement manquante du corpus, de la même façon que la page « Ad Groups » est signalée manquante ailleurs dans ce domaine.
- Valeurs possibles de
availability.statusau-delà dein_stocketout_of_stock.
Sources
SRC-2026-040— « Delta Feeds API »,developers.openai.com/ads/delta-feeds, capturée le 2026-08-08.