Accès anticipé, partenaires de conception

Une infrastructure de portefeuille avec un registre que vous pouvez auditer ligne par ligne.

WalletD offre aux équipes fintech toute la pile monétaire, portefeuilles, rechargements, paiements, récompenses, marketplace, sur un registre de référence en partie double qui se réconcilie par construction. Une seule API. Votre infrastructure.

L'argent circule. La confiance demeure.

# 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);

Aucun SDK à installer. L'API est du simple HTTP + JSON avec une spécification OpenAPI publiée. Les montants sont des unités mineures entières, jamais des flottants.

Pourquoi WalletD

La rigueur d'un registre. La portée d'une plateforme de portefeuille.

Les outils de comptabilité tiennent vos livres mais vous laissent construire le produit. Les plateformes de portefeuille livrent le produit mais ne peuvent pas vous montrer des livres propres. WalletD réunit les deux moitiés, liées de façon prouvable.

Exactitude prouvable

Un véritable registre de référence en partie double où chaque mouvement écrit des lignes équilibrées dont la somme est nulle par devise. Unités mineures entières, jamais de flottants. Les appels idempotents se rejouent octet par octet. Un vérificateur intégré recontrôle sept invariants sur chaque registre, selon un calendrier.

La pile monétaire complète

Pas seulement de la comptabilité. Portefeuilles, rechargements, pair-à-pair, paiements avec blocages, remboursements, versements, lignes de crédit, grilles de frais, un moteur de récompenses fondé sur des règles, abonnements et commission marketplace, le tout derrière une seule API REST, le tout inscrit dans le même registre auditable.

Déployez partout, maîtrisez vos données

Multi-tenant par conception, avec le registre de chaque tenant physiquement isolé sur sa propre base de données et son propre rôle. S'exécute sur votre propre infrastructure via Docker, aucune boîte noire, aucune donnée qui échappe à votre contrôle. Le cœur du registre est agnostique au domaine : rien de spécifique au portefeuille n'y est figé.

Une seule plateforme

Chaque mouvement atterrit dans le registre de référence.

Votre application appelle une seule API. WalletD exécute les parcours monétaires ; LedgerD tient les livres, physiquement isolés, en ajout seul, et vérifiés selon un calendrier. Rien ne se règle sans que le registre ne l'ait enregistré.

Des preuves, pas des adjectifs

Des livres qui se réconcilient à l'écriture près.

Un audit indépendant a recalculé l'intégralité du registre directement à partir des enregistrements bruts, sans se fier au propre vérificateur du logiciel. Chaque chiffre ci-dessous est référencé à cet audit et à la base de charge, et chaque nombre provient de tests sur des données synthétiques.

5,455,009
écritures de registre recalculées sans aucune exception

Audit SQL indépendant, 2026-08-18. Les contrôles de conservation, de réconciliation, d'autorisation et de cycle de vie ont tous retourné zéro sur 5 registres.

0
dérive de solde sur 7,463 comptes

Soldes en cache comparés aux soldes recalculés depuis l'historique complet. Dérive absolue totale : 0.

1,394,739
octrois de récompense qui concordent exactement avec le registre

Enregistrements du domaine réconciliés avec les écritures du registre sur le nombre et le montant. Zéro octroi manquant, dupliqué ou non positif.

400 tx/s
paiements soutenus dans la base de charge

Test de performance synthétique, hôte unique, architecture à registre séparé (2026-08-14). Un paiement correspond à une autorisation plus une capture. Les invariants d'exactitude ont tenu tout du long.

Accès anticipé

Devenez partenaire de conception.

Nous travaillons avec un petit nombre d'équipes qui construisent des produits de portefeuille et de paiement sur WalletD. Si c'est votre cas, parlons-en. Vous aurez un accès direct aux personnes qui l'ont conçu.