Content

Terakhir diperbarui: 3 Juli 2026

Sebuah Content adalah satu data nyata yang dicetak dari Content Type (cetakannya). Ambil contoh toko pakaian: Content Type "Produk" menetapkan susunan atribut seperti nama produk, harga, dan deskripsi, sedangkan satu "Stainless Tumbler 500ml" adalah satu Content yang mengikuti cetakan tersebut.

Sebuah Content terdiri dari dua bagian. fields memuat nilai nyata dari setiap field, dan sys memuat status seperti publikasi, versi, dan pengarsipan. Pada CMA, Content adalah sub-resource dari Space. Jalur baca dan hapus mengacu pada /spaces/{spaceId}/contents, sedangkan jalur buat dan ubah mengacu pada /spaces/{spaceId}/content-types/{contentTypeId}/contents yang berada di bawah Content Type. Operasi pengelolaan dilakukan pada CMA, dan snapshot yang dipublikasikan dikirim melalui CDA.

Struktur resource

Berikut adalah respons baca tunggal untuk Content "Stainless Tumbler 500ml" yang sudah dipublikasikan. Bersama dengan sys (properti sistem), ia memiliki fields (nilai field) dan metadata (informasi tambahan seperti tag).

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP",
    "type": "Content",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
    "publish": {
      "version": 1,
      "at": "2026-06-18T09:51:44.128Z",
      "firstAt": "2026-06-18T09:51:44.128Z",
      "counter": 1,
      "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
    },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T09:51:14.597Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-18T09:51:44.128Z",
    "version": 2,
    "status": "Published"
  },
  "fields": {
    "price": { "en-US": 18000 },
    "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }
  },
  "metadata": { "tags": [] }
}

Properti utama:

  • sys.id: Pengidentifikasi unik dari Content. Nilai ini masuk ke {contentId} pada jalur baca tunggal, ubah, hapus, dan publikasi.
  • sys.contentType: Sebuah Refer yang menunjuk ke Content Type yang diikuti Content ini.
  • fields: Nilai dari setiap field. Kuncinya adalah apiName dari field, dan nilainya adalah peta per-locale. Hal ini dijelaskan di Kunci field adalah apiName di bawah.
  • metadata.tags: Daftar Tag yang dilampirkan ke Content ini. Setiap entri berbentuk Refer<Tag>, dan berupa array kosong [] jika tidak ada tag yang dilampirkan.

Kunci field adalah apiName

Kunci dari objek fields adalah apiName dari masing-masing field. Bukan id internal dari Content Type, bukan pula nama field yang ditampilkan di studio konten (mis. Nama Produk). Jadi saat membuat atau membaca Content, Anda harus memakai apiName yang didefinisikan pada Content Type sebagai kunci.

Field dari Content Type "Produk" demo dan pemetaan apiName-nya adalah sebagai berikut.

Nama studio kontenapiNametypelocalizedrequired
Nama ProdukproductNameShortTexttruetrue
HargapriceLongfalsefalse
DeskripsidescriptionRichTexttruefalse
Foto UtamaphotoRefer<Media>falsefalse
MerekbrandReferfalsefalse

Setiap nilai field adalah peta per-locale. Bentuk nilainya bergantung pada localized.

  • Field localized: true dapat menyimpan nilai untuk beberapa locale dalam bentuk { "<locale>": nilai }. Contoh: "productName": { "en-US": "Stainless Tumbler 500ml", "ko-KR": "스테인리스 텀블러 500ml" }.
  • Field localized: false (field non-lokalisasi) hanya menerima nilai di bawah satu kunci Locale default dari Space. Kunci locale lain tidak diperbolehkan. Karena Locale default Space demo adalah en-US, harga hanya memiliki satu kunci en-US, seperti pada "price": { "en-US": 18000 }.

Apa itu Locale default, hingga locale mana sebuah field required harus diisi, dan aturan fallback saat nilai tidak ada dibahas di Multibahasa (konsep).

Bentuk nilai per tipe

Bentuk nilai yang masuk ke dalam kunci locale mengikuti type dari field. Sebagian besar tipe menyimpan nilai dari tipe tersebut apa adanya (tipe teks berupa string, Number dan Long berupa angka, Boolean berupa true/false). Tipe yang nilainya berbentuk objek atau array sehingga mudah membingungkan adalah sebagai berikut.

  • Location: Berupa objek { "latitude": <angka>, "longitude": <angka> }. latitude bernilai antara -90 dan 90, longitude antara -180 dan 180, dan kedua kunci itu wajib ada. Selain kunci yang didefinisikan, tidak ada yang diterima, sehingga kunci singkat seperti lat, lng, atau lon akan ditolak.
  • Refer: Nilainya adalah objek Refer yang menunjuk ke target, dan Anda tidak memasukkan string id saja melainkan objek sys apa adanya. Jika menunjuk ke Content lain, targetType-nya adalah Content; jika menunjuk ke Media, nilainya Media. Bentuk Refer itu sendiri didefinisikan di Bentuk Refer pada properti sistem (sys).
  • Array: Berupa array JSON yang memuat nilai dari tipe elemennya. Jika elemennya teks, ia berupa array string; jika elemennya Refer (Content atau Media), ia berupa array dari objek Refer. Bukan array dari string id.

Berikut adalah contoh nilai yang masuk ke dalam fields (saat Locale default Space adalah en-US).

{
  "location": { "en-US": { "latitude": 37.5662, "longitude": 126.9910 } },
  "tags": { "en-US": ["baru", "edisi terbatas"] },
  "photo": { "en-US": { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } },
  "photos": { "en-US": [ { "sys": { "type": "Refer", "id": "3trmXRM3RqbgSnifyg7PUl8DzDgDzP", "targetType": "Media" } } ] }
}

Properti sistem (sys)

Setiap Content membawa properti sistem bersama di dalam objek sys. space, contentType, createdBy, dan updatedBy berbentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropertiTipeDeskripsi
idstringPengidentifikasi unik resource.
typestringJenis resource. Untuk Content selalu "Content".
spaceRefer<Space>Space tempat Content ini berada.
contentTypeRefer<ContentType>Content Type yang diikuti Content ini.
publishobjectPenunjuk status publikasi. Lihat kunci di bawah.
archiveobjectInformasi pengarsipan. Hanya ada saat sedang diarsipkan, selain itu kuncinya tidak ada. Lihat kunci di bawah.
createdByRefer<User>Pengguna yang membuat.
createdAtstring (date-time)Waktu pembuatan.
updatedByRefer<User>Pengguna yang terakhir mengubah.
updatedAtstring (date-time)Waktu perubahan terakhir.
versioninteger (≥1)Versi resource. Naik 1 pada setiap perubahan seperti buat, ubah, publikasi, batal publikasi, dan arsip.
statusstring (enum)Status publikasi. Salah satu dari 4 nilai di bawah.

status adalah salah satu dari 4 nilai berikut.

statusArti
DraftSedang disusun dan belum dipublikasikan.
ChangedPernah dipublikasikan, tetapi setelah itu diubah sehingga ada perubahan yang belum dipublikasikan.
PublishedSudah dipublikasikan dan tidak ada perubahan yang belum dipublikasikan.
ArchivedSedang diarsipkan.

Objek publish adalah penunjuk yang menandakan status publikasi. Saat sedang dipublikasikan, ia memiliki semua kunci berikut.

KunciTipeDeskripsi
versionintegersys.version pada saat dipublikasikan.
atstring (date-time)Waktu publikasi terakhir.
firstAtstring (date-time)Waktu publikasi pertama. Tetap tersimpan meskipun publikasi dibatalkan.
counterintegerJumlah kumulatif publikasi.
byRefer<User>Pengguna yang terakhir mempublikasikan.

Saat publikasi dibatalkan, version, at, dan by hilang dari publish dan hanya firstAt serta counter yang tersisa. Jika belum pernah dipublikasikan sama sekali, publish berisi { "counter": 0 }.

Objek archive hanya ada saat sedang diarsipkan. Saat diarsipkan, ia memiliki version (sys.version pada saat pengarsipan), at (waktu pengarsipan), dan by (pengguna yang mengarsipkan); jika tidak berstatus arsip, kunci archive itu sendiri tidak ada.

sys.version dan semua nilai waktu pada contoh di bawah adalah nilai pada saat pemanggilan sebenarnya, dan berbeda pada setiap pemanggilan.

Publikasi, versi, dan konkurensi

Siklus hidup Content adalah sebagai berikut.

  • Saat dibuat, status adalah Draft. Content tidak otomatis dipublikasikan saat dibuat. Inilah yang membedakannya dari Content Type. Content Type otomatis dipublikasikan bersamaan dengan pembuatannya, tetapi Content memerlukan pemanggilan publikasi terpisah agar masuk ke jalur pengiriman.
  • Saat dipublikasikan, status menjadi Published.
  • Jika diubah setelah dipublikasikan, status menjadi Changed. Artinya ada perubahan yang belum dipublikasikan.
  • Saat publikasi dibatalkan, status kembali menjadi Draft.
  • Untuk mengarsipkan, Anda harus membatalkan publikasi terlebih dahulu. Content yang berstatus publikasi tidak dapat langsung diarsipkan.

sys.version naik 1 pada setiap perubahan.

Permintaan ubah, ubah sebagian, publikasi, batal publikasi, arsip, dan batal arsip harus menyertakan sys.version saat ini pada header x-weegloo-version. Jika nilai ini hilang atau tidak cocok dengan versi saat ini, hal itu dianggap sebagai konflik perubahan bersamaan dan permintaan ditolak. Permintaan buat dan hapus tidak memakai header ini. Transisi status seperti publikasi, batal publikasi, arsip, dan batal arsip tidak memiliki badan permintaan tersendiri.

API

URL dasar untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan diperlukan token Bearer yang mengautentikasi ke CMA pada header Authorization. Ubah, ubah sebagian, publikasi, batal publikasi, arsip, dan batal arsip harus mengirimkan header X-Weegloo-Version (sys.version resource saat ini) untuk kontrol konkurensi optimistis.

Saat memfilter atau mengurutkan daftar /contents (GET /spaces/{spaceId}/contents) dengan fields.*, Content Type juga harus ditentukan dengan sys.contentType.sys.id={contentTypeId}. Bentuk contentType={contentTypeId} tidak dapat menggantikannya. Path /content-types/{contentTypeId}/contents sudah mencantumkan Content Type pada path, sehingga tidak perlu ditentukan secara terpisah.

  • Content Type: Cetakan dari Content ini (definisi field, apiName).
  • CDA Content: Mengirimkan Content yang dipublikasikan ke pengunjung (baca).
  • Tag: Label klasifikasi yang dilampirkan pada metadata.tags.
  • Multibahasa (konsep): Locale default, pengisian wajib, fallback.