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:apiNamedari field yang ditampilkan mewakili tiap Content di daftar studio konten (contoh:productName).publishWithAuthor: Menentukan apakah informasi penulis disertakan saat Content dipublikasikan. Nilai bawaannya adalahfalse.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" } }).
| Properti | Tipe | Keterangan |
|---|---|---|
id | string | Pengenal unik resource. |
type | string | Jenis resource. Content Type selalu "ContentType". |
space | Refer<Space> | Space tempat Content Type ini berada. |
createdBy | Refer<User> | Pengguna yang membuatnya. |
createdAt | string (date-time) | Waktu pembuatan. |
updatedBy | Refer<User> | Pengguna yang terakhir menyuntingnya. |
updatedAt | string (date-time) | Waktu penyuntingan terakhir. |
version | integer (≥1) | Versi resource. Naik 1 pada setiap perubahan seperti pembuatan, penyuntingan, publikasi, dan pembatalan publikasi. |
status | string (enum) | Status publikasi. Salah satu dari Draft, Changed, Published, Archived. |
publish | object | Riwayat publikasi. Lihat kunci di bawah. |
Kunci dari objek publish:
| Kunci | Tipe | Keterangan |
|---|---|---|
version | integer | sys.version pada saat publikasi terakhir. |
at | string (date-time) | Waktu publikasi terakhir. |
firstAt | string (date-time) | Waktu publikasi pertama. Tetap tersimpan meski dibatalkan publikasinya. |
counter | integer | Jumlah kumulatif publikasi. |
by | Refer<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).
| Kunci | Tipe | Keterangan |
|---|---|---|
id | string (1~64) | Pengenal unik field. Diberikan secara otomatis saat pembuatan. |
name | string (1~50) | Nama field yang ditampilkan di studio konten (contoh: Nama produk). |
apiName | string (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 _). |
type | string (enum) | Tipe field. Lihat Jenis field (type) di bawah. |
localized | boolean | Menentukan apakah dapat memiliki nilai multibahasa. |
required | boolean | Menentukan apakah pengisian wajib. |
validations | array | Daftar aturan validasi yang diterapkan pada nilai. Array kosong [] jika tidak ada aturan. Lihat Validasi (validations) di bawah. |
disabled | boolean | Menentukan apakah dinonaktifkan. |
targetType | string (enum) | Hanya saat type adalah Refer. Menentukan apakah target referensi adalah Content atau Media. |
items | object | Hanya 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.
type | Arti | Catatan |
|---|---|---|
ShortText | Teks satu baris yang pendek. | Cocok untuk pengambilan kata kunci yang tepat. |
LongText | Teks badan yang panjang. | Mendukung pencarian kemiripan teks penuh (full-text). |
RichText | Badan teks dengan format. | Bukan target pencarian dan digunakan untuk menyajikan format. |
Long | Bilangan bulat. | Contoh: harga price. |
Number | Bilangan riil (termasuk desimal). | |
Boolean | Benar/salah. | |
Date | Tanggal dan waktu. | |
Json | Struktur JSON sembarang. | |
Location | Lokasi (koordinat). | |
Refer | Referensi yang menunjuk ke resource lain. | Tentukan Content atau Media melalui targetType. |
Array | Array 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.
| Kunci | Bentuk | Keterangan |
|---|---|---|
size | { "min", "max" } | Minimum dan maksimum panjang teks atau ukuran array. |
unique | boolean | Melarang 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. |
in | array | Daftar 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. |
mediaMimetypeGroup | array | Daftar 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). |
referContentType | array | Daftar Content Type yang referensinya diizinkan pada field Refer (Content). Setiap item berbentuk Refer<ContentType>. |
message | string | Pesan 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.
status | Arti |
|---|---|
Draft | Keadaan belum dipublikasikan. |
Changed | Keadaan pernah dipublikasikan, tetapi perubahan setelahnya belum dipublikasikan. |
Published | Keadaan sudah dipublikasikan dan tidak ada perubahan yang belum dipublikasikan. |
Archived | Keadaan 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
| Sasaran | Batasan |
|---|---|
name (Content Type) | 1~64 karakter, wajib. |
description | Maksimal 128 karakter, opsional. |
fields | 1~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 membuatnyaDraft, lalu hapus (statusArchivedjuga 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.
Dokumen terkait
- Pemodelan Content: Cara membuat Content Type di studio konten.
- Status dan publikasi: Arti dari publikasi dan versi.
