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.
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.
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.
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}/postsSukses → { "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.
| Method | Path | Scope | Deskripsi |
|---|---|---|---|
| GET | /me | read | Identitas pemilik kunci |
| GET | /me/communities | read | Komunitas yang diikuti |
| GET | /me/notifications | read | Notifikasi terbaru |
| GET | /communities/{slug} | read | Profil & halaman Tentang (deskripsi sebagai Markdown) |
| PATCH | /communities/{slug} | write:settings | Ubah halaman Tentang: tagline, deskripsi, sambutan, video, thumbnail (owner) |
| GET | /communities/{slug}/stats | read | Statistik (moderator+; saldo khusus owner) |
| GET | /communities/{slug}/posts | read | Feed post (cursor) |
| POST | /communities/{slug}/posts | write:content | Buat post |
| GET | /communities/{slug}/posts/{id} | read | Detail post + komentar |
| DELETE | /communities/{slug}/posts/{id} | write:content | Hapus post |
| POST | /communities/{slug}/posts/{id}/comments | write:content | Balas post |
| GET | /communities/{slug}/events | read | Event mendatang |
| POST | /communities/{slug}/events | write:events | Buat event |
| PATCH | /communities/{slug}/events/{id} | write:events | Ubah event (parsial) |
| DELETE | /communities/{slug}/events/{id} | write:events | Hapus event |
| GET | /communities/{slug}/members | read | Daftar member (?status=PENDING butuh izin) |
| POST | /communities/{slug}/members/{id}/approve | write:members | Setujui calon member |
| POST | /communities/{slug}/members/{id}/reject | write:members | Tolak calon member |
| GET | /communities/{slug}/reviews | read | Ulasan komunitas |
| POST | /uploads | write:content | Unggah gambar (multipart `file` / JSON base64) — sisipkan ke konten sebagai baris  |
| GET | /communities/{slug}/courses | read | Daftar kelas |
| GET | /communities/{slug}/courses/{id} | read | Kelas lengkap (modul → pelajaran) |
| POST | /communities/{slug}/courses | write:classroom | Buat kelas |
| PATCH | /communities/{slug}/courses/{id} | write:classroom | Ubah kelas |
| DELETE | /communities/{slug}/courses/{id} | write:classroom | Hapus kelas |
| POST | /communities/{slug}/courses/{id}/modules | write:classroom | Tambah modul |
| PATCH | /communities/{slug}/modules/{id} | write:classroom | Ganti nama modul |
| DELETE | /communities/{slug}/modules/{id} | write:classroom | Hapus modul |
| POST | /communities/{slug}/modules/{id}/move | write:classroom | Geser urutan modul |
| POST | /communities/{slug}/modules/{id}/lessons | write:classroom | Tambah pelajaran |
| PATCH | /communities/{slug}/lessons/{id} | write:classroom | Ubah pelajaran |
| DELETE | /communities/{slug}/lessons/{id} | write:classroom | Hapus pelajaran |
| POST | /communities/{slug}/lessons/{id}/move | write:classroom | Geser urutan pelajaran |
| GET | /communities/{slug}/courses/{id}/exam-questions | read | Soal ujian akhir + kunci jawaban (pengelola) |
| POST | /communities/{slug}/courses/{id}/exam-questions | write:classroom | Tambah soal pilihan ganda { prompt, options[2-5], correct } |
| PUT | /communities/{slug}/exam-questions/{id} | write:classroom | Ganti isi soal |
| DELETE | /communities/{slug}/exam-questions/{id} | write:classroom | Hapus soal |
| PATCH | /communities/{slug}/courses/{id}/certificate | write:classroom | Pengaturan sertifikat & ujian akhir: enabled (Pro), requirement LESSONS|EXAM|ASSIGNMENT, examPassPct, examMaxAttempts, assignmentPrompt |