Dokumentasi API
Dokumentasi lengkap API AutoGoPay. Generate QRIS dinamis, monitoring real-time, dan webhook otomatis.
https://api-autogopay.source.web.idAutentikasi
Semua request memerlukan API Key via header Authorization dengan format Bearer Token.
Authorization: Bearer your_api_key_here
Daftar Transaksi
Ambil daftar transaksi terbaru.
/transactionscURL Example
curl -X POST https://api-autogopay.source.web.id/transactions \ -H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"data": {
"transactions": [
{
"id": "TRX-001",
"time": "2024-03-18 15:16:33",
"amount": 50000,
"currency": "IDR",
"payment_type": "qris",
"status": "settlement",
"issuer": "gopay"
}
]
}
}Generate QRIS
Buat transaksi QRIS baru. Order ID di-generate otomatis. Response termasuk checkout_url yang bisa dikirim ke pelanggan sebagai link pembayaran.
/qris/generatecURL Example
curl -X POST https://api-autogopay.source.web.id/qris/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 10000
}'amount | integer | wajib | Jumlah dalam IDR (1 - 10.000.000) |
{
"success": true,
"message": "QRIS created successfully",
"data": {
"transaction_id": "53bc6ed2-441d-4bd0-bc39-11fdfff5fedb",
"order_id": "AUTOGOPAY-1774618440-2411",
"amount": 10000,
"transaction_status": "pending",
"qr_string": "00020101021226610014COM.GO-JEK.WWW...",
"qr_url": "https://api-autogopay.source.web.id/qris/53bc6ed2-441d-4bd0-bc39-11fdfff5fedb/qr-code",
"checkout_url": "https://autogopay.source.web.id/pay/abc123def456",
"transaction_time": "2026-03-27 20:34:00",
"expiry_time": "2026-03-27 20:49:00"
}
}checkout_url
URL ini bisa langsung dikirim ke pelanggan (via WhatsApp, email, dll). Pelanggan tinggal klik dan scan QRIS di halaman pembayaran. Status akan otomatis update saat pembayaran berhasil.
Payment Link (Checkout URL)
Setiap Generate QRIS otomatis membuat payment link (checkout_url). Link ini adalah halaman pembayaran yang bisa dibagikan ke pelanggan. Status di halaman ini akan otomatis update secara real-time saat transaksi dibayar.
- Panggil POST /qris/generate dengan amount
- Ambil checkout_url dari response
- Kirim URL tersebut ke pelanggan (WA, email, chat, dll)
- Pelanggan buka link, scan QR, dan bayar
- Halaman otomatis menampilkan status berhasil
https://autogopay.source.web.id/pay/<token>Token di-generate otomatis dan unik per transaksi.
- • Tampilan QR code yang langsung bisa di-scan
- • Countdown timer expiry
- • Auto-detect pembayaran (polling setiap 3 detik)
- • Tampilan berubah otomatis saat berhasil/expired/dibatalkan
- • Responsive (mobile & desktop)
Status Transaksi
Cek status pembayaran QRIS.
/qris/statuscURL Example
curl -X POST https://api-autogopay.source.web.id/qris/status \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transaction_id": "your_transaction_id"
}'Cancel QRIS
Batalkan transaksi QRIS yang masih pending.
/qris/cancelcURL Example
curl -X POST https://api-autogopay.source.web.id/qris/cancel \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transaction_id": "your_transaction_id"
}'Webhook Callback
Terima notifikasi real-time saat transaksi dibayar. Sistem mengirim POST request ke URL webhook Anda.
⚠️ VERIFIKASI SIGNATURE WAJIB
Verifikasi header X-Signature di setiap webhook request menggunakan HMAC-SHA256 dengan API Key sebagai secret.
Content-Type | application/json |
User-Agent | AutoGopay-Callback/1.0 |
X-Callback-Event | transaction.received |
X-Signature | HMAC-SHA256 signature |
{
"event": "transaction.received",
"timestamp": "2024-03-29 14:30:45",
"transaction": {
"id": "TRX-001",
"time": "2024-03-29 14:30:40",
"amount": 50000,
"currency": "IDR",
"payment_type": "qris",
"status": "settlement",
"issuer": "gopay"
}
}<?php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$apiKey = 'your_api_key_here';
// Verify signature (REQUIRED!)
$expected = hash_hmac('sha256', $payload, $apiKey);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}
$data = json_decode($payload, true);
if ($data['event'] === 'transaction.received') {
$tx = $data['transaction'];
// Process payment: $tx['id'], $tx['amount'], $tx['status']
}
echo json_encode(['success' => true]);const crypto = require('crypto');
app.post('/webhook', (req, res) => {
const signature = req.headers['x-signature'];
const expected = crypto.createHmac('sha256', API_KEY)
.update(JSON.stringify(req.body)).digest('hex');
if (signature !== expected) return res.status(401).end();
const { transaction } = req.body;
if (transaction.status === 'settlement') {
// Process payment
}
res.json({ success: true });
});- • HTTPS wajib di production
- • Return HTTP 200 dalam 10 detik
- • Cek idempotency untuk mencegah duplikat
OVO - Riwayat Transaksi
Ambil riwayat transaksi OVO (masuk & keluar). Akun OVO harus terhubung via dashboard.
/ovo/transactions?page=1&limit=10cURL Example
curl -X GET https://api-autogopay.source.web.id/ovo/transactions?page=1&limit=10 \ -H "Authorization: Bearer YOUR_API_KEY"
page | integer | default: 1 | Halaman |
limit | integer | default: 10 | Jumlah per halaman (max 50) |
{
"success": true,
"message": "Transaction history retrieved",
"data": [
{
"description": "Top Up",
"source": "Bank CIMB",
"amount": 10000,
"fee": 2000,
"date": "2026-05-19",
"time": "20:54:34",
"status": "SUCCESS",
"type": "in"
},
{
"description": "Pembayaran",
"source": "Axis",
"amount": 1100,
"fee": 0,
"date": "2026-05-05",
"time": "20:47:42",
"status": "SUCCESS",
"type": "out"
}
]
}type | "in" (masuk) atau "out" (keluar) |
source | Sumber transaksi |
amount | Jumlah (IDR) |
fee | Biaya transaksi |
status | SUCCESS / PENDING |
OVO - Preview QRIS
Scan QRIS dan dapatkan info merchant + nominal sebelum membayar. Gunakan endpoint ini untuk konfirmasi dulu sebelum lanjut bayar via /ovo/qris/confirm.
/ovo/qris/previewcURL Example
curl -X POST https://api-autogopay.source.web.id/ovo/qris/preview \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"qr_string": "00020101021226...",
"amount": 5000
}'qr_string | string | wajib | String QRIS dari hasil scan QR code |
amount | integer | opsional | Nominal bayar. Opsional, sistem otomatis detect dari QR. Kirim jika ingin override. |
{
"success": true,
"message": "QRIS preview ready. Confirm to proceed with payment.",
"data": {
"checkout_id": "ck_abc123",
"scan_id": "sc_xyz789",
"qr_type": "dynamic",
"is_dynamic": true,
"merchant_name": "TOKO SEJAHTERA",
"merchant_city": "JAKARTA",
"amount": 50000
}
}{
"success": true,
"message": "QRIS preview ready. Amount required for payment.",
"data": {
"preview_id": "pending_sc_xyz789",
"scan_id": "sc_xyz789",
"qr_type": "static",
"is_dynamic": false,
"merchant_name": "WARUNG MAKAN",
"merchant_city": "BANDUNG",
"amount": 0,
"amount_required": true,
"message": "Static QRIS without embedded amount. Please provide 'amount' in confirm request."
}
}💡 Flow 2 Tahap
- Jika response ada checkout_id → lanjut ke /ovo/qris/confirm dengan checkout_id + pin
- Jika response ada preview_id + amount_required: true → lanjut ke /ovo/qris/confirm dengan preview_id + amount + pin
OVO - Konfirmasi Bayar QRIS
Konfirmasi dan eksekusi pembayaran QRIS setelah user mereview data dari preview. Ada 2 flow tergantung response preview.
cURL Example
curl -X POST https://api-autogopay.source.web.id/ovo/qris/confirm \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"checkout_id": "ck_abc123",
"pin": "123456"
}'cURL Example
curl -X POST https://api-autogopay.source.web.id/ovo/qris/confirm \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"preview_id": "pending_sc_xyz789",
"amount": 25000,
"pin": "123456"
}'checkout_id | string | kondisional | Dari response preview (jika amount terdeteksi) |
preview_id | string | kondisional | Dari response preview (jika amount_required: true) |
amount | integer | kondisional | Wajib jika pakai preview_id (nominal yang ingin dibayar) |
pin | string | wajib | PIN OVO 6 digit |
{
"success": true,
"message": "QRIS payment successful",
"data": {
"amount": 50000,
"checkout_id": "ck_abc123"
}
}{
"success": false,
"message": "Insufficient OVO Cash balance",
"data": {
"ovo_cash_balance": 15000,
"amount_required": 50000,
"shortage": 35000
}
}⚠️ Catatan
- Kirim checkout_id ATAU preview_id, tidak keduanya
- checkout_id / preview_id berlaku 10 menit setelah preview
- Sistem otomatis cek saldo sebelum bayar, jika kurang akan ditolak
- PIN salah 3x bisa menyebabkan akun OVO terkunci
OVO - Daftar Bank
Ambil daftar bank yang didukung untuk transfer via OVO. Fitur ini harus di-enable oleh admin.
/ovo/bankscURL Example
curl -X GET https://api-autogopay.source.web.id/ovo/banks \ -H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"message": "Bank list retrieved",
"data": [
{
"code": "014",
"name": "BANK BCA"
},
{
"code": "002",
"name": "BANK BRI"
},
{
"code": "008",
"name": "BANK MANDIRI"
},
{
"code": "009",
"name": "BANK BNI"
},
{
"code": "022",
"name": "BANK CIMB NIAGA"
}
]
}OVO - Transfer Inquiry
Cek nama penerima dan biaya admin sebelum transfer. Panggil ini dulu sebelum eksekusi transfer.
/ovo/transfer/inquirycURL Example
curl -X POST https://api-autogopay.source.web.id/ovo/transfer/inquiry \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"bank_code": "008",
"account_number": "1234567890",
"amount": 10000
}'bank_code | string | wajib | Kode bank dari /ovo/banks |
account_number | string | wajib | Nomor rekening tujuan |
amount | integer | wajib | Nominal transfer (min Rp 10.000) |
{
"success": true,
"message": "Bank inquiry successful",
"data": {
"bank_code": "008",
"account_number": "1770025694909",
"account_name": "AG** AZ**R M* LU**I",
"amount": 10000,
"admin_fee": 2500,
"total_amount": 12500
}
}OVO - Transfer Bank
Eksekusi transfer bank. Pastikan sudah melakukan inquiry terlebih dahulu untuk verifikasi nama penerima.
/ovo/transfer/executecURL Example
curl -X POST https://api-autogopay.source.web.id/ovo/transfer/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"bank_code": "008",
"bank_name": "BANK MANDIRI",
"account_number": "1770025694909",
"account_name": "NAMA PENERIMA",
"amount": 10000,
"pin": "123456",
"notes": "pembayaran"
}'bank_code | string | wajib | Kode bank |
bank_name | string | opsional | Nama bank (auto-detect dari inquiry) |
account_number | string | wajib | Nomor rekening tujuan |
account_name | string | opsional | Nama penerima (auto-detect dari inquiry) |
amount | integer | wajib | Nominal transfer (min Rp 10.000) |
pin | string | wajib | PIN OVO 6 digit |
notes | string | opsional | Catatan transfer |
{
"success": true,
"message": "Transfer successful",
"data": {
"amount": 10000,
"admin_fee": 2500,
"total_amount": 12500,
"bank_code": "008",
"bank_name": "BANK MANDIRI",
"account_number": "1770025694909",
"account_name": "AGIN AZHAR MH LUTPI",
"reference_id": "p01-260613-c2f2b39d-92e7-4382-8cd9-6d44409f1ddc"
}
}{
"success": false,
"message": "Insufficient OVO Cash balance",
"data": {
"ovo_cash_balance": 5000,
"amount": 10000,
"admin_fee": 2500,
"total_required": 12500,
"shortage": 7500
}
}⚠️ Catatan Penting
- Fitur ini harus di-enable oleh admin terlebih dahulu
- Minimal transfer Rp 10.000
- Admin fee Rp 2.500 dicharge otomatis dari saldo OVO
- Selalu panggil /inquiry dulu untuk verifikasi nama penerima
- PIN salah 3x bisa menyebabkan akun OVO terkunci
💡 Flow yang Disarankan
- GET /ovo/banks → ambil kode bank
- POST /ovo/transfer/inquiry → cek nama penerima + fee
- Konfirmasi ke user (tampilkan nama + total)
- POST /ovo/transfer/execute → eksekusi transfer
ShopeePay - Status
Cek status koneksi ShopeePay dan validitas token. Sistem juga otomatis mengecek token setiap 5 menit dan akan mengirim notifikasi Telegram jika token expired.
/shopeepay/statuscURL Example
curl -X GET https://api-autogopay.source.web.id/shopeepay/status \ -H "Authorization: Bearer YOUR_API_KEY"
{
"success": true,
"message": "ShopeePay status",
"data": {
"connected": true,
"token_valid": true
}
}connected | Apakah token tersimpan |
token_valid | Apakah token masih bisa dipakai (test call ke Shopee API) |
⚠️ Auto Token Check
Sistem otomatis mengecek token setiap 5 menit. Jika token invalid/expired, notifikasi akan dikirim ke Telegram kamu (1x sampai token diupdate).
ShopeePay - Transaksi
Ambil daftar transaksi ShopeePay merchant. Default: 3 hari terakhir.
/shopeepay/transactions?pageSize=10cURL Example
curl -X GET https://api-autogopay.source.web.id/shopeepay/transactions?pageSize=10 \ -H "Authorization: Bearer YOUR_API_KEY"
startTime | unix timestamp | default: 3 hari lalu | Waktu mulai |
endTime | unix timestamp | default: sekarang | Waktu akhir |
pageSize | integer | default: 10 | Jumlah per halaman |
{
"success": true,
"message": "Transactions retrieved",
"data": {
"transactions": [
{
"amount": 100,
"status": "success",
"issuer": "Bank Mandiri",
"time": "2026-06-10 23:21:44"
},
{
"amount": 100,
"status": "success",
"issuer": "Bank Mandiri",
"time": "2026-06-10 23:19:52"
}
]
}
}ShopeePay - Generate QRIS
Generate QRIS dinamis dari static QRIS merchant. QR URL valid 15 menit, otomatis dihapus setelah expired.
/shopeepay/qris/createcURL Example
curl -X POST https://api-autogopay.source.web.id/shopeepay/qris/create \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 50000,
"qris_static": "00020101021226..."
}'amount | integer | wajib | Nominal dalam IDR |
qris_static | string | wajib | String QRIS statis dari sticker QR merchant |
{
"success": true,
"message": "QRIS created successfully",
"data": {
"amount": 50000,
"qr_string": "00020101021126610016ID.CO.SHOPEE.WWW...",
"qr_url": "https://api-autogopay.source.web.id/shopeepay/qr/6ff2cd1d04c5e4e7",
"transaction_time": "2026-06-11 14:30:00",
"expiry_time": "2026-06-11 14:45:00"
}
}qr_url | URL QR image (redirect ke gambar QR). Expired otomatis setelah 15 menit. |
qr_string | Raw QRIS string untuk render sendiri |
expiry_time | Waktu QR expired (WIB). Setelah ini qr_url return 404. |
ShopeePay - Contoh Bot Payment
Contoh implementasi bot pembayaran otomatis menggunakan ShopeePay QRIS. Bot membuat QRIS dengan nominal unik, lalu polling transaksi untuk deteksi pembayaran.
- Buat QRIS dengan nominal dasar + angka acak (1-99) supaya unik
- Tampilkan QR ke pelanggan
- Polling GET /shopeepay/transactions setiap 5 detik
- Jika ada transaksi dengan nominal cocok & status "success" = pembayaran berhasil
/**
* ShopeePay Payment Bot - Node.js
*/
const API_URL = 'https://api-autogopay.source.web.id';
const API_KEY = 'agp_API_KEY_KAMU';
const QRIS_STATIC = '00020101021126610016ID.CO.SHOPEE.WWW...'; // QRIS static merchant kamu
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`,
};
// Buat nominal unik (nominal dasar + acak 1-99)
function buatNominalUnik(nominalDasar) {
const acak = Math.floor(Math.random() * 99) + 1;
return nominalDasar + acak;
}
// Langkah 1: Buat QRIS
async function buatQRIS(nominal) {
const res = await fetch(`${API_URL}/shopeepay/qris/create`, {
method: 'POST',
headers,
body: JSON.stringify({ amount: nominal, qris_static: QRIS_STATIC }),
});
const data = await res.json();
if (!data.success) throw new Error(data.message);
return data.data;
}
// Langkah 2: Cek transaksi apakah ada yang cocok
async function cekPembayaran(nominal, waktuMulai) {
const params = new URLSearchParams({
pageSize: '20',
startTime: String(waktuMulai),
});
const res = await fetch(`${API_URL}/shopeepay/transactions?${params}`, {
headers,
});
const data = await res.json();
if (!data.success) return null;
const transaksi = data.data?.transactions || [];
const cocok = transaksi.find(
tx => tx.amount === nominal && tx.status === 'success'
);
return cocok || null;
}
// Utama: Buat pembayaran dan tunggu konfirmasi
async function buatPembayaran(nominalDasar) {
const nominalUnik = buatNominalUnik(nominalDasar);
const waktuMulai = Math.floor(Date.now() / 1000) - 60;
console.log(`Membuat QRIS untuk Rp ${nominalUnik}...`);
const qris = await buatQRIS(nominalUnik);
console.log(`URL QR: ${qris.qr_url}`);
console.log(`Nominal: Rp ${qris.amount}`);
console.log(`Kedaluwarsa: ${qris.expiry_time}`);
console.log('Menunggu pembayaran...');
// Cek setiap 5 detik selama 15 menit
const maksPercobaan = 180;
for (let i = 0; i < maksPercobaan; i++) {
await new Promise(r => setTimeout(r, 5000));
const pembayaran = await cekPembayaran(nominalUnik, waktuMulai);
if (pembayaran) {
console.log('PEMBAYARAN BERHASIL!');
console.log(` Nominal: Rp ${pembayaran.amount}`);
console.log(` Penerbit: ${pembayaran.issuer}`);
return { sukses: true, pembayaran };
}
process.stdout.write(` Mengecek... (${i + 1}/${maksPercobaan})\r`);
}
console.log('Pembayaran kedaluwarsa');
return { sukses: false };
}
// Jalankan
buatPembayaran(10000).then(hasil => {
console.log('\nHasil:', JSON.stringify(hasil, null, 2));
});"""
ShopeePay Payment Bot - Python
"""
import requests
import time
import random
API_URL = "https://api-autogopay.source.web.id"
API_KEY = "agp_API_KEY_KAMU"
QRIS_STATIC = "00020101021126610016ID.CO.SHOPEE.WWW..." # QRIS static merchant kamu
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}",
}
def buat_nominal_unik(nominal_dasar: int) -> int:
"""Buat nominal unik = dasar + acak 1-99"""
return nominal_dasar + random.randint(1, 99)
def buat_qris(nominal: int) -> dict:
"""Langkah 1: Buat QRIS dengan nominal unik"""
res = requests.post(
f"{API_URL}/shopeepay/qris/create",
headers=headers,
json={"amount": nominal, "qris_static": QRIS_STATIC},
)
data = res.json()
if not data.get("success"):
raise Exception(data.get("message", "Gagal membuat QRIS"))
return data["data"]
def cek_pembayaran(nominal: int, waktu_mulai: int) -> dict | None:
"""Langkah 2: Cek daftar transaksi, cari nominal yang cocok"""
res = requests.get(
f"{API_URL}/shopeepay/transactions",
headers=headers,
params={"pageSize": 20, "startTime": waktu_mulai},
)
data = res.json()
if not data.get("success"):
return None
transaksi = data.get("data", {}).get("transactions") or []
for tx in transaksi:
if tx["amount"] == nominal and tx["status"] == "success":
return tx
return None
def buat_pembayaran(nominal_dasar: int) -> dict:
"""Utama: Buat pembayaran dan tunggu konfirmasi"""
nominal_unik = buat_nominal_unik(nominal_dasar)
waktu_mulai = int(time.time()) - 60
print(f"Membuat QRIS untuk Rp {nominal_unik}...")
qris = buat_qris(nominal_unik)
print(f"URL QR: {qris['qr_url']}")
print(f"Nominal: Rp {qris['amount']}")
print(f"Kedaluwarsa: {qris['expiry_time']}")
print("Menunggu pembayaran...")
# Cek setiap 5 detik selama 15 menit
maks_percobaan = 180
for i in range(maks_percobaan):
time.sleep(5)
pembayaran = cek_pembayaran(nominal_unik, waktu_mulai)
if pembayaran:
print("\nPEMBAYARAN BERHASIL!")
print(f" Nominal: Rp {pembayaran['amount']}")
print(f" Penerbit: {pembayaran.get('issuer', '-')}")
return {"sukses": True, "pembayaran": pembayaran}
print(f" Mengecek... ({i + 1}/{maks_percobaan})", end="\r")
print("\nPembayaran kedaluwarsa")
return {"sukses": False}
if __name__ == "__main__":
hasil = buat_pembayaran(10000)
print(f"\nHasil: {hasil}")💡 Tips
- Ganti API_KEY dan QRIS_STATIC dengan milik kamu dari dashboard
- Nominal unik mencegah konflik jika ada beberapa pembayaran bersamaan
- Polling 5 detik cukup responsif tanpa membebani server
- QR expired otomatis setelah 15 menit, sesuaikan loop timeout
© 2026 AutoGoPay. Semua hak dilindungi.