Skip to content

SDKs

Every official Wajub package, what it needs to run, and which one your stack takes.

This page lists every official Wajub package and what it needs to run. Pick yours by where your code runs and the language you already write.

Where your code runs

That question decides the package, and nothing else does.

Your code runsReach forBecause
On your serverA server SDKIt holds the secret key, so it can do everything
In a browserWajub ComponentsIt renders and confirms a checkout, nothing more
In a mobile appA mobile SDKIt renders a native payment sheet
In a terminalThe CLILocal webhook forwarding and test events, with a restricted rk. key
On WordPressA pluginNo integration code at all
Nowhere yetPayment Links or InvoiceA payable link, no code and no package
Anywhere elseThe REST APIEvery endpoint, documented for raw HTTP

Most integrations use two: a server SDK to create the payment, and a browser or mobile package to collect it. That split is not a style choice, it is where the secret key is allowed to be.

Already know your stack?

Jump straight there. Node.js, Python, PHP, Go, Ruby, Java, C#, JS, React, Vue, Svelte, Flutter, React Native, Android, iOS.

Server SDKs

Seven languages, each covering the whole API, so pick the one you already write.

LanguagePackageRegistryVersionRuntime
Node.js@wajub/nodenpm2.0.0Node 18+
PythonwajubPyPI1.2.1Python 3.10+, httpx
PHPwajub/wajub-phpPackagist2.0.1PHP 8.4+, Guzzle 8.2
Gogithub.com/wajubhq/wajub-goGo modulesv1.2.1Go 1.22+
RubywajubRubyGems1.3.0Ruby 3.1+, no runtime gems
Javacom.wajub:wajub-javaMaven Central1.1.1Java 17+, OkHttp
C# and .NETWajubNuGet1.1.1.NET 8+

Below the floor, call the REST API directly. It is HTTPS and JSON, and every endpoint on this site carries a raw example.

The same call, seven ways

Create a payment, get back a token for the browser and a URL for a redirect.

curl https://api.wajub.com/payments \
-H "Authorization: sk_test.xxxxxxxxxxxxxxxx…" \
-H "Content-Type: application/json" \
-d '{"amount": 15000, "currency": "XAF", "customer": {"email": "buyer@example.com"}}'

Ruby, Java and C# read the same way in their own idiom. Each has its own page: Ruby, Java, C#.

What every server SDK gives you

The client is resource oriented: one object per API resource.

GroupResources
Money inpayments, refunds, disputes, links, invoices
Money outtransfers, beneficiaries, balance
People and accountscustomers, accounts, identity
Risk and complianceshield, tax
Plumbingevents, webhooks, webhookEndpoints, global

Around them, each server SDK gives you:

  • Your own Idempotency-Key on any call that changes something, when you need one.
  • One error class per failure kind, so authentication, validation, rate limiting and transport failures are told apart before you read a message.
  • Lists you can iterate across pages.
  • Webhook signature verification, so the endpoint that receives events is one call away from being safe.
  • A Sync account reference per request, for platforms charging on behalf of their merchants.

Naming follows each language, snake_case in Python and Ruby, camelCase elsewhere (PHP methods included, listRefunds), while the wire format stays snake_case. The mapping is on SDK naming conventions.

In the browser

These render a checkout. They never hold a key, and they cannot refund, pay out or list anything. Your server creates the session first.

PackageFrameworkNeeds at leastVersion
@wajub/jsVanilla, bundler or CDNA browser that understands ES2020, and an ESM bundler or the CDN script1.8.1
@wajub/reactReact 18+, Next.jsReact 18, React DOM 181.8.1
@wajub/vueVue 3.3+, NuxtVue 3.31.8.1
@wajub/svelteSvelte, SvelteKitSvelte 4 or 51.8.1
@wajub/angularAngular 17+, Angular SSRAngular 17, @angular/core and @angular/common1.8.1

The four framework packages need @wajub/js installed beside them.

The whole section has its own tree: Wajub Components.

In a mobile app

A native payment sheet against a session your server created. The customer picks an operator, enters a number, and approves from their phone without leaving your app.

PackagePlatformVersionNeeds at least
wajub_mobileFlutter1.1.1Flutter 3.24, Dart 3.5
@wajub/react-nativeReact Native1.1.1React Native 0.74, React 18, @react-native-community/netinfo and @react-native-async-storage/async-storage. @stripe/stripe-react-native for Stripe cards only
com.wajub:wajub-mobile-coreKotlin, any JVM1.2.1Java 17, Kotlin 2.0
com.wajub:wajub-mobile-composeAndroid1.2.1Android 7.0, API 24, and Jetpack Compose
WajubMobileUI, WajubMobileiOS1.0.0iOS 15, Swift 5.9, Xcode 15

Android ships as two artifacts, and you usually want both

wajub-mobile-compose carries the Material 3 payment sheet and depends on wajub-mobile-core, a plain Kotlin and JVM library without the interface. Take the core alone only when you build the payment interface yourself.

iOS ships as a Swift package

Two products of one Swift package, added with Swift Package Manager. WajubMobileUI carries the SwiftUI payment sheet and brings WajubMobile with it. Take WajubMobile alone when you build the payment interface yourself. Neither depends on Stripe: for Stripe cards, your app provides a CardCollector. See iOS.

What each package covers

Coverage follows from where the code runs, not from the language: every server SDK covers every product.

ProductServer SDKsBrowserMobile
Paymentspayments, refunds, disputes, linksCheckout onlyPayment sheet only
BillinginvoicesNoNo
Transferstransfers, beneficiaries, balanceNoNo
Syncaccounts, plus a per request account referenceNoNo
ShieldshieldNoNo
TaxtaxNoNo

Alongside those sit customers, identity, events, webhooks, webhookEndpoints and global, which every server SDK also carries.

A preview or beta label belongs to the product, never to the SDK. Whether shield or tax is ready for your account is on the product's own page.

Constraints worth knowing before you commit

One more thing is worth knowing, and it is not obvious from a package listing.

The Go module path is not what it looks like

The import path is github.com/wajubhq/wajub-go. The organisation is wajubhq, and github.com/wajub/wajub-go resolves to nothing.

On the command line

@wajub/cli is the only package here that is not for production code. It forwards webhooks to your machine, triggers test events, and reads your API resources while you build.

PackageRegistryVersionRuntime
@wajub/clinpm, Homebrew, Scoop1.7.4Node 22+

Installation and every command are on the CLI pages.

Without an SDK

Nothing on this page is required. The API reference documents every endpoint with request and response examples. That is the right path for a language with no official package, for an environment you cannot add a dependency to, and for anyone who prefers to see the wire.

Two more things to decide

Picking the package is not the same as picking the integration. Two separate choices remain, and both have their own page.

DecisionWhere
Hosted page, inline embed, overlay, or your own fieldsChoosing your payments integration
How API field names land in your languageSDK naming conventions

What did you think of this content?