Pra-peluncuran

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.

FieldTipeDeskripsi
idstringID unik, diawali pay_
statusenumrequires_payment, processing, succeeded, failed, expired atau refunded
amountintegerNominal dalam sen
currencystringSelalu myr
methodsarrayMetode yang ditawarkan di checkout, seperti fpx dan duitnow_qr
method_usedstringMetode yang benar-benar dipakai pelanggan untuk membayar
referencestringReferensi pesanan Anda sendiri
checkout_urlstringTujuan pengalihan pelanggan untuk membayar
payout_datedateHari kerja saat pembayaran ini dicairkan ke Anda
created_attimestampWaktu pembayaran dibuat, dalam format ISO 8601

Status pembayaran

  1. 1requires_paymentSudah dibuat dan menunggu pelanggan membayar
  2. 2processingPelanggan sudah menyetujui dan bank sedang mengonfirmasi
  3. 3succeededLunas. Pesanan aman untuk diproses
  4. 4failedDitolak oleh bank atau dibatalkan oleh pelanggan
  5. 5expiredTidak dibayar dalam 30 menit. Buat pembayaran baru untuk mencoba lagi
  6. 6refundedSudah di-refund penuh ke pelanggan

Endpoint

POST/v1/payments

Membuat pembayaran

Membuat pembayaran dan mengembalikan checkout_url untuk mengarahkan pelanggan.

Request

curl
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

JSON
{
  "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"
}
GET/v1/payments/{id}

Mengambil pembayaran

Mengembalikan status terbaru sebuah pembayaran. Berguna sebagai cadangan jika Anda melewatkan webhook.

Request

curl
curl https://api.tujupay.com/v1/payments/pay_3Kx9LmQ2 \
  -u sk_test_51HxQ2...:

Response

JSON
{
  "id": "pay_3Kx9LmQ2",
  "status": "succeeded",
  "amount": 18900,
  "method_used": "fpx",
  "payout_date": "2026-10-09"
}
POST/v1/refunds

Refund pembayaran

Me-refund seluruh atau sebagian pembayaran yang berhasil. Kosongkan amount untuk refund penuh.

Request

curl
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

JSON
{
  "id": "re_7Pq1Xs",
  "payment": "pay_3Kx9LmQ2",
  "amount": 5000,
  "status": "processing"
}
GET/v1/payouts

Daftar pencairan

Menampilkan pencairan ke bank Anda, dari yang terbaru, masing-masing dengan laporannya.

Request

curl
curl "https://api.tujupay.com/v1/payouts?limit=2" \
  -u sk_test_51HxQ2...:

Response

JSON
{
  "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.

StatusKodeArtinya
400invalid_requestAda parameter yang kurang atau salah. Pesannya menyebutkan yang mana
401unauthorizedKunci API tidak ada, salah atau sudah dicabut
404not_foundTidak ada objek dengan ID tersebut di mode ini
409idempotency_conflictIdempotency-Key yang sama dipakai dengan parameter berbeda
429rate_limitedTerlalu banyak request. Tunggu lalu coba lagi dengan backoff
500server_errorTerjadi masalah di sisi kami. Aman untuk dicoba lagi dengan kunci yang sama
JSON
{
  "error": {
    "type": "invalid_request",
    "code": "amount_too_small",
    "message": "amount must be at least 100 sen (RM 1.00).",
    "param": "amount"
  }
}