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:apiNamedari 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 adalahfalse, 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 menjaditrue, Content yang sudah dipublikasikan harus dipublikasikan ulang agar penulisnya terisi. Draf yang ditangani API pengelolaan (CMA/ACMA) tetap memilikisys.createdByterlepas dari pengaturan ini. Agar penulis (byline) tampil pada respons pengiriman, atau agar filtercreatedBypada aturan izin (termasuk:self) dinilai di CDA/ACDA, nilai ini harus diseteltrue(lihat penjelasan filtercreatedBypada 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" } }).
| 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 | Batas nilai | Catatan |
|---|---|---|---|
ShortText | Teks satu baris yang pendek. | 64 karakter | Cocok untuk pengambilan kata kunci yang tepat. |
LongText | Teks badan yang panjang. | 5.120 karakter | Mendukung pencarian kemiripan teks penuh (full-text). |
RichText | Badan teks dengan format. | 204.800 karakter | Bukan target pencarian dan digunakan untuk menyajikan format. |
Long | Bilangan bulat. | Contoh: harga price. | |
Number | Bilangan riil (termasuk desimal). | Hanya nilai berhingga | Nilai tak hingga dan NaN tidak diterima. |
Boolean | Benar/salah. | ||
Date | Tanggal dan waktu. | ||
Json | Struktur JSON sembarang. | 5.120 karakter setelah serialisasi | Angka di dalam struktur juga harus berhingga. |
Location | Lokasi (koordinat). | latitude -90longitude -180 | |
Refer | Referensi yang menunjuk ke resource lain. | Tentukan Content atau Media melalui targetType. | |
Array | Array yang menampung beberapa nilai. | 64 elemen | 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).
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.
| 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 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 membuatnyaDraft, lalu hapus (statusArchivedjuga dapat dihapus).
Error
Berikut adalah kode yang muncul saat Anda menangani Content Type. Untuk kode yang berlaku umum pada semua resource, lihat Error umum.
| Kode | Kondisi |
|---|---|
WGL422010 | Anda 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. |
WGL422009 | Anda mencoba menghapus Content Type yang berstatus publikasi (Published, Changed) tanpa membatalkan publikasi Content Type tersebut lebih dahulu. |
WGL422006 | Anda mencoba membatalkan publikasi Content Type yang tidak berstatus publikasi. |
WGL400002 | Jumlah fields melebihi jumlah yang diizinkan. Pembuatan, penyuntingan, dan penyuntingan parsial semuanya menjalani pemeriksaan ini. |
WGL400045 | Nilai yang Anda tulis pada displayField tidak ada pada satu pun apiName di dalam fields milik Content Type tersebut. |
WGL400046 | Field yang harus ditulis bersama atribut pasangan tidak menyertakan atribut tersebut. Array memerlukan items, dan Refer memerlukan targetType. |
WGL400040 | Ada 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.
Dokumen terkait
- Pemodelan Content: Cara membuat Content Type di studio konten.
- Status dan publikasi: Arti dari publikasi dan versi.
