Referensi API
API TujuPay, field demi field.
REST API yang konsisten melalui HTTPS. Request dikirim dalam format form-encoded atau JSON, response selalu JSON, dan setiap nominal berupa integer dalam sen.
◷ Sandbox akan dibuka lebih dulu untuk developer di daftar tunggu. Kunci live menyusul setelah TujuPay berlisensi.
Dasar-dasar
- URL dasar
- https://api.tujupay.com/v1
- Autentikasi
- HTTP Basic dengan secret key Anda sebagai username
- Nominal
- Integer dalam sen. RM 189.00 berarti 18900
- Mata uang
- myr
- Idempotensi
- Kirim header Idempotency-Key di setiap POST. Kunci disimpan selama 24 jam
- Versi
- Kirim TujuPay-Version: 2026-10-01 untuk mengunci versi
- Paginasi
- limit (1 sampai 100) dan starting_after, mengembalikan has_more
Objek Payment
Payment mewakili satu upaya pelanggan untuk membayar Anda. Statusnya berpindah sesuai urutan di bawah.
| Field | Tipe | Deskripsi |
|---|---|---|
| id | string | ID unik, diawali pay_ |
| status | enum | requires_payment, processing, succeeded, failed, expired atau refunded |
| amount | integer | Nominal dalam sen |
| currency | string | Selalu myr |
| methods | array | Metode yang ditawarkan di checkout, seperti fpx dan duitnow_qr |
| method_used | string | Metode yang benar-benar dipakai pelanggan untuk membayar |
| reference | string | Referensi pesanan Anda sendiri |
| checkout_url | string | Tujuan pengalihan pelanggan untuk membayar |
| payout_date | date | Hari kerja saat pembayaran ini dicairkan ke Anda |
| created_at | timestamp | Waktu pembayaran dibuat, dalam format ISO 8601 |
Status pembayaran
- 1
requires_paymentSudah dibuat dan menunggu pelanggan membayar - 2
processingPelanggan sudah menyetujui dan bank sedang mengonfirmasi - 3
succeededLunas. Pesanan aman untuk diproses - 4
failedDitolak oleh bank atau dibatalkan oleh pelanggan - 5
expiredTidak dibayar dalam 30 menit. Buat pembayaran baru untuk mencoba lagi - 6
refundedSudah di-refund penuh ke pelanggan
Endpoint
/v1/paymentsMembuat pembayaran
Membuat pembayaran dan mengembalikan checkout_url untuk mengarahkan pelanggan.
Request
curl https://api.tujupay.com/v1/payments \ -u sk_test_51HxQ2...: \ -H "Idempotency-Key: order-2214" \ -d amount=18900 \ -d currency=myr \ -d "methods[]=fpx" \ -d "methods[]=duitnow_qr" \ -d reference=ORDER-2214 \ -d return_url=https://yourshop.my/orders/2214
Response
{
"id": "pay_3Kx9LmQ2",
"status": "requires_payment",
"amount": 18900,
"currency": "myr",
"methods": ["fpx", "duitnow_qr"],
"reference": "ORDER-2214",
"checkout_url": "https://pay.tujupay.com/c/3Kx9LmQ2",
"payout_date": null,
"created_at": "2026-10-09T10:42:00+08:00"
}/v1/payments/{id}Mengambil pembayaran
Mengembalikan status terbaru sebuah pembayaran. Berguna sebagai cadangan jika Anda melewatkan webhook.
Request
curl https://api.tujupay.com/v1/payments/pay_3Kx9LmQ2 \ -u sk_test_51HxQ2...:
Response
{
"id": "pay_3Kx9LmQ2",
"status": "succeeded",
"amount": 18900,
"method_used": "fpx",
"payout_date": "2026-10-09"
}/v1/refundsRefund pembayaran
Me-refund seluruh atau sebagian pembayaran yang berhasil. Kosongkan amount untuk refund penuh.
Request
curl https://api.tujupay.com/v1/refunds \ -u sk_test_51HxQ2...: \ -H "Idempotency-Key: refund-2214-1" \ -d payment=pay_3Kx9LmQ2 \ -d amount=5000
Response
{
"id": "re_7Pq1Xs",
"payment": "pay_3Kx9LmQ2",
"amount": 5000,
"status": "processing"
}/v1/payment_linksMembuat tautan pembayaran
Membuat tautan yang bisa dibagikan untuk berjualan lewat chat atau media sosial.
Request
curl https://api.tujupay.com/v1/payment_links \ -u sk_test_51HxQ2...: \ -d amount=6500 \ -d "description=Kek Lapis Sarawak, 1 box" \ -d single_use=true
Response
{
"id": "plink_9Ad2",
"url": "https://pay.tujupay.com/l/kek-lapis",
"amount": 6500,
"single_use": true,
"active": true
}/v1/payoutsDaftar pencairan
Menampilkan pencairan ke bank Anda, dari yang terbaru, masing-masing dengan laporannya.
Request
curl "https://api.tujupay.com/v1/payouts?limit=2" \ -u sk_test_51HxQ2...:
Response
{
"data": [
{ "id": "po_1Tz", "amount": 320760, "status": "paid", "arrival_date": "2026-10-09" },
{ "id": "po_0Ym", "amount": 291840, "status": "paid", "arrival_date": "2026-10-08" }
],
"has_more": true
}Error
Error mengembalikan status HTTP standar dan body JSON berisi type, code dan pesan yang mudah dipahami manusia.
| Status | Kode | Artinya |
|---|---|---|
| 400 | invalid_request | Ada parameter yang kurang atau salah. Pesannya menyebutkan yang mana |
| 401 | unauthorized | Kunci API tidak ada, salah atau sudah dicabut |
| 404 | not_found | Tidak ada objek dengan ID tersebut di mode ini |
| 409 | idempotency_conflict | Idempotency-Key yang sama dipakai dengan parameter berbeda |
| 429 | rate_limited | Terlalu banyak request. Tunggu lalu coba lagi dengan backoff |
| 500 | server_error | Terjadi masalah di sisi kami. Aman untuk dicoba lagi dengan kunci yang sama |
{
"error": {
"type": "invalid_request",
"code": "amount_too_small",
"message": "amount must be at least 100 sen (RM 1.00).",
"param": "amount"
}
}