ping!
Ke aplikasi
Developer · API internal

Dompet & ledger

Saldo tercatat, saldo tersedia, dana tertahan, dan riwayat append-only dalam rupiah utuh.

Unduh OpenAPI 3.1
Di halaman ini

Sebelum mengirim request

Dompet pengguna hanya memiliki endpoint baca. Perubahan saldo dilakukan oleh transaksi domain, settlement order, dan pembayaran terverifikasi. Jangan membangun PATCH saldo atau menghitung saldo otoritatif dari ledger di browser.

Kontrak nyata, nilai contoh

Endpoint, field, dan status HTTP mengikuti implementasi. Nilai ID, nomor, OTP, waktu, saldo, serta quote di contoh adalah ilustrasi, bukan data akun atau pilihan yang bisa langsung dibeli. Ganti dengan data dari instalasimu. Halaman ini tidak mengirim request atau menjalankan transaksi.

JavaScript dijalankan pada origin aplikasi setelah login. Contoh cURL memakai PING_ORIGIN dan cookie jar PING_COOKIE_JAR dari panduan autentikasi. Sukses memakai { ok: true, data }; create juga HTTP 200, bukan 201. Semua endpoint di halaman ini memerlukan sesi aktif dan dapat mengembalikan 401, 403, atau 500.

Baca saldo

GET/api/walletSession cookie

Source : app/api/wallet/route.ts

Saldo tercatat, dana tertahan, dan saldo tersedia dalam integer IDR. Gunakan nilai server untuk memutuskan apakah pengguna dapat membeli nomor.

GET /api/wallet · JavaScript
const response = await fetch("/api/wallet", {
  credentials: "same-origin",
  cache: "no-store",
});
const body = await response.json();

if (!response.ok || !body.ok) {
  throw Object.assign(
    new Error(body.error?.message ?? "Request gagal"),
    { code: body.error?.code, status: response.status },
  );
}

const data = body.data;

Riwayat ledger

GET/api/wallet/ledgerSession cookie

Source : app/api/wallet/ledger/route.ts

Entri ledger milik pengguna, terbaru lebih dahulu, dengan pagination offset. Respons berisi baris ledger asli, bukan Transaction dari mapper tampilan. Semua query dibatasi userId sesi di SQL.

Riwayat ledger
ParameterTipeWajibKeterangan
limit (query)integerTidakUkuran halaman 1–100; default 50.
offset (query)integerTidakOffset mulai 0. Lanjutkan offset + limit saat hasMore true.
type (query)DEPOSIT | HOLD | CAPTURE | RELEASE | REFUND | ADJUSTMENTTidakFilter satu jenis ledger. Hilangkan parameter untuk semua jenis.
GET /api/wallet/ledger · JavaScript
const response = await fetch("/api/wallet/ledger?limit=50&offset=0&type=HOLD", {
  credentials: "same-origin",
  cache: "no-store",
});
const body = await response.json();

if (!response.ok || !body.ok) {
  throw Object.assign(
    new Error(body.error?.message ?? "Request gagal"),
    { code: body.error?.code, status: response.status },
  );
}

const data = body.data;
Riwayat ledger
Kode errorHTTPTindakan
VALIDATION_ERROR400Periksa tipe, field wajib, format UUID, dan field tambahan.

Schema · Wallet

Schema · Wallet
FieldTipeWajibKeterangan
balanceintegerYaSaldo tercatat, termasuk bagian yang sedang ditahan.
heldintegerYaDana yang ditahan untuk order, belum menjadi pembebanan akhir.
availableintegerYaSaldo yang dapat dipakai. Gunakan nilai server, bukan perhitungan client.

Schema · LedgerEntry

Schema · LedgerEntry
FieldTipeWajibKeterangan
idstringYaSesuai tipe yang ditampilkan.
userIdstringYaPemilik entri; query tetap dibatasi ke pengguna bersesi.
typeDEPOSIT | HOLD | CAPTURE | RELEASE | REFUND | ADJUSTMENTYaSesuai tipe yang ditampilkan.
amountintegerYaNominal ledger asli. HOLD/CAPTURE bukan angka negatif tampilan; ADJUSTMENT dapat bertanda.
referenceTypestring | nullYaSesuai tipe yang ditampilkan.
referenceIdstring | nullYaSesuai tipe yang ditampilkan.
idempotencyKeystringYaKunci ledger yang dihasilkan server. Bukan header request client.
notestring | nullYaSesuai tipe yang ditampilkan.
createdAtstring · date-timeYaISO 8601 dengan zona waktu.

Schema · LedgerPage

Schema · LedgerPage
FieldTipeWajibKeterangan
entriesLedgerEntry[]YaSesuai tipe yang ditampilkan.
walletWalletYaLihat schema Wallet pada OpenAPI.
paginationobjectYaSesuai tipe yang ditampilkan.
Ping! · Panduan yang tumbuh bersama produknya.Bantuan