Kembali ke beranda

API & MCP komunitas.online

Hubungkan AI agent (Claude, dsb.) atau aplikasimu sendiri untuk mengelola komunitas: bikin post, susun kelas, jadwalkan event, setujui member, dan pantau statistik — semua atas nama akunmu, sesuai izin yang kamu pilih. Khusus creator: hanya akun yang memiliki komunitas yang bisa membuat kunci API atau menghubungkan MCP.

Autentikasi

Buat kunci API di Profil → API & Agen AI, lalu sertakan di setiap request:

Authorization: Bearer ko_xxxxxxxxxxxxxxxx

Izin efektif = irisan scope kunci dengan peranmu di tiap komunitas. Kunci dengan scope write:classroom tetap tidak bisa menyusun kelas di komunitas tempat kamu bukan pengelola.

MCP — hubungkan Claude & AI agent lain

Endpoint MCP (Streamable HTTP): https://komunitas.online/api/mcp

Claude (custom connector): Settings → Connectors → Add custom connector → isi URL di atas — kamu akan diarahkan ke halaman izin komunitas.online, tinggal klik Izinkan (OAuth, tanpa menyentuh kunci API).

Claude Code:

claude mcp add --transport http komunitas https://komunitas.online/api/mcp \
  -H "Authorization: Bearer ko_xxxxxxxxxxxxxxxx"

Agent tanpa browser (Hermes di VPS, skrip, CLI) — kode sambung

Standar OAuth device flow (RFC 8628). Agent minta kode, tampilkan tautannya ke user, lalu poll token endpoint sampai user menekan Izinkan. Tidak butuh callback, jalan dari server mana pun.

# 1. minta kode (client_name tampil di halaman Izinkan; scope opsional)
curl -s -X POST https://komunitas.online/oauth/device \
  -d "client_name=Hermes" -d "scope=read write:content write:classroom"
# → { "user_code": "4F7Q-XK2M", "verification_uri_complete": "https://komunitas.online/device?code=4F7Q-XK2M",
#     "device_code": "...", "interval": 5, "expires_in": 900 }

# 2. tampilkan verification_uri_complete ke user, lalu poll tiap 5 detik:
curl -s -X POST https://komunitas.online/oauth/token \
  -d "grant_type=urn:ietf:params:oauth:grant-type:device_code" -d "device_code=..."
# → sebelum diizinkan: { "error": "authorization_pending" }
# → setelah Izinkan:   { "access_token": "ko_...", "token_type": "Bearer", "scope": "read write:content ..." }

# 3. pakai sebagai header MCP/REST: Authorization: Bearer ko_...

Malas menulis kodenya? Tempelkan prompt ini ke agent-mu:

Prompt untuk agent

Sambungkan dirimu ke MCP komunitas.online (https://komunitas.online/api/mcp) dengan OAuth device flow. Jangan minta kunci API dari saya.

1. Kirim POST https://komunitas.online/oauth/device (form-encoded) dengan client_name=<nama agent-mu> dan scope=read write:content write:classroom write:events write:members. Balasannya JSON berisi device_code, user_code, verification_uri_complete, interval, expires_in.
2. Tampilkan verification_uri_complete dan user_code ke saya, lalu tunggu saya menekan Izinkan di browser.
3. Setiap `interval` detik, kirim POST https://komunitas.online/oauth/token (form-encoded) dengan grant_type=urn:ietf:params:oauth:grant-type:device_code dan device_code=<device_code>. Selama balasannya {"error":"authorization_pending"} terus tunggu; kalau "slow_down" tunggu dua kali lebih lama; kalau "expired_token" ulangi dari langkah 1; kalau "access_denied" berhenti dan beri tahu saya.
4. Begitu balasannya berisi access_token, simpan di tempat aman (file konfigurasi atau variabel lingkungan) dan pakai sebagai header "Authorization: Bearer <access_token>" untuk MCP https://komunitas.online/api/mcp (Streamable HTTP) maupun REST API https://komunitas.online/api/v1. Jangan pernah menuliskan token di percakapan.
5. Setelah tersambung, panggil tool list_my_communities dan laporkan komunitas mana saja yang bisa kamu kelola.

Tersedia ±40 tool: list_my_communities, get_community, update_community (halaman Tentang), create_post, create_course, create_lesson, create_event, approve_member, get_community_stats, dll.

Contoh cepat (REST)

Base URL: https://komunitas.online/api/v1

# Siapa saya?
curl -H "Authorization: Bearer $TOKEN" \
  https://komunitas.online/api/v1/me

# Buat post (konten Markdown: ## judul, - daftar, **tebal**, > kutipan, --- pemisah; teks polos juga boleh)
curl -X POST -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Halo semua!","content":"Post pertama dari agent-ku."}' \
  https://komunitas.online/api/v1/communities/{slug}/posts

Sukses → { "data": ... }; daftar berhalaman menyertakan nextCursor (kirim balik sebagai ?cursor=). Gagal → { "error": { "code", "message" } } dengan kode: unauthorized, insufficient_scope, forbidden, not_found, invalid_request, rate_limited, conflict. Burst maks 120 request/menit per kunci; kuota harian mengikuti paket akun (Gratis: 300 request & 20 upload gambar per 24 jam; Pro: 10.000 & 200). Pantau pemakaianmu di Profil → API & Agen AI.

Endpoint v1
MethodPathScopeDeskripsi
GET/mereadIdentitas pemilik kunci
GET/me/communitiesreadKomunitas yang diikuti
GET/me/notificationsreadNotifikasi terbaru
GET/communities/{slug}readProfil & halaman Tentang (deskripsi sebagai Markdown)
PATCH/communities/{slug}write:settingsUbah halaman Tentang: tagline, deskripsi, sambutan, video, thumbnail (owner)
GET/communities/{slug}/statsreadStatistik (moderator+; saldo khusus owner)
GET/communities/{slug}/postsreadFeed post (cursor)
POST/communities/{slug}/postswrite:contentBuat post
GET/communities/{slug}/posts/{id}readDetail post + komentar
DELETE/communities/{slug}/posts/{id}write:contentHapus post
POST/communities/{slug}/posts/{id}/commentswrite:contentBalas post
GET/communities/{slug}/eventsreadEvent mendatang
POST/communities/{slug}/eventswrite:eventsBuat event
PATCH/communities/{slug}/events/{id}write:eventsUbah event (parsial)
DELETE/communities/{slug}/events/{id}write:eventsHapus event
GET/communities/{slug}/membersreadDaftar member (?status=PENDING butuh izin)
POST/communities/{slug}/members/{id}/approvewrite:membersSetujui calon member
POST/communities/{slug}/members/{id}/rejectwrite:membersTolak calon member
GET/communities/{slug}/reviewsreadUlasan komunitas
POST/uploadswrite:contentUnggah gambar (multipart `file` / JSON base64) — sisipkan ke konten sebagai baris ![deskripsi](url)
GET/communities/{slug}/coursesreadDaftar kelas
GET/communities/{slug}/courses/{id}readKelas lengkap (modul → pelajaran)
POST/communities/{slug}/courseswrite:classroomBuat kelas
PATCH/communities/{slug}/courses/{id}write:classroomUbah kelas
DELETE/communities/{slug}/courses/{id}write:classroomHapus kelas
POST/communities/{slug}/courses/{id}/moduleswrite:classroomTambah modul
PATCH/communities/{slug}/modules/{id}write:classroomGanti nama modul
DELETE/communities/{slug}/modules/{id}write:classroomHapus modul
POST/communities/{slug}/modules/{id}/movewrite:classroomGeser urutan modul
POST/communities/{slug}/modules/{id}/lessonswrite:classroomTambah pelajaran
PATCH/communities/{slug}/lessons/{id}write:classroomUbah pelajaran
DELETE/communities/{slug}/lessons/{id}write:classroomHapus pelajaran
POST/communities/{slug}/lessons/{id}/movewrite:classroomGeser urutan pelajaran
GET/communities/{slug}/courses/{id}/exam-questionsreadSoal ujian akhir + kunci jawaban (pengelola)
POST/communities/{slug}/courses/{id}/exam-questionswrite:classroomTambah soal pilihan ganda { prompt, options[2-5], correct }
PUT/communities/{slug}/exam-questions/{id}write:classroomGanti isi soal
DELETE/communities/{slug}/exam-questions/{id}write:classroomHapus soal
PATCH/communities/{slug}/courses/{id}/certificatewrite:classroomPengaturan sertifikat & ujian akhir: enabled (Pro), requirement LESSONS|EXAM|ASSIGNMENT, examPassPct, examMaxAttempts, assignmentPrompt