المطوّرون
حركة الأموال، على مستوى استدعاء REST.
خمسة استدعاءات تأخذك من البداية إلى النهاية: أنشئ مستخدمًا، موّل محفظة، افحص الرصيد، أرسِل أموالًا، اقرأ التاريخ. عشر دقائق مع مفتاح بيئة اختبار. مفاتيح بيئة الاختبار لا تحرّك أموالًا حقيقية.
دون قيد بـ SDK
الـ API هو HTTP + JSON صِرف. ولّد عميلًا مكتوب الأنواع من مواصفة OpenAPI 3.0.3 المنشورة بلغتك، أو استخدم مكتبة HTTP لديك فحسب.
متكافئ افتراضيًا
كل استدعاء محرِّك للأموال يأخذ مفتاح تكافؤ. إعادة المحاولات آمنة؛ ويعيد دفتر الأستاذ النتيجة المخزّنة بايتًا ببايت.
أحداث يمكنك الوثوق بها
خطافات الويب موقّعة بـ HMAC-SHA256 بنافذة إعادة، تُسلَّم مرة واحدة على الأقل بمعرّفات إزالة تكرار، على مجمع عمّال معزول عن مسارات الأموال.
بيانات اعتماد محدّدة النطاق
مفاتيح API للمستأجرين للاتصال بين الخوادم، ورموز مستخدم موقّعة قصيرة العمر لاستدعاءات العملاء، ورموز موظفين للعمليات، مُتحقَّق منها في كل طلب.
موّل محفظة، ثم أرسِل أموالًا
اختر لغتك.
الطلب نفسه بست لغات. المبالغ بوحدات صغرى صحيحة؛ ودفتر الأستاذ يتولّى الباقي.
# 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);خطافات الويب
تحقّق في بضعة أسطر.
كل حدث موقّع. ارفض أي شيء لا يتحقّق بزمن ثابت، وأزِل التكرار على معرّف الحدث. استقبال الحدث نفسه مرتين متوقّع وآمن.
كل أنواع الأحداث// 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.وصول مبكر
احصل على مفتاح بيئة اختبار.
يحصل شركاء التصميم على مستأجر بيئة اختبار، ومواصفة OpenAPI، وخط تواصل مباشر مع المهندسين الذين بنوها.