# Seviyorum API ve MCP Şirketler için REST API, yapay zekâ asistanları için MCP sunucusu ve webhook'lar. Herkese açık marka verisi anahtarsız; şirket işlemleri Business ve Kurumsal planlarda, panelde oluşturulan API anahtarıyla (Panel › API ve MCP). - Taban adres: https://seviyorum.com/api/company/v1 - MCP: https://seviyorum.com/mcp (Streamable HTTP, durumsuz) - OpenAPI 3.1: https://seviyorum.com/api/company/v1/openapi.json - İnsanlar için rehber: https://seviyorum.com/api ## Kimlik doğrulama `Authorization: Bearer sv_live_…` (ya da `X-API-Key`). Anahtar yalnızca oluşturulduğunda bir kez gösterilir; biz yalnızca özetini (SHA-256) saklarız. Yetkiler: **Okuma** ya da **Okuma ve yazma**. Anahtar, onu oluşturan ekip üyesi adına çalışır: kişi ekipten ayrılır, sahip/yönetici rolünü kaybeder ya da plan API'siz bir plana düşerse anahtar durur. ## Yanıtlar ve hatalar Başarı: `200 {"data": …}`. Hata: `{"error": "", "field"?: ""}` — 400 geçersiz alan, 401 anahtar yok/geçersiz, 403 plan ya da yetki, 404 bulunamadı, 405 yöntem, 422 kural (kota, izin, moderasyon), 429 hız sınırı, 500 beklenmeyen hata. Sayfalı listeler `page`, `per` alır ve `total`, `pages` döner. Zamanlar ISO 8601 (UTC). ## Hız sınırları ve tekrar koruması Anahtar ya da bağlantı başına dakikada 120 istek; anahtarsız (herkese açık) uçlar ve MCP araçları IP başına dakikada 60. Yanıtlarda `X-RateLimit-Limit` ve `X-RateLimit-Remaining` başlıkları vardır; 429'da biraz bekleyin. POST isteklerine `Idempotency-Key: ` ekleyin: aynı anahtar ve gövdeyle 24 saat içinde tekrar gelen istek yeniden işlenmez, ilk yanıt döner (`Idempotent-Replayed: true`). ## OAuth 2.1 (yapay zekâ asistanları ve uygulamalar) Başlık gönderemeyen bağlayıcılar (claude.ai, ChatGPT, Claude Desktop) için: MCP adresi https://seviyorum.com/mcp/hesap. Kimliksiz istek 401 ve `WWW-Authenticate: Bearer resource_metadata="…"` döner; istemci şunları kendisi bulur: - Korunan kaynak metadatası (RFC 9728): https://seviyorum.com/.well-known/oauth-protected-resource/mcp/hesap - Yetkilendirme sunucusu metadatası (RFC 8414): https://seviyorum.com/.well-known/oauth-authorization-server - Dinamik istemci kaydı (RFC 7591): POST https://seviyorum.com/oauth/register - Yetkilendirme: https://seviyorum.com/oauth/authorize (yalnızca `response_type=code`, PKCE `S256` zorunlu) - Token: POST https://seviyorum.com/oauth/token (`authorization_code`, `refresh_token`); erişim tokenı 1 saat, yenileme tokenı 30 gün ve her kullanımda yenilenir (eski bir yenileme tokenı tekrar kullanılırsa bağlantı kapanır) - İptal (RFC 7009): POST https://seviyorum.com/oauth/revoke Kullanıcı Seviyorum'a giriş yapıp ne paylaşacağını seçer: **kişisel hesabı** (`member`) ya da yönettiği bir **şirket** (`company:read` / `company:write`, Business ve Kurumsal). Şirket tokenları REST API'de de anahtar gibi geçerlidir. Bağlantılar Hesabım › Ayarlar › Bağlı uygulamalar'dan ve şirket panelinden kesilir. ## İ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) ### Marka ara `GET /api/company/v1/brands` · MCP aracı: `search_brands` · Yetki: Herkese açık (anahtarsız) 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `q` | query | string | evet | Aranan marka adı (en az 2 harf). | | `limit` | query | integer | hayır | En fazla kaç sonuç (1–20). Varsayılan: 8. | ```bash curl "https://seviyorum.com/api/company/v1/brands?q=kahve" ``` ### Marka profili `GET /api/company/v1/brands/{slug}` · MCP aracı: `get_brand` · Yetki: Herkese açık (anahtarsız) 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `slug` | path | string | evet | Markanın adresi: seviyorum.com/. | ```bash curl "https://seviyorum.com/api/company/v1/brands/ornek-marka" ``` ### Markanın deneyimleri `GET /api/company/v1/brands/{slug}/reviews` · MCP aracı: `list_brand_reviews` · Yetki: Herkese açık (anahtarsız) 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `slug` | path | string | evet | Markanın adresi: seviyorum.com/. | | `page` | query | integer | hayır | Sayfa (1'den başlar). Varsayılan: 1. | | `per` | query | integer | hayır | Sayfa başına kayıt (en fazla 50). Varsayılan: 10. | | `rating` | query | integer | hayır | Yalnızca bu kalp sayısı (1–5). | | `sort` | query | yeni \| faydali \| yuksek \| dusuk | hayır | Sıralama: yeni, faydali, yuksek, dusuk. Varsayılan: "yeni". | ```bash curl "https://seviyorum.com/api/company/v1/brands/ornek-marka/reviews?sort=yeni" ``` ### En sevilen markalar `GET /api/company/v1/rankings` · MCP aracı: `top_brands` · Yetki: Herkese açık (anahtarsız) 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). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `category` | query | string | hayır | Kategori slug'ı (list_categories). | | `limit` | query | integer | hayır | Kaç marka (1–50). Varsayılan: 10. | ```bash curl "https://seviyorum.com/api/company/v1/rankings?category=kafe-restoran&limit=10" ``` ### Kategoriler `GET /api/company/v1/categories` · MCP aracı: `list_categories` · Yetki: Herkese açık (anahtarsız) Seviyorum'daki marka kategorileri ve her birindeki marka sayısı. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/categories" ``` ### Canlı fırsatlar `GET /api/company/v1/offers` · MCP aracı: `list_offers` · Yetki: Herkese açık (anahtarsız) 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `category` | query | string | hayır | Kategori slug'ı. | | `brand` | query | string | hayır | Yalnızca bu markanın fırsatları. | ```bash curl "https://seviyorum.com/api/company/v1/offers?category=kafe-restoran" ``` ### Seviyorum Skoru nasıl hesaplanır? `GET /api/company/v1/scoring` · MCP aracı: `get_scoring` · Yetki: Herkese açık (anahtarsız) Seviyorum Skoru'nun formülü, sıralama eşiği ve değiştirilemeyen kurallar. Bir markanın skorunu yorumlarken bunu kullanın. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/scoring" ``` ## Şirket ### Şirketiniz, planınız ve kotalarınız `GET /api/company/v1/company` · MCP aracı: `get_company` · Yetki: Şirket · okuma 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). Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### İstatistikler `GET /api/company/v1/company/stats` · MCP aracı: `get_stats` · Yetki: Şirket · okuma 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). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `days` | query | integer | hayır | Günlük serinin kaç gün geriye gideceği (7–90). Varsayılan: 30. | ```bash curl "https://seviyorum.com/api/company/v1/company/stats?days=30" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Rozetleriniz `GET /api/company/v1/company/badges` · MCP aracı: `list_badges` · Yetki: Şirket · okuma Şirketinizin kazandığı rozetler. Rozetler yalnızca deneyimlere, sevenlere, doğrulamaya ve ödüllere bakar; satın alınamaz. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/badges" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Profili güncelle `PATCH /api/company/v1/company` · MCP aracı: `update_company_profile` · Yetki: Şirket · okuma ve yazma Ş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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `tagline` | body | string \| null | hayır | Kısa tanıtım (120). | | `description` | body | string \| null | hayır | Hakkında (2000). | | `website` | body | string \| null | hayır | Web sitesi (https). | | `support_email` | body | string \| null | hayır | Destek e-postası. | | `support_phone` | body | string \| null | hayır | Destek telefonu. | | `city` | body | string \| null | hayır | Şehir. | | `founded_year` | body | integer \| null | hayır | Kuruluş yılı. | | `socials` | body | object | hayır | Sosyal hesaplar: {instagram, x, facebook, linkedin, youtube, tiktok} adresleri. | | `brand_color` | body | string \| null | hayır | Marka rengi (#RRGGBB). | ```bash 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":"destek@ornek.com"}' ``` ### Ekibiniz `GET /api/company/v1/company/team` · MCP aracı: `list_team` · Yetki: Şirket · okuma Ş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. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/team" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Deneyim davet bağlantınız `GET /api/company/v1/company/invite` · MCP aracı: `get_invite_link` · Yetki: Şirket · okuma 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. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/invite" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ## Deneyimler ### Deneyimleriniz `GET /api/company/v1/company/reviews` · MCP aracı: `list_reviews` · Yetki: Şirket · okuma Ş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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `filter` | query | all \| unreplied \| replied | hayır | all, unreplied (yanıtsız) ya da replied. Varsayılan: "all". | | `rating` | query | integer | hayır | Yalnızca bu kalp sayısı. | | `since` | query | string | hayır | Yalnızca bu zamandan sonrakiler (ISO 8601) — artımlı eşitleme için. | | `page` | query | integer | hayır | Sayfa (1'den başlar). Varsayılan: 1. | | `per` | query | integer | hayır | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. | ```bash curl "https://seviyorum.com/api/company/v1/company/reviews?filter=unreplied" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Bir deneyim `GET /api/company/v1/company/reviews/{id}` · MCP aracı: `get_review` · Yetki: Şirket · okuma Şirketinize yazılmış tek bir deneyim, yanıtınız ve varsa gizli öneri ile. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | deneyim kimliği (UUID). | ```bash curl "https://seviyorum.com/api/company/v1/company/reviews/3f1c…" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Gizli öneriler `GET /api/company/v1/company/suggestions` · MCP aracı: `list_suggestions` · Yetki: Şirket · okuma · Plan: Pro+ Üyelerin deneyimle birlikte yalnızca size yazdığı öneriler (herkese açık görünmez, skoru etkilemez). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `unread` | query | boolean | hayır | true: yalnızca okunmamışlar. | | `page` | query | integer | hayır | Sayfa (1'den başlar). Varsayılan: 1. | | `per` | query | integer | hayır | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. | ```bash curl "https://seviyorum.com/api/company/v1/company/suggestions?unread=true" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Deneyime yanıt yaz `PUT /api/company/v1/company/reviews/{id}/reply` · MCP aracı: `reply_to_review` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | deneyim kimliği (UUID). | | `body` | body | string | evet | Yanıt metni (2–2000 karakter, Türkçe). | ```bash 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."}' ``` ### Yanıtı kaldır `DELETE /api/company/v1/company/reviews/{id}/reply` · MCP aracı: `delete_review_reply` · Yetki: Şirket · okuma ve yazma Şirketinizin bir deneyime yazdığı yanıtı kaldırır. Deneyim olduğu gibi kalır. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | deneyim kimliği (UUID). | ```bash curl -X DELETE "https://seviyorum.com/api/company/v1/company/reviews/3f1c…/reply" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Öneriyi okundu işaretle `POST /api/company/v1/company/suggestions/{review_id}/read` · MCP aracı: `mark_suggestion_read` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ Bir gizli öneriyi okundu (ya da read=false ile okunmadı) olarak işaretler. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `review_id` | path | string (uuid) | evet | deneyim kimliği (UUID). | | `read` | body | boolean | hayır | true: okundu, false: okunmadı. Varsayılan: true. | ```bash 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}' ``` ### Deneyimi moderasyona bildir `POST /api/company/v1/company/reviews/{id}/report` · MCP aracı: `report_review` · Yetki: Şirket · okuma ve yazma 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | deneyim kimliği (UUID). | | `reason` | body | spam \| fake \| offensive \| personal_data \| conflict \| off_topic \| other | evet | 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 | hayır | Ek açıklama. | ```bash curl -X POST "https://seviyorum.com/api/company/v1/company/reviews//report" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Mesajlar ve sorular ### Konuşmalar `GET /api/company/v1/company/conversations` · MCP aracı: `list_conversations` · Yetki: Şirket · okuma Ü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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `unread` | query | boolean | hayır | true: yalnızca okunmamışlar. | | `asked` | query | boolean | hayır | true: yalnızca üyelerin soruları. | | `since` | query | string | hayır | Yalnızca bu zamandan sonrakiler (ISO 8601) — artımlı eşitleme için. | ```bash curl "https://seviyorum.com/api/company/v1/company/conversations?asked=true&unread=true" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Bir konuşma `GET /api/company/v1/company/conversations/{id}` · MCP aracı: `get_conversation` · Yetki: Şirket · okuma Bir konuşmanın tüm mesajları (eskiden yeniye). Okundu olarak işaretlemez. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | konuşma kimliği (UUID). | ```bash curl "https://seviyorum.com/api/company/v1/company/conversations/9a2b…" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Konuşmada yanıt yaz `POST /api/company/v1/company/conversations/{id}/messages` · MCP aracı: `send_message` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ 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). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | konuşma kimliği (UUID). | | `body` | body | string | evet | Mesaj (1–4000 karakter). | ```bash 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!"}' ``` ### Uygulama içi aramalarınız `GET /api/company/v1/company/calls` · MCP aracı: `list_calls` · Yetki: Şirket · okuma · Plan: Pro+ Ü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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `page` | query | integer | hayır | Sayfa (1'den başlar). Varsayılan: 1. | | `per` | query | integer | hayır | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. | ```bash curl "https://seviyorum.com/api/company/v1/company/calls" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ## Ürün vitrini ### Ürünleriniz `GET /api/company/v1/company/products` · MCP aracı: `list_products` · Yetki: Şirket · okuma · Plan: Pro+ Ü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ı. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/products" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Ürün ekle `POST /api/company/v1/company/products` · MCP aracı: `create_product` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ Ü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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `name` | body | string | evet | Ürün adı (2–80 karakter). | | `description` | body | string \| null | hayır | Kısa açıklama (en fazla 300 karakter). | | `image_url` | body | string \| null | hayır | Ürün görseli: https adresi. Görsel indirilir, WebP'ye çevrilir ve Seviyorum'da saklanır. | | `links` | body | string[] | evet | 1–6 satış sayfası (kendi siteniz, Trendyol, Hepsiburada, Amazon …). Mağaza adı adresten anlaşılır. | ```bash 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"]}' ``` ### Ürünü güncelle `PATCH /api/company/v1/company/products/{id}` · MCP aracı: `update_product` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | ürün kimliği (UUID). | | `name` | body | string | hayır | Ürün adı (2–80 karakter). | | `description` | body | string \| null | hayır | Kısa açıklama (en fazla 300 karakter). | | `image_url` | body | string \| null | hayır | Ürün görseli: https adresi. Görsel indirilir, WebP'ye çevrilir ve Seviyorum'da saklanır. | | `links` | body | string[] | hayır | 1–6 satış sayfası (kendi siteniz, Trendyol, Hepsiburada, Amazon …). Mağaza adı adresten anlaşılır. | ```bash 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"]}' ``` ### Ürünü göster / gizle `POST /api/company/v1/company/products/{id}/active` · MCP aracı: `set_product_active` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ Bir ürünü vitrinde gösterir (active=true) ya da silmeden gizler (active=false). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | ürün kimliği (UUID). | | `active` | body | boolean | evet | true: göster, false: gizle. | ```bash 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}' ``` ### Ürünü sil `DELETE /api/company/v1/company/products/{id}` · MCP aracı: `delete_product` · Yetki: Şirket · okuma ve yazma Bir ürünü vitrinden kalıcı olarak siler. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | ürün kimliği (UUID). | ```bash curl -X DELETE "https://seviyorum.com/api/company/v1/company/products/5d7e…" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Ürünün sırasını değiştir `POST /api/company/v1/company/products/{id}/move` · MCP aracı: `move_product` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ Bir ürünü vitrinde bir sıra yukarı (up) ya da aşağı (down) taşır. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | ürün kimliği (UUID). | | `direction` | body | up \| down | evet | up ya da down. | ```bash curl -X POST "https://seviyorum.com/api/company/v1/company/products//move" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Hediye ve fırsatlar ### Kuponlarınız `GET /api/company/v1/company/offers` · MCP aracı: `list_company_offers` · Yetki: Şirket · okuma · Plan: Pro+ 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ı. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/offers" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Kupon oluştur `POST /api/company/v1/company/offers` · MCP aracı: `create_offer` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `title` | body | string | evet | Başlık (ör. “Üyelere özel %15 indirim”). | | `description` | body | string \| null | hayır | Kısa açıklama. | | `kind` | body | percent \| amount \| free_shipping \| gift \| other | evet | percent (yüzde), amount (TL), free_shipping, gift, other. | | `value` | body | number | hayır | percent için 1–100, amount için TL. | | `min_spend` | body | number | hayır | En az alışveriş tutarı (TL). | | `code_mode` | body | single \| unique \| none | evet | single: herkese aynı kod, unique: her üyeye ayrı kod (codes), none: kodsuz. | | `code` | body | string \| null | hayır | single için kod. | | `codes` | body | string \| null | hayır | unique için kodlar: her satıra bir kod (en fazla 20.000). | | `url` | body | string \| null | hayır | Kuponun kullanılacağı sayfa (https). | | `terms` | body | string \| null | hayır | Koşullar. | | `expires_on` | body | string \| null | hayır | Son gün (YYYY-AA-GG). | | `is_public` | body | boolean | hayır | true: Fırsatlar'da yayınla. | | `claim_limit` | body | integer \| null | hayır | Fırsatlar'da en fazla kaç üye alabilir. | ```bash 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}' ``` ### Kuponu yönet `PATCH /api/company/v1/company/offers/{id}` · MCP aracı: `update_offer` · Yetki: Şirket · okuma ve yazma · Plan: Pro+ Kuponun durumunu değiştirir (active, paused, ended) ve/veya Fırsatlar'da yayından kaldırır ya da yayınlar (public). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | kupon kimliği (UUID). | | `status` | body | active \| paused \| ended | hayır | active, paused ya da ended. | | `public` | body | boolean | hayır | true: Fırsatlar'da yayınla, false: kaldır. | | `claim_limit` | body | integer \| null | hayır | Fırsatlar'da üye sınırı. | ```bash 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"}' ``` ### Anlık bildirimleriniz `GET /api/company/v1/company/push` · MCP aracı: `list_push_campaigns` · Yetki: Şirket · okuma · Plan: Pro+ 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. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/push" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Toplu mesaj kampanyalarınız `GET /api/company/v1/company/campaigns` · MCP aracı: `list_campaigns` · Yetki: Şirket · okuma · Plan: Business+ Sevenlerinize ve deneyim paylaşanlara gönderdiğiniz toplu mesaj kampanyaları ve ulaşan kişi sayıları. Yeni kampanya panelden gönderilir. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/campaigns" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Gönderdiğiniz ve alınan hediyeler `GET /api/company/v1/company/gifts` · MCP aracı: `list_sent_gifts` · Yetki: Şirket · okuma · Plan: Pro+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `limit` | query | integer | hayır | Kaç kayıt (1–100). Varsayılan: 30. | ```bash curl "https://seviyorum.com/api/company/v1/company/gifts" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ## Yapay zekâ asistanı ### Asistanın size ilettikleri `GET /api/company/v1/company/assistant/requests` · MCP aracı: `list_assistant_requests` · Yetki: Şirket · okuma · Plan: Business+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `status` | query | open \| done | hayır | open (yeni ve açık) ya da done. Varsayılan: "open". | | `page` | query | integer | hayır | Sayfa (1'den başlar). Varsayılan: 1. | | `per` | query | integer | hayır | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. | ```bash curl "https://seviyorum.com/api/company/v1/company/assistant/requests?status=open" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Asistan talebini güncelle `PATCH /api/company/v1/company/assistant/requests/{id}` · MCP aracı: `update_assistant_request` · Yetki: Şirket · okuma ve yazma · Plan: Business+ Asistanın ilettiği bir talebi açık (open) ya da tamamlandı (done) yapar; isterseniz ekip içi not ekler. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | talep kimliği (UUID). | | `status` | body | open \| done | evet | open ya da done. | | `note` | body | string \| null | hayır | Ekip içi not (üye görmez). | ```bash 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ü."}' ``` ### Talebi Seviyorum mesajıyla yanıtla `POST /api/company/v1/company/assistant/requests/{id}/answer` · MCP aracı: `answer_assistant_request` · Yetki: Şirket · okuma ve yazma · Plan: Business+ Ziyaretçi yanıtın Seviyorum mesajıyla gelmesini istediyse, talebi bir konuşma açarak yanıtlar ve tamamlandı yapar. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | talep kimliği (UUID). | | `body` | body | string | evet | Yanıt metni. | ```bash 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."}' ``` ### Asistan ayarları `GET /api/company/v1/company/assistant` · MCP aracı: `get_assistant` · Yetki: Şirket · okuma · Plan: Business+ 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. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/assistant" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Asistan sohbetleri `GET /api/company/v1/company/assistant/chats` · MCP aracı: `list_assistant_chats` · Yetki: Şirket · okuma · Plan: Business+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `handoff` | query | boolean | hayır | true: yalnızca size iletilenler. | | `page` | query | integer | hayır | Sayfa (1'den başlar). Varsayılan: 1. | | `per` | query | integer | hayır | Sayfa başına kayıt (en fazla 50). Varsayılan: 20. | ```bash curl "https://seviyorum.com/api/company/v1/company/assistant/chats" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Asistanı güncelle `PATCH /api/company/v1/company/assistant` · MCP aracı: `update_assistant` · Yetki: Şirket · okuma ve yazma · Plan: Business+ 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `enabled` | body | boolean | hayır | Yayında mı. | | `name` | body | string | hayır | Asistanın adı. | | `greeting` | body | string | hayır | Karşılama cümlesi. | | `tone` | body | samimi \| resmi | hayır | samimi (sen) ya da resmi (siz). | | `about` | body | string | hayır | Hakkımızda, ürün ve hizmetler. | | `hours` | body | string | hayır | Çalışma saatleri, şubeler, iletişim kanalları. | | `policies` | body | string | hayır | Teslimat, iade, garanti, ödeme. | | `faq` | body | object[] | hayır | Soru-yanıtlar (en fazla 30). | | `avoid` | body | string | hayır | Asistanın değinmemesi gerekenler. | ```bash curl -X PATCH "https://seviyorum.com/api/company/v1/company/assistant" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Webhook ### Webhook ayarı `GET /api/company/v1/company/webhook` · MCP aracı: `get_webhook` · Yetki: Şirket · okuma · Plan: Business+ Kayıtlı webhook adresiniz, seçili olaylar, durum ve son teslim. İmza anahtarı burada dönmez (yalnızca ilk kayıtta ve panelde). Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/company/webhook" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Webhook teslimleri `GET /api/company/v1/company/webhook/deliveries` · MCP aracı: `list_webhook_deliveries` · Yetki: Şirket · okuma · Plan: Business+ Son webhook teslimleri: olay, durum (pending, sent, failed), deneme sayısı, son HTTP kodu ve hata. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `limit` | query | integer | hayır | Kaç kayıt (1–100). Varsayılan: 30. | ```bash curl "https://seviyorum.com/api/company/v1/company/webhook/deliveries" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Webhook kaydet `PUT /api/company/v1/company/webhook` · MCP aracı: `update_webhook` · Yetki: Şirket · okuma ve yazma · Plan: Business+ Webhook adresinizi (https), olayları ve durumunu kaydeder. İlk kayıtta imza anahtarı (whsec_…) yanıtta bir kez döner; saklayın. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `url` | body | string | evet | https adresi. | | `events` | body | string[] | evet | Olaylar: review.published, question.created, message.received, assistant.request, badge.earned, plan.changed. | | `enabled` | body | boolean | hayır | Etkin mi. Varsayılan: true. | ```bash curl -X PUT "https://seviyorum.com/api/company/v1/company/webhook" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ### Webhook'u kaldır `DELETE /api/company/v1/company/webhook` · MCP aracı: `delete_webhook` · Yetki: Şirket · okuma ve yazma · Plan: Business+ Webhook adresini siler; bekleyen teslimler iptal edilir. Parametre yok. ```bash curl -X DELETE "https://seviyorum.com/api/company/v1/company/webhook" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Teslimi yeniden gönder `POST /api/company/v1/company/webhook/deliveries/{id}/redeliver` · MCP aracı: `redeliver_webhook` · Yetki: Şirket · okuma ve yazma · Plan: Business+ Başarısız (ya da istediğiniz) bir webhook teslimini hemen yeniden kuyruğa alır. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | teslim kimliği (UUID). | ```bash curl -X POST "https://seviyorum.com/api/company/v1/company/webhook/deliveries//redeliver" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## Üye hesabı (OAuth) ### Hesabım `GET /api/company/v1/me` · MCP aracı: `get_my_account` · Yetki: Üye hesabı (OAuth) 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. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/me" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Deneyimlerim `GET /api/company/v1/me/reviews` · MCP aracı: `list_my_reviews` · Yetki: Üye hesabı (OAuth) Ü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. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/me/reviews" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Sevdiğim markalar `GET /api/company/v1/me/loves` · MCP aracı: `list_my_loved_brands` · Yetki: Üye hesabı (OAuth) Üyenin “Seviyorum” ile takip ettiği markalar. Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/me/loves" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Markayı takip et / bırak `PUT /api/company/v1/me/loves/{slug}` · MCP aracı: `set_love` · Yetki: Üye hesabı (OAuth) 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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `slug` | path | string | evet | Markanın adresi: seviyorum.com/. | | `loved` | body | boolean | evet | true: takip et, false: bırak. | ```bash curl -X PUT "https://seviyorum.com/api/company/v1/me/loves/" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ### Hediyelerim `GET /api/company/v1/me/gifts` · MCP aracı: `list_my_gifts` · Yetki: Üye hesabı (OAuth) Markaların gönderdiği ve Fırsatlar'dan alınan hediyeler. Kod, üye açmadan görünmez (reveal_gift). Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/me/gifts" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Hediye kodunu aç `POST /api/company/v1/me/gifts/{id}/reveal` · MCP aracı: `reveal_gift` · Yetki: Üye hesabı (OAuth) Bir hediyenin kodunu açar (marka kodun açıldığını görür). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | hediye kimliği (UUID). | ```bash curl -X POST "https://seviyorum.com/api/company/v1/me/gifts//reveal" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ### Fırsatı al `POST /api/company/v1/me/offers/{id}/claim` · MCP aracı: `claim_offer` · Yetki: Üye hesabı (OAuth) Fırsatlar'daki bir kuponu üyenin Hediyelerim cüzdanına alır ve kodu döner (list_offers ile bulunur). | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | fırsat kimliği (UUID). | ```bash curl -X POST "https://seviyorum.com/api/company/v1/me/offers//claim" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ### Bildirimlerim `GET /api/company/v1/me/notifications` · MCP aracı: `list_my_notifications` · Yetki: Üye hesabı (OAuth) Üyenin son bildirimleri (yanıtlar, rozetler, mesajlar, hediyeler). Okundu olarak işaretlemez. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `limit` | query | integer | hayır | Kaç bildirim (1–100). Varsayılan: 30. | ```bash curl "https://seviyorum.com/api/company/v1/me/notifications" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Mesajlarım `GET /api/company/v1/me/conversations` · MCP aracı: `list_my_conversations` · Yetki: Üye hesabı (OAuth) Üyenin markalarla konuşmaları (sorduğu sorular ve markaların yazdıkları). Parametre yok. ```bash curl "https://seviyorum.com/api/company/v1/me/conversations" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Bir konuşmam `GET /api/company/v1/me/conversations/{id}` · MCP aracı: `get_my_conversation` · Yetki: Üye hesabı (OAuth) Bir konuşmanın mesajları (eskiden yeniye). Okundu olarak işaretlemez. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | konuşma kimliği (UUID). | ```bash curl "https://seviyorum.com/api/company/v1/me/conversations/" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" ``` ### Markaya yanıt yaz `POST /api/company/v1/me/conversations/{id}/messages` · MCP aracı: `reply_in_my_conversation` · Yetki: Üye hesabı (OAuth) Üyenin bir markayla süren konuşmasına yazar. Göndermeden önce metni üyeye gösterip onay alın. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `id` | path | string (uuid) | evet | konuşma kimliği (UUID). | | `body` | body | string | evet | Mesaj (1–4000 karakter). | ```bash curl -X POST "https://seviyorum.com/api/company/v1/me/conversations//messages" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ### Markaya soru sor `POST /api/company/v1/me/questions` · MCP aracı: `ask_brand` · Yetki: Üye hesabı (OAuth) Ü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. | Alan | Yer | Tür | Zorunlu | Açıklama | |---|---|---|---|---| | `slug` | body | string | evet | Markanın adresi: seviyorum.com/. | | `body` | body | string | evet | Soru (5–2000 karakter). İlk satır konunun başlığı olur. | ```bash curl -X POST "https://seviyorum.com/api/company/v1/me/questions" \ -H "Authorization: Bearer $SEVIYORUM_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' ``` ## MCP Adres: https://seviyorum.com/mcp. Anahtarsız bağlantıda herkese açık araçlar, anahtarla şirket araçları da listelenir (yalnızca okuma yetkili anahtarla yazma araçları görünmez). Araçlar yukarıdaki işlemlerle birebir aynıdır (MCP aracı adı her başlığın altında). İstemler: `yanitsiz_deneyimlere_taslak`, `haftalik_ozet`, `marka_karsilastir`. Kaynak: `seviyorum://docs/api` (bu belge). ### 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). ``` ### ChatGPT ``` Ayarlar › Bağlayıcılar (Geliştirici modu) › Oluştur MCP sunucu adresi: https://seviyorum.com/mcp/hesap Kimlik doğrulama: OAuth — açılan Seviyorum sayfasında izin verin. ``` ### Claude Code ``` # OAuth ile (tarayıcıda giriş): claude mcp add --transport http seviyorum https://seviyorum.com/mcp/hesap # ya da şirket API anahtarıyla: claude mcp add --transport http seviyorum https://seviyorum.com/mcp \ --header "Authorization: Bearer sv_live_…" ``` ### Cursor (~/.cursor/mcp.json) ``` { "mcpServers": { "seviyorum": { "url": "https://seviyorum.com/mcp", "headers": { "Authorization": "Bearer sv_live_…" } } } } ``` ### VS Code (.vscode/mcp.json) ``` { "servers": { "seviyorum": { "type": "http", "url": "https://seviyorum.com/mcp", "headers": { "Authorization": "Bearer ${input:seviyorum-key}" } } }, "inputs": [ { "id": "seviyorum-key", "type": "promptString", "description": "Seviyorum API anahtarı", "password": true } ] } ``` ### Anahtarsız (her asistan) ``` Sunucu adresi: https://seviyorum.com/mcp Kimlik doğrulama: yok — yalnızca herkese açık araçlar (marka arama, profil, deneyimler, sıralama, fırsatlar, skor kuralları). ``` ## Webhook'lar Panel › API ve MCP'de 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. Başlıklar: `Seviyorum-Event`, `Seviyorum-Delivery` (tekil kimlik; tekrarları ayıklamak için), `Seviyorum-Signature: t=,v1=` — `v1` = HMAC-SHA256(gizli anahtar, "."). | 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". | ```json { "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…" } } ``` Doğrulama (Node.js): ```js 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 ?? "")); } ``` Doğrulama (Python): ```python 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", "")) ```