Lewati ke konten
REST API v1

Integrasikan analisis kesantunan ke platform Anda

Satu endpoint JSON yang dapat dipanggil dari LMS (Moodle, Canvas, Google Classroom add-on), WordPress, chatbot, atau backend aplikasi sekolah.

Base URL: https://belajarsantun.id/api/v1

Model: setiap request dijalankan oleh ketiga model penelitian, 3 kelas (Tidak Santun · Netral · Santun). F1-macro pada 382 data uji berlabel manusia: XLM-RoBERTa 0,6556 · BERT multilingual 0,5644 · XLNet 0,6281.

Autentikasi

Daftar akun, verifikasi email, lalu buat API key di menu API Keys. Kirim key pada setiap request melalui header Authorization:

Authorization: Bearer 1|AbCdEf...
Content-Type: application/json
Accept: application/json

POST /analyze

Menganalisis satu teks (maks. 2.000 karakter). Umpan balik pedagogis disertakan secara default; kirim "include_feedback": false untuk respons ringkas.

POST /api/v1/analyze
{ "text": "Kak, boleh minta tolong jelasin lagi? Makasih ya 🙏" }

200 OK
{
  "data": {
    // --- label utama (model "primary_model", default XLM-RoBERTa) ---
    "label_id": 2,
    "label": "santun",
    "label_name": "Santun",
    "confidence": 0.9132,
    "probabilities": { "tidak_santun": 0.0201, "netral": 0.0667, "santun": 0.9132 },
    "primary_model": "xlmr",
    "ambiguous": false,          // true jika model utama ragu ATAU ketiga model tidak sepakat
    "agreement": true,           // ketiga model memberi label yang sama?
    "votes": { "tidak_santun": 0, "netral": 0, "santun": 3 },

    // --- hasil SETIAP model penelitian ---
    "models": {
      "xlmr":  { "label": "santun", "confidence": 0.9132, "probabilities": {...},
                 "name": "XLM-RoBERTa", "checkpoint": "xlm-roberta-base", "f1_macro_gold": 0.6586 },
      "bert":  { "label": "santun", "confidence": 0.8410, ..., "name": "BERT multilingual" },
      "xlnet": { "label": "santun", "confidence": 0.7795, ..., "name": "XLNet" }
    },
    "ensemble": { "label": "santun", "confidence": 0.8446, ..., "validated": false },

    "feedback": { "title": "...", "message": "...", "tips": ["..."] }
  },
  "meta": {
    "primary_model": "xlmr",
    "models": { "xlmr": {...}, "bert": {...}, "xlnet": {...} },
    "ensemble_validated": false,
    "model_version": "2026.09-gold382",
    "latency_ms": 118.4,
    "model_latency_ms": { "xlmr": 44.1, "bert": 38.0, "xlnet": 36.3 },
    "count": 1,
    "disclaimer": "..."
  }
}

Setiap request selalu diproses oleh ketiga model penelitian (BERT multilingual, XLM-RoBERTa, XLNet), dan hasil masing-masing dikembalikan di data.models. Field di level atas data berasal dari model utama agar integrasi sederhana (mis. moderasi komentar) cukup membaca data.label.

ambiguous: true berarti keyakinan model utama di bawah ambang (0.55) atau ketiga model tidak sepakat. Tampilkan hasil sebagai bahan diskusi, bukan keputusan otomatis. ensemble.validated: false berarti ensemble belum divalidasi pada set uji emas.

POST /analyze/batch

Hingga 50 teks per request. Cocok untuk memeriksa forum diskusi atau komentar secara massal. Setiap teks dihitung terhadap kuota harian.

POST /api/v1/analyze/batch
{ "texts": ["Makasih infonya!", "Dasar ga guna"], "include_feedback": false }

200 OK
{ "data": [ { "label": "santun", ... }, { "label": "tidak_santun", ... } ], "meta": { "count": 2, ... } }

Endpoint lain

EndpointAuthKeterangan
GET /usageYaPemakaian hari ini, kuota, info key
GET /guideTidakMateri Belajar Santun (strategi, teknik, 6 prinsip, kuis) dalam JSON untuk LMS
GET /labelsTidakDaftar label dan ID-nya
GET /healthTidakStatus layanan (200 / 503)

Kode error & rate limit

401API key tidak ada, salah, atau kedaluwarsa
403Email belum diverifikasi, key tanpa hak "analyze", atau akun ditangguhkan
422Validasi gagal (teks kosong/terlalu panjang); detail di field "errors"
429Melebihi 60 request/menit per key atau kuota 5.000 teks/hari per akun. Lihat header Retry-After
503Layanan model sedang tidak tersedia, coba lagi dengan backoff

Contoh kode

curl -X POST https://belajarsantun.id/api/v1/analyze \
  -H "Authorization: Bearer $BERORNET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Makasih ya udah bantuin!"}'

Plugin WordPress

Plugin BerorNet Politeness menyediakan:

  • Shortcode [berornet_checker]: kotak cek kesantunan untuk halaman/artikel sekolah.
  • Moderasi komentar: komentar terdeteksi Tidak Santun otomatis ditahan untuk ditinjau admin.
  • API key disimpan di server WordPress (disarankan via konstanta di wp-config.php) dan tidak pernah dikirim ke browser.

Unggah folder berornet-politeness ke wp-content/plugins/, aktifkan, lalu isi pengaturan di Settings → BerorNet.

LMS / Moodle

Pola integrasi yang disarankan: backend LMS memanggil /analyze/batch saat posting forum dibuat (mis. lewat event observer \mod_forum\event\post_created di Moodle), menyimpan label, lalu menampilkan umpan balik ke siswa dan ringkasan ke guru. Jangan memanggil API langsung dari browser siswa.

Praktik aman

  • Simpan API key sebagai secret di server (environment variable / secret manager), bukan di repositori atau JavaScript publik.
  • Gunakan satu key per integrasi agar bisa dicabut terpisah; key memiliki masa berlaku.
  • Hormati 429 dan Retry-After; gunakan exponential backoff untuk 503.
  • Hasil adalah prediksi. Jangan gunakan sebagai satu-satunya dasar sanksi terhadap siswa.
  • Jika key bocor, segera cabut di menu API Keys. Mengganti kata sandi juga mencabut semua key.