Version
1.0.0
Dokumentasi API KIYATO STORE
Halo, selamat datang di Dokumentasi Integrasi KIYATO STORE .
Getting Started
Untuk anda yang sudah mempunyai web topup game, anda dapat menghubungkan website topup game anda menggunakan Open API dari KIYATO STORE.
BASE URL:
-
Production: https://v2.kiyatostore.my.id
-
Nickname: https://idgames.arbakti.monster/
IP SERVER:
-
IP Publik: 143.20.199.238
Masukkan IP di atas ke whitelist API pada dashboard reseller anda agar permintaan dari server KIYATO STORE tidak ditolak.
API
Query Parameters
api_id
API ID
required
api_key
API KEY
required
signature
API ID + API KEY
required
Response Success
{
"status": true,
"msg": "berhasil mendapatkan data profile",
"data": {
"username": "Achill",
"balance": 0,
"role": "Basic"
}
}
Response Gagal
{
"status": false,
"msg": "API ID atau API KEY tidak ditemukan"
}
{
"status": false,
"msg": "Pengguna dengan kredensial API yang diberikan tidak ditemukan"
}
{
"status": false,
"msg": "Signature Tidak Valid. Silakan periksa kredensial API Anda"
}
{
"status": false,
"msg": "IP 127.0.0.1 tidak ada dalam whitelist"
}
Query Parameters
api_id
API ID
required
api_key
API KEY
required
signature
API ID + API KEY
required
Response Success
[
{
"status": "Aktif",
"msg": "berhasil mendapatkan data layanan",
"data": {
"id": "1",
"game": "Mobile Legends",
"nama_layanan": "14 Diamonds ( 13 + 1 Bonus )",
"harga": {
"member": 3400,
"basic": 3310,
"gold": 3250,
"platinum": 3120
}
}
}
]
Response Gagal
{
"status": false,
"msg": "API ID atau API KEY tidak ditemukan"
}
{
"status": false,
"msg": "Pengguna dengan kredensial API yang diberikan tidak ditemukan"
}
{
"status": false,
"msg": "Signature Tidak Valid. Silakan periksa kredensial API Anda"
}
{
"status": false,
"msg": "IP 127.0.0.1 tidak ada dalam whitelist"
}
Query Parameters
api_id
API ID
required
api_key
API KEY
required
signature
API ID + API KEY
required
order_id
Unik ID
required
service_id
Kode Layanan
required
target_id
ID Tujuan
required
target_server
Server/Zone Tujuan (Bila Ada)
opsional
Response Success
{
"status": true,
"msg": "Pesanan berhasil! Pesanan sedang diproses",
"data": {
"order_id": "AL1234567890",
"nama_layanan": "14 Diamonds ( 13 + 1 Bonus )",
"service_id": "1",
"target_id": "98765",
"target_server": "1234",
"status": "Proses",
"note": ""
}
}
Response Gagal
{
"status": false,
"msg": "API ID atau API KEY tidak ditemukan"
}
{
"status": false,
"msg": "order_id sudah tersedia pada sistem kami",
"data": {
"status": "error"
}
}
{
"status": false,
"msg": "service_id tidak ditemukan"
}
{
"status": false,
"msg": "Saldo anda tidak mencukupi"
}
{
"status": false,
"msg": "Pesan error dari provider"
}
Query Parameters
api_id
API ID
required
api_key
API KEY
required
signature
API ID + API KEY
required
order_id
Unik ID
required
Response Success
{
"status": true,
"msg": "Detail transaksi berhasil didapatkan",
"data": {
"order_id": "AL1234567890",
"status": "Sukses / Proses / Pending / Gagal",
"note": ""
}
}
Response Gagal
{
"status": false,
"msg": "API ID atau API KEY tidak ditemukan"
}
{
"status": false,
"msg": "order_id tidak ditemukan",
"data": {
"order_id": "",
"status": "error"
}
}
Query Parameters
id
Berisi ID Game
required
zone
Berisi Zone Game
opsional
key
Berisi License
required
Response Success
{
"code": 200,
"status": true,
"message": "ID Found",
"data": {
"username": "AChyL?",
"user_id": "848567840",
"zone": "12364"
}
}
Response Gagal
{
"status": false,
"message": "ID is required"
}
{
"status": false,
"message": "Zone is required"
}
{
"status": false,
"message": "License key is required"
}
CALLBACK / WEBHOOK
Setiap kali status pesanan berubah, sistem kami mengirim HTTP POST ke Callback URL yang anda isi di Pengaturan Akun. Dengan callback anda tidak perlu memanggil endpoint status berulang kali.
Headers
Content-Type
application/json
informasi
X-Callback-Event
Nama event yang dikirim
informasi
X-Callback-Signature
HMAC SHA256 dari raw body dengan kunci API KEY anda
required
Daftar Event
order.status
Status pesanan berubah
tersedia
Saat ini hanya event tersebut yang dikirim. Event baru akan ditambahkan
di daftar ini, jadi periksa header X-Callback-Event sebelum memproses
payload.
Catatan
Balas dengan HTTP 200. Respons non-2xx dianggap gagal dan dicatat di log kami. Callback hanya dikirim
untuk pesanan yang dibuat lewat API, dari IP server kami yang tertera di bagian IP SERVER.
Contoh Payload
{
"event": "order.status",
"order_id": "INV-123456",
"status": "Sukses",
"note": "Transaksi berhasil",
"service_id": "ML5",
"nama_layanan": "Mobile Legends 5 Diamond",
"target_id": "848567840",
"target_server": "2214",
"harga": 1500,
"timestamp": 1757308800
}
Nilai status
Pending
Menunggu pembayaran
Proses
Sedang diproses provider
Sukses
Pesanan berhasil, status final
Gagal
Pesanan gagal, saldo dikembalikan, status final
Verifikasi Signature
<?php
$body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_CALLBACK_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $body, $apiKey);
if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit('invalid signature');
}
$data = json_decode($body, true);
if ($data['event'] !== 'order.status') {
http_response_code(200);
exit('event diabaikan');
}
http_response_code(200);
const express = require('express');
const crypto = require('crypto');
const app = express();
app.post('/callback', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.get('X-Callback-Signature') || '';
const expected = crypto.createHmac('sha256', apiKey).update(req.body).digest('hex');
const cocok = signature.length === expected.length
&& crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!cocok) {
return res.status(403).send('invalid signature');
}
const data = JSON.parse(req.body.toString());
if (req.get('X-Callback-Event') !== 'order.status') {
return res.sendStatus(200);
}
res.sendStatus(200);
});
Hitung HMAC dari raw body, bukan dari
hasil JSON yang sudah di-parse ulang. Bandingkan dengan fungsi yang aman terhadap timing attack
(hash_equals / timingSafeEqual).
WHITELIST IP
Batasi kredensial API anda hanya bisa dipakai dari IP server anda sendiri. Atur di Pengaturan Akun pada kolom Whitelist IP.
Aturan
IP tunggal
IPv4 maupun IPv6, contoh 103.10.20.55
didukung
Rentang CIDR
Contoh 103.10.20.0/24 atau 2001:db8::/32
didukung
Banyak entri
Pisahkan dengan tanda koma
didukung
Dikosongkan
Semua IP diizinkan memakai kredensial anda
tidak disarankan
Contoh Isian
103.10.20.55, 103.10.21.0/24, 2001:db8::/32
Response Gagal
{
"status": false,
"msg": "IP 103.10.20.99 tidak ada dalam whitelist"
}
Berlaku untuk seluruh endpoint /api/v1. Pastikan IP yang anda daftarkan adalah IP publik server yang
memanggil API kami, bukan IP perangkat anda.

