KOMUNITAS API Hub

Dokumentasi spesifikasi rute & endpoint backend

chat-controller : AI & Chat Assistant

Deskripsi: Mengirim pesan chat AI (RAG semantik) tanpa streaming.

Request Body:
{
  "message": "bagaimana cara melapor ke KPAI?",
  "sessionId": "session_xxx" // opsional
}
Response (200 OK):
{
  "content": "Langkah melapor ke KPAI adalah...",
  "sessionId": "session_xxx",
  "timestamp": "2026-06-30T12:00:00.000Z"
}

Deskripsi: Obrolan asisten AI menggunakan streaming Server-Sent Events (SSE) dengan media gambar.

Request Body:
{
  "message": "pola spasial banjir bandang",
  "sessionId": "session_xxx",
  "image": "base64...", // opsional
  "mimeType": "image/jpeg" // opsional
}
SSE Event Payload:
data: {"type": "token", "content": "..."}
data: {"type": "search_progress", "phase": "..."}
data: {"type": "done", "sessionId": "..."}

Deskripsi: Mengecek sisa kuota harian AI untuk IP/User terkait.

Query Params:
?sessionId=session_xxx
Response (200 OK):
{
  "remaining": 15,
  "limit": 20,
  "resetAt": "2026-07-01T12:00:00.000Z"
}

Deskripsi: Membaca teks dokumen fisik via AI Vision OCR.

Request Body:
{
  "image": "base64...",
  "mimeType": "image/png"
}
Response (200 OK):
{
  "text": "[Hasil Ekstraksi Teks]"
}

Deskripsi: Verifikasi validitas klaim informasi lewat web search grounding.

Request Body:
{
  "claim": "Bansos tunai dibagikan lewat WA"
}
Response (200 OK):
{
  "isValid": false,
  "explanation": "Klaim tersebut palsu/hoaks...",
  "source": "TurnBackHoax.id"
}

Deskripsi: Meringkas berkas aturan/konsep birokrasi dan merancang diagram Mermaid.js.

Request Body:
{
  "text": "[Aturan Panjang]"
}
Response (200 OK):
{
  "summary": "[Hasil Ringkasan + Diagram]"
}

Deskripsi: Mengambil riwayat percakapan sesi AI.

Request Params:
Path: sessionId (string)
Response (200 OK):
{
  "history": [
    { "role": "user", "content": "..." }
  ]
}

report-controller : Citizen Report & Messages

Deskripsi: Membuat aduan/pengaduan insiden terintegrasi lokasi GPS koordinat.

Request Body:
{
  "reporterName": "Budi",
  "reporterContact": "+6281234567890",
  "category": "Infrastruktur",
  "description": "Jalan amblas...",
  "latitude": -6.2088,
  "longitude": 106.8456,
  "province": "Jawa Barat",
  "city": "Bandung",
  "district": "Coblong"
}
Response (200 OK):
{
  "id": "report-uuid",
  "status": "Menunggu",
  "message": "Laporan berhasil disimpan."
}

Deskripsi: Mengambil semua daftar laporan warga dengan filter wilayah dan status (Khusus Staf/Admin).

Query Params:
?status=Menunggu&province=Jawa Barat&page=1
Response (200 OK):
{
  "reports": [...],
  "total": 5
}

Deskripsi: Mengubah status penanganan aduan warga.

Request Body:
{
  "status": "Diproses",
  "adminNote": "Petugas meluncur..."
}
Response (200 OK):
{
  "message": "Status laporan berhasil diubah ke Diproses"
}

Deskripsi: Mengambil riwayat pesan diskusi aduan antara warga dan petugas.

Request Params:
Path: id (UUID Laporan)
Response (200 OK):
{
  "success": true,
  "data": [
    {
      "sender_name": "Petugas Fikri",
      "message": "Sedang kami periksa...",
      "created_at": "..."
    }
  ]
}

service-controller : Public Services RAG Directory

Deskripsi: Menambahkan data layanan publik RAG (otomatis text-embedding vektor).

Request Body:
{
  "name": "Layanan BPJS",
  "institution": "BPJS Kesehatan",
  "category": "Kesehatan",
  "description": "Pendaftaran...",
  "requirements": ["KTP"],
  "procedures": ["Daftar..."]
}
Response (200 OK):
{
  "id": "service-uuid",
  "message": "Layanan publik berhasil ditambahkan."
}

Deskripsi: Mengambil katalog daftar layanan RAG.

Query Params:
?category=Kesehatan
Response (200 OK):
{
  "services": [...]
}

admin-controller : Staff & Database Management

Deskripsi: Membuat akun staf/petugas baru (hanya boleh dibuat oleh superadmin).

Request Body:
{
  "email": "petugas@komunitas.id",
  "password": "kataSandiKuat",
  "role": "petugas",
  "nama_lengkap": "Alif",
  "nama_panggilan": "Alif",
  "tanggal_lahir": "2000-01-01",
  "nomor_telepon": "+628..."
}
Response (200 OK):
{
  "success": true,
  "message": "User baru berhasil dibuat."
}

Deskripsi: Mengambil isi database klarifikasi kata kunci hoaks WhatsApp Bot.

Query Params:
?search=keyword&page=1
Response (200 OK):
{
  "hoaxes": [...],
  "total": 12
}

websocket-controller : Real-time Room Connection

Deskripsi: Saluran koneksi WebSocket real-time aduan warga.

Query Connection Params:
reportId=aduan-uuid
userId=warga-atau-petugas-uuid
role=user|petugas
name=Budi
Message Format (JSON):
{
  "type": "message",
  "text": "Apakah aduan saya sudah dibaca?",
  "senderId": "user-uuid",
  "senderName": "Budi",
  "senderType": "user"
}

utility-controller : Health Check

Deskripsi: Mengecek status runtime server.

{
  "status": "ok",
  "timestamp": "2026-06-30T12:00:00.000Z",
  "uptime": 12.5,
  "version": "1.0.0"
}