OpenAI product feed spec, ürün verilerinin ChatGPT içindeki alışveriş, ürün keşfi ve reklam deneyimlerinde doğru şekilde işlenebilmesi için gereken teknik veri yapısını tanımlar. Bu yapı; ürün başlığı, açıklaması, fiyatı, stok bilgisi, görselleri, varyantları, satıcı bilgileri ve uygunluk alanları gibi birçok alanı içerir.
OpenAI dokümanlarında ürün feed’i için iki temel aktarım yöntemi bulunur: File Upload ve API. File Upload yöntemi, tam katalog dosyasının SFTP üzerinden gönderilmesine dayanır. API yöntemi ise product feed oluşturma, feed metadata alma ve ürünleri API üzerinden güncelleme süreçleri için kullanılır.
OpenAI Product Feed Hangi Yöntemlerle Yüklenebilir?
| Yöntem |
Kullanım amacı |
Güncelleme mantığı |
Teknik yapı |
| File Upload |
Tam ürün kataloğunu OpenAI’ye dosya olarak göndermek |
Full snapshot |
SFTP üzerinden dosya gönderimi |
| API |
Feed oluşturmak, feed metadata almak ve ürünleri API ile güncellemek |
Product upsert / partial update |
REST API endpoint’leri |
File Upload yöntemi tam katalog yüklenmesi olarak düşünülebilir ve OpenAI bu yapıyı source of truth kabul edilen full snapshot feed modeli olarak tanımlar. API yöntemi ise feed oluşturma, mevcut feed bilgisini alma ve ürün güncellemelerini API üzerinden yapma amaçlarıyla kullanılır.
File Upload feed gereksinimleri
OpenAI file upload dokümanına göre ürün feed’i SFTP üzerinden OpenAI’ye gönderilir. Format tarafında parquet önerilir; ayrıca jsonl.gz, csv.gz ve tsv.gz formatları da desteklenir. Feed UTF-8 encoding kullanmalı ve dosya adı her güncellemede sabit tutulmalıdır.
| Konu |
OpenAI gereksinimi |
| Delivery model |
Feed’ler OpenAI’ye SFTP üzerinden push edilir. |
| Feed modeli |
Full snapshot feed |
| Önerilen güncelleme sıklığı |
En az günlük |
| Önerilen format |
parquet, tercihen compression ile |
| Desteklenen diğer formatlar |
jsonl.gz, csv.gz, tsv.gz |
| Encoding |
UTF-8 |
| Dosya adı |
Stabil dosya adı kullanılmalı ve her güncellemede aynı dosya yolu/adı overwrite edilmelidir. |
| Shard kullanımı |
Shard set sabit tutulmalı ve aynı shard dosyaları güncellenmelidir. |
| Shard boyutu |
Shard başına 500.000 ürüne kadar önerilir; shard dosyalarının yaklaşık 500 MB altında tutulması hedeflenmelidir. |
Full snapshot mantığı
File Upload yönteminde OpenAI feed’i tam katalog snapshot’ı olarak ele alır. Bu nedenle her güncelleme, katalogdaki güncel ürün durumunu yansıtmalıdır.
| Senaryo |
Uygulama |
| Ürün katalogda kalmaya devam edecek |
Ürün kaydı full snapshot içinde gönderilir. |
| Ürün ChatGPT Search içinde görünmemeli |
is_eligible_search=false gönderilir. |
| Ürün tamamen kaldırılmalı |
Ürün bir sonraki full snapshot’tan çıkarılır. |
| Feed validasyonu yapılacak |
Önce yaklaşık 100 ürünlük sample ile başlanabilir. |
| İlk full snapshot |
Required field’lar tüm satırlarda kontrol edilmelidir. |
OpenAI Product Feed'de En Çok Karşılaşılan Ingestion Hataları
| Hata türü |
Açıklama |
| Eksik required field |
Zorunlu alanların bazı ürünlerde boş veya eksik olması. |
| Spec dışı field adı |
OpenAI product feed spec içinde yer almayan veya eski field isimlerinin kullanılması. |
| Malformed field value |
Fiyat, stok, URL, tarih veya boolean gibi alanların beklenen formatta gönderilmemesi. |
| Stabil olmayan ID |
item_id değerinin zaman içinde değişmesi. |
| Erişilemeyen URL |
Ürün URL’i veya görsel URL’inin HTTP 200 dönmemesi. |
File Upload ürün schema yapısı
OpenAI file upload product spec, flat-file schema olarak tanımlanır. Stable schema production file upload entegrasyonları için desteklenen yoldur.
| Schema bölümü |
İçerik |
| OpenAI Flags |
ChatGPT Search, checkout ve ads eligibility alanları |
| Basic Product Data |
Ürün ID, başlık, açıklama, URL |
| Item Information |
Marka, kategori, materyal, ölçü, ağırlık, yaş grubu |
| Media |
Ana görsel, ek görseller, video, 3D model |
| Price & Promotions |
Fiyat, indirimli fiyat, kampanya tarihleri |
| Availability & Inventory |
Stok durumu, preorder tarihi, expiration date |
| Variants |
Grup ID, renk, beden, varyant sözlüğü |
| Fulfillment |
Shipping ve dijital ürün bilgisi |
| Merchant Info |
Seller adı, seller URL, policy URL’leri |
| Returns |
İade ve değişim bilgileri |
| Performance Signals |
Popülerlik ve iade oranı |
| Compliance |
Uyarılar ve yaş kısıtları |
| Reviews and Q&A |
Review count, star rating, store rating |
OpenAI Flags alanları
OpenAI Flags alanları, ürünün ChatGPT Search, checkout veya ads süreçlerinde kullanılıp kullanılmayacağını kontrol eder.
| Alan |
Tip |
Desteklenen değerler |
Zorunluluk |
Açıklama |
is_eligible_search |
Boolean |
true, false |
Required |
Ürünün ChatGPT Search sonuçlarında gösterilip gösterilmeyeceğini belirler. |
is_eligible_checkout |
Boolean |
true, false |
Required |
Ürünün ChatGPT içinde doğrudan satın alma için uygun olup olmadığını belirtir. |
is_ads_eligible |
Boolean |
true, false |
Ads için required; non-Ads feed için optional |
Ürünün ChatGPT Ads için işlenip işlenmeyeceğini belirler. |
OpenAI Product Feed Basic Product Data Alanları
Basic Product Data bölümü, ürünün temel kimliğini ve ürün detay sayfasına yönlendirme bilgisini içerir. item_id, title, description ve url alanları file upload schema içinde required olarak yer alır.
| Alan |
Tip |
Zorunluluk |
Kural / Not |
item_id |
String |
Required |
Merchant product ID; varyant bazında unique olmalı, stabil kalmalı, max 100 karakter. |
gtin |
String |
Optional |
GTIN, UPC veya ISBN; 8-14 digit; tire veya boşluk kullanılmamalı. |
mpn |
String |
Optional |
Manufacturer part number; max 70 karakter. |
title |
String |
Required |
Product title; max 150 karakter; all-caps kullanılmamalı. |
description |
String |
Required |
Plain text product description; max 5.000 karakter. |
url |
URL |
Required |
Product detail page URL; HTTP 200 dönmeli, HTTPS önerilir. |
Item Information alanları
| Alan |
Tip |
Zorunluluk |
Kural / Not |
brand |
String |
Required |
Product brand; max 70 karakter. |
condition |
String |
Optional |
Örnek: new; lower-case string. |
product_category |
String |
Optional |
Kategori yolu; > separator önerilir. |
material |
String |
Optional |
Ana materyal; max 100 karakter. |
dimensions |
String |
Optional |
LxWxH unit formatı. |
length, width, height |
String |
Optional |
Tekil ölçü alanları birlikte kullanılmalı. |
dimensions_unit |
String |
Koşullu |
length, width veya height varsa gerekli. |
weight |
String |
Optional |
Ürün ağırlığı. |
item_weight_unit |
String |
Koşullu |
weight varsa gerekli. |
age_group |
Enum |
Optional |
newborn, infant, toddler, kids, adult |
ads_metadata |
Object |
Optional |
Ads metadata için string key-value JSON object. |
Media alanları
Media bölümü, ürünün ana görselini ve ek medya varlıklarını içerir. File upload schema’da image_url required olarak belirtilir.
| Alan |
Tip |
Zorunluluk |
Kural / Not |
image_url |
URL |
Required |
Ana ürün görseli; JPEG/PNG; HTTPS önerilir. |
additional_image_urls |
String |
Optional |
Virgülle ayrılmış ek görsel URL listesi. |
video_url |
URL |
Optional |
Public erişilebilir olmalı. |
model_3d_url |
URL |
Optional |
GLB/GLTF önerilir. |
Price & Promotions alanları
Price & Promotions bölümü, standart fiyat, indirimli fiyat ve kampanya tarihleri için kullanılır. price alanı required olarak belirtilir ve currency code içermelidir.
| Alan |
Tip |
Zorunluluk |
Kural / Not |
price |
Number + currency |
Required |
Örnek: 79.99 USD; currency code içermeli. |
sale_price |
Number + currency |
Optional |
price değerinden küçük veya eşit olmalı. |
sale_price_start_date |
Date |
Optional |
ISO 8601 formatı. |
sale_price_end_date |
Date |
Optional |
ISO 8601 formatı. |
unit_pricing_measure / base_measure |
Number + unit |
Optional |
İki alan birlikte kullanılmalı. |
pricing_trend |
String |
Optional |
Max 80 karakter. |
Availability & Inventory alanları
Availability & Inventory bölümü, ürünün stok ve satın alınabilirlik durumunu tanımlar. availability required alanıdır ve lower-case enum değerleriyle gönderilmelidir.
| Alan |
Tip |
Desteklenen değerler |
Zorunluluk |
Kural / Not |
availability |
Enum |
in_stock, out_of_stock, pre_order, backorder, unknown |
Required |
Lower-case string. |
availability_date |
Date |
ISO 8601 |
Pre-order için required |
Gelecek tarih olmalı. |
expiration_date |
Date |
ISO 8601 |
Optional |
Gelecek tarih olmalı. |
pickup_method |
Enum |
in_store, reserve, not_supported |
Optional |
Lower-case string. |
pickup_sla |
Number + duration |
Örnek: 1 day |
Koşullu |
pickup_method varsa kullanılabilir. |
Variants alanları
Variants bölümü, aynı ürünün renk, beden veya farklı özelliklere göre varyantlarını tanımlamak için kullanılır.
| Alan |
Tip |
Zorunluluk |
Kural / Not |
group_id |
String |
Recommended |
Varyantlar arasında ortak grup ID. |
listing_has_variations |
Boolean |
Recommended |
true veya false. |
variant_dict |
Object |
Recommended |
Örnek: {"color":"Blue","size":"10"} |
item_group_title |
String |
Optional |
Grup ürün başlığı; max 150 karakter. |
color |
String |
Optional |
Max 40 karakter. |
size |
String |
Apparel için recommended |
Max 20 karakter. |
size_system |
Country code |
Apparel için recommended |
ISO 3166 2 harfli ülke kodu. |
gender |
String |
Optional |
Lower-case string. |
offer_id |
String |
Optional |
Feed içinde unique olmalı. |
Fulfillment alanları
| Alan |
Tip |
Zorunluluk |
Format / Not |
shipping |
String |
Optional |
country:region:service_class:price:min_handling_days:max_handling_days:min_transit_days:max_transit_days |
is_digital |
Boolean |
Optional |
true veya false. |
Merchant Info alanları
Merchant Info bölümü seller bilgisi, seller URL’i ve policy URL’leri için kullanılır.
| Alan |
Tip |
Zorunluluk |
Kural / Not |
seller_name |
String |
Required / Display |
Max 70 karakter. |
marketplace_seller |
String |
Optional |
Marketplace seller of record. |
seller_url |
URL |
Required |
HTTPS önerilir. |
seller_privacy_policy |
URL |
Checkout için koşullu |
is_eligible_checkout=true ise required olabilir. |
seller_tos |
URL |
Checkout için koşullu |
is_eligible_checkout=true ise required olabilir. |
Returns, review ve compliance alanları
| Bölüm |
Alan |
Zorunluluk |
Not |
| Returns |
accepts_returns |
Optional |
true veya false. |
| Returns |
return_deadline_in_days |
Optional |
Pozitif integer. |
| Returns |
accepts_exchanges |
Optional |
true veya false. |
| Returns |
return_policy |
Required |
HTTPS önerilir. |
| Performance Signals |
popularity_score |
Optional |
0-5 scale veya merchant-defined. |
| Performance Signals |
return_rate |
Optional |
0-100%. |
| Compliance |
warning / warning_url |
Recommended for Checkout |
URL varsa HTTP 200 dönmeli. |
| Compliance |
age_restriction |
Recommended |
Pozitif integer. |
| Reviews |
review_count |
Optional |
Non-negative integer. |
| Reviews |
star_rating |
Optional |
0-5 scale. |
| Reviews |
store_review_count |
Optional |
Non-negative integer. |
| Reviews |
store_star_rating |
Optional |
0-5 scale. |
API feed yapısı
OpenAI API feed yapısı, product feed oluşturma ve feed metadata alma işlemleri için Feeds endpoint’lerini kullanır. API dokümanında GET /product_feeds/{id} endpoint’i feed metadata döndürür; POST /product_feeds ise yeni product feed oluşturur.
| Endpoint |
Method |
Amaç |
/product_feeds/{id} |
GET |
Belirli bir feed için metadata döndürür. |
/product_feeds |
POST |
Yeni product feed oluşturur. |
GET /product_feeds/{id}
| Alan |
Tip |
Required |
Açıklama |
id |
string |
Yes |
Product feed identifier. |
Response içinde id, target_country ve updated_at alanları dönebilir. target_country, ISO 3166 iki harfli ülke kodudur.
POST /product_feeds
| Alan |
Tip |
Required |
Açıklama |
target_country |
string |
No |
ISO 3166 iki harfli ülke kodu. |
Response içinde feed id, target_country ve updated_at alanları yer alır. Geçersiz payload durumunda 400 Bad Request dönebilir.
API Products endpoint’leri
Products API, belirli bir feed içindeki ürünleri almak veya ürün güncellemelerini upsert etmek için kullanılır. PATCH /product_feeds/{id}/products endpoint’i ürünleri id alanına göre eşleştirir. Request içinde gönderilmeyen ürünler değişmeden kalır.
| Endpoint |
Method |
Amaç |
/product_feeds/{id}/products |
GET |
Feed içindeki ürünleri döndürür. |
/product_feeds/{id}/products |
PATCH |
Ürünleri upsert eder. |
PATCH /product_feeds/{id}/products
| Alan |
Tip |
Required |
Açıklama |
id |
string |
Yes |
Feed identifier. |
target_country |
string |
No |
ISO 3166 iki harfli ülke kodu. |
products |
Product[] |
Yes |
Product feed için ürün array’i. |
Response içinde id ve accepted alanları döner. Payload geçersizse 400 Bad Request, feed bulunamazsa 404 Not Found dönebilir.
API Product schema
API product schema, file upload flat-file yapısından farklı olarak nested product ve variant objeleriyle çalışır. Product seviyesinde id ve variants required olarak görünür; variant seviyesinde ise id ve title required alanlardır.
Product object
| Alan |
Tip |
Required |
Açıklama |
id |
string |
Yes |
Stable global product identifier. |
title |
string |
No |
Product title. |
description |
Description |
No |
Product description content. |
url |
string (uri) |
No |
Canonical product URL. |
media |
Media[] |
No |
Product-level media assets. |
variants |
Variant[] |
Yes |
Product variants. |
Variant object
| Alan |
Tip |
Required |
Açıklama |
id |
string |
Yes |
Stable global variant identifier. |
title |
string |
Yes |
Variant title. |
description |
Description |
No |
Variant description content. |
url |
string (uri) |
No |
Variant URL. |
barcodes |
Barcode[] |
No |
Variant barcode values. |
price |
Price |
No |
Active sale price. |
list_price |
Price |
No |
Discount öncesi referans fiyat. |
unit_price |
UnitPrice |
No |
Unit pricing metadata. |
availability |
Availability |
No |
Variant availability. |
categories |
Category[] |
No |
Variant categories. |
condition |
Condition |
No |
Item condition. |
variant_options |
VariantOption[] |
No |
Örnek: color, size. |
media |
Media[] |
No |
İlk media primary kabul edilir. |
seller |
Seller |
No |
Seller metadata. |
API alt objeleri
API product schema içinde Description, Availability, Price, Media, VariantOption, Category, Seller ve Link gibi alt objeler bulunur.
| Obje |
Alan |
Required |
Açıklama |
| Description |
plain |
No |
Plain-text description. |
| Description |
html |
No |
HTML description. |
| Description |
markdown |
No |
Markdown description. |
| Availability |
available |
No |
Variant satın alınabilir mi? |
| Availability |
status |
No |
in_stock, backorder, preorder, out_of_stock, discontinued |
| Price |
amount |
Yes |
ISO 4217 minor units. |
| Price |
currency |
Yes |
Üç harfli currency code. |
| Media |
type |
Yes |
Media type. |
| Media |
url |
Yes |
Media URL. |
| Media |
alt_text |
No |
Alternate text. |
| VariantOption |
name |
Yes |
Örnek: color veya size. |
| VariantOption |
value |
Yes |
Seçilen option değeri. |
| Category |
value |
Yes |
Category label veya path. |
| Category |
taxonomy |
No |
Örnek: google_product_category, shopify, merchant. |
| Seller |
name |
No |
Seller name. |
| Seller |
links |
No |
Seller-related links. |
| Link |
type |
Yes |
privacy_policy, terms_of_service, refund_policy, shipping_policy, faq |
| Link |
url |
Yes |
Link destination URL. |
File Upload ve API schema farkı
| Konu |
File Upload |
API |
| Veri modeli |
Flat-file schema |
Nested JSON object |
| Teslimat |
SFTP |
REST API |
| Güncelleme |
Full snapshot |
Upsert / partial product changes |
| Ürün ID alanı |
item_id |
Product id, Variant id |
| Varyant yapısı |
Flat alanlar: group_id, variant_dict, color, size |
variants[] array ve variant_options[] |
| Fiyat |
79.99 USD gibi number + currency string |
Minor units + currency object |
| Açıklama |
Plain text string |
plain, html veya markdown |
| Görsel |
image_url, additional_image_urls |
media[] |
| Kategori |
product_category |
categories[] + taxonomy |
| Güncelleme etkisi |
Snapshot kaynak kabul edilir. |
Gönderilmeyen ürünler değişmeden kalır. |
Minimum teknik kontrol listesi
| Kontrol |
Beklenen durum |
| Feed yöntemi seçildi mi? |
File Upload veya API |
| File Upload kullanılıyorsa SFTP hazır mı? |
Evet |
| Dosya formatı destekleniyor mu? |
parquet, jsonl.gz, csv.gz, tsv.gz |
| Encoding doğru mu? |
UTF-8 |
| Dosya adı sabit mi? |
Evet |
| Required alanlar tüm ürünlerde var mı? |
Evet |
item_id veya API id alanları stabil mi? |
Evet |
| Product URL HTTP 200 dönüyor mu? |
Evet |
| Ana görsel URL’i erişilebilir mi? |
Evet |
| Fiyat currency code içeriyor mu? |
Evet |
| Stok değerleri supported enum ile uyumlu mu? |
Evet |
Ads için ürünler is_ads_eligible=true mı? |
Gerekli ürünlerde evet |
| Varyantlı ürünlerde grup ve varyant alanları dolu mu? |
Evet |
| Seller ve return policy alanları var mı? |
Evet |
| Test sample validasyonundan geçildi mi? |
Evet |
OpenAI Product Feed Spec için kaynak dokümanlar
Optifeed notu
OpenAI product feed spec, hem teknik field uyumluluğu hem de ürün verisinin güncelliği açısından düzenli kontrol gerektirir. Optifeed, e-ticaret markalarının ürün başlığı, açıklama, fiyat, stok, varyant, kategori, görsel ve metadata alanlarını farklı reklam ve AI shopping kanallarına uygun şekilde yönetmesine yardımcı olur.
OpenAI feed hazırlığına başlamadan önce product feed’in AI shopping içindeki rolünü daha geniş açıdan değerlendirmek için Product Feed ve AI Shopping ve AI Shopping Ready Product Feed Nasıl Hazırlanır? içeriklerini inceleyebilirsiniz.

Zafer Kavaklı
Co-Founder at Optifeed
Zafer Kavaklı is co-founder of Woom Digital and Optifeed. He is an experienced digital marketer who has been working in the field since 2012. He started his career as a digital marketing intern at Teknosa and then worked at Modanisa as a digital marketing specialist. After that he worked as digital marketing manager at ebebek. Following these roles, he ventured into entrepreneurship by establishing his own performance marketing agency named Woom Digital. Zafer has embarked on a new business venture in the SaaS sector, creating a product management tool named Optifeed.