ShoppingExperienceFeed
Format de feed JSONL gzippé défini par OpenAI/Stripe dans ACP, transmis par SFTP au crawler ChatGPT, qui inventorie le catalogue d'un marchand avec ses prix, stock, variantes et URLs canoniques. Mise à jour quotidienne ou push event-based. Premier format de feed standardisé conçu pour LLM.
Format de feed JSONL gzippé défini par OpenAI/Stripe dans ACP, transmis par SFTP au crawler ChatGPT, qui inventorie le catalogue d'un marchand avec ses prix, stock, variantes et URLs canoniques. Mise à jour quotidienne ou push event-based. Premier format de feed standardisé conçu pour LLM.
Structure d’une ligne
Chaque ligne du feed est un objet JSON autonome. Schéma minimal :
{
"id": "SKU-123",
"gtin": "3760123456789",
"title": "Sac cabas en lin",
"description": "...",
"price": {"amount": 89.00, "currency": "EUR"},
"availability": "in_stock",
"url": "https://exemple.fr/products/sac-cabas-lin",
"image": "https://cdn.exemple.fr/sac.jpg",
"variants": [{"size": "M", "color": "écru", "sku": "SKU-123-M-ECRU"}]
}
Le fichier complet est gzippé et déposé par SFTP sur un endpoint OpenAI. Une version delta peut être pushée plusieurs fois par heure pour les variations de stock.
Pourquoi ce format et pas Schema.org Product
Schema.org Product reste lié au crawl HTML : OpenAI doit visiter chaque page et parser le JSON-LD. Avec ShoppingExperienceFeed, le marchand pousse l’ensemble du catalogue en un fichier, ce qui réduit le coût d’indexation de plusieurs ordres de grandeur. C’est aussi le mécanisme qui permet à ChatGPT de répondre en temps réel sur la disponibilité, ce qu’un crawl ne peut pas garantir.
Différence côté UCP
UCP a fait l’inverse : pas de feed push, une Live API Catalog que l’agent interroge en JSON-RPC. Le coût pour le marchand est inversé (latence d’API à tenir versus job batch SFTP) mais l’agent obtient des données toujours fraîches.
Fréquence et SLA recommandés
| Type de mise à jour | Fréquence cible | Volume typique |
|---|---|---|
| Full snapshot | 1× par 24 h | 50 à 500 Mo gzippé pour 50 k SKU |
| Delta prix / stock | 4 à 12× par heure | 100 Ko à 5 Mo |
| Push event-based (rupture, refresh) | Immédiat | < 50 Ko |
OpenAI annonce une fenêtre d’indexation de 5 à 15 minutes après dépôt SFTP. Au-delà de 30 minutes sans confirmation, la spec recommande un retry avec backoff exponentiel.
Erreurs de feed fréquentes
Trois erreurs reviennent dans les premiers déploiements ACP : (a) availability injecté en français (en_stock) au lieu de l’enum requis in_stock / out_of_stock / preorder, (b) price.amount envoyé en string au lieu de number, (c) URL canoniques relatives au lieu d’absolues. Ces trois cas font silencieusement disparaître les SKU du feed côté OpenAI sans message d’erreur visible côté marchand.
À ne pas confondre avec
- [[acp]] : le protocole entier, dont le feed n’est qu’un composant.
- Google Merchant Center feed : format historique XML/TSV pour Shopping ads, non adapté au LLM.