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 runs | Reach for | Because |
|---|---|---|
| On your server | A server SDK | It holds the secret key, so it can do everything |
| In a browser | Wajub Components | It renders and confirms a checkout, nothing more |
| In a mobile app | A mobile SDK | It renders a native payment sheet |
| In a terminal | The CLI | Local webhook forwarding and test events, with a restricted rk. key |
| On WordPress | A plugin | No integration code at all |
| Nowhere yet | Payment Links or Invoice | A payable link, no code and no package |
| Anywhere else | The REST API | Every 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.
One rule governs the whole list
The secret key stays on your server. Browsers and mobile apps receive a session token, scoped to
a single payment, produced by a server SDK. No package on this page changes that, and the API
answers 403 and emails the key's owner when a sk. key arrives from a browser. See
Sessions and security.
Server SDKs
Seven languages, each covering the whole API, so pick the one you already write.
| Language | Package | Registry | Version | Runtime |
|---|---|---|---|---|
| Node.js | @wajub/node | npm | 2.0.0 | Node 18+ |
| Python | wajub | PyPI | 1.2.1 | Python 3.10+, httpx |
| PHP | wajub/wajub-php | Packagist | 2.0.1 | PHP 8.4+, Guzzle 8.2 |
| Go | github.com/wajubhq/wajub-go | Go modules | v1.2.1 | Go 1.22+ |
| Ruby | wajub | RubyGems | 1.3.0 | Ruby 3.1+, no runtime gems |
| Java | com.wajub:wajub-java | Maven Central | 1.1.1 | Java 17+, OkHttp |
| C# and .NET | Wajub | NuGet | 1.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.
| Group | Resources |
|---|---|
| Money in | payments, refunds, disputes, links, invoices |
| Money out | transfers, beneficiaries, balance |
| People and accounts | customers, accounts, identity |
| Risk and compliance | shield, tax |
| Plumbing | events, webhooks, webhookEndpoints, global |
Around them, each server SDK gives you:
- Your own
Idempotency-Keyon 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.
| Package | Framework | Needs at least | Version |
|---|---|---|---|
@wajub/js | Vanilla, bundler or CDN | A browser that understands ES2020, and an ESM bundler or the CDN script | 1.8.1 |
@wajub/react | React 18+, Next.js | React 18, React DOM 18 | 1.8.1 |
@wajub/vue | Vue 3.3+, Nuxt | Vue 3.3 | 1.8.1 |
@wajub/svelte | Svelte, SvelteKit | Svelte 4 or 5 | 1.8.1 |
@wajub/angular | Angular 17+, Angular SSR | Angular 17, @angular/core and @angular/common | 1.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.
| Package | Platform | Version | Needs at least |
|---|---|---|---|
wajub_mobile | Flutter | 1.1.1 | Flutter 3.24, Dart 3.5 |
@wajub/react-native | React Native | 1.1.1 | React 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-core | Kotlin, any JVM | 1.2.1 | Java 17, Kotlin 2.0 |
com.wajub:wajub-mobile-compose | Android | 1.2.1 | Android 7.0, API 24, and Jetpack Compose |
WajubMobileUI, WajubMobile | iOS | 1.0.0 | iOS 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.
A payment sheet, not a merchant client
Mobile SDKs cover Payments and nothing else. Refunds, payouts, Billing, Sync, Shield and Tax stay on your server, where the secret key is. See Mobile SDKs.
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.
Alongside those sit customers, identity, events, webhooks, webhookEndpoints and
global, which every server SDK also carries.
Browser and mobile packages are not merchant clients
They render a payment against a session your server already created. There is no refund, no payout, no invoice and no account listing in them, and there will not be: those calls need the secret key, and the secret key never leaves your server. See Sessions and security.
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.
| Package | Registry | Version | Runtime |
|---|---|---|---|
@wajub/cli | npm, Homebrew, Scoop | 1.7.4 | Node 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.
| Decision | Where |
|---|---|
| Hosted page, inline embed, overlay, or your own fields | Choosing your payments integration |
| How API field names land in your language | SDK naming conventions |
Related pages
- SDK quickstartYour first API call, side by side in every language.
- Wajub ComponentsHosted checkout and payment fields in the browser.
- Naming conventionsHow snake_case API fields land in each language.
- Example appsClone a working project and point it at your keys.
- API authenticationPublishable, secret and restricted keys.
- Mobile SDKsA native payment sheet for Flutter, React Native, Android and iOS.
- API referenceNo package needed, every endpoint for raw HTTP.