Content Type

Terakhir diperbarui: 3 Juli 2026

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 disertakan saat Content dipublikasikan. Nilai bawaannya adalah false.
  • 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.

typeArtiCatatan
ShortTextTeks satu baris yang pendek.Cocok untuk pengambilan kata kunci yang tepat.
LongTextTeks badan yang panjang.Mendukung pencarian kemiripan teks penuh (full-text).
RichTextBadan teks dengan format.Bukan target pencarian dan digunakan untuk menyajikan format.
LongBilangan bulat.Contoh: harga price.
NumberBilangan riil (termasuk desimal).
BooleanBenar/salah.
DateTanggal dan waktu.
JsonStruktur JSON sembarang.
LocationLokasi (koordinat).
ReferReferensi yang menunjuk ke resource lain.Tentukan Content atau Media melalui targetType.
ArrayArray yang menampung beberapa nilai.Disertai 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).

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 saat pembuatan, minimal 1 saat penyuntingan.
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 (WGL422010). Hapus dulu semua Content terkait. Pemeriksaan ini terkena lebih dahulu.
  • Content Type yang berstatus publikasi (Published, Changed) tidak dapat langsung dihapus (WGL422009). Batalkan dulu publikasinya (DELETE .../publish) untuk membuatnya Draft, lalu hapus (status Archived juga dapat dihapus).

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.