Dokumentasi API
Tipzy sebagai Payment Gateway — buat transaksi dan cek status lewat API Key. Pembayaran masuk ke akun pemilik key. Tidak ada endpoint topup.
Kelola key di Integrations → API.
Autentikasi
Sertakan API Key pada setiap request melalui header Authorization. Key hanya dapat digunakan dari alamat IP yang diizinkan jika kamu mengatur pembatasan IP saat membuat key.
Base URL
https://api.tipzy.idHeader (wajib)
Authorization: Bearer <api-key>Header (disarankan)
User-Agent: <app-name>/1.0Callback URL & Redirect URL
Diatur sekali di halaman API Key, berlaku otomatis untuk setiap pembayaran yang dibuat dengan key tersebut. Tidak dikirim sebagai body request.
Redirect URL
Ke mana pembayar diarahkan di halaman sukses setelah pembayaran berhasil. Kosongkan untuk memakai halaman Tipzy bawaan.
Callback URL
Tipzy mengirim satu kali HTTP POST ke URL ini (harus https://, tidak boleh alamat internal) setiap pembayaran sukses lewat key ini.
Contoh body callback
{
"event": "payment.success",
"data": {
"id": "01HXYZ…",
"status": "success",
"amount": 50000,
"payment_method": "qris",
"payment_url": "https://tipzy.id/donation/transaction/01HXYZ…",
"status_page_url": "https://tipzy.id/donation/transaction/01HXYZ…/status",
"created_at": "2026-08-11T06:30:00.000Z",
"paid_at": "2026-08-11T06:31:12.000Z",
"payer_name": "Budi",
"payer_email": "budi@email.com",
"message": "Pembayaran order #123"
}
}Memvalidasi Callback
Apabila Callback Secret diisi, body callback ditandatangani dengan HMAC SHA-256 pada header X-Tipzy-Signature. Contoh di Node.js:
const crypto = require("crypto");
const computedSignature = crypto
.createHmac("sha256", callbackSecret)
.update(JSON.stringify(callbackBody))
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(computedSignature),
Buffer.from(tipzySignatureFromHeader)
);POST /api/v1/gateway/transactions
Buat Transaksi
Membuat transaksi pembayaran ke akun pemilik API Key. Arahkan pembayar ke payment_url untuk menyelesaikan pembayaran. Pembayaran via Saldo Tipzy tidak tersedia untuk API Key.
namestringNama pembayar
emailstringEmail pembayar
amountnumberNominal IDR (min sesuai setting Tipzy)
payment_channelstringMis. QRIS (channel Xendit yang aktif)
payment_countrystringOpsional, default ID
messagestringOpsional
phonestringWajib untuk channel tertentu (ewallet)
| Parameter | Tipe | Keterangan |
|---|---|---|
| name | string | Nama pembayar |
| string | Email pembayar | |
| amount | number | Nominal IDR (min sesuai setting Tipzy) |
| payment_channel | string | Mis. QRIS (channel Xendit yang aktif) |
| payment_country | string | Opsional, default ID |
| message | string | Opsional |
| phone | string | Wajib untuk channel tertentu (ewallet) |
Contoh request
curl -X POST https://api.tipzy.id/api/v1/gateway/transactions \
-H "Authorization: Bearer <api-key>" \
-H "User-Agent: MyApp/1.0" \
-H "Content-Type: application/json" \
-d '{
"name": "Budi",
"email": "budi@email.com",
"amount": 50000,
"payment_channel": "QRIS",
"message": "Pembayaran order #123"
}'Contoh response 201
{
"success": true,
"result": {
"success": true,
"transaction_id": "01HXYZ…",
"payment_url": "https://tipzy.id/donation/transaction/01HXYZ…",
"status": "pending",
"amount": 50000,
"payment_method": "qris",
"created_at": "2026-08-11T06:30:00.000Z"
}
}GET /api/v1/gateway/transactions/{transaction_id}
Status Transaksi
Mengambil detail dan status transaksi berdasarkan transaction_id. API Key hanya dapat melihat transaksi yang dibuat dengan key yang sama. Status: pending, paid, expired, cancelled.
Contoh request
curl https://api.tipzy.id/api/v1/gateway/transactions/<transaction_id> \
-H "Authorization: Bearer <api-key>" \
-H "User-Agent: MyApp/1.0"Contoh response 200
{
"success": true,
"result": {
"id": "01HXYZ…",
"status": "pending",
"amount": 50000,
"payment_method": "qris",
"payment_url": "https://tipzy.id/donation/transaction/01HXYZ…",
"status_page_url": "https://tipzy.id/donation/transaction/01HXYZ…/status",
"redirect_url": null,
"payer_name": "Budi",
"payer_email": "budi@email.com",
"message": "Pembayaran order #123",
"created_at": "2026-08-11T06:30:00.000Z",
"paid_at": null
}
}