Cara kerjanya

Dari kunci API ke pembukuan terekonsiliasi dalam lima langkah.

WalletD adalah REST API di depan sebuah ledger of record. Berikut jalur yang ditempuh satu pembayaran, dari onboarding pengguna hingga sebuah pergerakan yang bisa dihitung ulang oleh auditor Anda.

Cara kerjanya

Bentuk sebuah integrasi

  1. 1. Cerminkan pengguna Anda

    Buat pengguna dompet dengan external id Anda sendiri. WalletD membuka akun per tujuan (tunai, poin) saat pertama kali masing-masing digunakan, sehingga tidak ada yang perlu disiapkan di awal.

  2. 2. Isi dompetnya

    Mulai top-up melalui Stripe. Saldo dikreditkan hanya ketika gateway mengonfirmasi dengan webhook bertanda tangan atau kueri rekonsiliasi, tidak pernah pada callback klien.

  3. 3. Gerakkan uangnya

    Kirim peer-to-peer, terima pembayaran dengan hold, atau bagi penjualan marketplace. Setiap panggilan membawa kunci idempoten dan memposting leg berimbang ke ledger dalam satu transaksi.

  4. 4. Reward dan settlement mengikuti

    Cashback dan poin diberikan pada saat capture; biaya dan komisi dibagi; payout menghasilkan laporan settlement. Semuanya memposting ke pembukuan yang sama.

  5. 5. Baca dan verifikasi

    Baca saldo dan riwayat lewat API, terima webhook bertanda tangan untuk setiap peristiwa, dan biarkan verifier bawaan memeriksa ulang invarian ledger secara terjadwal.

Isi sebuah dompet, lalu kirim uang

Isi sebuah dompet, lalu kirim uang

Permintaan yang sama dalam enam bahasa. Jumlah dalam satuan minor bilangan bulat; ledger melakukan sisanya.

# Fund a wallet, then send money. Balances only move on the ledger.
curl -sS -X POST "$WALLETD_API/v1/users" \
  -H "Authorization: Bearer $WALLETD_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: usr-42-create" \
  -d '{"external_id":"user-42","kind":"consumer","display_name":"Ada Lovelace","handle":"ada"}'

curl -sS -X POST "$WALLETD_API/v1/transfers" \
  -H "Authorization: Bearer $WALLETD_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: xfer-ada-grace-001" \
  -d '{"from":"user-42","to":"@grace","amount":2500,"currency":"USD"}'
client := walletd.New(os.Getenv("WALLETD_API"), os.Getenv("WALLETD_API_KEY"))

var transfer walletd.Transfer
err := client.Do(ctx, http.MethodPost, "/v1/transfers", map[string]any{
    "from":     "user-42",
    "to":       "@grace",
    "amount":   2500, // minor units, $25.00, never a float
    "currency": "USD",
}, &transfer, "xfer-ada-grace-001") // idempotency key
if err != nil {
    return fmt.Errorf("transfer: %w", err)
}
client = WalletD()  # reads WALLETD_API / WALLETD_API_KEY

transfer = client.request(
    "POST",
    "/v1/transfers",
    {
        "from": "user-42",
        "to": "@grace",
        "amount": 2500,      # minor units, $25.00
        "currency": "USD",
    },
    idempotency_key="xfer-ada-grace-001",
)
print(transfer["status"])  # "settled"
const res = await fetch(`${API}/v1/transfers`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "xfer-ada-grace-001",
  },
  body: JSON.stringify({
    from: "user-42",
    to: "@grace",
    amount: 2500, // minor units, $25.00
    currency: "USD",
  }),
});
const transfer = await res.json();
$transfer = $walletd->request('POST', '/v1/transfers', [
    'from'     => 'user-42',
    'to'       => '@grace',
    'amount'   => 2500,      // minor units, $25.00
    'currency' => 'USD',
], idempotencyKey: 'xfer-ada-grace-001');

echo $transfer['status']; // "settled"
var body = Map.of(
    "from", "user-42",
    "to", "@grace",
    "amount", 2500,      // minor units, $25.00
    "currency", "USD");

Transfer transfer = client.post(
    "/v1/transfers", body, "xfer-ada-grace-001", Transfer.class);

Prinsip yang berlaku di setiap langkah

Idempoten secara bawaan

Setiap panggilan penggerak uang mengambil sebuah kunci idempoten. Percobaan ulang aman; ledger memutar ulang hasil tersimpan byte demi byte.

Berimbang dalam satu transaksi

Biaya, hold, batas, dan clawback diterapkan di dalam posting yang sama, sehingga pembukuan tidak pernah sesaat pun salah.

Dikonfirmasi, bukan diasumsikan

Uang bergerak pada konfirmasi gateway yang terverifikasi dan settle di ledger, bukan pada respons klien yang optimistis.

Diverifikasi terus-menerus

Verifier terjadwal menghitung ulang konservasi, saldo, dan floor, serta gagal secara nyaring begitu ada yang menyimpang.

Akses awal

Jadilah mitra desain.

Kami bekerja dengan sejumlah kecil tim yang membangun produk dompet dan uang di atas WalletD. Jika itu Anda, mari bicara. Anda akan mendapat akses langsung ke orang-orang yang membangunnya.