Content Type

Content Type adalah kerangka (skema) yang diikuti oleh konten. Ia mendefinisikan field apa saja yang dimiliki, serta tipe, status multibahasa, status wajib, dan aturan validasi dari masing-masing field. Sebagai contoh "produk" pada sebuah toko pakaian daring, susunan item seperti nama produk, harga, deskripsi rinci, dan foto utama diatur oleh satu Content Type "Produk", dan tiap produk individual nyatanya dibuat sebagai Content yang mengikuti kerangka ini.

Pada CMA, Content Type merupakan sub-resource dari Space, dan jalurnya didasarkan pada /spaces/{spaceId}/content-types. Tugas pengelolaan seperti pembuatan, penyuntingan, dan pembatalan publikasi dilakukan di CMA, sedangkan snapshot yang sudah dipublikasikan dikirimkan ke CDA. Namun Content Type dipublikasikan secara otomatis saat dibuat atau disunting, sehingga berbeda dengan Content, ia langsung berstatus Published tanpa panggilan publikasi terpisah (lihat Status dan publikasi otomatis di bawah).

Struktur resource

Berikut adalah respons pengambilan tunggal untuk Content Type "Produk". Bersama dengan sys (properti sistem), ia memiliki properti badan seperti name, displayField, publishWithAuthor, dan fields.

{
  "sys": {
    "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA",
    "type": "ContentType",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "publish": {
      "version": 7,
      "at": "2026-06-17T03:13:49.973Z",
      "firstAt": "2026-06-14T17:04:46.953Z",
      "counter": 4,
      "by": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } }
    },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-14T17:04:46.846Z",
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedAt": "2026-06-17T03:13:49.973Z",
    "version": 8,
    "status": "Published"
  },
  "name": "Produk",
  "displayField": "productName",
  "publishWithAuthor": false,
  "fields": [
    { "id": "5n06s7ocmwdi", "name": "Nama produk", "apiName": "productName", "type": "ShortText", "localized": true, "required": true, "validations": [], "disabled": false },
    { "id": "1gecyz8g4llwf", "name": "Harga", "apiName": "price", "type": "Long", "localized": false, "required": false, "validations": [], "disabled": false },
    { "id": "3ow4popgz54zg", "name": "Deskripsi", "apiName": "description", "type": "RichText", "localized": true, "required": false, "validations": [], "disabled": false },
    { "id": "2alxdptmdub1s", "name": "Foto", "apiName": "photo", "type": "Refer", "localized": false, "required": false, "validations": [], "disabled": false, "targetType": "Media" },
    {
      "id": "2a80lehazfx3t",
      "name": "Merek",
      "apiName": "brand",
      "type": "Refer",
      "localized": false,
      "required": false,
      "validations": [
        { "referContentType": [ { "sys": { "id": "3trmXRM3RqbgSnifyg7OveRYWnJWEG", "type": "Refer", "targetType": "ContentType" } } ] }
      ],
      "disabled": false,
      "targetType": "Content"
    }
  ]
}

Kunci utama:

  • sys.id: Pengenal unik dari Content Type. Nilai ini masuk ke {contentTypeId} pada jalur pengambilan tunggal, penyuntingan, dan penghapusan.
  • name: Nama dari Content Type (contoh: Produk).
  • displayField: apiName dari field yang ditampilkan mewakili tiap Content di daftar studio konten (contoh: productName).
  • publishWithAuthor: Menentukan apakah informasi penulis (sys.createdBy, sys.updatedBy) turut dimuat pada snapshot publikasi saat Content dipublikasikan. Nilai bawaannya adalah false, dan dalam hal ini snapshot yang dikirimkan ke CDA/ACDA tidak memuat penulis. Nilai ini diterapkan pada saat publikasi dan tidak berlaku surut, sehingga meskipun nanti diubah menjadi true, Content yang sudah dipublikasikan harus dipublikasikan ulang agar penulisnya terisi. Draf yang ditangani API pengelolaan (CMA/ACMA) tetap memiliki sys.createdBy terlepas dari pengaturan ini. Agar penulis (byline) tampil pada respons pengiriman, atau agar filter createdBy pada aturan izin (termasuk :self) dinilai di CDA/ACDA, nilai ini harus disetel true (lihat penjelasan filter createdBy pada SpaceRole dan ServiceUserRole).
  • fields: Daftar field yang didefinisikan oleh kerangka ini. Struktur tiap item dijelaskan di Field di bawah.

Field photo memiliki type Refer dan targetType Media, sehingga menunjuk ke aset berkas yang diunggah. Field brand adalah Refer + targetType: Content, dan melalui referContentType pada validations ia dibatasi agar hanya merujuk ke Content dari Content Type tertentu (dalam hal ini "Merek").

Properti sistem (sys)

Setiap Content Type menempatkan properti sistem umum dan properti khusus Content Type di dalam objek sys. space, createdBy, dan updatedBy masuk dalam bentuk Refer ({ "sys": { "id", "type": "Refer", "targetType" } }).

PropertiTipeKeterangan
idstringPengenal unik resource.
typestringJenis resource. Content Type selalu "ContentType".
spaceRefer<Space>Space tempat Content Type ini berada.
createdByRefer<User>Pengguna yang membuatnya.
createdAtstring (date-time)Waktu pembuatan.
updatedByRefer<User>Pengguna yang terakhir menyuntingnya.
updatedAtstring (date-time)Waktu penyuntingan terakhir.
versioninteger (≥1)Versi resource. Naik 1 pada setiap perubahan seperti pembuatan, penyuntingan, publikasi, dan pembatalan publikasi.
statusstring (enum)Status publikasi. Salah satu dari Draft, Changed, Published, Archived.
publishobjectRiwayat publikasi. Lihat kunci di bawah.

Kunci dari objek publish:

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

Jika dibatalkan publikasinya (DELETE .../publish), version, at, dan by dihapus dari publish, dan hanya firstAt serta counter yang tersisa.

sys dari Content Type tidak memiliki properti contentType (referensi-diri) yang ada pada sys dari Content. Hal ini karena Content Type itu sendiri adalah kerangka. Properti archive juga tidak ada.

Field

fields adalah daftar field yang didefinisikan oleh Content Type ini. Setiap item memiliki struktur berikut (FieldDefinition).

KunciTipeKeterangan
idstring (1~64)Pengenal unik field. Diberikan secara otomatis saat pembuatan.
namestring (1~50)Nama field yang ditampilkan di studio konten (contoh: Nama produk).
apiNamestring (1~64)Kunci yang menunjuk field ini di API. Pola ^[a-zA-Z0-9][a-zA-Z0-9-_]*$ (diawali huruf atau angka, lalu huruf, angka, -, atau _).
typestring (enum)Tipe field. Lihat Jenis field (type) di bawah.
localizedbooleanMenentukan apakah dapat memiliki nilai multibahasa.
requiredbooleanMenentukan apakah pengisian wajib.
validationsarrayDaftar aturan validasi yang diterapkan pada nilai. Array kosong [] jika tidak ada aturan. Lihat Validasi (validations) di bawah.
disabledbooleanMenentukan apakah dinonaktifkan.
targetTypestring (enum)Hanya saat type adalah Refer. Menentukan apakah target referensi adalah Content atau Media.
itemsobjectHanya saat type adalah Array. Definisi elemen array (elemen Refer atau elemen ShortText).

Jenis field (type)

type menentukan cara nilai disimpan dan diambil. Sebagian tipe memiliki perilaku pencarian yang berbeda.

typeArtiBatas nilaiCatatan
ShortTextTeks satu baris yang pendek.64 karakterCocok untuk pengambilan kata kunci yang tepat.
LongTextTeks badan yang panjang.5.120 karakterMendukung pencarian kemiripan teks penuh (full-text).
RichTextBadan teks dengan format.204.800 karakterBukan target pencarian dan digunakan untuk menyajikan format.
LongBilangan bulat.Contoh: harga price.
NumberBilangan riil (termasuk desimal).Hanya nilai berhinggaNilai tak hingga dan NaN tidak diterima.
BooleanBenar/salah.
DateTanggal dan waktu.
JsonStruktur JSON sembarang.5.120 karakter setelah serialisasiAngka di dalam struktur juga harus berhingga.
LocationLokasi (koordinat).latitude -9090, longitude -180180
ReferReferensi yang menunjuk ke resource lain.Tentukan Content atau Media melalui targetType.
ArrayArray yang menampung beberapa nilai.64 elemenDisertai definisi elemen melalui items.

Pada contoh "Produk", Nama produk adalah ShortText, Harga adalah Long, Deskripsi adalah RichText, Foto adalah Refer (targetType: Media), dan Merek adalah Refer (targetType: Content).

Batas nilai adalah batas atas platform yang ditetapkan oleh tipe, dan diperiksa saat nilai ditulis ke Content, bukan saat Content Type dibuat. Meskipun Anda menuliskan batas atas yang lebih besar melalui size pada validations, batas atas platform yang lebih dahulu berlaku. Elemen dari Array dikenai batas yang sama dengan batas tipe elemennya, sehingga pada array yang items.type-nya ShortText, tiap elemen tidak boleh melebihi 64 karakter. Menulis Content dengan nilai yang melewati batas akan ditolak, dan kodenya ada di Error pada Content.

Validasi (validations)

validations adalah array aturan yang diterapkan pada nilai field. Setiap item menampung salah satu dari kunci berikut.

KunciBentukKeterangan
size{ "min", "max" }Minimum dan maksimum panjang teks atau ukuran array.
uniquebooleanMelarang nilai duplikat dalam satu Content Type yang sama.
regexp{ "pattern", "flags" }Nilai harus cocok dengan pola ekspresi reguler. pattern wajib.
prohibitRegexp{ "pattern", "flags" }Menolak jika nilai cocok dengan pola ekspresi reguler. pattern wajib.
inarrayDaftar nilai yang diizinkan. Hanya nilai yang ada di daftar yang lolos.
range{ "min", "max" }Minimum dan maksimum nilai angka.
dateRange{ "min", "max", "after", "before" }Rentang yang diizinkan untuk nilai tanggal.
mediaMimetypeGrouparrayDaftar jenis berkas yang diizinkan pada field Refer (Media). Lihat enum di bawah.
mediaImageDimensions{ "width", "height" }Batasan piksel lebar dan tinggi gambar.
mediaFileSize{ "min", "max" }Minimum dan maksimum ukuran berkas (byte).
referContentTypearrayDaftar Content Type yang referensinya diizinkan pada field Refer (Content). Setiap item berbentuk Refer<ContentType>.
messagestringPesan kustom yang ditampilkan saat validasi gagal.

Nilai yang dapat dipakai pada mediaMimetypeGroup (12 jenis): Attachment, Plaintext, Image, Audio, Video, RichText, Presentation, Spreadsheet, PdfDocument, Archive, Code, Markup.

Field brand pada contoh "Produk" dibatasi melalui referContentType agar hanya merujuk ke Content Type "Merek" (yang sys.id-nya 3trmXRM3RqbgSnifyg7OveRYWnJWEG).

Status dan publikasi otomatis

Content Type dipublikasikan secara otomatis saat pembuatan, penyuntingan, dan penyuntingan parsial. Hal ini berbeda dari Content. Content baru masuk ke jalur pengiriman setelah ada panggilan publikasi terpisah usai pembuatan, sedangkan Content Type langsung mengembalikan respons pembuatan dengan status: "Published".

status adalah salah satu dari 4 berikut.

statusArti
DraftKeadaan belum dipublikasikan.
ChangedKeadaan pernah dipublikasikan, tetapi perubahan setelahnya belum dipublikasikan.
PublishedKeadaan sudah dipublikasikan dan tidak ada perubahan yang belum dipublikasikan.
ArchivedKeadaan terarsipkan.

sys.version bertambah 1 pada setiap perubahan. Karena pada Content Type penyuntingan dan publikasi terjadi sekaligus, satu kali penyuntingan menaikkan version sebesar 2 (penyuntingan itu sendiri +1, publikasi otomatis +1). Pada contoh "Pengumuman", tepat setelah pembuatan version adalah 2 (pembuatan +1, publikasi otomatis +1) dan publish.counter adalah 1. Selanjutnya jika disunting, version menjadi 4 dan publish.counter menjadi 2.

Satu-satunya jalur agar Content Type menjadi Draft adalah pembatalan publikasi secara eksplisit (DELETE .../publish). Jika dibatalkan publikasinya, status menjadi Draft, dan pada objek publish version, at, dan by dihilangkan sementara hanya firstAt dan counter yang tersisa.

Batasan

SasaranBatasan
name (Content Type)1~64 karakter, wajib.
descriptionMaksimal 128 karakter, opsional.
fields1~80 field. Pembuatan, penyuntingan, dan penyuntingan parsial semuanya harus mematuhi rentang ini.
name (field)1~50 karakter, wajib.
apiName (field)1~64 karakter, pola ^[a-zA-Z0-9][a-zA-Z0-9-_]*$, wajib.

Pengaman penghapusan: Penghapusan harus memenuhi kedua syarat berikut.

  • Jika ada setidaknya satu Content yang memakai Content Type ini, ia tidak dapat dihapus. Hapus dulu semua Content terkait. Pemeriksaan ini terkena lebih dahulu.
  • Content Type yang berstatus publikasi (Published, Changed) tidak dapat langsung dihapus. Batalkan dulu publikasinya (DELETE .../publish) untuk membuatnya Draft, lalu hapus (status Archived juga dapat dihapus).

Error

Berikut adalah kode yang muncul saat Anda menangani Content Type. Untuk kode yang berlaku umum pada semua resource, lihat Error umum.

KodeKondisi
WGL422010Anda mencoba menghapus Content Type padahal masih ada Content yang memakai Content Type tersebut. Pembatalan publikasi juga menjalani pemeriksaan yang sama, sehingga jika masih ada Content, pembatalan publikasi pun sudah ditolak dengan kode ini.
WGL422009Anda mencoba menghapus Content Type yang berstatus publikasi (Published, Changed) tanpa membatalkan publikasi Content Type tersebut lebih dahulu.
WGL422006Anda mencoba membatalkan publikasi Content Type yang tidak berstatus publikasi.
WGL400002Jumlah fields melebihi jumlah yang diizinkan. Pembuatan, penyuntingan, dan penyuntingan parsial semuanya menjalani pemeriksaan ini.
WGL400045Nilai yang Anda tulis pada displayField tidak ada pada satu pun apiName di dalam fields milik Content Type tersebut.
WGL400046Field yang harus ditulis bersama atribut pasangan tidak menyertakan atribut tersebut. Array memerlukan items, dan Refer memerlukan targetType.
WGL400040Ada dua field atau lebih yang memiliki apiName yang sama.

API

URL dasar untuk semua endpoint di bawah adalah https://cma.weegloo.com/v1, dan diperlukan token Bearer yang mengautentikasi CMA pada header Authorization. Penyuntingan, penyuntingan parsial, publikasi, dan pembatalan publikasi harus disertai header X-Weegloo-Version (sys.version resource saat ini) untuk kendali konkurensi optimistis.