ACMA (App Content Management API)
Terakhir diperbarui: 22 Juni 2026
ACMA (App Content Management API) adalah API yang dipakai anggota yang mendaftar ke produk, yakni ServiceUser, untuk menangani Content dan Media secara langsung. Anggap saja sama seperti Weegloo User menangani konten lewat CMA, tetapi dilakukan dengan identitas anggota. Lewat ACMA, anggota membuat (Create), membaca (Read), mengubah (Update), dan menghapus (Delete) Content dan Media. Cakupan izin tiap tindakan ditentukan oleh ServiceUserRole.
Pemanggilan ACMA memakai Bearer token yang diterbitkan oleh ServiceLogin. Token ini hanya berlaku di ACMA dan ACDA, dan tidak dapat dipakai untuk CMA atau CDA (untuk alur penerbitan token, lihat Auth API). Content Type, yaitu kerangka yang diikuti anggota, tidak dibuat atau diubah di ACMA. Content Type dikelola oleh Weegloo User di CMA, dan ACMA tidak memiliki endpoint untuk membuat atau mengubah Content Type.
Perbedaan dengan CMA
ACMA setara dengan CMA, tetapi identitas, cakupan kepemilikan, dan perilaku penerbitannya berbeda.
| Aspek | ACMA (ServiceUser) | CMA (Weegloo User) |
|---|---|---|
| Identitas | ServiceUser yang mendaftar ke ServiceLogin. Izinnya ditentukan oleh ServiceUserRole. | Weegloo User. Izinnya ditentukan oleh SpaceRole. |
| Cakupan akses | Cakupan baca, ubah, dan hapus ditentukan oleh ServiceUserRole (cara yang sama dengan baca per-anggota pada ACDA). Jika createdBy disetel ke :self pada aturan peran, tindakan tersebut dibatasi hanya pada materi yang dibuat sendiri, dan biasanya ini diterapkan pada ubah dan hapus. Baca dapat mencakup materi anggota lain sejauh peran mengizinkannya. | Menangani seluruh materi Space dalam cakupan yang diizinkan SpaceRole. |
| Penerbitan saat membuat | Saat Content atau Media dibuat, materi langsung diterbitkan. Tidak ada panggilan penerbitan terpisah. | Content harus dibuat dulu, lalu butuh panggilan penerbitan terpisah agar masuk ke jalur pengiriman. |
| Penerbitan saat menghapus | Saat menghapus, pembatalan penerbitan terjadi otomatis bersamaan. Tidak perlu membatalkan penerbitan lebih dulu. | Materi yang berstatus terbit biasanya dibatalkan penerbitannya dulu, baru dihapus. |
| Profil sendiri | Diambil lewat GET /me (bukan /spaces/{spaceId}/me). | GET /me (Weegloo User saat ini). |
| Content Type | Tidak ada endpoint untuk membuat atau mengubah. Kerangka adalah wewenang CMA. | Membuat, mengubah, dan menerbitkan Content Type. |
Anggota yang ServiceUser.isAdmin-nya bernilai true hanya dapat melakukan tambahan menghapus materi anggota lain. Ini adalah izin yang ditambahkan di atas tindakan yang diizinkan peran, dan bukan berarti izin ubah atau izin baca atas materi anggota lain bertambah. Itu pun hanya mungkin dalam cakupan tindakan yang diizinkan ServiceUserRole anggota tersebut.
Untuk penjelasan rinci perilaku di atas (cakupan kepemilikan, penerbitan otomatis saat membuat, pembatalan penerbitan otomatis saat menghapus, cakupan
isAdmin), lihat Login ServiceUser (konsep).
Info Saya (Me)
GET /me mengembalikan info ServiceUser pemilik token saat ini. Berbeda dengan CMA, panggilannya tidak melewati jalur Space, melainkan langsung memanggil /me.
Berikut adalah struktur respons ServiceUser. sys memuat informasi identitas dan pendaftaran, sedangkan badan respons memuat atribut tampilan seperti nickname dan avatarUrl.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ",
"type": "ServiceUser",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"provider": "google",
"email": "minji.kim@example.com",
"createdAt": "2026-06-17T09:12:03.114Z",
"updatedAt": "2026-06-17T09:12:03.114Z"
},
"nickname": "Minji",
"avatarUrl": "https://lh3.googleusercontent.com/a/example-avatar",
"enableLogin": true,
"isAdmin": false
}Kunci utama:
sys.id: Pengenal unik ServiceUser.createdBypada Content dan Media yang dibuat anggota menunjuk ke nilai ini.sys.type: Jenis resource; untuk ServiceUser selalu"ServiceUser".sys.space: Referensi yang menunjuk ke Space tempat anggota ini berada.sys.provider: Penyedia yang dipakai untuk login (misalnyagoogle).sys.email: Alamat email yang disediakan penyedia login.nickname: Nama tampilan anggota (wajib).avatarUrl: Alamat gambar profil (opsional).roleOverride: Referensi yang menunjuk ke ServiceUserRole lain bila peran tersebut diterapkan khusus untuk anggota ini (opsional). Jika tidak disetel, mengikuti peran bawaan ServiceLogin.enableLogin: Apakah login diizinkan.isAdmin: Jikatrue, anggota dapat menghapus materi anggota lain (lihat Perbedaan dengan CMA di atas).
Yang dapat diubah hanya nickname dan avatarUrl. Nilai seperti provider, email, dan isAdmin tidak diubah sendiri oleh anggota.
Content
Content adalah materi individual yang mengikuti kerangka bernama Content Type. Untuk toko pakaian daring, tiap produk yang mengikuti Content Type "Produk" adalah satu Content. Di ACMA, anggota menangani Content miliknya lewat jalur yang terikat pada Space dan Content Type (/spaces/{spaceId}/content-types/{contentTypeId}/contents).
Berikut adalah satu Content "Produk" dari Space demo.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7OGhwhlqvAvq",
"type": "Content",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"contentType": { "sys": { "id": "3trmXRLdJF4GBlAjtcuoZ7Pnxj8dlA", "type": "Refer", "targetType": "ContentType" } },
"publish": {
"version": 3,
"at": "2026-06-16T14:35:11.210Z",
"firstAt": "2026-06-15T15:16:20.180Z",
"counter": 3,
"by": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } }
},
"createdBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"createdAt": "2026-06-15T15:16:12.151Z",
"updatedAt": "2026-06-16T14:35:11.210Z",
"updatedBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"version": 4,
"status": "Published"
},
"fields": {
"price": { "ko-KR": 18000 },
"description": { "ko-KR": "이중 진공 단열로 보온·보냉이 오래갑니다. 500ml 대용량." },
"photo": {},
"productName": { "ko-KR": "스테인리스 텀블러 500ml" }
},
"metadata": { "tags": [] }
}Kunci utama:
sys.id: Pengenal unik Content. Nilai ini masuk ke{contentId}pada jalur ambil tunggal, ubah, dan hapus.sys.contentType: Referensi yang menunjuk ke Content Type yang diikuti Content ini.sys.status: Status penerbitan. Content yang dibuat di ACMA langsung diterbitkan, sehingga dikembalikan sebagaiPublished.sys.version: Versi resource, naik 1 setiap kali ada perubahan.sys.publish: Riwayat penerbitan (version,at,firstAt,counter,by).fields: Memuat nilai tiap field dalam bentuk{ apiName: { locale: value } }. Contoh di atas memuatprice,description,photo, danproductNamedalam localeko-KR. Field tanpa nilai (photo) berupa objek kosong.metadata.tags: Daftar Tag yang menempel pada Content ini.
Ambil daftar menerima parameter kueri standar (limit, skip, next, prev, order, select, include), dan responsnya mengembalikan array items beserta links (kursor halaman).
Media
Media adalah aset berkas yang diunggah (gambar, video, dokumen, dan lain-lain). Untuk membuat Media, anggota harus lebih dulu mengunggah berkas lewat Upload API untuk mendapatkan Upload, lalu menyertakan sys.id Upload tersebut pada permintaan pembuatan Media. Media pun langsung diterbitkan otomatis bersamaan dengan pembuatan di ACMA.
Berikut adalah Media foto tumbler yang diunggah ke Space demo.
{
"sys": {
"id": "3trmXRM3RqbgSnifyg7OGjUMsPV3uU",
"type": "Media",
"space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
"publish": {
"version": 1,
"at": "2026-06-15T15:17:30.825Z",
"firstAt": "2026-06-15T15:17:30.825Z",
"counter": 1,
"by": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } }
},
"createdBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"createdAt": "2026-06-15T15:17:30.589Z",
"updatedAt": "2026-06-15T15:17:30.825Z",
"updatedBy": { "sys": { "id": "3trmXRM3RqbgSnifyg7PSrUm9k2BaZ", "type": "Refer", "targetType": "ServiceUser" } },
"version": 2,
"status": "Published"
},
"fields": {
"title": { "ko-KR": "스테인리스 텀블러 500ml 정면 컷" },
"description": { "ko-KR": "흰 배경에서 찍은 텀블러 정면 제품 사진입니다." },
"file": {
"ko-KR": {
"fileName": "tumbler.png",
"contentType": "image/png",
"mimeGroups": ["Image"],
"url": "https://weegloo-media.com/medias/HnQ32YiH/3uU/3trmXRM3RqbgSnifyg7OGjUMsPV3uU/ko-KR/1/tumbler.png",
"detail": { "size": 50847, "image": { "width": 900, "height": 900 } }
}
}
},
"metadata": { "tags": [] }
}Kunci utama:
sys.id: Pengenal unik Media. Nilai ini masuk ke{mediaId}pada jalur ambil tunggal dan hapus, serta merupakan nilai yang ditunjuk saat Content mereferensikan foto.sys.status: Status penerbitan. Media yang dibuat di ACMA langsung diterbitkan, sehingga dikembalikan sebagaiPublished.fields.titledanfields.description: Memuat judul dan deskripsi aset sebagai peta locale (opsional).fields.file: Informasi berkas per locale (wajib). Saat pemrosesan selesai,url(alamat untuk pengiriman),mimeGroups, dandetail(ukuran, resolusi gambar, dan lain-lain) akan terisi.
Pada fields.file di permintaan pembuatan Media, sertakan referensi Upload dalam keadaan sebelum diproses. Tiap entri berkas memuat seluruh fileName, contentType, mimeGroups, state, dan upload; state selalu "PENDING", dan upload diisi sys.id Upload yang diterima lewat Upload API. Tepat setelah pembuatan, platform memproses berkas, dan saat pemrosesan selesai, url dan detail terisi seperti pada respons di atas.
Dokumen terkait
- Auth API: Alur OAuth untuk menerbitkan token yang dipakai pada pemanggilan ACMA.
- ACDA: API baca untuk mengirimkan konten terbit ke anggota.
- Login ServiceUser (konsep): Pengaturan ServiceLogin dan ServiceUserRole.
- Upload API: Unggah berkas sebelum membuat Media.
