Skip to main content
Membutuhkan Keanggotaan Silver atau lebih tinggi — baik untuk mendaftar maupun untuk setiap panggilan terautentikasi. Jika Keanggotaan pemilik kunci berakhir, proyek dibekukan sampai ia berlangganan lagi.
REST API yang memungkinkan aplikasimu bekerja dengan saldo Vito seorang pengguna dari dalam Discord — membacanya, menagihnya, menambahkannya, atau memindahkannya antar pengguna. Semua endpoint mengembalikan JSON dan diberi versi di bawah /v1.
Vito tidak pernah berpindah ke atau dari uang sungguhan. Ia hanya bergerak antar saldo Vetox.

Mendapatkan akses

Akses diberikan per proyek. Kamu memerlukan keempatnya:
1

Keanggotaan aktif, Silver atau lebih tinggi

Diperiksa pada setiap panggilan, bukan hanya saat persetujuan.
2

Pengajuan pengembang yang disetujui

Dikirim dari halaman Vito API di dasbormu. Ditinjau secara manual oleh tim Vetox.
3

Ketentuan Pengembang API yang disetujui

Disetujui saat kamu mengirim pengajuan.
4

Scope yang dibutuhkan proyekmu

Diberikan oleh tim Vetox berdasarkan apa yang kamu jelaskan.
Jelaskan secara konkret apa yang kamu bangun dan bagaimana kamu menyimpan kuncinya. Pengajuan yang samar-samar itulah yang ditolak.

Scope

Autentikasi

Kirim kunci rahasiamu sebagai token Bearer:
Dua lapisan opsional memperkuat proyek lebih jauh:
  • Daftar IP yang diizinkan — membatasi panggilan ke IP server tertentu
  • Batas laju — plafon per proyek yang naik seiring tingkat Keanggotaan pemilik

Kunci, rotasi, dan penyimpanan

Kunci dan secret penandatanganan ditampilkan tepat satu kali. Setelah disetujui kamu punya jendela 7 hari untuk mengungkapkannya di tab kunci API. Vetox hanya menyimpan hash dan tidak bisa menampilkannya lagi — jika terlewat, kamu harus melakukan rotasi.
  • Simpan hanya di sisi server — siapa pun yang memegangnya bisa menagih penggunamu
  • Rotasi dari tab kunci API. Kunci sebelumnya tetap berfungsi selama masa tenggang 24 jam agar kamu bisa merilis tanpa waktu henti
  • Secret penandatanganan webhook dirotasi terpisah, dengan tumpang tindih 24 jam tersendiri
  • Jika bocor, segera rotasi

Menagih pengguna

Kuncimu saja tidak bisa memindahkan Vito seorang pengguna. Setiap penagihan mengharuskan pengguna menyetujuinya dengan PIN dompetnya, di vetox.io — tidak pernah di dalam aplikasimu maupun di dalam Discord.
1

Aplikasimu memanggil POST /v1/deduct

Dengan pengguna, jumlah, guildId asal, dan detail barang.
2

Vito mengembalikan confirmUrl

Konfirmasi tertunda, berlaku 10 menit. Pengguna juga menerima DM.
3

Pengguna menyetujui dengan PIN-nya

Di vetox.io.
4

Vito menyelesaikan dan memberi tahu

Saldo dipotong, transaksi dicatat, dan webhook bertanda tangan dikirim jika kamu sudah mengaturnya.
5

Aplikasimu memverifikasi dan menyelesaikan

Periksa tanda tangannya, lalu buka kontennya atau kirim barangnya.
Selesaikan tindakanmu hanya pada confirmation.completed — jangan pernah pada respons /deduct. Pada titik itu penagihan belum final.

Parameter permintaan — /v1/deduct

Menambah saldo pengguna

POST /v1/add menambahkan Vito ke pengguna dari saldomu sendiri — untuk hadiah atau pengembalian dana. Bidang yang sama dengan /deduct kecuali guildId dan product.
Berbeda dari penagihan, penambahan tidak punya langkah konfirmasi — langsung diselesaikan. Membutuhkan scope credit:create dan saldo yang cukup, atau panggilan mengembalikan 402 VITO_INSUFFICIENT_OWNER_FUNDS.

Biaya

Setiap penagihan diselesaikan kepadamu dikurangi biaya platform — skema yang sama dengan transfer Vito di dalam aplikasi, berdasarkan tingkat Keanggotaan kamu:
Jumlah 5 Vito atau kurang bebas biaya, dan penambahan lewat /v1/add selalu bebas biaya.

Webhook

Tambahkan satu atau beberapa URL callback https di tab pengaturan. Vito mengirim POST bertanda tangan setiap kali sebuah konfirmasi mencapai keadaan akhir.
Webhook hanya terkirim jika proyekmu punya sekaligus URL callback dan secret penandatanganan. Ungkapkan secret (whsec_…) satu kali dari tab kunci API.

Memverifikasi tanda tangan

Setiap pengiriman membawa header X-Vito-Signature:
Dua header lain menyertai setiap pengiriman — gunakan X-Vito-Event-Id sebagai kunci deduplikasi, karena percobaan ulang mengirim id yang sama:
Selama rotasi secret penandatanganan, header membawa lebih dari satu tanda tangan, yang terbaru lebih dulu:
Terima pengiriman jika salah satu h1 cocok. Verifikator yang hanya membaca yang pertama akan menolak setiap webhook sampai ia merilis secret baru — dan itu justru meniadakan seluruh tujuan tumpang tindih 24 jam.
Hitung ulang HMAC atas <ts>:<rawBody> dengan secret penandatangananmu dan bandingkan dalam waktu konstan.
Verifikasi terhadap body mentah, sebelum parsing JSON atau middleware menulis ulangnya.

Peristiwa

Lima jenis peristiwa, semuanya berbagi satu bentuk payload. data.status membawa hasilnya.
Webhook dicoba ulang 5 kali dengan jeda menaik. Balas 2xx dengan cepat dan lakukan pemenuhanmu secara asinkron.

Kode galat

Setiap respons dibungkus. Keberhasilan membawa data, kegagalan membawa error, tidak pernah keduanya:
Setiap kode berawalan VITO_. Cocokkan seluruh stringnya — RATE_LIMITED atau FORBIDDEN polos tidak pernah muncul di respons.

Batas laju

Ada juga batas per IP sebesar setengah jatah per menitmu, dengan batas bawah 30.
Saat beban tinggi, endpoint tulis gagal secara tertutup — penagihan ditolak alih-alih mempertaruhkan pembelanjaan ganda. Endpoint baca gagal secara terbuka. Perlakukan penulisan yang ditolak sebagai “tidak terjadi” lalu coba lagi.
Kirim header Idempotency-Key untuk menghindari duplikasi saat mencoba ulang.

Endpoint

Batasan

  • Konfirmasi kedaluwarsa setelah 10 menit — anggap permintaan yang belum dikonfirmasi sebagai ditinggalkan
  • amount harus bilangan bulat positif
  • metadata dibatasi 10 kunci
  • Plafon per transaksi dan harian ditetapkan tim Vetox dan tampil hanya-baca di tab pengaturan

Daftar periksa keamanan

Kunci API dan secret penandatanganan tidak pernah pantas berada di kode klien. Rotasi segera jika salah satunya bocor.
Periksa tanda tangan terhadap body mentah dan tolak pengiriman yang lebih tua dari ~5 menit.
Jangan pernah memenuhi berdasarkan respons /deduct — penagihan baru final pada confirmation.completed.
Minta hanya scope yang benar-benar kamu pakai, dan aktifkan daftar IP yang diizinkan.

Pemecahan masalah

Keanggotaan pemilik sudah berakhir. Ia diperiksa ulang pada setiap panggilan.
Tidak bisa dipulihkan — hanya hash yang disimpan. Rotasi untuk mendapat yang baru.
Terima kedua secret selama tumpang tindih 24 jam.
Pengguna tidak menyetujuinya. Konfirmasi kedaluwarsa setelah 10 menit.
Sebuah proyek butuh URL callback dan secret penandatanganan. Dengan salah satunya saja, tidak ada yang dikirim.
Itu biaya penyelesaian. Gunakan jumlah 5 Vito atau kurang untuk menghindarinya, atau perhitungkan dalam hargamu.
/v1/add didanai dari saldomu sendiri, bukan diciptakan dari ketiadaan. Isi ulang saldomu.

Vito

Saldo, PIN, dan biaya.

Permintaan pembayaran

Apa yang dilihat pengguna saat kamu menagihnya.