Lewati ke isi

Dokumentasi pengembang REST API v1

Bangun di Eyivo melalui satu terstruktur API.

Kelola halaman, komponen, blog, produk, galeri, video, menu, media, bentuk dan situs pengaturan melalui alat konten yang discoped dan REST titik akhir.

Dasar URL

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

Persegi 1

The Eyivo REST API adalah pesawat kontrol programmatic untuk website terstruktur yang menggunakan HTTPS dan JSON, adalah versi di bawah /api/v1, dan berlaku kepemilikan yang sama, batas rencana, validasi, dan audit batas sebagai dasbor.

JSON dan multipart

Terima: aplikasi / json. Kontent- Type: aplikasi / json; berkas: multipart / form-data.

Pemilik pengguna

Setiap operasi situs dibatasi oleh situs yang dimiliki oleh pengguna terotentikasi.

Draft- pertama

Simpan draft, periksa kesiapan, kemudian terbitkan item dan bahasa ketika pengguna ingin perubahan hidup. Publishing tidak mempublikasikan draf yang tidak terkait.

Versi: memecah perubahan kontrak memerlukan versi dasar baru. Ruas addititif mungkin muncul dalam ada JSON objek, sehingga klien harus mengabaikan bidang yang tidak mereka kenal.

2, cepat mulai.

  1. 1
    Buat token.

    Masuk ke App, buka API token, pilih yang terkecil perlu scopes, dan salin ey_ rahasia ketika ditampilkan.

  2. 2
    Daftar situs Anda.

    Konfirmasi otentikasi dan dapatkan ID situs numerik yang dipakai oleh nested titik akhir.

  3. 3
    Kirim idempoten menulis.

    Berikan setiap POST, PATCH, dan DELETE meminta unik Idempotency-Key.

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

A successful response wraps in data:

{
  "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. Otentikasi

Setiap /api/v1 permintaan membutuhkan tanda tangan:

Authorization: Bearer <token>

Pribadi API token

Yang terbaik untuk skrip, integrasinya server, dan otomatisasi akun langsung. Token dimulai dengan ey_, disimpan hashed, dan ditampilkan hanya sekali.

  • Buat dan batalkan mereka di https://app.eyivo.com/tokens.
  • Pilih satu atau lebih lingkup.
  • Secara opsional membatasi token ke satu situs milik.
  • Token yang tidak terduga tetap valid sampai dicabut.

OAuth 2.0 + PKCE

Terbaik bagi aplikasi yang bertindak atas nama pengguna Eyivo. Gunakan Kode Otorisasi dengan PKCE; jangan gunakan sandi atau hibah implisit.

  • Otorisasi: https://app.eyivo.com/oauth/authorize
  • Token dan penyegaran: https://app.eyivo.com/oauth/token
  • Token akses kadaluarsa setelah 2 jam.
  • Token baru kadaluarsa setelah 1 tahun.

PKCE aliran otorisasi

  1. Buat sebuah high-entropi code_verifier dan SHA-256 code_challenge.
  2. Arahkan pengguna ke /oauth/authorize dengan response_type=code, masyarakat client_id, benar-benar terdaftar redirect_uri, diminta spasi-dipisahkan scope, state, code_challenge, dan code_challenge_method=S256.
  3. Verifikasi state setelah redirect, kemudian pertukaran kode otorisasi kembali di /oauth/token menggunakan asli code_verifier.
  4. Simpan akses dan token segarkan secara aman. Segarkan sebelum kadaluwarsa dan ganti kredensial yang diputar secara otomatis.
Jangan pernah mengekspos token: jangan letakkan token pembawa dalam URL, log peramban, kendali sumber, cuplikan layar, atau kode sisi klien yang tidak dapat melindungi rahasia.

4.

Permintaan membutuhkan lingkup yang tepat di bawah ini. * melewati semua pemeriksaan lingkup; aplikasi seharusnya masih meminta set lingkup praktis terkecil.

ScopeREST kemampuan
sites:readDaftar situs yang dimiliki dan mengambil satu situs.
sites:writeBuat situs dengan akun token-lebar.
content:readBaca isi, skema, menu, formulir dan pengaturan.
content:writeBuat, sunting, hapus dan secara eksplisit mempublikasikan isi; jalankan aksi panel yang dideklarasikan.
media:readGET /sites/{site}/media, GET /sites/{site}/media/stock-photos
media:writePOST /sites/{site}/media, DELETE /sites/{site}/media/{media}
domains:readDaftar domain situs.
domains:writePermintaan, aktifkan, dan pilih domain gubahan.

REST memerlukan cakupan endpoint, bukan mcp:use. Endpoint media menggunakan media:read atau media:write.

5.

Kirim sebuah Idempotency- Kunci dengan JSON Mutasi sehingga permintaan yang sama dapat dicoba lagi dengan aman. Upload dan upload- mengeluarkan tiket; verifikasi hasil transfer sebelum mencoba kembali.

Idempotency-Key: site-42-page-create-01J7M6Y8RRF3ZE6WB4Z0Y9XJXC
SituasiHasil
Permintaan pertamaOperasi berjalan dan kode statusnya dan JSON tubuh disimpan.
Kunci, metode, path, parameter kueri, dan tubuh yang samaRespon yang tersimpan diputar ulang tanpa mengulangi operasi.
Kunci yang sama dengan permintaan lain422 - kunci digunakan kembali dengan muatan yang berbeda ditolak.
Kunci yang sama ketika permintaan pertama sedang berjalan409 - Permintaan sudah berlangsung.
Tak ada kunciPermintaan masih berjalan, tapi perilaku ulang yang aman tidak tersedia.

Sebuah permintaan cocok termasuk HTTP metode, jalur permintaan, dan badan permintaan mentah tepat. Gunakan lagi serialisasi asli JSON ketika mencoba lagi.

6.

Operasi konten mengembalikan sebuah amplop data. MCP persediaan Konten strukturedden plus JSON cermin teks; REST kembali JSON. Baca setiap skema keluaran untuk ID, kesiapan publikasi dan paginasi. Blog, media dan submission paginate; ikuti informasi halaman mereka yang kembali.

Sumber daya tunggal

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

Koleksi

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

Bentuk koleksi bervariasi. Ikuti metadata dokumentasi setiap titik akhir; jangan asumsikan setiap hasil adalah daftar datar atau tak berpaginasi.

7.

GET/sites

Daftar situs yang dimiliki sites:read

POST/sites

Buat situs sites:write

GET/sites/{site}

Ambil satu situs milik sites:read

Buat situs

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"
  }'
RuasAturan
display_namePerlu string, maksimum 200 karakter.
template_keyPerlu built-in kunci template. Enum kini sedang dalam OpenAPI.
native_localeDiperlukan kode lokal yang didukung.

Respon: 201 Created dengan sumber daya situs. Menyediakan dapat awalnya melaporkan status tidak aktif ketika penempatan komplit. Situs dan rencana membatasi kembali 422.

Kolom sumber daya tempat: id, platform_subdomain_key, template_key, status, native_locale, english_enabled, content_version, search_visibility, opsional runtime, dan penanda waktu.

Halaman 8

GET/sites/{site}/pages

Daftar halaman content:read

POST/sites/{site}/pages

Buat draft content:write

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

Mengambil halaman content:read

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

Perbarui draft content:write

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

Hapus satu halaman content:write

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

content:write · locale

Buat halaman

{
  "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."
}
RuasBuat aturan / perbarui
typeGunakan halaman untuk isi biasa. Tipe yang didukung dan skema komponen tema tersedia melalui kemampuan situs.
sort_orderOpsional bernilai integer dari 0 ke 9999; buat baku ke 0.
localeBuat: diperlukan. Update: Diperlukan ketika mengubah title, slug, atau body.
slugBuat: dibutuhkan. ASCII huruf, digit, dass, dan garis bawah; maksimal 160.
titleBuat: string yang diperlukan; maksimal 200.
bodyBenang nuklir, maksimal 50.000.
meta_titleBenang nuklir, maksimal 200.
meta_descriptionBenang nuklir, maksimal 500.

Buat respon: 201. Respon pemutakhiran: 200. Respon hapus: 204 tanpa tubuh.

Simpan draft, periksa kesiapan, kemudian terbitkan item dan bahasa ketika pengguna ingin perubahan hidup. Publishing tidak mempublikasikan draf yang tidak terkait.

Benda katalog

GET/sites/{site}/catalog-items

Daftar barang content:read

POST/sites/{site}/catalog-items

Buat objek draft content:write

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

Mengambil sebuah item content:read

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

Hapus suatu butir content:write

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

content:write · locale, slug, title

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

content:write · locale

Buat suatu butir katalog

{
  "sort_order": 100,
  "locale": "en",
  "slug": "strategy-advisory",
  "title": "Strategy advisory",
  "summary": "Focused advice for consequential decisions.",
  "body": "Talk to our senior advisory team."
}
RuasAturan
sort_orderNilai integer dari 0 ke 9999; baku ke 0.
localeDiperlukan kode lokal yang didukung.
slugDiperlukan ASCII siput, maksimal 160.
titlePerlu string; maksimum 200.
summaryBenang nuklir, maksimal 1.000.
bodyBenang nuklir, maksimal 50.000.

Simpan draft, periksa kesiapan, kemudian terbitkan item dan bahasa ketika pengguna ingin perubahan hidup. Publishing tidak mempublikasikan draf yang tidak terkait.

Ini adalah contoh dari keluarga konten. Temukan skema masukan / keluaran lengkap dan yang diperlukan melalui alat / daftar atau dokumen OpenAPI kanonikal. REST jalur di bawah ini relatif terhadap / api / v1 / situs / {site}.

Penemuan situs dan kemampuan

GET /capabilities · GET /readiness

Halaman, komponen dan sambungan internal

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

Produk, galeri dan video

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

Draf blog, kategori, dan penjadwalan

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

Navigasi utama dan menu tambahan

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

Pustaka media dan foto stok

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

Bentuk, pengiriman dan panel plugin

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

Perusahaan, tema, bahasa dan integrasinya

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

Kemampuan dan menulis kontrak

Pilih sebuah situs, lalu baca kemampuannya: dialognya, bidang tema, skema komponen, lokasi menu dan panel plugin yang terpasang. Baca alur kerja kontra sebelum menulis. Klien tanpa sumber daya dapat menggunakan get-sitecabilicis- tool. Ikuti perkakas / list NextCursor sampai penemuan selesai.

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

Gunakan lokal yang diminta atau revisi. Blog menyimpan ganti dokumen lengkap dan batalkan jadwalnya. Menu edit memakai revisi integer; tugas isi memakai hash menu _ revisi terpisah. Pertahankan masukan dalam urutan pengganti. Pada konflik, baca lagi dan gabungkan edits yang dimaksudkan sebelum mencoba kembali.

Navigasi utama tetap otomatis. Tambahan menu memiliki draf dan publikasi mereka sendiri. Menyimpan tahap isi menu tugas; penerbitan bahwa item menerapkan mereka tanpa menerbitkan draf menu lain. Publishing menu tidak pernah mempublikasikan isinya terkait. Sebuah halaman source _ hash menolak terjemahan berdasarkan teks sumber usang.

Ruas halaman dan ruas richtext tema menerima disterilkan HTML. Gunakan list- page-links- tool untuk stabil / _ _ eyivo / pages / {id} links, diselesaikan dalam bahasa pengunjung ketika diterbitkan. Blog posting menggunakan dokumen terstruktur JSON dengan situs media _ id dan halaman / post target, bukan body _ html.

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

Gambar dan video uploads

upload- media- tool membuka sebuah picker berkas dalam MCP Apps klien seperti Claude. ChatGPT juga dapat menyediakan referensi lampiran host nya; sebuah lampiran obrolan Claude bukan sebuah referensi berkas OpenAI. Jangan pernah membuat sebuah download URL atau kirim berkas byte base64 sebagai argumen alat.

Codex dan Claude Code dapat memanggil persiapan -media- upload- alat, kemudian mengirim multipart file bytes ke upload _ url kembali dengan yang satu - gunakan upload _ token dalam waktu lima menit. Simpan rahasia token itu. REST klien dapat mengunggah dengan media mereka sendiri:write pembawa. Hanya upload selesai mengembalikan ID media untuk digunakan dalam isi; menerbitkan sebuah tiket tidak mengunggah berkas.

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>

Domain kustom

GET/sites/{site}/domains

Daftar domain domains:read

POST/sites/{site}/domains

Meminta domain domains:write

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

Aktifkan setelah verifikasi domains:write

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

Pilih nama host utama domains:write

Meminta domain

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"}'

Sumber daya domain yang tertunda termasuk verification_token. Tambahkan yang diperlukan DNS catatan kepemilikan menggunakan nilai dikembalikan untuk domain Anda, tunggu DNS Progreasi, lalu sebut titik akhir aktivasi. Setelah aktif, panggil titik akhir primer jika itu harus menjadi nama host publik kanonikal.

Kolom sumber daya Domain: id, domain, site_id, is_primary, status, kondisional verification_token, dan penanda waktu. Rencana domain dan validasi domain gagal kembali 422.

11.

StatusArtinyaAksi khas
401Hilang, tidak sah, kadaluarsa, atau tanda tangan pembawa dicabut.Ganti atau segarkan kredensial.
403Hilang lingkup, sebuah situs pembatasan, atau situs yang ditulis oleh pemilik non-.Gunakan sebuah situs / scope yang resmi; jangan coba lagi tidak berubah.
404Sumber daya hilang atau tidak dimiliki oleh pengguna.Verifikasi ID dan kepemilikan.
409Suatu konflik revisi / versi memerlukan pembacaan dan penggabungan segar. Jangan coba kembali muatan basi yang tak berubah.Baca rancangan bahasa yang dipilih dan revisi kini sebelum penyuntingan.
422Validasi, batas rencana, aturan domain, atau ideoptasi tidak cocok.Baca errors atau message, perbaiki permintaan, dan gunakan kunci baru jika tubuhnya berubah.
5xxTidak terduga platform atau upstream gagal.Coba baca ulang, coba tulis ulang hanya dengan kunci idempotensi yang sama.

Respon validasi

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

Respon otentikasi atau otorisasi

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

Batas saat ini dan daftar cek integrasi

REST v1 sengaja mengekspos subset fokus Eyivo.

Tersedia

  • Daftar tempat, inspeksi, dan penyediaan
  • Halaman, komponen dan sambungan internal
  • Kelola halaman, komponen, blog, produk, galeri, video, menu, media, bentuk dan situs pengaturan melalui alat konten yang discoped dan REST titik akhir.
  • Daftar domain, permintaan, aktivasi, dan pemilihan primer

Tidak terkena di REST v1

  • Perubahan tagihan dan langganan
  • Sandi akun dan manajemen token
  • Akses penyimpanan langsung dan APIs Internal
  • Pemasangan kode tema arbitrary atau eksekusi

Sebelum produksi

  • Gunakan HTTPS dan memvalidasi yang diharapkan app.eyivo.com tuan rumah.
  • Jauhkan token pembawa server- sisi dan redact header otorisasi dari log.
  • Permintaan hanya perlu scope dan lebih suka bit - terbatas token pribadi bila mungkin.
  • Gunakan kunci idempotensi yang unik untuk setiap penulisan logis dan jaga dari pengulangan.
  • Perlakukan 401, 403, 404, dan 422 sebagai non- sementara kecuali permintaan yang mendasari atau perubahan kredensial.
  • Gunakan backoff eksponensial dengan jitter untuk kegagalan sementara dan menghormati masa depan Retry-After tajuk.
  • Bentuk koleksi bervariasi. Ikuti metadata dokumentasi setiap titik akhir; jangan asumsikan setiap hasil adalah daftar datar atau tak berpaginasi.