API untuk Museum Digital Indonesia - Single Museum Pattern
API untuk Museum Digital Indonesia - Single Museum Pattern
CRUD operations untuk museum dengan single museum pattern
Kelola koleksi artifact dengan metadata lengkap
Integrasi dengan Media Service untuk upload file
Autentikasi via Account Service dengan RS256
https://museumdigi.id
Type: Bearer JWT
Header: Authorization: Bearer <token>
Token source: Account Service
Visualisasi alur data antara Account Service โ Museum โ Artifacts โ Media Service
Setiap organization hanya memiliki satu museum
Ambil museum milik organization dari JWT org_id
Auth: Required
Response Example:
{
"id": "f6c857ea-5428-427f-b7bb-a19bfaeff6cf",
"organization_id": "d6450e6c-c4ea-4e9f-a4d3-c9cf0c755d6a",
"name": "Museum Gangelang",
"location": "Bali",
"description": "Museum untuk organisasi ini",
"image_url": "https://media.museumdigi.id/media/abc123/photo.jpg",
"contact_info": "",
"artifact_count": 0,
"created_at": "2026-03-02T16:09:02+07:00",
"updated_at": "2026-03-02T16:09:02+07:00"
}
Update data museum milik organization
Auth: Required museum:write
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | optional | ex: Museum Gangelang Updated |
| location | string | optional | ex: Jakarta Pusat |
| description | string | optional | ex: Deskripsi museum yang diupdate |
| image_url | string | optional | ex: https://media.museumdigi.id/media/abc123/photo.jpg |
| contact_info | string | optional | ex: +62 812-3456-7890 |
Request Body:
{
"name": "Museum Gangelang Updated",
"location": "Bali",
"description": "Updated description"
}
Hapus museum milik organization
Auth: Required museum:delete
Update image URL museum (URL dari Media Service)
Auth: Required museum:write
| Field | Type | Required | Description |
|---|---|---|---|
| image_url | string | required | ex: https://media.museumdigi.id/media/abc123/photo.jpg |
Request Body:
{
"image_url": "https://media.museumdigi.id/media/xyz789/updated.jpg"
}
Kelola koleksi artifact museum
List semua artifact (public) atau filter by org (authenticated)
Auth: Optional (public access available)
| Param | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Halaman ke- (default: 1) |
| page_size | integer | optional | Jumlah item per halaman (default: 9) |
| search | string | optional | Cari berdasarkan nama/description |
Buat artifact baru
Auth: Required artifact:write
| Field | Type | Required | Description |
|---|---|---|---|
| museum_id | string (uuid) | required | ID museum pemilik |
| name | string | required | Nama artifact |
| description | string | optional | |
| category | string | optional | ex: historical |
| era | string | optional | ex: ancient |
| origin | string | optional | ex: Indonesia |
| status | string | optional | ex: active |
| image_url | string | optional | URL dari Media Service |
| model3d_url | string | optional | URL 3D model dari Media Service |
Request Body:
{
"museum_id": "f6c857ea-5428-427f-b7bb-a19bfaeff6cf",
"name": "Candi Borobudur Miniature",
"description": "Miniatur candi skala 1:100",
"category": "historical",
"era": "Modern",
"origin": "Indonesia",
"status": "active",
"image_url": "https://media.museumdigi.id/media/art123/photo.jpg",
"model3d_url": "https://media.museumdigi.id/media/3d123/model.glb"
}
Ambil detail artifact by ID
Auth: Optional (public access available)
Update data artifact
Auth: Required artifact:write
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | optional | |
| description | string | optional | |
| image_url | string | optional | |
| model3d_url | string | optional |
Request Body:
{
"name": "Artifact Updated",
"description": "Updated description",
"image_url": "https://media.museumdigi.id/media/art456/new-photo.jpg"
}
Hapus artifact
Auth: Required artifact:delete
Update image URL artifact
Auth: Required artifact:write
| Field | Type | Required | Description |
|---|---|---|---|
| image_url | string | required |
Request Body:
{
"image_url": "https://media.museumdigi.id/media/art789/image.jpg"
}
Kelola artikel/berita museum dan konten artifact
List semua artikel dengan filter dan pagination
Auth: Optional (public access available)
| Param | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Halaman ke- (default: 1) |
| page_size | integer | optional | Jumlah item per halaman (default: 12) |
| museum_id | string (uuid) | optional | Filter berdasarkan museum |
| type | string | optional | Filter berdasarkan tipe (news, artifact_detail) |
| search | string | optional | Cari berdasarkan judul/konten |
| is_published | boolean | optional | Filter berdasarkan status publish |
| include_deleted | boolean | optional | Sertakan artikel yang sudah dihapus (admin only) (default: false) |
Response Example:
{
"data": [
{
"id": "art-123",
"museum_id": "museum-456",
"user_id": "user-789",
"type": "news",
"title": "Pameran Baru Dibuka",
"slug": "pameran-baru-dibuka-1709523456",
"excerpt": "Kami dengan bangga mengumumkan...",
"content_html": "<h1>Pameran Baru</h1><p>Kami dengan bangga...</p>",
"cover_image": "https://media.museumdigi.id/media/art123/cover.jpg",
"is_published": true,
"published_at": "2024-03-15T10:00:00Z",
"created_at": "2024-03-10T08:00:00Z",
"updated_at": "2024-03-15T09:00:00Z"
}
],
"meta": {
"page": 1,
"page_size": 12,
"total": 1,
"total_pages": 1
}
}
Ambil artikel by slug (untuk akses publik)
Auth: Optional (public access available)
Ambil detail artikel by ID
Auth: Optional (public access available)
Buat artikel baru
Auth: Required article:write
| Field | Type | Required | Description |
|---|---|---|---|
| museum_id | string (uuid) | required | ID museum pemilik |
| type | string | required | Tipe artikel |
| artifact_id | string (uuid) | optional | Wajib jika type = artifact_detail |
| title | string | required | Judul artikel |
| slug | string | optional | URL slug (auto-generate jika kosong) |
| content | string (markdown) | required | Konten artikel dalam format Markdown |
| cover_image | string | optional | URL cover image dari Media Service |
| is_published | boolean | optional | Status publish |
Request Body:
{
"museum_id": "f6c857ea-5428-427f-b7bb-a19bfaeff6cf",
"type": "news",
"title": "Pameran Sejarah Indonesia 2024",
"content": "# Pameran Sejarah Indonesia\n\nKami dengan **bangga** mengumumkan...",
"cover_image": "https://media.museumdigi.id/media/art123/cover.jpg",
"is_published": true
}
Update data artikel
Auth: Required article:write
| Field | Type | Required | Description |
|---|---|---|---|
| type | string | optional | |
| artifact_id | string (uuid) | optional | |
| title | string | optional | |
| slug | string | optional | |
| content | string (markdown) | optional | |
| cover_image | string | optional | |
| is_published | boolean | optional |
Soft-delete artikel
Auth: Required article:delete
Restore artikel yang sudah dihapus
Auth: Required article:write
Museum Service tidak menangani upload file langsung. Frontend harus upload ke Media Service terlebih dahulu, kemudian kirim URL yang didapat ke Museum Service.
Service: Media Service (bukan Museum Service)
Auth: Required media:upload
curl -X POST https://museumdigi.id/api/v1/upload \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: multipart/form-data" \
-F "file=@photo.jpg" \
-F "folder_id=optional-folder-id"
Response:
{
"success": true,
"data": {
"media_id": "abc123...",
"url": "https://media.museumdigi.id/media/abc123/photo.jpg",
"thumbnail_url": "https://media.museumdigi.id/media/abc123/thumb.jpg"
}
}
Gunakan url dari response Media Service untuk update image:
// Update museum image
curl -X POST https://museumdigi.id/api/v1/museum/image \\
-H "Authorization: Bearer TOKEN" \\
-H "Content-Type: application/json" \\
-d '{"image_url": "https://media.museumdigi.id/media/abc123/photo.jpg"}'
// Update artifact image
curl -X POST https://museumdigi.id/api/v1/artifacts/{id}/image \\
-H "Authorization: Bearer TOKEN" \\
-H "Content-Type: application/json" \\
-d '{"image_url": "https://media.museumdigi.id/media/abc123/photo.jpg"}'
media_id di database jika perlu referensi ke file di Media Service (untuk delete atau update nanti).
Test API endpoints directly from this documentation. Masukkan JWT token (optional) dan parameters, lalu klik "Send Request".
๐ค Gunakan untuk upload file ke Media Service.
โ ๏ธ Note: Untuk upload file asli, gunakan curl atau Postman dengan multipart/form-data.
Click "Send Request" to see the response...