İçeriğe geç

Geliştirici belgeleri · REST API v1

Tek bir yapılandırılmış API ile Eyivo üzerinde geliştirin.

Sayfaları, bileşenleri, blogları, ürünleri, galerileri, videoları, menüleri, medyayı, formları ve site ayarlarını kapsamlarla korunan araçlar ve REST uç noktalarıyla yönetin.

Temel URL

https://app.eyivo.com/api/v1

1. Genel bakış

Eyivo REST API, yapılandırılmış siteleri programatik olarak yönetmenizi sağlar. HTTPS ve JSON kullanır, /api/v1 altında sürümlendirilir ve kontrol paneliyle aynı sahiplik, plan sınırı, doğrulama ve denetim kurallarını uygular.

JSON ve multipart

Accept: application/json. Content-Type: application/json; file: multipart/form-data.

Kullanıcıya ait siteler

Her site işlemi, kimliği doğrulanmış kullanıcının sahip olduğu sitelerle sınırlıdır.

Önce taslak

Taslağı kaydedin, yayın hazırlığını kontrol edin ve kullanıcı değişikliği yayına almak istediğinde ilgili öğeyi ve dili yayınlayın. Diğer taslaklar yayınlanmaz.

Sürümlendirme: sözleşmeyi bozan değişiklikler yeni bir temel sürüm gerektirir. Mevcut JSON nesnelerine yeni alanlar eklenebilir; istemciler tanımadıkları alanları yok saymalıdır.

2. Hızlı başlangıç

  1. 1
    Bir API anahtarı oluşturun.

    Uygulamaya giriş yapın, API anahtarlarını açın, gerekli en dar kapsamları seçin ve ey_ ile başlayan gizli anahtarı gösterildiğinde kopyalayın.

  2. 2
    Sitelerinizi listeleyin.

    Kimlik doğrulamasını onaylayın ve alt uç noktaların kullandığı sayısal site kimliğini alın.

  3. 3
    Yinelenebilir güvenli yazma istekleri gönderin.

    Her POST, PATCH ve DELETE isteğine benzersiz bir Idempotency-Key.

curl --request GET \
  --url https://app.eyivo.com/api/v1/sites \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ey_your_token'

Başarılı bir koleksiyon yanıtı kayıtları data içinde sunar:

{
  "data": [
    {
      "id": 42,
      "platform_subdomain_key": "7kr9mp2x",
      "template_key": "corporate-01",
      "status": "active",
      "native_locale": "en",
      "english_enabled": false,
      "content_version": 1,
      "search_visibility": "platform_noindex"
    }
  ]
}

3. Kimlik doğrulama

Her /api/v1 isteği bir bearer token gerektirir:

Authorization: Bearer <token>

Kişisel API anahtarları

Betikler, sunucu entegrasyonları ve doğrudan hesap otomasyonu için uygundur. Anahtarlar ey_ ile başlar, hashlenmiş olarak saklanır ve yalnızca bir kez gösterilir.

  • Bunları şu adreste oluşturun ve iptal edin: https://app.eyivo.com/tokens.
  • Bir veya daha fazla kapsam seçin.
  • İsterseniz anahtarı sahip olduğunuz tek bir siteyle sınırlandırın.
  • Süresi dolmamış anahtarlar iptal edilene kadar geçerlidir.

OAuth 2.0 + PKCE

Eyivo kullanıcıları adına işlem yapan uygulamalar için uygundur. PKCE ile Authorization Code akışını kullanın; parola veya implicit grant türlerini kullanmayın.

  • Yetkilendirme: https://app.eyivo.com/oauth/authorize
  • Anahtar ve yenileme: https://app.eyivo.com/oauth/token
  • Erişim anahtarlarının süresi 2 saat sonra dolar.
  • Yenileme anahtarlarının süresi 1 yıl sonra dolar.

PKCE yetkilendirme akışı

  1. Yüksek entropili bir code_verifier ve bunun SHA-256 code_challenge değerini oluşturun.
  2. Kullanıcıyı response_type=code, herkese açık client_id, kayıtlı tam redirect_uri, boşlukla ayrılmış istenen scope, state, code_challenge ve code_challenge_method=S256 ile /oauth/authorize adresine yönlendirin.
  3. Yönlendirme sonrası state değerini doğrulayın; ardından dönen yetkilendirme kodunu özgün code_verifier ile /oauth/token adresinde anahtarla değiştirin.
  4. Erişim ve yenileme anahtarlarını güvenle saklayın. Süreleri dolmadan yenileyin ve döndürülen kimlik bilgilerini atomik olarak değiştirin.
Anahtarları asla açığa çıkarmayın: bearer anahtarlarını URL’lere, tarayıcı günlüklerine, kaynak kodu depolarına, ekran görüntülerine veya gizli bilgileri koruyamayan istemci koduna koymayın.

4. Kapsamlar

İstekler aşağıda belirtilen tam kapsamı gerektirir. * içeren kişisel anahtar tüm kapsam kontrollerinden geçer; uygulamalar yine de gerekli en dar kapsamları istemelidir.

KapsamREST yetkisi
sites:readSahip olunan siteleri listeleme ve tek bir siteyi görüntüleme.
sites:writeHesap genelinde yetkili bir token ile site oluşturun.
content:readİçerik, şema, menü, form ve ayarları okuyun.
content:writeİçerik oluşturun, düzenleyin, silin ve açıkça yayınlayın; tanımlı panel eylemlerini çalıştırın.
media:readGET /sites/{site}/media, GET /sites/{site}/media/stock-photos
media:writePOST /sites/{site}/media, DELETE /sites/{site}/media/{media}
domains:readSitenin alan adlarını listeleme.
domains:writeÖzel alan adı isteme, etkinleştirme ve seçme.

REST, mcp:use değil uç noktanın kapsamını gerektirir. Medya uç noktaları media:read veya media:write kullanır.

5. Yinelenebilir güvenli yazma işlemleri

Aynı isteği güvenle tekrarlamak için JSON değişikliklerinde Idempotency-Key gönderin. Multipart medya yüklemeleri ve yükleme bileti oluşturma kapsam dışıdır; yeniden denemeden önce aktarım sonucunu kontrol edin.

Idempotency-Key: site-42-page-create-01J7M6Y8RRF3ZE6WB4Z0Y9XJXC
DurumSonuç
İlk istekİşlem yürütülür; durum kodu ve JSON gövdesi saklanır.
Aynı anahtar, yöntem, yol, sorgu parametreleri ve gövdeİşlem tekrarlanmadan saklanan yanıt yeniden döndürülür.
Aynı anahtar, farklı istek422 — anahtarın farklı bir yükle yeniden kullanılması reddedilir.
İlk istek sürerken aynı anahtar409 — istek zaten işlenmektedir.
Anahtar yokİstek yine işlenir, ancak güvenli yeniden deneme davranışı kullanılamaz.

İstek eşleşmesi HTTP yöntemi, istek yolu ve ham istek gövdesinin tam içeriğini kapsar. Yeniden denerken özgün JSON serileştirmesini kullanın.

6. Yanıtlar ve kaynak yapıları

İçerik işlemleri data zarfı döndürür. MCP, structuredContent ve aynı JSON’un metin kopyasını; REST ise JSON döndürür. Kimlik, yayın hazırlığı ve sayfalama için çıktı şemasını okuyun. Blog, medya ve gönderim listelerinde dönen sayfa bilgilerini izleyin.

Tekil kaynak

{ "data": { "id": 42, "status": "active" } }

Koleksiyon

{ "data": [{ "id": 42 }, { "id": 43 }] }

Koleksiyon yapıları değişebilir. Her uç noktanın sayfalama bilgilerini izleyin; tüm sonuçların düz veya sayfalamasız liste olduğunu varsaymayın.

7. Siteler

GET/sites

Sahip olunan siteleri listeleme · sites:read

POST/sites

Site oluşturma · sites:write

GET/sites/{site}

Sahip olunan bir siteyi görüntüleme · sites:read

Site oluşturma

curl --request POST \
  --url https://app.eyivo.com/api/v1/sites \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ey_your_token' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: site-create-01J7M6Y8' \
  --data '{
    "display_name": "Northstar Studio",
    "template_key": "corporate-01",
    "native_locale": "en"
  }'
AlanKurallar
display_nameZorunlu metin; en fazla 200 karakter.
template_keyZorunlu yerleşik şablon anahtarı. Geçerli değerlerin tam listesi OpenAPI belgesindedir.
native_localeZorunlu desteklenen dil kodu.

Yanıt: site kaynağıyla birlikte 201 Created. Yerleştirme tamamlanana kadar ilk durumda site etkin görünmeyebilir. Site ve plan sınırları için 422 döner.

Site kaynağı alanları: id, platform_subdomain_key, template_key, status, native_locale, english_enabled, content_version, search_visibility, isteğe bağlı runtime ve zaman damgaları.

8. Sayfalar

GET/sites/{site}/pages

Sayfaları listeleme · content:read

POST/sites/{site}/pages

Taslak oluşturma · content:write

GET/sites/{site}/pages/{page}

Sayfayı görüntüleme · content:read

PATCH/sites/{site}/pages/{page}

Taslağı güncelleme · content:write

DELETE/sites/{site}/pages/{page}

Sayfayı silme · content:write

POST/sites/{site}/pages/{page}/publication

content:write · locale

Sayfa oluşturma

{
  "type": "page",
  "sort_order": 300,
  "locale": "en",
  "slug": "our-story",
  "title": "Our story",
  "body": "<p>How the company began.</p>",
  "meta_title": "Our story | Northstar Studio",
  "meta_description": "Learn about Northstar Studio."
}
AlanOluşturma/güncelleme kuralları
typeNormal içerik için page kullanın. Desteklenen türler ve tema bileşen şemaları site yeteneklerinden alınabilir.
sort_orderİsteğe bağlı, boş olabilir; 0–9999 arasında tamsayı. Oluştururken varsayılan değer 0.
localeOluştururken zorunlu. title, slug veya body değiştirilirken güncellemede de zorunlu.
slugOluştururken zorunlu. ASCII harfleri, rakamlar, kısa çizgi ve alt çizgi; en fazla 160 karakter.
titleOluştururken zorunlu metin; en fazla 200 karakter.
bodyBoş olabilir; en fazla 50.000 karakterlik metin.
meta_titleBoş olabilir; en fazla 200 karakterlik metin.
meta_descriptionBoş olabilir; en fazla 500 karakterlik metin.

Oluşturma yanıtı: 201. Güncelleme yanıtı: 200. Silme yanıtı: gövdesiz 204.

Taslağı kaydedin, yayın hazırlığını kontrol edin ve kullanıcı değişikliği yayına almak istediğinde ilgili öğeyi ve dili yayınlayın. Diğer taslaklar yayınlanmaz.

9. Katalog öğeleri

GET/sites/{site}/catalog-items

Öğeleri listeleme · content:read

POST/sites/{site}/catalog-items

Taslak öğe oluşturma · content:write

GET/sites/{site}/catalog-items/{catalogItem}

Öğeyi görüntüleme · content:read

DELETE/sites/{site}/catalog-items/{catalogItem}

Öğeyi silme · content:write

PUT/sites/{site}/catalog-items/{catalogItem}

content:write · locale, slug, title

POST/sites/{site}/catalog-items/{catalogItem}/publication

content:write · locale

Katalog öğesi oluşturma

{
  "sort_order": 100,
  "locale": "en",
  "slug": "strategy-advisory",
  "title": "Strategy advisory",
  "summary": "Focused advice for consequential decisions.",
  "body": "Talk to our senior advisory team."
}
AlanKurallar
sort_orderİsteğe bağlı, boş olabilir; 0–9999 arasında tamsayı. Varsayılan değer 0.
localeZorunlu desteklenen dil kodu.
slugZorunlu ASCII kısa ad; en fazla 160 karakter.
titleZorunlu metin; en fazla 200 karakter.
summaryBoş olabilir; en fazla 1.000 karakterlik metin.
bodyBoş olabilir; en fazla 50.000 karakterlik metin.

Taslağı kaydedin, yayın hazırlığını kontrol edin ve kullanıcı değişikliği yayına almak istediğinde ilgili öğeyi ve dili yayınlayın. Diğer taslaklar yayınlanmaz.

Bunlar içerik ailesine göre örneklerdir. Tüm girdi/çıktı şemalarını ve gerekli kapsamları tools/list veya OpenAPI belgesinden keşfedin. Aşağıdaki REST yolları /api/v1/sites/{site} adresine göredir.

Site ve yetenek keşfi

GET /capabilities · GET /readiness

Sayfalar, bileşenler ve iç bağlantılar

/pages · /pages/{page_id}/components · POST /pages/{page_id}/publication

Ürünler, galeriler ve videolar

/catalog-items · /galleries · /videos · POST /{collection}/{id}/publication

Blog taslakları, kategoriler ve zamanlama

/blog/posts · /blog/categories · /blog/links · /blog/posts/{post_id}/publication · /blog/posts/{post_id}/schedule

Ana gezinme ve ek menüler

/menus · /menus/destinations · /menu-assignments/{type}/{target_id} · /menus/{menu_key}/publication

Medya kitaplığı ve stok fotoğraflar

/media · /media/transfers · /media/stock-photos

Formlar, gönderimler ve eklenti panelleri

/forms · /submissions · /plugins · /plugins/panel · /plugins/panel/actions

Şirket, tema, diller ve entegrasyonlar

/company · /theme · /theme/settings · /locales · /integrations · /demo · /demo/drafts · /cache/reset

Yetenekler ve içerik düzenleme sözleşmesi

Bir site seçip yeteneklerini okuyun: etkin diller, tema alanları, bileşen şemaları, menü konumları ve kurulu eklenti panelleri. Yazmadan önce content-workflow kaynağını okuyun. Kaynakları desteklemeyen istemciler get-site-capabilities-tool kullanabilir. Keşif tamamlanana kadar tools/list nextCursor değerini izleyin.

GET /api/v1/sites/{site}/capabilities
GET /api/v1/sites/{site}/pages/{page_id}/components/schema?locale=en

İstenen dili ve güncel version veya revision değerini kullanın. Blog kaydı belgenin tamamını değiştirir ve zamanlamasını iptal eder. Menü düzenlemeleri sayısal revision, içerik atamaları ayrı bir menu_revision özeti kullanır. Değiştirilen dizilerdeki mevcut öğeleri koruyun. Çakışmada yeniden okuyup değişiklikleri birleştirin.

Ana gezinme otomatik kalır. Ek menülerin taslakları ve yayınları ayrıdır. İçerik kaydı menü atamalarını hazırlar; ilgili içeriği yayınlamak diğer menü taslaklarını yayınlamadan bu atamaları uygular. Menü yayınlamak bağlantılı içeriği yayınlamaz. Sayfadaki source_hash eski kaynak metne dayanan çevirileri reddeder.

Sayfa gövdesi ve temanın richtext alanları temizlenmiş HTML kabul eder. Yayınlandığında ziyaretçinin dilinde çözümlenen kalıcı /__eyivo/pages/{id} bağlantıları için list-page-links-tool kullanın. Bloglar body_html yerine aynı siteye ait media_id ve sayfa/yazı hedefleri içeren yapılandırılmış document JSON kullanır.

{
  "type": "doc",
  "content": [{
    "type": "paragraph",
    "content": [{ "type": "text", "text": "Our story" }]
  }]
}

Görsel ve video yükleme

upload-media-tool, Claude gibi MCP Apps istemcilerinde dosya seçici açar. ChatGPT ayrıca kendi ek referansını sağlayabilir; Claude sohbet eki OpenAI dosya referansı değildir. İndirme adresi uydurmayın ve araç argümanlarında base64 dosya göndermeyin.

Codex ve Claude Code, prepare-media-upload-tool çağırıp dosyayı beş dakika içinde dönen upload_url adresine tek kullanımlık upload_token ile multipart olarak gönderebilir. Bu anahtarı gizli tutun. REST istemcileri kendi media:write anahtarlarını kullanabilir. İçerikte kullanılacak medya kimliği yalnızca tamamlanan yüklemede döner; bilet oluşturmak dosyayı yüklemez.

POST /api/v1/sites/{site}/media
Authorization: Bearer <media:write token>
Content-Type: multipart/form-data; boundary=<generated by HTTP client>

file: <original file bytes>

10. Özel alan adları

GET/sites/{site}/domains

Alan adlarını listeleme · domains:read

POST/sites/{site}/domains

Alan adı isteme · domains:write

POST/sites/{site}/domains/{domain}/activate

Doğrulamadan sonra etkinleştirme · domains:write

POST/sites/{site}/domains/{domain}/primary

Birincil alan adını seçme · domains:write

Alan adı isteme

curl --request POST \
  --url https://app.eyivo.com/api/v1/sites/42/domains \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ey_your_token' \
  --header 'Content-Type: application/json' \
  --header 'Idempotency-Key: domain-request-example-com' \
  --data '{"domain":"www.example.com"}'

Bekleyen alan adı kaynağı verification_token içerir. Alan adınız için döndürülen değeri kullanarak gerekli DNS sahiplik kaydını ekleyin, DNS yayılımını bekleyin ve etkinleştirme uç noktasını çağırın. Etkinleştikten sonra birincil genel adres olacaksa birincil uç noktasını çağırın.

Alan adı kaynağı alanları: id, domain, site_id, is_primary, status, koşullu verification_token ve zaman damgaları. Özel alan adı plan sınırları ile alan adı doğrulama hataları 422 döndürür.

11. Hatalar

DurumAnlamıÖnerilen işlem
401Bearer token eksik, geçersiz, süresi dolmuş veya iptal edilmiş.Kimlik bilgisini değiştirin veya yenileyin.
403Eksik kapsam, site kısıtlaması veya site sahibi olmayan bir kullanıcının değişiklik isteği.Yetkili bir kapsam ve site kullanın; isteği değiştirmeden yeniden denemeyin.
404Kaynak bulunamadı veya kullanıcıya ait değil.Kimlikleri ve sahipliği doğrulayın.
409Sürüm çakışmasında veriyi yeniden okuyup değişiklikleri birleştirin. Eski isteği değiştirmeden tekrar göndermeyin.Düzenlemeden önce seçilen dilin taslağını ve güncel revizyonunu okuyun.
422Doğrulama, plan sınırı, alan adı kuralı veya yinelenebilir işlem uyuşmazlığı.errors veya message alanını okuyun, isteği düzeltin ve gövde değişirse yeni bir anahtar kullanın.
5xxBeklenmeyen platform veya üst servis hatası.Güvenli okuma isteklerini yeniden deneyin; yazma isteklerini yalnızca aynı yinelenebilir işlem anahtarıyla yeniden deneyin.

Doğrulama yanıtı

{
  "message": "The title field is required.",
  "errors": {
    "title": ["The title field is required."]
  }
}

Kimlik doğrulama veya yetkilendirme yanıtı

{
  "message": "Missing required scope [content:write]."
}

12. Geçerli sınırlar ve entegrasyon kontrol listesi

REST v1, Eyivo özelliklerinin belirli bir bölümünü sunar. Bir uç noktanın bulunmaması, dahili API’leri çağırma izni değil sözleşmenin sınırıdır.

Kullanılabilir

  • Siteleri listeleme, inceleme ve oluşturma
  • Sayfalar, bileşenler ve iç bağlantılar
  • Sayfaları, bileşenleri, blogları, ürünleri, galerileri, videoları, menüleri, medyayı, formları ve site ayarlarını kapsamlarla korunan araçlar ve REST uç noktalarıyla yönetin.
  • Alan adlarını listeleme, isteme, etkinleştirme ve birincil adresi seçme

REST v1 kapsamında sunulmayanlar

  • Faturalama ve abonelik değişiklikleri
  • Hesap şifresi ve erişim anahtarı yönetimi
  • Doğrudan depolama erişimi ve Internal API
  • Rastgele tema kodu kurulumu veya çalıştırılması

Üretim ortamına geçmeden önce

  • HTTPS kullanın ve beklenen app.eyivo.com ana makinesini doğrulayın.
  • Bearer anahtarlarını sunucu tarafında tutun ve günlüklerde yetkilendirme başlıklarını gizleyin.
  • Yalnızca gerekli kapsamları isteyin ve mümkün olduğunda siteyle sınırlı kişisel anahtarları tercih edin.
  • Her mantıksal yazma işlemi için benzersiz bir yinelenebilir işlem anahtarı kullanın ve yeniden denemelerde aynı anahtarı koruyun.
  • Temel istek veya kimlik bilgisi değişmedikçe 401, 403, 404 ve 422 yanıtlarını geçici hata saymayın.
  • Geçici hatalar için rastgele sapmalı üstel gecikme kullanın ve gelecekte dönebilecek Retry-After başlığına uyun.
  • Koleksiyon yapıları değişebilir. Her uç noktanın sayfalama bilgilerini izleyin; tüm sonuçların düz veya sayfalamasız liste olduğunu varsaymayın.