Skip to content

Dokumentasi API

REST API untuk membuat transaksi QRIS, memeriksa status, dan menerima notifikasi pembayaran.

Pendahuluan

API Tatsupay berbasis REST. Semua permintaan dan respons memakai JSON, dan setiap permintaan diautentikasi dengan kunci API melalui header Authorization. Tidak ada SDK yang wajib dipasang.

Base URL

Semua endpoint berada di bawah base URL berikut. Seluruh permintaan harus melalui HTTPS.

base url
https://api.tatsupay.com

Autentikasi

Sertakan kunci API sebagai bearer token di header Authorization. Kunci mode uji berawalan sk_test_ dan kunci produksi berawalan sk_live_.

header
Authorization: Bearer sk_test_your_key_here

Kunci API memberi akses penuh ke transaksi akun Anda. Simpan di variabel lingkungan di sisi server, dan jangan pernah menyertakannya di kode yang dikirim ke peramban atau aplikasi seluler.

Mode uji dan produksi

Setiap akun memiliki dua set kunci yang terpisah. Transaksi mode uji tidak melibatkan dana sungguhan dan dapat dilunasi lewat endpoint simulasi, sehingga seluruh alur integrasi bisa diuji lebih dulu.

Membuat transaksi

POST/v1/transactions

Membuat transaksi baru dan mengembalikan data QRIS yang siap ditampilkan kepada pelanggan.

Parameter

  • amount — bilangan bulat, nominal dalam rupiah penuh. Wajib.
  • payment_method — kode metode pembayaran, misalnya qris. Wajib.
  • reference — identitas pesanan di sistem Anda. Opsional, tetapi sangat disarankan untuk rekonsiliasi.
curl
curl -X POST "https://api.tatsupay.com/v1/transactions" \
  -H "Authorization: Bearer sk_test_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 150000,
    "payment_method": "qris",
    "reference": "ORDER-1042"
  }'
200 response
{
  "id": "trx_01HQ8Z3XK2M9V4N7P1R5T8W2Y6",
  "status": "pending",
  "amount": 150000,
  "payment_method": "qris",
  "reference": "ORDER-1042",
  "qr_string": "00020101021226...",
  "url_image_qris": "https://api.tatsupay.com/v1/transactions/trx_01HQ8Z3XK2M9V4N7P1R5T8W2Y6/qris.png",
  "expires_at": "2026-10-03T01:15:00Z",
  "created_at": "2026-10-03T00:45:00Z"
}
node.js
const res = await fetch('https://api.tatsupay.com/v1/transactions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.TATSUPAY_SECRET_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    amount: 150000,
    payment_method: 'qris',
    reference: 'ORDER-1042',
  }),
});

const trx = await res.json();

Memeriksa status

GET/v1/transactions/{id}

Mengambil keadaan terkini satu transaksi. Berguna sebagai pemeriksaan cadangan bila webhook tidak sampai.

curl
curl "https://api.tatsupay.com/v1/transactions/trx_01HQ8Z3XK2M9V4N7P1R5T8W2Y6" \
  -H "Authorization: Bearer sk_test_your_key"

Webhook

Saat transaksi lunas, Tatsupay mengirim permintaan POST ke endpoint yang Anda daftarkan di dashboard. Endpoint Anda harus menjawab dengan status 2xx; bila tidak, pengiriman akan dicoba ulang dengan jeda yang semakin panjang.

payload
{
  "event": "transaction.paid",
  "data": {
    "id": "trx_01HQ8Z3XK2M9V4N7P1R5T8W2Y6",
    "status": "paid",
    "amount": 150000,
    "reference": "ORDER-1042",
    "paid_at": "2026-10-03T00:47:12Z"
  }
}

Endpoint webhook harus idempoten. Percobaan ulang dapat membuat satu peristiwa terkirim lebih dari sekali, dan memproses pesanan dua kali adalah akibat yang jauh lebih merugikan daripada memeriksa ulang status pesanan sebelum memprosesnya.

Status transaksi

  • pending — transaksi dibuat, menunggu pembayaran.
  • paid — pembayaran diterima dan transaksi lunas.
  • expired — batas waktu pembayaran terlewati.
  • failed — transaksi gagal dan tidak dapat dibayar.

Penanganan error

Kegagalan dijawab dengan kode status HTTP yang sesuai beserta badan JSON yang memuat kode error. Tangani berdasarkan kode, bukan berdasarkan teks pesan: teks dapat berubah seiring perbaikan, sedangkan kode tidak.

error
{
  "error": {
    "code": "VALIDATION_ERROR",
    "field": "amount"
  }
}

Batas permintaan

Permintaan dibatasi per kunci API. Bila batas terlampaui, respons yang diterima adalah 429 beserta header Retry-After yang menyatakan berapa detik lagi permintaan dapat diulang.

Untuk mesin dan agen AI

Spesifikasi OpenAPI dan ringkasan dalam teks polos tersedia pada alamat berikut, sehingga alat otomatis tidak perlu mengurai HTML halaman ini.