API ini dirancang untuk memvalidasi, mengaktifkan, mengelola kuota lisensi, dan menyediakan pembaruan otomatis (Over-The-Air) untuk produk digital (Tema/Plugin WordPress) yang dibeli melalui sistem Sejoli. Sistem ini mendukung domain binding dan pembatasan kuota instalasi secara dinamis.
https://[domain-utama-anda.com]/wp-json/melaju/v1application/json atau application/x-www-form-urlencodedJSONPOSTEndpoint ini digunakan untuk mengecek validitas lisensi sekaligus mendaftarkan domain klien ke dalam sistem Sejoli. Jika domain belum terdaftar dan kuota masih tersedia, sistem akan otomatis memotong sisa kuota.
POST /verify
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
license_key |
string |
Ya | Kode lisensi yang didapatkan pembeli dari Sejoli. |
email |
string |
Ya | Email akun pembeli yang terdaftar di Sejoli. |
nama_produk |
string |
Ya | Nama produk persis seperti yang tertulis di dashboard Sejoli (contoh: WP Sekolahku Pro). |
domain |
string |
Ya | Penanda unik/Domain tempat produk diinstal (contoh: sekolah1.sch.id). |
{
"license_key": "1005234-A7B8C-9D0E1",
"email": "kepsek@sekolah1.sch.id",
"nama_produk": "WP Sekolahku Pro",
"domain": "sekolah1.sch.id"
}
200 OK)Sistem mengembalikan detail lengkap lisensi, termasuk sisa kuota secara real-time.
{
"status": "success",
"message": "Lisensi Valid.",
"data": {
"license_key": "1005234-A7B8C-9D0E1",
"email": "kepsek@sekolah1.sch.id",
"nama_pembeli": "Budi Santoso",
"nama_produk": "WP Sekolahku Pro",
"domain_terdaftar": "sekolah1.sch.id",
"sisa_lisensi": 9,
"masa_berlaku_lisensi": "2027-03-31 23:59:59"
}
}
403 Forbidden - Kuota Habis){
"status": "error",
"message": "Kuota lisensi sudah habis. Anda telah mencapai batas 10 domain."
}
Endpoint ini digunakan untuk melepaskan ikatan domain dari lisensi tertentu. Memanggil endpoint ini akan menghapus domain dari database server pusat, sehingga mengembalikan (refund) sisa kuota pengguna sebanyak 1 slot.
POST /deactivate
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
license_key |
string |
Ya | Kode lisensi aktif. |
email |
string |
Ya | Email pembeli. |
domain |
string |
Ya | Domain yang ingin dicabut aksesnya (harus cocok dengan data di server). |
{
"license_key": "1005234-A7B8C-9D0E1",
"email": "kepsek@sekolah1.sch.id",
"domain": "sekolah1.sch.id"
}
200 OK){
"status": "success",
"message": "Lisensi berhasil dicabut dari domain sekolah1.sch.id. Kuota telah dikembalikan."
}
Endpoint ini digunakan oleh tema atau plugin di sisi klien untuk mengecek ketersediaan versi terbaru secara otomatis. Sistem mengecek validitas lisensi dan masa aktif langganan. Jika valid dan belum kedaluwarsa, API akan memberikan nomor versi terbaru beserta link download aman.
POST /check-update
1.5.0).| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
license_key |
string |
Ya | Kode lisensi klien yang sedang aktif. |
domain |
string |
Ya | Domain klien (harus cocok dengan data yang di-bind di server). |
{
"license_key": "1005234-A7B8C-9D0E1",
"domain": "sekolah1.sch.id"
}
200 OK - Update Tersedia){
"status": "success",
"version": "1.5.0",
"package": "https://domain-utama-anda.com/wp-content/uploads/2026/04/wp-sekolahku-pro-1.5.0.zip"
}
403 Forbidden - Langganan Kedaluwarsa){
"status": "error",
"message": "Masa berlaku lisensi sudah habis. Silakan perpanjang untuk mendapatkan update."
}
Perhatikan praktik terbaik berikut saat mengintegrasikan API ini ke dalam Tema atau Plugin klien (Client-side):
update_option()). Buat jadwal wp_schedule_event yang berjalan sekali sehari untuk menembak endpoint /verify secara otomatis di latar belakang./deactivate terlebih dahulu.success, hapus data lisensi dari database lokal klien menggunakan delete_option().Untuk memunculkan tombol "Update Now" bawaan WordPress, integrasikan hasil dari API /check-update dengan transient pembaruan WordPress:
pre_set_site_transient_update_themespre_set_site_transient_update_plugins// Data simulasi balasan dari server Anda
$api_response_version = '1.5.0';
$api_response_package = 'https://domain/file.zip';
// Format objek standar untuk WordPress Updater
$response = new stdClass();
$response->plugin = 'wp-sekolahku-pro/wp-sekolahku.php';
$response->slug = 'wp-sekolahku-pro';
$response->new_version = $api_response_version;
$response->package = $api_response_package;
// Inject objek tersebut ke dalam transient WordPress
$transient->response[$response->plugin] = $response;
Penting: Panggil pengecekan API ini hanya ketika WordPress sedang menjalankan rutinitas pengecekan pembaruan, bukan di front-end.