Sign in
Pembayaran dan penarikan/Payment API

Payment API

Buat dan kelola sesi pembayaran kripto dengan 2328.io Payment API.

Payment API memungkinkan Anda membuat sesi pembayaran, mengarahkan pelanggan ke checkout terhosting, dan melacak status pembayaran.

Buat pembayaran

Membuat sesi pembayaran dan mengembalikan URL untuk pelanggan melakukan pembayaran.

Parameter permintaan

FieldTipeWajibDeskripsiNilai
amountdecimalyaJumlah pembayaran dalam mata uang tersebut, mis. 100.00
currencystringyaMata uang fiat (USD, EUR, RUB, …) atau kripto (USDT, TRX, BTC, …)
order_idstringyaID pesanan Anda, mis. ORDER-12345 (hingga 128 karakter)
to_currencystringtidakKripto yang sudah dipilih sebelumnya
networkstringtidak*Kode jaringan (wajib jika to_currency ditetapkan atau currency adalah kripto)
url_returnstringtidakURL pengalihan setelah pembayaran, mis. https://your-site.com/return
url_successstringtidakAlternatif untuk url_return
url_callbackstringyaURL untuk notifikasi webhook, mis. https://your-site.com/webhook
invite_codestringtidakKode referral
fee_splitdecimaltidakBagian biaya merchant yang dibebankan ke pembayar, 0–100 (%). 0 = merchant membayar penuh, 100 = pembayar membayar penuh. Mengganti pengaturan tingkat project. Contoh: 30 (pembayar menanggung 30% dari biaya).
price_markupdecimaltidakMarkup atau diskon pada jumlah faktur, −99 hingga 100 (%). Mengganti pengaturan tingkat project. Contoh: 5 (+5%) atau -10 (diskon 10%).
descriptionstringtidakDeskripsi faktur opsional (maks 200 karakter). Ditampilkan kepada pembayar di halaman pembayaran. Contoh: Premium plan — Order #12345.
ttl_secondsinttidakMasa berlaku faktur dalam detik, dari 300 (5 menit) hingga 86400 (24 jam). Setelah periode ini faktur kedaluwarsa dan tidak dapat dibayar lagi. Default: 3600 (1 jam). Contoh: 3600.

Respon

JSON
{
  "state": 0,
  "result": {
    "uuid": "abc123-def456-...",
    "order_id": "ORDER-12345",
    "amount": "100.00",
    "currency": "USD",
    "amount_usd": "100.00",
    "exchange_rate": null,
    "url": "https://2328.io/pay/abc123-def456-...",
    "tg_deeplink": "https://t.me/my2328bot?start=pay_abc123-def456-...",
    "expires_at": "2026-01-11T21:00:00Z",
    "created_at": "2026-01-11T20:00:00Z",
    "payer_currency": "USDT",
    "payer_amount": "100.50",
    "network": "TRX-TRC20",
    "address": "TXYZabc123...",
    "payment_status": "check",
    "txid": null,
    "payment_amount": null,
    "qr": "data:image/png;base64,iVBORw0..."
  }
}
  • Arahkan pelanggan ke result.url untuk menyelesaikan pembayaran.
  • tg_deeplink — deeplink bot Telegram untuk pembayaran melalui Telegram MiniApp.
  • qr — kode QR berenkode Base64 (data URI) dari alamat deposit. Hadir saat alamat sudah ditetapkan (saat network ditetapkan bersama dengan to_currency, atau saat currency adalah kripto); jika tidak, null.
  • txid, payment_amountnull hingga pelanggan membayar. Diisi setelah transaksi terdeteksi on-chain. Dengarkan webhook payment_status: paid untuk mengetahui kapan.
  • exchange_ratenull jika konversi belum berlaku (mis. nilai tukar fiat → kripto belum terkunci). Diisi setelah mata uang pembayar dipilih.
Credentials
RequestPOST/v1/payment
curl -X POST https://api.2328.io/api/v1/payment \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Checkout yang dihosting, H2H, dan jumlah crypto yang tepat

Endpoint yang sama mendukung tiga bentuk faktur yang berbeda. Pilih salah satunya dengan sengaja; jangan mencampur semantik jumlah mereka.

Checkout yang dihosting dengan pilihan pembayar

Kirim amount, currency, order_id, dan url_callback, tetapi hilangkan to_currency dan network. Respon berisi result.url; address, qr, dan kadang-kadang bidang pembayar tetap null sampai pembayar memilih arah di halaman yang dihosting.

JSON
{
  "amount": "125.00",
  "currency": "EUR",
  "order_id": "ORDER-2026-1042",
  "url_callback": "https://merchant.example/webhooks/2328",
  "url_return": "https://merchant.example/orders/ORDER-2026-1042"
}

Faktur H2H alamat langsung

Kirimkan kedua to_currency dan network. 2328.io membuat faktur blockchain selama panggilan API, jadi respons yang berhasil dapat ditampilkan di dalam checkout Anda tanpa mengarahkan pelanggan.

JSON
{
  "amount": "100.00",
  "currency": "USD",
  "to_currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1043",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Tampilkan nilai-nilai ini persis seperti dikembalikan:

  • payer_amount dan payer_currency — instruksi pembayaran;
  • network dan address — satu-satunya tujuan untuk faktur ini;
  • qr — URI data untuk alamat yang sama;
  • expires_at — batas waktu faktur;
  • url — fallback host yang berguna ketika checkout kustom tidak dapat diselesaikan.

Jangan pernah membuat atau mengganti alamat, menggunakan kembali alamat dari faktur lain, atau menghitung payer_amount dari harga publik. Respon API bersifat otoritatif.

Faktur untuk jumlah kripto yang tepat

Masukkan cryptocurrency ke dalam currency ketika faktur itu sendiri dinyatakan dalam crypto:

JSON
{
  "amount": "25.000000",
  "currency": "USDT",
  "network": "TRX-TRC20",
  "order_id": "ORDER-2026-1044",
  "url_callback": "https://merchant.example/webhooks/2328"
}

Nilai crypto yang diminta dipertahankan dalam payer_currency / payer_amount. Layanan ini juga dapat mempertahankan valuasi USD secara internal untuk bidang akuntansi dan nilai tukar; jangan ganti instruksi crypto yang tepat dengan valuasi tersebut. Pertahankan string desimal yang dikembalikan, termasuk presisi di belakang koma.

Untuk cryptocurrency dengan hanya satu jaringan yang didukung, jaringan dapat dipilih secara otomatis. Namun, tetap disarankan untuk secara eksplisit menyertakan network untuk integrasi yang deterministik. Untuk aset multi-jaringan seperti stablecoin, selalu kirimkan.

Idempoten dan percobaan ulang

order_id bersifat terbatas pada proyek pedagang yang terautentikasi dan berfungsi sebagai kunci idempoten pembuatan. Jika pembayaran sudah ada, API akan mengembalikan sesi tersebut dengan state: 0.

Percobaan ulang dengan order_id yang sama berarti not “perbarui faktur ini.” Perubahan jumlah, mata uang, callback, markup, TTL, atau bidang arah mungkin diabaikan karena sesi yang ada dikembalikan. Simpan permintaan pertama dan tolak percobaan ulang yang bertentangan di aplikasi Anda sendiri.

Algoritma pembuatan yang disarankan:

  1. Masukkan percobaan pembayaran lokal Anda dan order_id unik ke dalam satu transaksi basis data.
  2. Kirim permintaan API yang telah ditandatangani.
  3. Simpan uuid yang dikembalikan dan respons lengkap.
  4. Jika hasil HTTP hilang, coba ulang permintaan yang sama atau query /v1/payment/info melalui order_id.
  5. Jangan pernah membuat pesanan lokal kedua hanya karena permintaan hulu mengalami timeout.

Kasus tepi pembayaran

SituasiPenanganan yang benar
address / qr adalah nullArah pembayar belum diinisialisasi. Alihkan ke url, atau buat faktur H2H baru yang ditentukan dengan benar dengan order_id baru.
Kesalahan validasi HTTP 400Baca errors pada tingkat bidang; jangan mencoba ulang input yang tidak diubah.
HTTP 429Coba lagi dengan backoff eksponensial yang bervariasi dan pertahankan order_id yang sama.
HTTP 503 / direction_disabledSegarkan /v1/directions; sembunyikan arah untuk sementara atau coba lagi nanti.
Waktu permintaan klien habisAnggap hasil sebagai tidak diketahui. Tanyakan dengan order_id sebelum membuat yang lain.
underpaid_checkSimpan peristiwa sebagian dan tunggu isi ulang atau status selanjutnya. Jangan mengkredit dua kali ketika lebih banyak txid tiba.
underpaidKeadaan kekurangan pembayaran akhir. Terapkan kebijakan pemenuhan/tinjauan manual yang telah dikonfigurasikan pada jumlah yang sebenarnya dikreditkan.
overpaidPembayaran berhasil dengan dana berlebih. Penuhi secara idempoten dan simpan jumlah yang sebenarnya untuk rekonsiliasi/kebijakan pengembalian.
aml_lockJangan memenuhi atau melepaskan dana secara otomatis; alihkan ke alur kerja kepatuhan/dukungan.
cancelFaktur telah kadaluwarsa atau dibatalkan. Jangan menyimpulkan bahwa transfer on-chain terlambat tidak mungkin; rekonsiliasikan setiap peristiwa berikutnya dengan dukungan.

URL pengembalian browser hanya untuk navigasi. Seorang pelanggan bisa membukanya tanpa membayar, menutupnya setelah membayar, atau memutarnya kembali nanti. Hanya status API/webhook yang terverifikasi yang dapat menyelesaikan pesanan pedagang.

Info pembayaran

Dapatkan status pembayaran saat ini berdasarkan uuid atau order_id.

Parameter permintaan

FieldTipeWajibDeskripsiNilai
uuidstringya*UUID pembayaran (dari result.uuid saat pembuatan)
order_idstringya*ID pesanan Anda

Setidaknya salah satu dari uuid atau order_id wajib diisi.

RequestPOST/v1/payment/info
curl -X POST https://api.2328.io/api/v1/payment/info \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.

Daftar pembayaran

Dapatkan daftar semua pembayaran dengan filter dan paginasi.

Parameter permintaan

FieldTipeWajibDeskripsiNilai
statusstringtidakFilter berdasarkan status pembayaran (lihat References)
date_fromdatetidakTanggal mulai (YYYY-MM-DD), mis. 2026-01-01
date_todatetidakTanggal akhir (YYYY-MM-DD), mis. 2026-01-31
pageinttidakNomor halaman, default 1
per_pageinttidakItem per halaman, default 15, maks 5000
RequestPOST/v1/payment/list
curl -X POST https://api.2328.io/api/v1/payment/list \
  -H "Content-Type: application/json" \
  -H "User-Agent: MyShop/1.0 (+https://myshop.example)" \
  -H "project: YOUR_PROJECT_UUID" \
  -H "sign: YOUR_HMAC_SIGNATURE"
Response
Click Try it to see the response here.