Kepçe REST API, https://kepce.org/api/v1 taban adresi üzerinden hizmet verir.
API uç noktaları herkese açıktır.
- Anonim Erişim: IP başına saniyede en fazla 10, dakikada en fazla 240 istek yapılabilir.
- Geliştirici Erişimi (
X-API-Key): Bot veya uygulama geliştirenler/gelistiricisayfasından aldıkları anahtarıX-API-Keybaşlığı olarak göndererek yüksek kota ile çalışabilir ve kullanım istatistiklerini panelden takip edebilir.
Menü ve şehir listeleme yanıtları Cache-Control ve ETag başlıkları içerir:
Cache-Control: public, max-age=300, s-maxage=3600, stale-while-revalidate=86400ETag: "<sha256-hash>"
İstemciler If-None-Match: "<etag>" başlığı gönderdiğinde veri değişmemişse gövdesiz 304 Not Modified yanıtı döner.
Standart HTTP durum kodları kullanılır:
400 Bad Request: Geçersiz parametre veya istek gövdesi.401 Unauthorized: Yetkilendirme token'ı veya API anahtarı eksik / geçersiz.403 Forbidden: E-posta onayı yapılmamış hesap.404 Not Found: İstenen kayıt bulunamadı.429 Too Many Requests: Hız sınırı aşıldı.Retry-Afterbaşlığında belirtilen saniye kadar beklenmelidir.
GET /api/v1/menus?city=:city_slug&date=today- Parametreler:
city(string, opsiyonel): Şehir kısa adı (istanbul,ankaravb.)date(string, opsiyonel): Tarih sorgusu (todayveyaYYYY-MM-DD, örn:2026-05-15)dietary_type(string, opsiyonel): Diyet filtresi (normal,colyak)year(int, opsiyonel): Arşiv yılı (2026)month(int, opsiyonel): Arşiv ayı (1-12)
GET /api/v1/menus/:menu_idGET /api/v1/menus/archive/years?city=:city_slugGET /api/v1/cities- Aktif menüsü bulunan şehirleri (
id,name,slug,has_celiac) listeler.
GET /api/v1/statistics/overview- Toplam menü sayısı, şehir kapsamı ve genel oylama metrikleri.
Oy verme ve yorum yapma işlemleri için Authorization: Bearer <JWT_TOKEN> başlığı veya oturum çerezi gereklidir.
POST /api/v1/menus/:menu_id/vote
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
{
"sentiment": "positive"
}sentiment:"positive"(beğendim) veya"negative"(beğenmedim).
POST /api/v1/comments
Authorization: Bearer <JWT_TOKEN>
Content-Type: application/json
{
"menu_id": 1050,
"content": "Yemek yorum metni."
}GET /api/v1/comments?menu_id=:menu_id&page=1&limit=20