Geliştiriciler

API Dokümantasyonu

Harici sistemlerden kafe eklemek ve yayındaki kafeleri listelemek için JSON API.

Kimlik doğrulama

POST /api/cafes için API anahtarı zorunludur (app/config.php → api_key). Anahtar bu sayfada gösterilmez.

X-Api-Key: YOUR_API_KEY

Alternatif:

Authorization: Bearer YOUR_API_KEY

Geçersiz anahtar: 401 {"error":"Yetkisiz."}

Uç noktalar

MethodPathAçıklama
POST /api/cafes Yeni kafe oluşturur (published)
GET /api/cafes Yayındaki kafeleri listeler / filtreler (açık)
GET /api/districts İlçeler (?city_id=) — geriye dönük

Base URL: https://caferehberi.com

POST /api/cafes

Headers

Content-Type: application/json
Accept: application/json
X-Api-Key: YOUR_API_KEY

application/x-www-form-urlencoded de kabul edilir.

Zorunlu alanlar

AlanTipNot
namestringKafe adı (max 180)
emailstringİletişim e-postası; kullanıcı yoksa oluşturulur, contact_email olarak saklanır
citystringİl metin (max 120)
districtstringİlçe metin (max 120)

Opsiyonel alanlar

submitter_name, neighborhood, address, phone, working_hours, description, maps_url, menu_url, instagram, lat, lng, seo_title, seo_description, özellik alanları (wifi, laptop_friendly, …) veya features nesnesi.

Şehir/ilçe adı eşleşirse city_id / district_id da doldurulur; eşleşme şart değildir.

Örnek (cURL)

curl -X POST "https://caferehberi.com/api/cafes" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -d '{
    "name": "Sahil Kahve",
    "email": "[email protected]",
    "submitter_name": "Ayşe Yılmaz",
    "city": "İstanbul",
    "district": "Kadıköy",
    "neighborhood": "Moda",
    "wifi": "yes",
    "laptop_friendly": "yes",
    "description": "Deniz manzaralı çalışma kafesi."
  }'

Başarı — 201

{
  "ok": true,
  "id": 42,
  "slug": "sahil-kahve-moda",
  "status": "published",
  "contact_email": "[email protected]",
  "city": "İstanbul",
  "district": "Kadıköy",
  "url": "https://caferehberi.com/kafe/sahil-kahve-moda"
}

Hata kodları

KodAnlam
401API anahtarı geçersiz
422Doğrulama hatası (errors)
429Rate limit
500Sunucu / kayıt hatası
503api_key yapılandırılmamış

GET /api/cafes

Herkese açık. Filtreler metin kabul eder. Liste yanıtında contact_email dönmez.

QueryAçıklama
qİsim araması
cityŞehir metni
districtİlçe metni
pageSayfa
wifi, laptop_friendly, …Özellik filtreleri
curl "https://caferehberi.com/api/cafes?city=İstanbul&district=Kadıköy&wifi=yes"

Notlar

  • Fotoğraf yükleme bu endpoint’te yoktur; hesap/admin panelinden eklenir.
  • Yeni kullanıcı rastgele şifre ile oluşur (yalnızca sahiplik bağlama).
  • Rate limit: yaklaşık 60 oluşturma / saat / IP.
  • Üretimde api_key değerini uzun ve rastgele tutun.