API membaca dan mengelola akunmu lewat HTTPS dan membalas JSON. Alamat dasar: https://pterokudesu.com/api/v1. Buat kunci di menu Kunci API, lalu kirim di header Authorization. Kunci lengkap hanya tampil sekali saat dibuat dan kami hanya menyimpan hash-nya.
Respons sukses selalu membungkus hasilnya di field data. Daftar panjang memakai kursor: kirim nilai berikutnya dari respons sebagai query before untuk halaman selanjutnya; nilai null berarti sudah habis.
Setiap kunci hanya boleh memanggil endpoint sesuai izin yang dipilih saat dibuat. Kunci bisa dibatasi ke alamat IP atau CIDR tertentu dan punya masa berlaku.
akun:bacaNama, username, dan email akun
server:bacaDaftar dan detail server
transaksi:bacaRiwayat dan detail transaksi
dompet:bacaSaldo, koin, dan mutasinya
katalog:bacaPaket, lokasi, dan metode pembayaran
aktivitas:bacaCatatan aktivitas akun beserta perangkat dan lokasi
referral:bacaKode, tautan, statistik, dan daftar undangan
notifikasi:bacaDaftar dan isi notifikasi akun
akun-panel:bacaDaftar dan detail akun panel pelangganmu
server:tulisMembuat pesanan, memperpanjang, dan mengatur perpanjang otomatis. Dapat memakai saldo dan koin.
dompet:tulisMembuat tagihan top up lewat metode pembayaran
notifikasi:tulisMenandai satu atau semua notifikasi sebagai sudah dibaca
akun-panel:tulisMembuat akun pelanggan dan mereset password akun panel
Endpoint tulis
Endpoint yang mengubah uang (beli, perpanjang, top up, batalkan) wajib membawa header Idempotency-Key berisi 8-64 karakter huruf, angka, - atau _. Permintaan yang diulang dengan kunci dan isi yang sama mengembalikan respons semula dengan header Idempotent-Replay: true tanpa membuat pesanan baru. Kunci yang sama dengan isi berbeda ditolak (422). Catatan berlaku 24 jam.
Kunci dengan izin server:tulis wajib punya batas belanja harian (Rp, hari WIB). Bila total hari ini melewati batas, permintaan ditolak dengan batas_harian_terlampaui. Pembayaran gateway yang kedaluwarsa tidak mengembalikan jatah. Izin tulis dapat dibatasi admin hanya untuk reseller dan staf.
Bayar dengan saldo langsung diproses: completed berarti server sudah dibuat, paid berarti sedang diproses (pantau lewat GET /transactions/{id} atau webhook server.siap). Metode gateway menghasilkan status pending dan objek pembayaran berisi qr_image_url, nomor_va, kode_bayar, atau url_pembayaran beserta kedaluwarsa_pada; server dibuat setelah pembayaran masuk.
Alur integrasi reseller
Urutan umum untuk aplikasi yang menjual server ke pelangganmu sendiri. Semua langkah memakai kunci API yang sama dan hanya tersedia untuk akun reseller dan staf.
1
Siapkan kunci
Buat kunci API dengan izin akun-panel:baca, akun-panel:tulis, katalog:baca, server:baca, server:tulis, dan transaksi:baca. Isi alamat IP server aplikasimu dan batas belanja harian. Daftarkan webhook untuk server.siap dan pembayaran.kedaluwarsa.
2
Tampilkan katalog
Ambil tipe panel, varian paket, dan lokasi. Simpan hasilnya di aplikasimu selama beberapa menit, jangan setiap pelanggan membuka halaman.
Satu akun pelanggan dipakai untuk semua tipe panel. Simpan id yang kamu terima di data pelangganmu dan pakai sebagai panel_account_id untuk pembelian berikutnya. Jumlahnya dibatasi kuota reseller.
Kirim harga bersih (harga paket dikurangi diskon dan voucher) sebagai amount. Hasilnya memuat biaya_layanan sesuai peranmu dan biaya gateway tiap metode, sehingga total yang ditagih pelanggan bisa kamu tampilkan lebih dulu. Metode saldo tidak dikenai biaya.
Terminal
GET/api/v1/payment-methods?amount=15000
5
Beli server
Selalu kirim Idempotency-Key unik per pesanan. Bila koneksi putus, kirim ulang dengan kunci yang sama dan jangan membuat kunci baru. Dengan saldo, hasilnya completed atau paid. Dengan gateway, hasilnya pending dan berisi data pembayaran untuk ditampilkan ke pelanggan.
Terima webhook server.siap, dan sebagai cadangan baca status transaksi tiap beberapa detik tidak lebih sering dari batas laju. Pesanan gateway yang tidak dibayar berakhir lewat webhook pembayaran.kedaluwarsa.
Perpanjang sebelum server habis, atau aktifkan perpanjang otomatis dengan saldo. Webhook server.segera_berakhir mengingatkan sebelum masa aktif habis. Reset password pelanggan lewat endpoint reset, passwordnya hanya tampil satu kali.
Membuat pesanan server baru. Bayar dengan saldo langsung diproses; metode gateway menghasilkan tagihan berstatus pending dan server dibuat setelah pembayaran masuk.
Menghitung harga perpanjangan dan memeriksa voucher tanpa membuat tagihan. Voucher yang tidak valid tidak membuat permintaan gagal: alasannya ada di voucher_galat. Harga bersih bisa langsung dipakai sebagai amount di GET /payment-methods untuk melihat biaya gateway per metode.
Izin: server:baca
Parameter
Nama
Di
Keterangan
idstringwajib
Path
ID sumber daya.
plan_idstring
Query
Varian durasi lain dari grup paket yang sama.
voucherstring
Query
Kode voucher yang ingin diperiksa.
Galat yang mungkin
400permintaan_tidak_validParameter permintaan tidak valid.
404tidak_ditemukanData tidak ditemukan.
422tidak_bisa_diprosesPermintaan tidak bisa diproses.
Apakah garansi server masih bisa diklaim. Pemeriksaan ini hanya membaca data transaksi dan tidak mengecek panel, jadi klaim tetap bisa ditolak bila server di panel masih aktif. maks_klaim atau sisa_klaim null berarti tanpa batas atau tidak berlaku. sisa_hari null berarti tanpa batas waktu.
Membuat ulang server yang mati atau hilang dari panel dan mengembalikan kredensial barunya. Klaim ditolak bila server di panel masih aktif, sehingga mengulang permintaan aman. Password hanya muncul di respons ini, simpan segera. Maksimal 3 percobaan per 10 menit.
Izin: server:tulis
Parameter
Nama
Di
Keterangan
idstringwajib
Path
ID sumber daya.
Galat yang mungkin
404tidak_ditemukanData tidak ditemukan.
422tidak_bisa_diprosesPermintaan tidak bisa diproses.
429terlalu_banyak_permintaanTerlalu banyak permintaan. Coba lagi sebentar.
403izin_tulis_ditolakIzin tulis API saat ini hanya untuk akun reseller dan staf.
Membatalkan pesanan atau perpanjangan gateway yang masih pending. Status menjadi expired dan webhook pembayaran.kedaluwarsa terkirim. Jatah belanja harian tidak dikembalikan. Bila pembayaran terlanjur masuk, pesanan tetap diproses dan permintaan ditolak.
Membuat akun pelanggan baru tanpa server dan tanpa memilih tipe panel. Pakai id-nya sebagai panel_account_id saat membeli server. Jumlah akun dibatasi sesuai kuota resellermu.
Izin: akun-panel:tulis
Parameter
Nama
Di
Keterangan
usernamestringwajib
Isi
Username pelanggan.
emailstringwajib
Isi
Email pelanggan. Tidak boleh sudah dipakai akun lain.
Galat yang mungkin
400permintaan_tidak_validParameter permintaan tidak valid.
422tidak_bisa_diprosesPermintaan tidak bisa diproses.
403izin_tulis_ditolakIzin tulis API saat ini hanya untuk akun reseller dan staf.
Mutasi saldo dan koin, 20 per halaman. jenis: topup, bayar, refund, cashback, referral, konversi_koin, penyesuaian, kedaluwarsa. jumlah selalu positif.
Izin: dompet:baca
Parameter
Nama
Di
Keterangan
currencystring
Query
saldo atau koin.
beforestring
Query
Nilai berikutnya dari respons sebelumnya untuk halaman selanjutnya.
Menghitung harga pembelian dan memeriksa voucher tanpa membuat tagihan, memakai aturan yang sama dengan POST /servers termasuk biaya layanan sesuai peran akun. Voucher dicek untuk akun pemilik kunci. Voucher yang tidak valid tidak membuat permintaan gagal: alasannya ada di voucher_galat. Cashback tidak dihitung di sini. Pakai harga_bersih sebagai amount di GET /payment-methods untuk melihat biaya gateway per metode.
Izin: katalog:baca
Parameter
Nama
Di
Keterangan
panel_typestringwajib
Query
Slug tipe panel.
plan_idstringwajib
Query
ID varian paket.
egg_idinteger
Query
Egg pilihan, bila berbeda dari bawaan paket.
nest_idinteger
Query
Nest dari egg pilihan.
location_idinteger
Query
Lokasi untuk memeriksa stok.
extra_databaseinteger
Query
Tambahan database, 0-20.
extra_backupinteger
Query
Tambahan backup, 0-20.
extra_allocationinteger
Query
Tambahan allocation, 0-20.
voucherstring
Query
Kode voucher yang ingin diperiksa.
Galat yang mungkin
400permintaan_tidak_validParameter permintaan tidak valid.
Metode pembayaran beserta biayanya untuk nominal tertentu. biaya_layanan adalah biaya internal sesuai peran akun pemilik kunci, biaya adalah biaya gateway yang dihitung dari nominal ditambah biaya_layanan, dan biaya_total adalah jumlah keduanya yang ditambahkan ke harga. Kode saldo berarti dompet, tanpa biaya, dan hanya berlaku untuk beli dan perpanjang.
Izin: katalog:baca
Parameter
Nama
Di
Keterangan
amountinteger
Query
Harga bersih (setelah diskon dan voucher) atau nominal top up, 1.000 sampai 2.000.000. Bawaan 50.000.
Galat yang mungkin
400permintaan_tidak_validParameter permintaan tidak valid.
Daftar lengkap nilai yang bisa muncul pada field bertipe pilihan. Aplikasimu sebaiknya menangani nilai yang tidak dikenal dengan wajar, karena nilai baru bisa ditambahkan.
status pada transaksi dan hasil beli atau perpanjang
Urutan normal untuk gateway: pending, paid, completed. Bayar dengan saldo langsung paid atau completed.
paidDiproses. Pembayaran diterima, server sedang dibuat atau diperpanjang.
completedSelesai. Selesai. Server sudah dibuat atau masa aktifnya sudah bertambah.
failedGagal. Pembayaran gagal. Tidak ada tagihan yang tersisa.
expiredKedaluwarsa. Tagihan kedaluwarsa atau dibatalkan sebelum dibayar.
jenis pada transaksi
Untuk transaksi perpanjangan, id_server menunjuk server yang diperpanjang.
pembelianPembelian
renewalPerpanjangan
status pada server
Yang bisa diperpanjang hanya aktif dan tenggang.
aktifAktif. Berjalan normal.
tenggangMasa tenggang. Masa aktif habis, server masih bisa diperpanjang.
disuspendDisuspend. Disuspend karena melewati masa tenggang. Perpanjang untuk mengaktifkan lagi.
dihapusDihapus. Sudah dihapus dan tidak bisa diperpanjang.
tidak_terverifikasiTidak terverifikasi. Server tidak ditemukan di panel. Hubungi admin.
status pada top up
Saldo bertambah hanya saat completed.
pendingMenunggu bayar
paidDiproses
completedBerhasil
failedGagal
expiredKedaluwarsa
dibatalkanDibatalkan
jenis pada mutasi dompet
Field mata bernilai saldo atau koin. jumlah selalu positif, arah ditentukan jenisnya.
topupTop-up saldo
bayarPembayaran
konversi_koinTukar koin
refundPengembalian
cashbackCashback
referralHadiah referral
penyesuaianPenyesuaian admin
kedaluwarsaKoin kedaluwarsa
jenis pada notifikasi
Notifikasi pengumuman berasal dari admin.
keamananKeamanan
transaksiTransaksi
serverServer
pengumumanPengumuman
Galat dan batas laju
Galat selalu berbentuk objek berikut dengan status HTTP yang sesuai.
Respons galat
JSON
{
"error": {
"kode":"izin_kurang",
"pesan":"Kunci ini tidak punya izin untuk endpoint ini."
}
}
401tidak_terautentikasiSertakan kunci API di header Authorization: Bearer <kunci>.
401kunci_tidak_validKunci API tidak valid atau sudah dicabut.
401kunci_kedaluwarsaKunci API sudah kedaluwarsa.
403ip_ditolakAlamat IP ini tidak ada dalam daftar yang diizinkan untuk kunci ini.
403izin_kurangKunci ini tidak punya izin untuk endpoint ini.
404tidak_ditemukanData tidak ditemukan.
429terlalu_banyak_permintaanTerlalu banyak permintaan. Coba lagi sebentar.
400permintaan_tidak_validParameter permintaan tidak valid.
500kesalahan_serverTerjadi kesalahan di server. Coba lagi sebentar.
400idempotency_key_wajibSertakan header Idempotency-Key (8-64 karakter huruf, angka, - atau _) pada permintaan ini.
422idempotency_tidak_cocokIdempotency-Key ini sudah dipakai dengan isi permintaan yang berbeda.
409permintaan_sedang_diprosesPermintaan dengan Idempotency-Key ini masih diproses. Coba lagi sebentar.
403batas_harian_terlampauiBatas belanja harian kunci ini terlampaui.
402saldo_kurangSaldo dan koin tidak cukup.
403izin_tulis_ditolakIzin tulis API saat ini hanya untuk akun reseller dan staf.
422tidak_bisa_diprosesPermintaan tidak bisa diproses.
Setiap kunci dibatasi 60 permintaan per menit dan 20 permintaan tulis per menit. Satu alamat IP dibatasi 240 permintaan per menit untuk semua kunci, termasuk 60 permintaan tulis per menit. Percobaan dengan kunci salah dari satu alamat juga dibatasi. Lewat dari itu kamu menerima 429 dengan header Retry-After.
Webhook
Kami mengirim POST berisi JSON ke URL https milikmu saat peristiwa berikut terjadi:
dompet.masuk dan dompet.keluar dikirim setiap saldo atau koin berubah; datanya berisi mata (saldo atau koin), jenis (topup, bayar, refund, cashback, referral, konversi_koin, penyesuaian, kedaluwarsa), jumlah (selalu positif), dan keterangan. pembayaran.gagal dan pembayaran.kedaluwarsa berisi transaction_id, jenis, id_server, dan total; topup.gagal dan topup.kedaluwarsa berisi topup_id, nominal, dan total. Pembayaran lewat saldo tidak memicu peristiwa ini.
Balas dengan status 2xx dalam 8 detik. Selain itu kami mengulang hingga 6 kali dengan jeda 1, 5, 30, 120, 360 menit. Gunakan field id untuk mengabaikan pengiriman ganda. Webhook yang gagal berturut-turut dimatikan otomatis. URL tidak boleh mengarah ke alamat privat atau loopback dan pengalihan tidak diikuti.
Verifikasi tanda tangan
Berlaku untuk semua pengiriman webhook. Setiap pengiriman membawa header X-Pterokudesu-Signature: t=<detik>,v1=<hex>, X-Pterokudesu-Event, dan X-Pterokudesu-Delivery. Nilai v1 adalah HMAC-SHA256 dari {t}.{badan mentah} dengan rahasia webhook. Tolak permintaan yang cap waktunya lebih dari 5 menit dari sekarang.