Dokumentasi REST API EventMedia
Selamat datang di portal dokumentasi REST API EventMedia. API ini menyediakan akses terprogram ke seluruh katalog event Indonesia, direktori kota, kategori, tagar pencarian, artikel berita, pengajuan event publik, serta integrasi unggah file/poster langsung ke CDN.
Panduan Standar Pagination JSON
Semua endpoint koleksi data (seperti /api/events, /api/news, /api/categories, /api/cities, /api/tags) mengimplementasikan format pagination standar untuk memudahkan navigasi halaman pada aplikasi client:
{
"success": true,
"data": [ /* Array item data */ ],
"pagination": {
"page": 1, // Nomor halaman aktif (integer)
"limit": 12, // Jumlah item per halaman (integer)
"total": 48, // Total keseluruhan item yang sesuai (integer)
"total_pages": 4, // Total kalkulasi halaman (ceil(total / limit))
"has_next": true, // true jika ada halaman setelah ini
"has_prev": false, // true jika ada halaman sebelum ini
"next_page": 2, // Angka halaman berikutnya atau null
"prev_page": null // Angka halaman sebelumnya atau null
}
}
page: integer, default =1.limit: integer, batas item (default 12 untuk event, 9 untuk artikel, 20 untuk kota/kategori, maksimum 100).
Format Respons & Kode Status HTTP
Seluruh respons mengembalikan format JSON yang konsisten. Jika terjadi kesalahan, status HTTP non-200 disertai pesan penjelasan di properti error.
{
"success": true,
"data": [ ... ],
"pagination": { ... }
}
{
"success": false,
"error": "Pesan deskripsi kesalahan..."
}
Integrasi Upload Poster ke CDN (cfcdn.aksisoft.my.id)
Aplikasi menggunakan arsitektur AJAX upload langsung ke endpoint CDN https://cfcdn.aksisoft.my.id/index.php (atau via proxy lokal /api/upload). API mengembalikan objek dengan properti data.url yang dapat langsung disematkan sebagai poster_url event.
/api/check-file?url=...) sebelum memperbarui pratinjau gambar.
const formData = new FormData();
formData.append('file', fileInput.files[0]);
// 1. Upload file ke endpoint CDN
const res = await fetch('https://cfcdn.aksisoft.my.id/index.php', {
method: 'POST',
body: formData
});
const result = await res.json();
const uploadedImageUrl = result.data?.url || result.url;
// 2. Tunggu 5 - 10 detik masa resolusi CDN sebelum menampilkan preview
await new Promise(resolve => setTimeout(resolve, 5000));
// 3. Cek ketersediaan file di CDN
const checkRes = await fetch('/api/check-file?url=' + encodeURIComponent(uploadedImageUrl));
const checkData = await checkRes.json();
if (checkData.exists) {
console.log('File siap digunakan:', uploadedImageUrl);
}
Katalog Lengkap Endpoint API
17 endpoints terdaftarDaftar Event (dengan Pagination & Filter)
Mengambil daftar event aktif dan terverifikasi dengan dukungan pagination, pencarian teks lengkap, filter kategori, kota, tags, format (offline/online), harga (gratis/berbayar), dan pengurutan.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| page | query | integer | Tidak | Nomor halaman (mulai dari 1). |
| limit | query | integer | Tidak | Jumlah event per halaman (max: 100). |
| q | query | string | Tidak | Kata kunci pencarian judul, deskripsi, atau organizer. |
| kategori | query | string | Tidak | Slug kategori event (contoh: "musik", "teknologi"). |
| kota | query | string | Tidak | Slug kota pelaksanaan event (contoh: "jakarta", "surabaya"). |
| tag | query | string | Tidak | Slug tag spesifik (contoh: "workshop", "festival"). |
| format | query | string | Tidak | Format pelaksanaan event. |
| gratis | query | integer | Tidak | Filter event gratis (1 = gratis, 0 = berbayar). |
| sort | query | string | Tidak | Urutan hasil. |
curl -X GET "https://eventmedia.my.id/api/events?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"data": [
{
"id": "evt-a1b2c3d4",
"title": "Tech In Motion Summit 2026",
"slug": "tech-in-motion-summit-2026",
"short_description": "Konferensi teknologi tahunan terbesar.",
"poster_url": "https://young-unit-7407.wakeawakewik.workers.dev/example.png",
"start_date": "2026-11-20",
"end_date": "2026-11-21",
"start_time": "09:00",
"event_type": "offline",
"venue_name": "Grand City Hall",
"city_name": "Surabaya",
"city_slug": "surabaya",
"category_name": "Teknologi",
"category_slug": "teknologi",
"ticket_price_min": 75000,
"ticket_price_max": 250000,
"is_free": 0,
"organizer_name": "DevHub Indonesia"
}
],
"pagination": {
"page": 1,
"limit": 12,
"total": 42,
"total_pages": 4,
"has_next": true,
"has_prev": false,
"next_page": 2,
"prev_page": null
}
}
Detail Event Spesifik
Mengambil data lengkap sebuah event berdasarkan slug unik atau ID event, termasuk deskripsi kaya, jadwal, tiket, organizer, koordinat peta, dan relasi tags.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| slug | path | string | Ya | Slug unik atau ID event. |
curl -X GET "https://eventmedia.my.id/api/events/tech-in-motion-2026?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"event": {
"id": "evt-a1b2c3d4",
"title": "Tech In Motion Summit 2026",
"slug": "tech-in-motion-summit-2026",
"description": "<p>Detail lengkap mengenai sesi dan pembicara...</p>",
"poster_url": "https://young-unit-7407.wakeawakewik.workers.dev/example.png",
"gallery": [],
"start_date": "2026-11-20",
"end_date": "2026-11-21",
"start_time": "09:00",
"end_time": "17:00",
"event_type": "offline",
"venue_name": "Grand City Hall",
"venue_address": "Jl. Pemuda No. 1",
"city_name": "Surabaya",
"category_name": "Teknologi",
"organizer_name": "DevHub Indonesia",
"contact_phone": "081234567890",
"ticket_url": "https://tiket.example.com",
"is_free": 0,
"ticket_price_min": 75000,
"tags": [
{
"id": "tag-1",
"name": "AI",
"slug": "ai"
}
]
}
}
Kirim Event Publik (Submission Form)
Memungkinkan komunitas dan organizer mengajukan event baru untuk dikurasi dan disetujui oleh tim EventMedia sebelum tayang secara publik.
{
"title": "string (wajib, judul event)",
"category_id": "string (wajib, ID kategori)",
"city_id": "string (opsional, ID kota)",
"start_date": "string YYYY-MM-DD (wajib, tanggal mulai)",
"end_date": "string YYYY-MM-DD (opsional, tanggal selesai)",
"start_time": "string HH:mm (opsional, jam mulai)",
"event_type": "offline | online | hybrid (default: offline)",
"venue_name": "string (opsional, nama lokasi venue)",
"venue_address": "string (opsional, alamat lengkap)",
"organizer_name": "string (wajib, nama penyelenggara)",
"contact_name": "string (opsional, nama PIC)",
"contact_phone": "string (wajib jika email kosong)",
"contact_email": "string (wajib jika nomor telepon kosong)",
"ticket_price_min": "number (opsional, nominal harga tiket termurah)",
"is_free": "boolean / 0 / 1 (apakah event gratis)",
"ticket_url": "string (opsional, tautan pembelian tiket atau registrasi)",
"poster_url": "string (opsional, URL gambar poster hasil upload CDN)",
"tags": "string (opsional, koma terpisah, contoh: \"workshop, tech\")"
}
curl -X POST "https://eventmedia.my.id/api/events/submit" \
-H "Accept: application/json"
{
"success": true,
"message": "Event Anda berhasil diajukan! Tim kurator EventMedia akan memeriksa dan mengonfirmasi event Anda sebelum dipublikasikan.",
"event": {
"id": "evt-x9y8z7",
"title": "Workshop Flutter Modern",
"slug": "workshop-flutter-modern"
}
}
Daftar Kategori Event (dengan Pagination & Search)
Mengambil daftar kategori event aktif dengan informasi jumlah event dan metadata pagination.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| page | query | integer | Tidak | Nomor halaman. |
| limit | query | integer | Tidak | Jumlah kategori per halaman. |
| q | query | string | Tidak | Filter pencarian nama atau slug kategori. |
| active_only | query | integer | Tidak | Hanya tampilkan kategori aktif (1/0). |
curl -X GET "https://eventmedia.my.id/api/categories?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"data": [
{
"id": "cat-musik",
"name": "Musik & Konser",
"slug": "musik",
"description": "Konser musik, festival, dan gig lokal.",
"icon": "Music",
"image_url": "https://young-unit-7407.wakeawakewik.workers.dev/music.jpg",
"is_active": 1,
"sort_order": 1
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 10,
"total_pages": 1,
"has_next": false,
"has_prev": false
}
}
Detail Kategori Spesifik
Mengambil informasi kategori berdasarkan slug uniknya.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| slug | path | string | Ya | Slug unik kategori (contoh: "musik"). |
curl -X GET "https://eventmedia.my.id/api/categories/tech-in-motion-2026?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"category": {
"id": "cat-musik",
"name": "Musik & Konser",
"slug": "musik",
"description": "Konser musik, festival, dan gig lokal.",
"icon": "Music",
"is_active": 1
}
}
Daftar Kota Pelaksanaan (dengan Pagination & Search)
Mengambil daftar kota tempat penyelenggaraan event lengkap dengan provinsi dan thumbnail.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| page | query | integer | Tidak | Nomor halaman. |
| limit | query | integer | Tidak | Jumlah kota per halaman. |
| q | query | string | Tidak | Pencarian nama kota atau provinsi. |
curl -X GET "https://eventmedia.my.id/api/cities?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"data": [
{
"id": "city-jkt",
"name": "Jakarta",
"slug": "jakarta",
"province": "DKI Jakarta",
"image_url": "https://young-unit-7407.wakeawakewik.workers.dev/jkt.jpg"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 8,
"total_pages": 1,
"has_next": false,
"has_prev": false
}
}
Detail Kota Spesifik
Mengambil informasi kota berdasarkan slug unik.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| slug | path | string | Ya | Slug unik kota (contoh: "surabaya"). |
curl -X GET "https://eventmedia.my.id/api/cities/tech-in-motion-2026?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"city": {
"id": "city-sby",
"name": "Surabaya",
"slug": "surabaya",
"province": "Jawa Timur",
"country": "Indonesia"
}
}
Daftar Artikel & Berita (dengan Pagination)
Mengambil artikel berita, tips event, liputan dan ulasan dari kurator EventMedia dengan pagination.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| page | query | integer | Tidak | Nomor halaman aktif. |
| limit | query | integer | Tidak | Batas jumlah artikel per halaman (max: 50). |
| q | query | string | Tidak | Pencarian teks judul atau isi berita. |
| kategori | query | string | Tidak | Kategori artikel (contoh: "Tips Event", "Liputan"). |
| featured | query | integer | Tidak | Hanya artikel pilihan editor. |
curl -X GET "https://eventmedia.my.id/api/news?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"data": [
{
"id": "news-01",
"title": "Panduan Lengkap Mengatur Budget Festival Musik",
"slug": "panduan-lengkap-budget-festival-musik",
"excerpt": "Kiat hemat dan nyaman menikmati rangkaian festival musik di Indonesia...",
"cover_url": "https://young-unit-7407.wakeawakewik.workers.dev/news1.jpg",
"category": "Tips Event",
"author_name": "Redaksi EventMedia",
"published_at": "2026-08-10T10:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 9,
"total": 18,
"total_pages": 2,
"has_next": true,
"has_prev": false,
"next_page": 2,
"prev_page": null
}
}
Detail Artikel Berita
Mengambil konten lengkap artikel, format teks HTML, info penulis, dan tanggal publikasi.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| slug | path | string | Ya | Slug unik artikel berita. |
curl -X GET "https://eventmedia.my.id/api/news/tech-in-motion-2026?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"article": {
"id": "news-01",
"title": "Panduan Lengkap Mengatur Budget Festival Musik",
"slug": "panduan-lengkap-budget-festival-musik",
"content": "<p>Isi lengkap konten artikel di sini...</p>",
"cover_url": "https://young-unit-7407.wakeawakewik.workers.dev/news1.jpg",
"author_name": "Redaksi EventMedia",
"published_at": "2026-08-10T10:00:00Z"
}
}
Upload Gambar / Poster ke Cloudflare CDN
Endpoint upload file multipart/form-data. File diunggah langsung atau diproksikan ke layanan CDN aksisoft (cfcdn.aksisoft.my.id) dan mengembalikan URL publik langsung (data.url). Batas ukuran file 24 MB.
{
"file": "binary / file (wajib, file gambar format PNG, JPG, JPEG, WEBP, maks 24 MB)"
}
curl -X POST "https://eventmedia.my.id/api/upload" \
-H "Accept: application/json"
{
"success": true,
"url": "https://young-unit-7407.wakeawakewik.workers.dev/1402bb895e-poster.png",
"data": {
"url": "https://young-unit-7407.wakeawakewik.workers.dev/1402bb895e-poster.png"
}
}
Verifikasi Ketersediaan File di CDN (Pengecekan Resolusi)
Mengecek ketersediaan dan status resolusi HTTP (HEAD/GET) dari URL file CDN. Direkomendasikan dipanggil setelah upload berhasil dan menunggu 5-10 detik masa propagasi CDN.
curl -X GET "https://eventmedia.my.id/api/check-file" \
-H "Accept: application/json"
{
"url": "https://cfcdn.aksisoft.my.id/uploads/sample-poster.jpg",
"exists": true,
"status": 200,
"timestamp": "2026-09-16T16:50:00.000Z"
}
Statistik Publik Platform
Mengambil metrik ringkasan jumlah event aktif terverifikasi, jumlah kota, kategori, dan artikel berita di EventMedia.
curl -X GET "https://eventmedia.my.id/api/stats" \
-H "Accept: application/json"
{
"success": true,
"stats": {
"total_events": 58,
"published_events": 52,
"total_categories": 12,
"total_cities": 10,
"total_news": 15
}
}
Pengaturan Publik Situs
Mengambil konfigurasi publik situs seperti judul, meta description, kontak, logo URL, dan tautan sosial media.
curl -X GET "https://eventmedia.my.id/api/settings" \
-H "Accept: application/json"
{
"success": true,
"settings": {
"site_title": "EventMedia.id",
"site_tagline": "Katalog & Portal Event Terlengkap Indonesia",
"site_logo": "/logo.svg",
"instagram_url": "https://instagram.com/eventmedia"
}
}
Autentikasi Admin (Login)
Melakukan login admin menggunakan username dan password. Jika berhasil, server akan menetapkan HttpOnly session cookie.
{
"username": "string (wajib)",
"password": "string (wajib)"
}
curl -X POST "https://eventmedia.my.id/api/admin/login" \
-H "Accept: application/json"
{
"success": true,
"user": {
"id": "usr-admin",
"username": "admin",
"name": "Administrator",
"role": "superadmin"
}
}
Daftar Event Admin (Semua Status & Pending Moderasi)
Membutuhkan cookie sesi admin terautentikasi. Mengambil seluruh event termasuk draft, pending, rejected, dan published.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| page | query | integer | Tidak | |
| limit | query | integer | Tidak | |
| status | query | string | Tidak | |
| q | query | string | Tidak |
curl -X GET "https://eventmedia.my.id/api/admin/events?page=1&limit=12" \
-H "Accept: application/json"
{
"success": true,
"events": [],
"total": 58,
"page": 1,
"limit": 50
}
Konfirmasi / Publikasikan Event Submission
Menyetujui event kiriman publik menjadi status published.
| Parameter | Lokasi | Tipe | Wajib | Deskripsi |
|---|---|---|---|---|
| id | path | string | Ya |
curl -X POST "https://eventmedia.my.id/api/admin/events/evt-sample/approve" \
-H "Accept: application/json"
{
"success": true,
"message": "Event berhasil dikonfirmasi dan diterbitkan."
}