API/ Dokumentasi

PayGet API Documentation

Dokumentasi lengkap untuk integrasi API PayGet. Gunakan API Key Anda untuk mengakses semua endpoint yang tersedia.

GET

Get Profile

/api/profile

Mendapatkan detail profil pengguna berdasarkan API Key. Endpoint ini mengembalikan informasi username, level, dan saldo akun.

Authentication
Type Key Value
Header x-api-key YOUR_API_KEY
Query Param apiKey YOUR_API_KEY
Example Request
curl -X GET "https://payget.sakuin.id/api/profile" \
  -H "x-api-key: YOUR_API_KEY"
const https = require('https');

const apiKey = 'YOUR_API_KEY';
const options = {
  hostname: 'payget.sakuin.id',
  path: '/api/profile',
  method: 'GET',
  headers: { 'x-api-key': apiKey }
};

https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => console.log(JSON.parse(data)));
}).end();
import requests

api_key = 'YOUR_API_KEY'
url = 'https://payget.sakuin.id/api/profile'
headers = {'x-api-key': api_key}

response = requests.get(url, headers=headers)
print(response.json())
Success Response (200)
{
  "success": true,
  "profile": {
    "username": "john_doe",
    "level": "member",
    "balance": 100000
  }
}
Error Responses
{
  "success": false,
  "message": "API Key is required."
}
{
  "success": false,
  "message": "Invalid API Key."
}
POST

Create Payment

/api/payment

Membuat permintaan pembayaran (top up saldo)

Authentication
Type Key Value
Header x-api-key YOUR_API_KEY
Header Content-Type application/json
Body Parameters
Parameter Type Required Description
amount number Required Minimal 100, maksimal 5.000.000
Example Request
curl -X POST "https://payget.sakuin.id/api/payment" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 50000}'
const https = require('https');

const apiKey = 'YOUR_API_KEY';
const data = JSON.stringify({ amount: 50000 });

const options = {
  hostname: 'payget.sakuin.id',
  path: '/api/payment',
  method: 'POST',
  headers: {
    'x-api-key': apiKey,
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
};

const req = https.request(options, (res) => {
  let responseData = '';
  res.on('data', (chunk) => responseData += chunk);
  res.on('end', () => console.log(JSON.parse(responseData)));
});

req.write(data);
req.end();
import requests

api_key = 'YOUR_API_KEY'
url = 'https://payget.sakuin.id/api/payment'
headers = {
    'x-api-key': api_key,
    'Content-Type': 'application/json'
}

response = requests.post(url, headers=headers, json={'amount': 50000})
print(response.json())
Success Response (200)
{
  "success": true,
  "message": "Payment request created successfully.",
  "paymentId": "a1b2c3d4e5f6g7h8",
  "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "amount": 50000,
  "totalAmount": 50001,
  "uniqueFee": 1,
  "balanceReceived": 50001,
  "fee": 0
}
Error Responses
{
  "success": false,
  "message": "Maximum amount is 5,000,000"
}
Fee Structure:
  • Saldo masuk dipotong 0,8% untuk amount > Rp 500.000
  • Tidak ada potongan untuk amount <= Rp 500.000
  • Jumlah minimal: Rp 100
  • Jumlah maksimal: Rp 5.000.000
  • Total transfer memakai kode unik Rp 1-99. Default Rp 1 jika tidak ada transaksi Pending yang bentrok
  • Payment expired dalam 30 menit
  • QRIS code dalam format base64
POST

Cancel Payment

/api/payment/:id/cancel

Membatalkan payment milik API key yang sedang berstatus Pending

Authentication
Type Key Value
Header x-api-key YOUR_API_KEY
Path Parameters
Parameter Type Required Description
id string Required Payment ID yang ingin dibatalkan
Example Request
curl -X POST "https://payget.sakuin.id/api/payment/a1b2c3d4e5f6g7h8/cancel" \
  -H "x-api-key: YOUR_API_KEY"
const https = require('https');

const apiKey = 'YOUR_API_KEY';
const paymentId = 'a1b2c3d4e5f6g7h8';

const options = {
  hostname: 'payget.sakuin.id',
  path: `/api/payment/${paymentId}/cancel`,
  method: 'POST',
  headers: { 'x-api-key': apiKey }
};

https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => console.log(JSON.parse(data)));
}).end();
import requests

api_key = 'YOUR_API_KEY'
payment_id = 'a1b2c3d4e5f6g7h8'
url = f'https://payget.sakuin.id/api/payment/{payment_id}/cancel'

headers = {'x-api-key': api_key}
response = requests.post(url, headers=headers)
print(response.json())
Success Response (200)
{
  "success": true,
  "message": "Payment cancelled successfully",
  "payment": {
    "id": "a1b2c3d4e5f6g7h8",
    "status": "Expired"
  }
}
Error Responses
{
  "success": false,
  "message": "Only pending payment can be cancelled",
  "status": "Success"
}
Catatan:
  • Hanya payment Pending yang dapat dibatalkan
  • Payment Success atau Expired tidak dapat dibatalkan
  • Payment harus milik API key yang digunakan
POST

Webhook Callback

Configured Callback URL

PayGet akan mengirim callback otomatis ke URL yang Anda atur di Dashboard saat status transaksi berubah. Endpoint payment status tetap tersedia sebagai fallback/manual check.

Konfigurasi
  • Atur Callback URL dari Dashboard > Webhook Callback
  • Callback URL wajib HTTPS
  • Signature dikirim di header X-PayGet-Signature
Events
Event Keterangan
payment.success Pembayaran berhasil dikonfirmasi
payment.expired Pembayaran kadaluarsa
payment.cancelled Pembayaran dibatalkan
withdraw.completed Penarikan berhasil diselesaikan
withdraw.cancelled Penarikan dibatalkan
Example Payload
{
  "event": "payment.success",
  "paymentId": "a1b2c3d4e5f6g7h8",
  "status": "Success",
  "amount": 50000,
  "totalAmount": 50001,
  "balanceReceived": 50001,
  "fee": 0,
  "uniqueFee": 1,
  "transactionId": "trx123",
  "createdAt": "2026-06-22T13:30:00.000Z",
  "completedAt": "2026-06-22T13:32:00.000Z"
}
Signature

Signature adalah HMAC SHA256 dari timestamp.body menggunakan Webhook Secret.

Contoh Validasi Signature (Node.js)
const crypto = require('crypto');

function verifyPayGetSignature(secret, timestamp, rawBody, signature) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.${rawBody}`)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}
GET

Payment Status

/api/payment-status/:id

Mengecek status pembayaran berdasarkan Payment ID. Endpoint ini tidak memerlukan API Key.

Path Parameters
Field Tipe Wajib Keterangan
id string Ya Payment ID yang ingin dicek statusnya
Example Request
curl -X GET "https://payget.sakuin.id/api/payment-status/a1b2c3d4e5f6g7h8"
const https = require('https');

const paymentId = 'a1b2c3d4e5f6g7h8';
const options = {
  hostname: 'payget.sakuin.id',
  path: `/api/payment-status/${paymentId}`,
  method: 'GET'
};

https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => data += chunk);
  res.on('end', () => console.log(JSON.parse(data)));
}).end();
import requests

payment_id = 'a1b2c3d4e5f6g7h8'
url = f'https://payget.sakuin.id/api/payment-status/{payment_id}'

response = requests.get(url)
print(response.json())
Success Response (200)
{
  "success": true,
  "status": "Pending",
  "id": "a1b2c3d4e5f6g7h8",
  "amount": 50000
}
Error Responses
{
  "success": false,
  "message": "Payment not found"
}
Status Payment:
  • Pending: Menunggu konfirmasi
  • Success: Berhasil dikonfirmasi
  • Expired: Kadaluarsa (lebih dari 30 menit)