API

A101 API: Kapıda ve Ekstra ürünleri, kampanya listeleriyle birlikte

A101'in ürün ve fiyat verisi için dışarıya açık, belgelenmiş bir API'si yok. Bu API a101.com.tr'deki iki online mağazayı okur: market alışverişinin yapıldığı A101 Kapıda ve elektronik, ev, giyim ürünlerinin satıldığı A101 Ekstra. Her ürün için raf fiyatı, varsa üstü çizili fiyat ve indirim oranı, kampanya rozetleri ve tarihleri, sepette fiyat ile çok al az öde fiyatı birbirine karışmadan gelir. A101'e mal tedarik eden ya da sipariş akışını bağlamak isteyen bir firmanın aradığı entegrasyon bu değil; okunan şey, alışveriş yapan birinin ekranında gördüğü fiyat.

Uçlar

endpointNe döndürürZorunlu
searchKelimeyle arama, sayfa başına 60 ürün. `channel` ile mağaza seçilir: `kapida` (gıda, temizlik, kişisel bakım) ya da `ekstra` (televizyon, telefon, mobilya, giyim). Ekstra'da sitenin sıralamaları da kullanılabilir.query
product/detailTek ürün, ürün numarasıyla ya da a101.com.tr adresiyle: fiyatlar, kampanyalar, barkodlar, net ağırlık, saklama koşulu, menşei, raf ömrü, açıklama; Ekstra ürünlerinde ayrıca stok adedi, taksit seçenekleri ve varyantlar.hepsi opsiyonel
campaignsKampanya sayfalarındaki ürünler: Kapıda'da Aldın Aldın, Haftanın Yıldızları, Aldın Aldın X, Aylık Fırsat, 10 TL ve üzeri sepette, Çok Al Az Öde; Ekstra'da Aldın Aldın ve Aldın Aldın Ekstra. Sayfa başına 60 ürün, arama satırıyla aynı alanlar.hepsi opsiyonel
suggestArama kutusuna yazarken A101'in gösterdiği öneriler: en üstte çıkan ürünler fiyatlarıyla, yanında kategori ve marka önerileri.query

Her çağrı kredi ile ücretlendirilir. Başarısız ve engellenen çağrılar ücretsizdir.

Çalışan örnek

Kampanyalı bir üründe `price` o an ödenen fiyattır, `price_before_discount` üstü çizili olandır; kampanyanın adı ve geçerlilik günleri `campaigns` içinde gelir. Tarihler Türkiye saatine göredir. `campaigns` ucunda bu tarihlere mutlaka bakın: 24 Ekim'de çektiğimiz Aldın Aldın listesinin ilk sayfasındaki 60 ürünün 8'i, 29 Ekim'de başlayacak bir sonraki haftanın ürünüydü. Yalnız bu haftanın listesi gerekiyorsa satırları `campaigns[].starts_on` alanına göre ayıklayın.

İstek
curl -X POST https://api.reefapi.com/a101/v1/search \
  -H "x-api-key: API_ANAHTARINIZ" \
  -H "content-type: application/json" \
  -d '{"query": "yumurta", "channel": "kapida"}'
Yanıt (kısaltılmış)
{
  "ok": true,
  "data": {
    "results": [
      {
        "position": 1,
        "product_id": "11002432",
        "channel": "kapida",
        "title": "Yumurta M Boy 30'lu",
        "brand": null,
        "price": 127.5,
        "price_before_discount": 169,
        "discount_percent": 25,
        "currency": "TRY",
        "in_stock": true,
        "store_code": "VS032",
        "campaigns": [
          { "code": "Z130", "label": "Aylık Fırsat Ürünü", "starts_on": "2026-10-22", "ends_on": "2026-10-25" }
        ],
        "basket_offer": null,
        "multi_buy": null,
        "category_path": ["Süt Ürünleri, Kahvaltılık", "Yumurta"]
      },
      ...
    ],
    "total_results": 24,
    "fallback_results_dropped": 0,
    "store_code": "VS032"
  },
  "meta": { "record_count": 24, "cache_hit": false, "mode": "live" }
}

A101 sayfalarını kendiniz çekerseniz ne olur

a101.com.tr'nin arama sayfası bir kabuktur: sunucudan gelen HTML'de tek bir ürün ya da fiyat yok, ürünleri tarayıcı ayrı bir arama servisinden sonradan doldurur. Kapıda ürün sayfasındaki fiyat ise yer tutucudur. Ölçtüğümüz bir üründe sayfanın HTML'i 38 TL gösterirken mağazanın gerçek fiyatı 119 TL'ydi, bir başkasında sayfa 0 TL yazıyordu, ürün 599 TL'ydi. HTML'den fiyat okuyan bir script, tek hata vermeden yanlış bir liste üretir.

Sitenin kendisi de Cloudflare arkasında ve istemcinin TLS parmak izine bakıyor: Chrome gibi görünen bir istemciyle denediğimiz 3 aramanın üçü de engellendi, başka bir tarayıcı profiliyle ürün sayfaları 8 denemenin 8'inde açıldı. Arama servisi ise hiçbir şey bulamadığında boş dönmüyor, sayfayı alakasız ürünlerle dolduruyor; anlamsız bir sorguya Kapıda 258 ürün döndü. Bu motor o dolgu satırlarını ayıklar ve kaç tanesini attığını `fallback_results_dropped` ile söyler.

Son tuzak tarihlerde. Kampanya başlangıçları İstanbul saatiyle gece yarısıdır; UTC'ye çevirdiğiniz anda her kampanya bir gün erken başlamış görünür. Bunu biz de ilk tam test turunda yakaladık.

Haftada bir yenilenen Aldın Aldın listesini düzenli izleyecekseniz, asıl iş bu üç noktayı her hafta yeniden doğrulamaktır; ilk script'i yazmak işin kolay kısmı.

Sınırlar ve dürüst notlar

  • A101'in resmi bir API'si değil; A101 ile herhangi bir iş birliğimiz ya da anlaşmamız bulunmuyor.
  • Kapıda fiyatları sitenin varsayılan mağazasına (VS032) göredir. Adrese ya da mağazaya göre fiyat sorgulanamaz; ölçtüğümüz 60 üründe mağazalar arasında fiyat farkı görmedik, ama bu her ürün için garanti değil.
  • Puan ve müşteri yorumu yok: A101 ikisini de anonim ziyaretçiye yayımlamıyor. Kapıda'da stok adedi de yok, yalnızca stokta olup olmadığı geliyor.
  • Kapıda aramasında sıralama çalışmıyor; `relevance` dışındaki bir değer INVALID_PARAM döner. Sıralama yalnız Ekstra'da.
  • Marka alanı boş bırakılmış ürünlerde (örnekteki 30'lu yumurta gibi) `brand` null gelir: A101'in verisinde bu yumurtanın markası "B O Ş" diye yazılı, biz bunu marka diye yayımlamıyoruz.
  • Birim fiyat (TL/kg, TL/L) çok az üründe var ve geldiğinde sitenin kendi rakamıdır, yeniden hesaplanmaz. Mağazada satılıp online mağazada listelenmeyen ürünler aramada da kampanya listelerinde de çıkmaz.