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ıç
- 1Bir 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. - 2Sitelerinizi listeleyin.
Kimlik doğrulamasını onaylayın ve alt uç noktaların kullandığı sayısal site kimliğini alın.
- 3Yinelenebilir 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ışı
- Yüksek entropili bir
code_verifierve bunun SHA-256code_challengedeğerini oluşturun. - Kullanıcıyı
response_type=code, herkese açıkclient_id, kayıtlı tamredirect_uri, boşlukla ayrılmış istenenscope,state,code_challengevecode_challenge_method=S256ile/oauth/authorizeadresine yönlendirin. - Yönlendirme sonrası
statedeğerini doğrulayın; ardından dönen yetkilendirme kodunu özgüncode_verifierile/oauth/tokenadresinde anahtarla değiştirin. - 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.
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.
| Kapsam | REST yetkisi |
|---|---|
sites:read | Sahip olunan siteleri listeleme ve tek bir siteyi görüntüleme. |
sites:write | Hesap 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:read | GET /sites/{site}/media, GET /sites/{site}/media/stock-photos |
media:write | POST /sites/{site}/media, DELETE /sites/{site}/media/{media} |
domains:read | Sitenin 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
| Durum | Sonuç |
|---|---|
| İ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ı istek | 422 — anahtarın farklı bir yükle yeniden kullanılması reddedilir. |
| İlk istek sürerken aynı anahtar | 409 — 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
/sitesSahip olunan siteleri listeleme · sites:read
/sitesSite oluşturma · sites:write
/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"
}'
| Alan | Kurallar |
|---|---|
display_name | Zorunlu metin; en fazla 200 karakter. |
template_key | Zorunlu yerleşik şablon anahtarı. Geçerli değerlerin tam listesi OpenAPI belgesindedir. |
native_locale | Zorunlu 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
/sites/{site}/pagesSayfaları listeleme · content:read
/sites/{site}/pagesTaslak oluşturma · content:write
/sites/{site}/pages/{page}Sayfayı görüntüleme · content:read
/sites/{site}/pages/{page}Taslağı güncelleme · content:write
/sites/{site}/pages/{page}Sayfayı silme · content:write
/sites/{site}/pages/{page}/publicationcontent: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."
}
| Alan | Oluşturma/güncelleme kuralları |
|---|---|
type | Normal 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. |
locale | Oluştururken zorunlu. title, slug veya body değiştirilirken güncellemede de zorunlu. |
slug | Oluştururken zorunlu. ASCII harfleri, rakamlar, kısa çizgi ve alt çizgi; en fazla 160 karakter. |
title | Oluştururken zorunlu metin; en fazla 200 karakter. |
body | Boş olabilir; en fazla 50.000 karakterlik metin. |
meta_title | Boş olabilir; en fazla 200 karakterlik metin. |
meta_description | Boş 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
/sites/{site}/catalog-itemsÖğeleri listeleme · content:read
/sites/{site}/catalog-itemsTaslak öğe oluşturma · content:write
/sites/{site}/catalog-items/{catalogItem}Öğeyi görüntüleme · content:read
/sites/{site}/catalog-items/{catalogItem}Öğeyi silme · content:write
/sites/{site}/catalog-items/{catalogItem}content:write · locale, slug, title
/sites/{site}/catalog-items/{catalogItem}/publicationcontent: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."
}
| Alan | Kurallar |
|---|---|
sort_order | İsteğe bağlı, boş olabilir; 0–9999 arasında tamsayı. Varsayılan değer 0. |
locale | Zorunlu desteklenen dil kodu. |
slug | Zorunlu ASCII kısa ad; en fazla 160 karakter. |
title | Zorunlu metin; en fazla 200 karakter. |
summary | Boş olabilir; en fazla 1.000 karakterlik metin. |
body | Boş 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ı
/sites/{site}/domainsAlan adlarını listeleme · domains:read
/sites/{site}/domainsAlan adı isteme · domains:write
/sites/{site}/domains/{domain}/activateDoğrulamadan sonra etkinleştirme · domains:write
/sites/{site}/domains/{domain}/primaryBirincil 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
| Durum | Anlamı | Önerilen işlem |
|---|---|---|
401 | Bearer token eksik, geçersiz, süresi dolmuş veya iptal edilmiş. | Kimlik bilgisini değiştirin veya yenileyin. |
403 | Eksik 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. |
404 | Kaynak bulunamadı veya kullanıcıya ait değil. | Kimlikleri ve sahipliği doğrulayın. |
409 | Sü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. |
422 | Doğ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. |
5xx | Beklenmeyen 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.comana 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,404ve422yanıtlarını geçici hata saymayın. - Geçici hatalar için rastgele sapmalı üstel gecikme kullanın ve gelecekte dönebilecek
Retry-Afterbaş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.