Skip to content

Repository files navigation

wise-sdk

Production-grade TypeScript client for the Wise Platform API — all 42 API groups, zero runtime dependencies.

npmCILicense: MIT


✨ Features

  • Full Wise API coverage (Profiles, Transfers, Cards, KYC, Webhooks, and more)
  • Multiple authentication modes
    • Personal Token
    • OAuth Client Credentials (auto-refresh)
    • OAuth User Token (custom refresh)
  • Built-in reliability
    • Retries with exponential backoff
    • Rate limiting (token bucket)
    • Circuit breaker support
  • Middleware hooks
    • Request hooks
    • Response hooks (logging, metrics)
  • Async pagination iterator
  • Webhook verification + routing
  • Zero external dependencies

📦 Installation

npm install wise-sdk

🚀 Quick Start

import{WiseClient}from"wise-sdk";constclient=newWiseClient({personalToken: process.env.WISE_API_TOKEN!,sandbox: true,// set false for production});asyncfunctionmain(){constprofiles=awaitclient.profiles.list();for(constpofprofiles){console.log(`Profile ${p.id} (${p.type})`);}}main();

🔐 Authentication

Personal Token

constclient=newWiseClient({personalToken: process.env.WISE_API_TOKEN!,});

OAuth — Client Credentials (Auto Refresh)

constclient=newWiseClient({clientId: process.env.WISE_CLIENT_ID!,clientSecret: process.env.WISE_CLIENT_SECRET!,});

OAuth — User Token (Custom Refresh)

constclient=newWiseClient({accessToken: "access-token",refreshToken: "refresh-token",tokenExpiresAt: newDate(Date.now()+3600_000),onTokenRefresh: async(refreshToken)=>{return{accessToken: "new-access-token",refreshToken: "new-refresh-token",expiresAt: newDate(Date.now()+3600_000),};},});

🌍 Environments

import{PRODUCTION_BASE_URL,SANDBOX_BASE_URL}from"wise-sdk";// Production (default)constprod=newWiseClient({personalToken: "token"});// Sandboxconstsandbox=newWiseClient({personalToken: "token",sandbox: true,});

💸 Sending Money

// 1. Create a quoteconstquote=awaitclient.quotes.create(profileId,{sourceCurrency: "USD",targetCurrency: "INR",sourceAmount: 1000,});// 2. Create a recipientconstrecipient=awaitclient.recipients.create({profile: profileId,accountHolderName: "Alice",currency: "INR",type: "ifsc",details: {ifsc: "HDFC0001234",accountNumber: "1234567890",},});// 3. Create transferconsttransfer=awaitclient.transfers.create({targetAccount: recipient.id,quoteUuid: quote.id,customerTransactionId: "unique-id",details: {reference: "Invoice #42"},});// 4. Fund transferawaitclient.transfers.fund(profileId,transfer.id);

⚠️ Error Handling

import{isNotFound,isRateLimited,isSCARequired,fieldErrors,}from"wise-sdk";try{awaitclient.transfers.fund(profileId,transferId);}catch(err){if(isNotFound(err)){console.log("Resource not found");}elseif(isRateLimited(err)){console.log("Rate limited");}elseif(isSCARequired(err)){console.log("SCA required");}for(constfeoffieldErrors(err)){console.log(fe.field,fe.message);}}

🔁 Pagination

import{AsyncIter}from"wise-sdk";constiter=newAsyncIter(async(page)=>{returnclient.transfers.list({
profileId,
...page,});});forawait(consttransferofiter){console.log(transfer.id,transfer.status);}

🔔 Webhooks

import{EventRouter,isTransferStateChangeEvent,}from"wise-sdk";constrouter=newEventRouter({secret: process.env.WISE_WEBHOOK_SECRET!,});router.on("transfers#state-change",async(event)=>{if(isTransferStateChangeEvent(event)){console.log(event.data.resource.id);}});

⚙️ Advanced Configuration

import{TokenBucket,CircuitBreaker}from"wise-sdk";constclient=newWiseClient({personalToken: "token",timeoutMs: 30_000,retry: {maxAttempts: 3,},rateLimiter: TokenBucket.default(),circuitBreaker: newCircuitBreaker({failureThreshold: 5,timeout: 30_000,}),requestHooks: [async(req)=>{req.headers.set("X-Custom","value");returnreq;},],responseHooks: [(req,res,latency)=>{console.log(req.url,res.status,latency);},],});

🧪 Utilities

import{newIdempotencyKey,ptr}from"wise-sdk";constidempotencyKey=newIdempotencyKey();constamount=ptr(1000);

🩺 Health Check

awaitclient.ping();

📚 API Coverage

Includes all major Wise services:

  • Profiles
  • Quotes
  • Transfers
  • Recipients
  • Balances
  • Cards & transactions
  • KYC & verification
  • Webhooks
  • OAuth & security
  • Batch payments
  • Multi-currency accounts
  • Disputes
  • Direct debits
  • And more

📜 License

MIT


❤️ Contributing

PRs and issues are welcome!

About

Production-grade TypeScript client for the Wise Platform API — all 42 API groups, zero runtime dependencies

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages