Développeurs
Le mouvement de l'argent, à l'altitude d'un appel REST.
Cinq appels vous mènent de bout en bout : créer un utilisateur, alimenter un portefeuille, vérifier le solde, envoyer de l'argent, lire l'historique. Dix minutes avec une clé sandbox. Les clés sandbox ne déplacent aucun argent réel.
Aucun verrouillage par SDK
L'API est du simple HTTP + JSON. Générez un client typé à partir de la spécification OpenAPI 3.0.3 publiée dans votre langage, ou utilisez simplement votre bibliothèque HTTP.
Idempotent par défaut
Chaque appel de mouvement d'argent prend une clé d'idempotence. Les nouvelles tentatives sont sûres ; le registre rejoue le résultat stocké octet par octet.
Des événements dignes de confiance
Les webhooks sont signés en HMAC-SHA256 avec une fenêtre de rejeu, livrés au moins une fois avec des ids de déduplication, sur un pool de workers isolé des parcours monétaires.
Identifiants à portée limitée
Clés d'API de tenant pour le serveur à serveur, jetons utilisateur signés à courte durée de vie pour les appels client, jetons du personnel pour les opérations, vérifiés à chaque requête.
Alimentez un portefeuille, puis envoyez de l'argent
Choisissez votre langage.
La même requête dans six langages. Les montants sont des unités mineures entières ; le registre s'occupe du reste.
# 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);Webhooks
Vérifiez en quelques lignes.
Chaque événement est signé. Rejetez tout ce qui ne se vérifie pas à temps constant, et dédupliquez sur l'id de l'événement. Recevoir deux fois le même événement est attendu et sans risque.
Tous les types d'événements// Verify an incoming webhook, HMAC-SHA256, constant-time, 5-minute replay window.
const signed = `${timestamp}.${rawBody}`;
const expected = hmacSha256(endpointSecret, signed);
if (!timingSafeEqual(expected, signatureFromHeader)) {
return res.status(400).send("bad signature");
}
// Idempotent by X-Wallet-Event-Id, safe to receive the same event twice.Accès anticipé
Obtenez une clé sandbox.
Les partenaires de conception obtiennent un tenant sandbox, la spécification OpenAPI, et une ligne directe vers les ingénieurs qui l'ont conçu.