Seviyorum API ve MCP
Deneyimlerinizi okuyun ve yanıtlayın, üyelerin sorularını yanıtlayın, ürün vitrininizi ve kuponlarınızı yönetin, istatistiklerinizi alın. Yapay zekâ asistanınız Seviyorum’u MCP ile doğrudan kullansın; olaylar webhook ile anında sisteminize gelsin.
52 şirket ve üye işlemi, anahtarsız herkese açık marka verisi. JSON, Türkçe hata mesajları.
Claude, ChatGPT, Cursor ve VS Code’daki asistanlar Seviyorum girişiyle bağlanıp araçlarımızı kullanır.
Yeni deneyim, üye sorusu, asistan talebi: imzalı, yeniden denenen bildirimler.
Hızlı başlangıç
- 1. Anahtar oluşturun. Şirket paneli › API ve MCP (Business ve Kurumsal planlar). “Okuma” ya da “Okuma ve yazma” yetkisini seçin; anahtar yalnızca bir kez gösterilir. Henüz şirket profiliniz yoksa Kurumsal sayfasından başlayın.
- 2. İlk isteği gönderin.Şirketiniz ve kotalarınız
curl "https://seviyorum.com/api/company/v1/company" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" - 3. Asistanınızı bağlayın.claude.ai ve Claude Desktop
Ayarlar › Bağlayıcılar › Özel bağlayıcı ekle URL: https://seviyorum.com/mcp/hesap “Bağlan”a basın, Seviyorum'a giriş yapıp kişisel hesabınızı ya da şirketinizi seçin (OAuth; anahtar gerekmez).Sonra asistanınıza “Yanıtsız deneyimlerimize taslak yanıt hazırla, göndermeden önce bana göster” demeniz yeterli.
- Anahtarsız deneyin: herkese açık marka verisi herkes için açık.Marka ara
curl "https://seviyorum.com/api/company/v1/brands?q=kahve"
Kimlik doğrulama
Her şirket isteğinde Authorization: Bearer sv_live_… başlığını gönderin (ya da X-API-Key). Taban adres: https://seviyorum.com/api/company/v1.
- Okuma yetkili anahtar hiçbir şeyi değiştiremez; Okuma ve yazma yetkili anahtar yanıt yazar, ürün ve kupon yönetir, profili günceller.
- Anahtar, onu oluşturan ekip üyesi adına çalışır; işlemler denetim kaydına onun adıyla düşer. Kişi ekipten ayrılır ya da sahip/yönetici rolünü kaybederse anahtar durur.
- Anahtarı yalnızca sunucunuzda saklayın; tarayıcıya ya da mobil uygulamaya koymayın. Sızdıysa panelden hemen iptal edin.
- Biz anahtarın kendisini değil, yalnızca özetini (SHA-256) saklarız.
- Uygulamanız kullanıcılar adına bağlanacaksa anahtar yerine OAuth kullanın: tokenlar (
sv_at_…) aynı başlıkla gönderilir.
Yanıtlar, hatalar, sınırlar
Başarılı yanıtlar {"data": …}, hatalar {"error": "Türkçe açıklama", "field"?: "alan"} döner; error metnini kullanıcınıza olduğu gibi gösterebilirsiniz.
| 400 | Eksik ya da geçersiz alan (field hangisi olduğunu söyler) |
| 401 | Anahtar yok, geçersiz ya da iptal edilmiş |
| 403 | Plan ya da anahtar yetkisi yetmiyor |
| 404 | Kayıt ya da uç nokta yok |
| 422 | Bir kurala takıldı: kota, üyenin izni, moderasyon… |
| 429 | Hız sınırı: anahtar başına dakikada 120, anahtarsız uçlarda IP başına 60 |
Listeler page ve per (en fazla 50) alır, total ve pages döner; deneyim ve konuşma listeleri since (ISO 8601) ile artımlı eşitlenir. Zamanlar ISO 8601 (UTC).
Yanıtlarda X-RateLimit-Limit ve X-RateLimit-Remaining başlıkları vardır. POST isteklerine Idempotency-Key ekleyin: ağ hatasında güvenle tekrar deneyebilirsiniz; aynı anahtar ve gövdeyle 24 saat içinde gelen istek yeniden işlenmez, ilk yanıt döner.
Kod örnekleri
// Node.js 18+ — yanıtsız deneyimleri al, ilkine yanıt yaz
const BASE = "https://seviyorum.com/api/company/v1";
const headers = { Authorization: `Bearer ${process.env.SEVIYORUM_API_KEY}`, "Content-Type": "application/json" };
const res = await fetch(`${BASE}/company/reviews?filter=unreplied&per=5`, { headers });
const { data, error } = await res.json();
if (!res.ok) throw new Error(error);
const first = data.items[0];
if (first) {
await fetch(`${BASE}/company/reviews/${first.id}/reply`, {
method: "PUT", headers,
body: JSON.stringify({ body: "Güzel sözleriniz için teşekkür ederiz!" }),
});
}# Python 3 — son 24 saatin deneyimlerini eşitle
import os, datetime, requests
BASE = "https://seviyorum.com/api/company/v1"
H = {"Authorization": f"Bearer {os.environ['SEVIYORUM_API_KEY']}"}
since = (datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=1)).isoformat()
page = 1
while True:
r = requests.get(f"{BASE}/company/reviews", headers=H, params={"since": since, "page": page, "per": 50})
r.raise_for_status()
data = r.json()["data"]
for review in data["items"]:
print(review["rating"], review["title"])
if page >= data["pages"]:
break
page += 1İlkeler
- Seviyorum Skoru, sıralamalar, rozetler ve hangi deneyimlerin göründüğü satın alınamaz; API de bunları değiştiremez.
- Deneyim yazılamaz, düzenlenemez, silinemez; markalar yalnızca herkese açık yanıt yazar.
- Üyelere yeni mesaj, toplu kampanya, anlık bildirim, hediye ve arama başlatmak API'de yoktur: üyelerin izniyle çalışan bu araçlar panelde, bir insanın onayıyla kalır. API, üyenin başlattığı konuşmaları ve soruları yanıtlar.
- Üyelerin e-posta adresi ve telefonu hiçbir uçta yoktur.
- Kişisel hesapla (OAuth) bağlanan uygulamalar üye adına deneyim yazamaz; soru sorma, mesaj ve takip gibi işlemleri yalnızca üyenin onayıyla yapar.
- Hediye ve fırsatlar deneyim yazmaya ya da puana bağlanamaz.
- Yapay zekâ ile yazılan yanıtlar da markanın kendi yanıtıdır: göndermeden önce bir kişi okumalıdır.
Markalar (herkese açık)
/brandsMarka ara
Seviyorum'daki markaları adına göre arar. Sonuçlar sıralamadakiler ve Seviyorum Skoru yüksek olanlar önde gelecek şekilde sıralanır. Bir markanın ayrıntısı için get_brand'i slug ile çağırın.
search_brands| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| q* | query | string | Aranan marka adı (en az 2 harf). |
| limit | query | integer | En fazla kaç sonuç (1–20). Varsayılan: 8. |
curl "https://seviyorum.com/api/company/v1/brands?q=kahve"/brands/{slug}Marka profili
Bir markanın herkese açık profili: Seviyorum Skoru (0–100), sıralaması, kalp ortalaması ve dağılımı, deneyim ve seven sayısı, yanıt oranı, rozetleri, canlı fırsatları, ürün vitrini ve markaya soru sorulabilip sorulamadığı. Skor satın alınamaz; ücretli planlar skoru, sıralamayı ve rozetleri etkilemez.
get_brand| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| slug* | path | string | Markanın adresi: seviyorum.com/<slug>. |
curl "https://seviyorum.com/api/company/v1/brands/ornek-marka"/brands/{slug}/reviewsMarkanın deneyimleri
Bir markaya üyelerin yazdığı yayındaki deneyimler (1–5 kalp, başlık, metin, sevilen yönler, markanın yanıtı). Deneyimler üyelerin kişisel görüşleridir; alıntılarken bunu belirtin ve deneyim uydurmayın.
list_brand_reviews| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| slug* | path | string | Markanın adresi: seviyorum.com/<slug>. |
| page | query | integer | Sayfa (1'den başlar). Varsayılan: 1. |
| per | query | integer | Sayfa başına kayıt (en fazla 50). Varsayılan: 10. |
| rating | query | integer | Yalnızca bu kalp sayısı (1–5). |
| sort | query | yeni | faydali | yuksek | dusuk | Sıralama: yeni, faydali, yuksek, dusuk. Varsayılan: "yeni". |
curl "https://seviyorum.com/api/company/v1/brands/ornek-marka/reviews?sort=yeni"/rankingsEn sevilen markalar
Seviyorum Skoru'na göre en sevilen markalar; isterseniz bir kategoride. Sıralamaya yalnızca yeterli deneyime ulaşmış markalar girer (eşik get_scoring'de).
top_brands| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| category | query | string | Kategori slug'ı (list_categories). |
| limit | query | integer | Kaç marka (1–50). Varsayılan: 10. |
curl "https://seviyorum.com/api/company/v1/rankings?category=kafe-restoran&limit=10"/categoriesKategoriler
Seviyorum'daki marka kategorileri ve her birindeki marka sayısı.
list_categoriescurl "https://seviyorum.com/api/company/v1/categories"/offersCanlı fırsatlar
Markaların Fırsatlar'da yayınladığı canlı kuponlar. Kodlar burada görünmez: üyeler Seviyorum'a giriş yapıp tek dokunuşla alır (seviyorum.com/firsatlar). Fırsatlar hiçbir zaman deneyim yazmaya bağlı değildir.
list_offers| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| category | query | string | Kategori slug'ı. |
| brand | query | string | Yalnızca bu markanın fırsatları. |
curl "https://seviyorum.com/api/company/v1/offers?category=kafe-restoran"/scoringSeviyorum Skoru nasıl hesaplanır?
Seviyorum Skoru'nun formülü, sıralama eşiği ve değiştirilemeyen kurallar. Bir markanın skorunu yorumlarken bunu kullanın.
get_scoringcurl "https://seviyorum.com/api/company/v1/scoring"Şirket
/companyŞirketiniz, planınız ve kotalarınız
Anahtarın bağlı olduğu şirket: profil bilgileri, plan, açık özellikler, bu ayki kotalar (mesaj, anlık bildirim, arama dakikası, asistan yanıtı, AI tasarım, ürün) ve yanıt bekleyen işler (yanıtsız deneyim, okunmamış öneri ve mesaj, yeni asistan talebi).
get_companycurl "https://seviyorum.com/api/company/v1/company" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/statsİstatistikler
Seviyorum Skoru ve sıralama, kalp dağılımı, alt puanlar (kalite, ilgi, hız, fiyat/değer), en çok sevilen yönler, yanıt oranı ve süresi, kategori ortalamaları ve günlük seri (profil görüntülenme, yeni seven, yeni deneyim).
get_stats| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| days | query | integer | Günlük serinin kaç gün geriye gideceği (7–90). Varsayılan: 30. |
curl "https://seviyorum.com/api/company/v1/company/stats?days=30" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/badgesRozetleriniz
Şirketinizin kazandığı rozetler. Rozetler yalnızca deneyimlere, sevenlere, doğrulamaya ve ödüllere bakar; satın alınamaz.
list_badgescurl "https://seviyorum.com/api/company/v1/company/badges" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/companyProfili güncelle
Şirket profilini günceller; göndermediğiniz alanlar olduğu gibi kalır. Marka rengi kurumsal planlarda geçerlidir. Ad, kategori ve doğrulama Seviyorum ekibindedir.
update_company_profile| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| tagline | body | string | null | Kısa tanıtım (120). |
| description | body | string | null | Hakkında (2000). |
| website | body | string | null | Web sitesi (https). |
| support_email | body | string | null | Destek e-postası. |
| support_phone | body | string | null | Destek telefonu. |
| city | body | string | null | Şehir. |
| founded_year | body | integer | null | Kuruluş yılı. |
| socials | body | object | Sosyal hesaplar: {instagram, x, facebook, linkedin, youtube, tiktok} adresleri. |
| brand_color | body | string | null | Marka rengi (#RRGGBB). |
curl -X PATCH "https://seviyorum.com/api/company/v1/company" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tagline":"Mahallenin kahvecisi","support_email":"[email protected]"}'/company/teamEkibiniz
Şirket ekibiniz: görünen ad, rol (owner, admin, agent) ve unvan. E-posta adresleri yer almaz; ekibe davet panelden yapılır ve kişinin onayını bekler.
list_teamcurl "https://seviyorum.com/api/company/v1/company/team" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/inviteDeneyim davet bağlantınız
Müşterilerinizi deneyim paylaşmaya davet ettiğiniz kısa bağlantı (seviyorum.com/d/…). Bu bağlantıyla yazılan deneyimler “Davetle paylaşıldı” etiketi taşır. Davet için hediye ya da indirim vaat etmeyin.
get_invite_linkcurl "https://seviyorum.com/api/company/v1/company/invite" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"Deneyimler
/company/reviewsDeneyimleriniz
Şirketinize yazılan yayındaki deneyimler, yeniden eskiye; yanıtınız ve (planınızda varsa) üyenin yalnızca size yazdığı gizli öneri ile. Yanıtsızları bulmak için filter=unreplied.
list_reviews| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| filter | query | all | unreplied | replied | all, unreplied (yanıtsız) ya da replied. Varsayılan: "all". |
| rating | query | integer | Yalnızca bu kalp sayısı. |
| since | query | string | Yalnızca bu zamandan sonrakiler (ISO 8601) — artımlı eşitleme için. |
| page | query | integer | Sayfa (1'den başlar). Varsayılan: 1. |
| per | query | integer | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. |
curl "https://seviyorum.com/api/company/v1/company/reviews?filter=unreplied" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/reviews/{id}Bir deneyim
Şirketinize yazılmış tek bir deneyim, yanıtınız ve varsa gizli öneri ile.
get_review| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | deneyim kimliği (UUID). |
curl "https://seviyorum.com/api/company/v1/company/reviews/3f1c…" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/suggestionsGizli öneriler
Üyelerin deneyimle birlikte yalnızca size yazdığı öneriler (herkese açık görünmez, skoru etkilemez).
list_suggestions| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| unread | query | boolean | true: yalnızca okunmamışlar. |
| page | query | integer | Sayfa (1'den başlar). Varsayılan: 1. |
| per | query | integer | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. |
curl "https://seviyorum.com/api/company/v1/company/suggestions?unread=true" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/reviews/{id}/replyDeneyime yanıt yaz
Bir deneyime şirket adına herkese açık yanıt yazar ya da mevcut yanıtı günceller. Yanıt marka sayfasında deneyimin altında görünür ve ilk yanıtta üyeye bildirim gider. Teşekkür edin, somut olun; üyeden deneyimini değiştirmesini istemeyin ve hediye/indirim karşılığı teklif etmeyin. Yanıtlar moderasyondan geçer.
reply_to_review| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | deneyim kimliği (UUID). |
| body* | body | string | Yanıt metni (2–2000 karakter, Türkçe). |
curl -X PUT "https://seviyorum.com/api/company/v1/company/reviews/3f1c…/reply" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"body":"Güzel sözleriniz için çok teşekkür ederiz! Ekibimize ilettik; yine bekleriz."}'/company/reviews/{id}/replyYanıtı kaldır
Şirketinizin bir deneyime yazdığı yanıtı kaldırır. Deneyim olduğu gibi kalır.
delete_review_replyGeri alınamaz| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | deneyim kimliği (UUID). |
curl -X DELETE "https://seviyorum.com/api/company/v1/company/reviews/3f1c…/reply" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/suggestions/{review_id}/readÖneriyi okundu işaretle
Bir gizli öneriyi okundu (ya da read=false ile okunmadı) olarak işaretler.
mark_suggestion_read| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| review_id* | path | string (uuid) | deneyim kimliği (UUID). |
| read | body | boolean | true: okundu, false: okunmadı. Varsayılan: true. |
curl -X POST "https://seviyorum.com/api/company/v1/company/suggestions/3f1c…/read" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"read":true}'/company/reviews/{id}/reportDeneyimi moderasyona bildir
Kurallara aykırı olduğunu düşündüğünüz bir deneyimi Seviyorum moderasyonuna bildirir (sahte, hakaret, kişisel veri, çıkar çatışması …). Deneyimi siz kaldıramazsınız; ekibimiz inceler. Olumsuz ama dürüst bir deneyim bildirim nedeni değildir.
report_review| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | deneyim kimliği (UUID). |
| reason* | body | spam | fake | offensive | personal_data | conflict | off_topic | other | spam: Spam veya reklam, fake: Gerçek bir deneyim değil, offensive: Hakaret veya nefret söylemi, personal_data: Kişisel veri içeriyor, conflict: Çıkar çatışması (çalışan / rakip), off_topic: Konu dışı, other: Diğer |
| note | body | string | null | Ek açıklama. |
curl -X POST "https://seviyorum.com/api/company/v1/company/reviews/<id>/report" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Mesajlar ve sorular
/company/conversationsKonuşmalar
Üyelerle yazışmalarınız; asked=true olanlar üyenin size sorduğu sorulardır (yanıtlarınız aylık mesaj hakkından düşmez). Üyenin e-posta ve telefonu hiçbir zaman paylaşılmaz.
list_conversations| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| unread | query | boolean | true: yalnızca okunmamışlar. |
| asked | query | boolean | true: yalnızca üyelerin soruları. |
| since | query | string | Yalnızca bu zamandan sonrakiler (ISO 8601) — artımlı eşitleme için. |
curl "https://seviyorum.com/api/company/v1/company/conversations?asked=true&unread=true" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/conversations/{id}Bir konuşma
Bir konuşmanın tüm mesajları (eskiden yeniye). Okundu olarak işaretlemez.
get_conversation| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | konuşma kimliği (UUID). |
curl "https://seviyorum.com/api/company/v1/company/conversations/9a2b…" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/conversations/{id}/messagesKonuşmada yanıt yaz
Mevcut bir konuşmaya şirketiniz adına yazar (üyenin sorusuna yanıt ya da süren yazışma). Üye engellediyse ya da artık mesaj almak istemiyorsa gönderilmez. Üyenin sorusuna verilen yanıtlar aylık mesaj hakkından düşmez; diğerleri düşer. Yeni konuşma başlatmak API'de yoktur (panelde, üyenin izniyle).
send_message| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | konuşma kimliği (UUID). |
| body* | body | string | Mesaj (1–4000 karakter). |
curl -X POST "https://seviyorum.com/api/company/v1/company/conversations/9a2b…/messages" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"body":"Merhaba, evet glütensiz seçeneklerimiz her gün var. Hafta sonu sizi bekliyoruz!"}'/company/callsUygulama içi aramalarınız
Üyelerle uygulama içi sesli/görüntülü görüşmeleriniz: konu, süre, durum ve üyenin özel değerlendirmesi (skoru etkilemez). Arama başlatmak panelden yapılır.
list_calls| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| page | query | integer | Sayfa (1'den başlar). Varsayılan: 1. |
| per | query | integer | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. |
curl "https://seviyorum.com/api/company/v1/company/calls" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"Ürün vitrini
/company/productsÜrünleriniz
Ürün vitrininiz (sırasıyla), her ürünün mağaza bağlantıları ve son 30 günün mağaza tıklamaları.
list_productscurl "https://seviyorum.com/api/company/v1/company/products" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/productsÜrün ekle
Ürün vitrininize bir ürün ekler (Pro 12, Business 60, Kurumsal 300 ürün). Düğmeler ziyaretçiyi verdiğiniz satış sayfalarına götürür; tıklamalar sayılır.
create_product| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| name* | body | string | Ürün adı (2–80 karakter). |
| description | body | string | null | Kısa açıklama (en fazla 300 karakter). |
| image_url | body | string | null | Ürün görseli: https adresi. Görsel indirilir, WebP'ye çevrilir ve Seviyorum'da saklanır. |
| links* | body | string[] | 1–6 satış sayfası (kendi siteniz, Trendyol, Hepsiburada, Amazon …). Mağaza adı adresten anlaşılır. |
curl -X POST "https://seviyorum.com/api/company/v1/company/products" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Filtre Kahve 250 g","description":"Taze kavrulmuş, orta gövdeli.","image_url":"https://ornek.com/img/filtre-kahve.jpg","links":["https://ornek.com/filtre-kahve","https://www.trendyol.com/ornek/filtre-kahve-p-123"]}'/company/products/{id}Ürünü güncelle
Bir ürünün adını, açıklamasını, görselini ya da satış bağlantılarını değiştirir; göndermediğiniz alanlar olduğu gibi kalır.
update_product| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | ürün kimliği (UUID). |
| name | body | string | Ürün adı (2–80 karakter). |
| description | body | string | null | Kısa açıklama (en fazla 300 karakter). |
| image_url | body | string | null | Ürün görseli: https adresi. Görsel indirilir, WebP'ye çevrilir ve Seviyorum'da saklanır. |
| links | body | string[] | 1–6 satış sayfası (kendi siteniz, Trendyol, Hepsiburada, Amazon …). Mağaza adı adresten anlaşılır. |
curl -X PATCH "https://seviyorum.com/api/company/v1/company/products/5d7e…" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"links":["https://ornek.com/filtre-kahve"]}'/company/products/{id}/activeÜrünü göster / gizle
Bir ürünü vitrinde gösterir (active=true) ya da silmeden gizler (active=false).
set_product_active| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | ürün kimliği (UUID). |
| active* | body | boolean | true: göster, false: gizle. |
curl -X POST "https://seviyorum.com/api/company/v1/company/products/5d7e…/active" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"active":false}'/company/products/{id}Ürünü sil
Bir ürünü vitrinden kalıcı olarak siler.
delete_productGeri alınamaz| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | ürün kimliği (UUID). |
curl -X DELETE "https://seviyorum.com/api/company/v1/company/products/5d7e…" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/products/{id}/moveÜrünün sırasını değiştir
Bir ürünü vitrinde bir sıra yukarı (up) ya da aşağı (down) taşır.
move_product| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | ürün kimliği (UUID). |
| direction* | body | up | down | up ya da down. |
curl -X POST "https://seviyorum.com/api/company/v1/company/products/<id>/move" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Hediye ve fırsatlar
/company/offersKuponlarınız
Hediye kuponlarınız ve Fırsatlar'da yayınladıklarınız; her birinde gönderilen, alınan, görülen, kodu açılan ve kullanılan sayıları.
list_company_offerscurl "https://seviyorum.com/api/company/v1/company/offers" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/offersKupon oluştur
Bir hediye kuponu oluşturur; is_public=true ile Fırsatlar'da ve marka sayfanızda yayınlanır (ilk yayında, teklif almayı kabul eden sevenlerinize bildirim gider). Kuponu deneyim yazmaya ya da puana bağlamayın. Üyelere tek tek ya da toplu gönderim panelden yapılır.
create_offer| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| title* | body | string | Başlık (ör. “Üyelere özel %15 indirim”). |
| description | body | string | null | Kısa açıklama. |
| kind* | body | percent | amount | free_shipping | gift | other | percent (yüzde), amount (TL), free_shipping, gift, other. |
| value | body | number | percent için 1–100, amount için TL. |
| min_spend | body | number | En az alışveriş tutarı (TL). |
| code_mode* | body | single | unique | none | single: herkese aynı kod, unique: her üyeye ayrı kod (codes), none: kodsuz. |
| code | body | string | null | single için kod. |
| codes | body | string | null | unique için kodlar: her satıra bir kod (en fazla 20.000). |
| url | body | string | null | Kuponun kullanılacağı sayfa (https). |
| terms | body | string | null | Koşullar. |
| expires_on | body | string | null | Son gün (YYYY-AA-GG). |
| is_public | body | boolean | true: Fırsatlar'da yayınla. |
| claim_limit | body | integer | null | Fırsatlar'da en fazla kaç üye alabilir. |
curl -X POST "https://seviyorum.com/api/company/v1/company/offers" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Üyelere özel %15 indirim","kind":"percent","value":15,"code_mode":"single","code":"SEVIYORUM15","url":"https://ornek.com","expires_on":"2026-12-31","is_public":true}'/company/offers/{id}Kuponu yönet
Kuponun durumunu değiştirir (active, paused, ended) ve/veya Fırsatlar'da yayından kaldırır ya da yayınlar (public).
update_offer| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | kupon kimliği (UUID). |
| status | body | active | paused | ended | active, paused ya da ended. |
| public | body | boolean | true: Fırsatlar'da yayınla, false: kaldır. |
| claim_limit | body | integer | null | Fırsatlar'da üye sınırı. |
curl -X PATCH "https://seviyorum.com/api/company/v1/company/offers/c41a…" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"paused"}'/company/pushAnlık bildirimleriniz
Gönderdiğiniz ve planladığınız anlık bildirimler (başlık, metin, kitle, ulaşan kişi, durum). Yeni bildirim panelden gönderilir.
list_push_campaignscurl "https://seviyorum.com/api/company/v1/company/push" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/campaignsToplu mesaj kampanyalarınız
Sevenlerinize ve deneyim paylaşanlara gönderdiğiniz toplu mesaj kampanyaları ve ulaşan kişi sayıları. Yeni kampanya panelden gönderilir.
list_campaignscurl "https://seviyorum.com/api/company/v1/company/campaigns" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/giftsGönderdiğiniz ve alınan hediyeler
Son gönderilen ya da Fırsatlar'dan alınan hediyeler: kupon, üyenin görünen adı, görülme, kodun açılması ve kullanım durumu.
list_sent_gifts| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| limit | query | integer | Kaç kayıt (1–100). Varsayılan: 30. |
curl "https://seviyorum.com/api/company/v1/company/gifts" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"Yapay zekâ asistanı
/company/assistant/requestsAsistanın size ilettikleri
Marka asistanının yanıtlayamayıp ziyaretçinin açık izniyle size ilettiği sorular ve sohbet dökümü. İletişim bilgisi yalnızca ziyaretçinin seçtiği kanal için ve onun izniyle vardır.
list_assistant_requests| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| status | query | open | done | open (yeni ve açık) ya da done. Varsayılan: "open". |
| page | query | integer | Sayfa (1'den başlar). Varsayılan: 1. |
| per | query | integer | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. |
curl "https://seviyorum.com/api/company/v1/company/assistant/requests?status=open" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/assistant/requests/{id}Asistan talebini güncelle
Asistanın ilettiği bir talebi açık (open) ya da tamamlandı (done) yapar; isterseniz ekip içi not ekler.
update_assistant_request| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | talep kimliği (UUID). |
| status* | body | open | done | open ya da done. |
| note | body | string | null | Ekip içi not (üye görmez). |
curl -X PATCH "https://seviyorum.com/api/company/v1/company/assistant/requests/e8f0…" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status":"done","note":"Telefonla arandı, sorun çözüldü."}'/company/assistant/requests/{id}/answerTalebi Seviyorum mesajıyla yanıtla
Ziyaretçi yanıtın Seviyorum mesajıyla gelmesini istediyse, talebi bir konuşma açarak yanıtlar ve tamamlandı yapar.
answer_assistant_request| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | talep kimliği (UUID). |
| body* | body | string | Yanıt metni. |
curl -X POST "https://seviyorum.com/api/company/v1/company/assistant/requests/e8f0…/answer" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"body":"Merhaba, sorunuz için teşekkürler; kargonuz yarın teslim edilecek."}'/company/assistantAsistan ayarları
Marka asistanınızın adı, karşılaması, üslubu ve bildiği bilgiler (hakkımızda, saatler ve iletişim, politikalar, soru-yanıtlar, değinmemesi gerekenler) ve bu ayki kullanım.
get_assistantcurl "https://seviyorum.com/api/company/v1/company/assistant" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/assistant/chatsAsistan sohbetleri
Ziyaretçilerin marka asistanıyla yaptığı sohbetler (anonim). handoff=true yalnızca size iletilenler. Sık sorulanları görüp asistanın bilgilerini güncellemek için kullanın.
list_assistant_chats| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| handoff | query | boolean | true: yalnızca size iletilenler. |
| page | query | integer | Sayfa (1'den başlar). Varsayılan: 1. |
| per | query | integer | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. |
curl "https://seviyorum.com/api/company/v1/company/assistant/chats" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/assistantAsistanı güncelle
Marka asistanının bilgilerini günceller; göndermediğiniz alanlar olduğu gibi kalır. Asistan yalnızca bu bilgiler ve herkese açık profilinizden yanıt verir; fiyat, stok ve kampanya gibi sık değişen bilgileri yazmayın. faq gönderirseniz listenin tamamının yerine geçer.
update_assistant| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| enabled | body | boolean | Yayında mı. |
| name | body | string | Asistanın adı. |
| greeting | body | string | Karşılama cümlesi. |
| tone | body | samimi | resmi | samimi (sen) ya da resmi (siz). |
| about | body | string | Hakkımızda, ürün ve hizmetler. |
| hours | body | string | Çalışma saatleri, şubeler, iletişim kanalları. |
| policies | body | string | Teslimat, iade, garanti, ödeme. |
| faq | body | object[] | Soru-yanıtlar (en fazla 30). |
| avoid | body | string | Asistanın değinmemesi gerekenler. |
curl -X PATCH "https://seviyorum.com/api/company/v1/company/assistant" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Webhook
/company/webhookWebhook ayarı
Kayıtlı webhook adresiniz, seçili olaylar, durum ve son teslim. İmza anahtarı burada dönmez (yalnızca ilk kayıtta ve panelde).
get_webhookcurl "https://seviyorum.com/api/company/v1/company/webhook" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/webhook/deliveriesWebhook teslimleri
Son webhook teslimleri: olay, durum (pending, sent, failed), deneme sayısı, son HTTP kodu ve hata.
list_webhook_deliveries| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| limit | query | integer | Kaç kayıt (1–100). Varsayılan: 30. |
curl "https://seviyorum.com/api/company/v1/company/webhook/deliveries" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/webhookWebhook kaydet
Webhook adresinizi (https), olayları ve durumunu kaydeder. İlk kayıtta imza anahtarı (whsec_…) yanıtta bir kez döner; saklayın.
update_webhook| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| url* | body | string | https adresi. |
| events* | body | string[] | Olaylar: review.published, question.created, message.received, assistant.request, badge.earned, plan.changed. |
| enabled | body | boolean | Etkin mi. Varsayılan: true. |
curl -X PUT "https://seviyorum.com/api/company/v1/company/webhook" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'/company/webhookWebhook'u kaldır
Webhook adresini siler; bekleyen teslimler iptal edilir.
delete_webhookGeri alınamazcurl -X DELETE "https://seviyorum.com/api/company/v1/company/webhook" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/company/webhook/deliveries/{id}/redeliverTeslimi yeniden gönder
Başarısız (ya da istediğiniz) bir webhook teslimini hemen yeniden kuyruğa alır.
redeliver_webhook| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | teslim kimliği (UUID). |
curl -X POST "https://seviyorum.com/api/company/v1/company/webhook/deliveries/<id>/redeliver" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Üye hesabı (OAuth)
/meHesabım
Bağlanan üyenin profili: görünen ad, kullanıcı adı, şehir, seviye ve puanı, deneyim ve sevdiği marka sayısı, fırsat izni, okunmamış bildirim ve mesajlar. E-posta adresi yer almaz.
get_my_accountcurl "https://seviyorum.com/api/company/v1/me" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/reviewsDeneyimlerim
Üyenin yazdığı deneyimler (yayında, incelemede ya da gizli), markanın yanıtı ve moderasyon notu. Deneyim yazmak ve düzenlemek yalnızca Seviyorum sitesinde ve uygulamasında, üyenin kendi kaleminden olur.
list_my_reviewscurl "https://seviyorum.com/api/company/v1/me/reviews" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/lovesSevdiğim markalar
Üyenin “Seviyorum” ile takip ettiği markalar.
list_my_loved_brandscurl "https://seviyorum.com/api/company/v1/me/loves" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/loves/{slug}Markayı takip et / bırak
Bir markayı “Seviyorum” ile takip eder (loved=true) ya da bırakır (loved=false). Bu, markanın seven sayısına ve Seviyorum Skoru'na katkı verir; yalnızca üyenin gerçekten istediği markalar için kullanın.
set_love| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| slug* | path | string | Markanın adresi: seviyorum.com/<slug>. |
| loved* | body | boolean | true: takip et, false: bırak. |
curl -X PUT "https://seviyorum.com/api/company/v1/me/loves/<slug>" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'/me/giftsHediyelerim
Markaların gönderdiği ve Fırsatlar'dan alınan hediyeler. Kod, üye açmadan görünmez (reveal_gift).
list_my_giftscurl "https://seviyorum.com/api/company/v1/me/gifts" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/gifts/{id}/revealHediye kodunu aç
Bir hediyenin kodunu açar (marka kodun açıldığını görür).
reveal_gift| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | hediye kimliği (UUID). |
curl -X POST "https://seviyorum.com/api/company/v1/me/gifts/<id>/reveal" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'/me/offers/{id}/claimFırsatı al
Fırsatlar'daki bir kuponu üyenin Hediyelerim cüzdanına alır ve kodu döner (list_offers ile bulunur).
claim_offer| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | fırsat kimliği (UUID). |
curl -X POST "https://seviyorum.com/api/company/v1/me/offers/<id>/claim" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'/me/notificationsBildirimlerim
Üyenin son bildirimleri (yanıtlar, rozetler, mesajlar, hediyeler). Okundu olarak işaretlemez.
list_my_notifications| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| limit | query | integer | Kaç bildirim (1–100). Varsayılan: 30. |
curl "https://seviyorum.com/api/company/v1/me/notifications" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/conversationsMesajlarım
Üyenin markalarla konuşmaları (sorduğu sorular ve markaların yazdıkları).
list_my_conversationscurl "https://seviyorum.com/api/company/v1/me/conversations" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/conversations/{id}Bir konuşmam
Bir konuşmanın mesajları (eskiden yeniye). Okundu olarak işaretlemez.
get_my_conversation| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | konuşma kimliği (UUID). |
curl "https://seviyorum.com/api/company/v1/me/conversations/<id>" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY"/me/conversations/{id}/messagesMarkaya yanıt yaz
Üyenin bir markayla süren konuşmasına yazar. Göndermeden önce metni üyeye gösterip onay alın.
reply_in_my_conversation| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| id* | path | string (uuid) | konuşma kimliği (UUID). |
| body* | body | string | Mesaj (1–4000 karakter). |
curl -X POST "https://seviyorum.com/api/company/v1/me/conversations/<id>/messages" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'/me/questionsMarkaya soru sor
Üyenin sevdiği ya da deneyim yazdığı bir markanın ekibine soru sorar (marka soru yanıtlıyorsa: get_brand → takes_questions). Yanıt üyenin Mesajlar'ına gelir. Göndermeden önce metni üyeye gösterip onay alın.
ask_brand| Alan | Yer | Tür | Açıklama |
|---|---|---|---|
| slug* | body | string | Markanın adresi: seviyorum.com/<slug>. |
| body* | body | string | Soru (5–2000 karakter). İlk satır konunun başlığı olur. |
curl -X POST "https://seviyorum.com/api/company/v1/me/questions" \
-H "Authorization: Bearer $SEVIYORUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'MCP: yapay zekâ asistanları
Model Context Protocol sunucumuzun iki adresi var (Streamable HTTP, durumsuz). Araçlar yukarıdaki API işlemleriyle birebir aynıdır.
https://seviyorum.com/mcp/hesap— hesabınızla: claude.ai, ChatGPT ve Claude Desktop “Bağlan” deyince Seviyorum girişine yönlendirir (OAuth); kişisel hesabınızı ya da yönettiğiniz şirketi seçersiniz. Anahtar gerekmez.https://seviyorum.com/mcp— anahtarsız: herkese açık 7 araç (marka arama, profil, deneyimler, sıralama, fırsatlar, skor kuralları);Authorization: Bearer sv_live_…ile şirket araçları da gelir.
https://seviyorum.com/mcpAyarlar › Bağlayıcılar › Özel bağlayıcı ekle
URL: https://seviyorum.com/mcp/hesap
“Bağlan”a basın, Seviyorum'a giriş yapıp kişisel hesabınızı ya da şirketinizi seçin (OAuth; anahtar gerekmez).yanitsiz_deneyimlere_taslak— yanıtsız deneyimlere kısa, içten yanıt taslakları; yalnızca onayladıklarınızı gönderir.haftalik_ozet— skor, yeni deneyimler, sevilen yönler ve bekleyen işlerle yönetici özeti.marka_karsilastir— markaları herkese açık veriyle karşılaştırır (anahtarsız).
Asistanlar herkese açık bir yanıt yazmadan önce taslağı size göstermek üzere yönlendirilir; yine de son okumayı bir kişinin yapması gerekir.
OAuth 2.1
Kendi uygulamanızı ya da asistanınızı Seviyorum kullanıcılarının hesabına bağlamak için. MCP istemcileri bunların hepsini kendiliğinden yapar; elle uygulamanız gerekmez.
| Korunan kaynak (RFC 9728) | https://seviyorum.com/.well-known/oauth-protected-resource/mcp/hesap |
| Yetkilendirme sunucusu (RFC 8414) | https://seviyorum.com/.well-known/oauth-authorization-server |
| İstemci kaydı (RFC 7591) | POST https://seviyorum.com/oauth/register |
| Yetkilendirme | https://seviyorum.com/oauth/authorize — response_type=code, PKCE S256 zorunlu |
| Token | POST https://seviyorum.com/oauth/token — authorization_code, refresh_token |
| İptal (RFC 7009) | POST https://seviyorum.com/oauth/revoke |
- Kullanıcı Seviyorum’a giriş yapar ve paylaşacağını seçer: kişisel hesabı (
member) ya da yönettiği bir şirket (company:read/company:write, Business ve Kurumsal). - Erişim tokenı (
sv_at_…) 1 saat geçerlidir; yenileme tokenı 30 gün ve her kullanımda yenilenir. Eski bir yenileme tokenı tekrar kullanılırsa bağlantı güvenlik için kapanır. - Şirket tokenları REST API’de API anahtarı gibi kullanılabilir; kişisel hesap tokenları “Üye hesabı” işlemlerini açar.
- Kişisel hesapla bağlanan uygulama deneyim yazamaz: deneyimler üyenin kendi kaleminden, sitede ya da uygulamada yazılır.
- Bağlantılar Hesabım › Ayarlar › Bağlı uygulamalar’dan ve şirket panelinden tek tıkla kesilir.
Webhook’lar
Şirket paneli › API ve MCP › Webhook’ta bir https adresi ve olaylar seçin. Her olay JSON olarak POST edilir. 2xx dışındaki yanıtlarda 1 dk, 5 dk, 30 dk, 2 sa ve 6 sa sonra yeniden denenir; art arda 50 başarısız teslimde adres kapatılır. Aynı olay birden fazla gelebilir: Seviyorum-Delivery ile tekrarları ayıklayın.
| Olay | Ne zaman |
|---|---|
| review.published | Şirketinize yazılan bir deneyim yayına girdi. |
| question.created | Sizi seven bir üye marka sayfanızdan soru sordu. |
| message.received | Bir üye süren bir konuşmada size yazdı. |
| assistant.request | Marka asistanı yanıtlayamadığı bir soruyu ziyaretçinin izniyle iletti. |
| badge.earned | Şirketiniz bir rozet kazandı. |
| plan.changed | Planınız etkinleşti ya da sona erdi. |
| ping | Paneldeki “Test gönder”. |
Başlıklar: Seviyorum-Event, Seviyorum-Delivery ve Seviyorum-Signature: t=<unix>,v1=<hex>. v1, imza anahtarınızla <t>.<ham gövde> metninin HMAC-SHA256 özetidir. 5 dakikadan eski imzaları reddedin.
{
"id": "b5e1c0de-…",
"event": "review.published",
"created_at": "2026-11-04T09:12:44.512Z",
"company": {
"id": "a8a4…",
"slug": "ornek-marka",
"name": "Örnek Marka"
},
"data": {
"review_id": "3f1c…",
"title": "Ornek Marka için yeni bir deneyim",
"summary": "Harika bir hafta sonu kahvaltısı",
"url": "https://seviyorum.com/panel/ornek-marka/deneyimler#d-3f1c…"
}
}import crypto from "node:crypto";
// Express örneği: gövdeyi ham haliyle alın (express.raw({ type: "application/json" })).
export function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300; // 5 dakika
return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ""));
}import hmac, hashlib, time
def verify(raw_body: bytes, header: str, secret: str) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
expected = hmac.new(secret.encode(), f"{parts['t']}.".encode() + raw_body, hashlib.sha256).hexdigest()
return abs(time.time() - int(parts["t"])) < 300 and hmac.compare_digest(expected, parts.get("v1", ""))