For a while, integrating Snippe meant the same thing for everyone: read the API reference, write your HTTP calls, hand-roll your webhook signature verifier, and hope you got the HMAC details right.
That's fine if you enjoy that kind of work.
Most developers don't.
So today we're shipping four things at once that should make Snippe feel a lot less like an HTTP API and a lot more like a tool you reach for without thinking.
Official SDKs in three languages
You can now pip install, npm install, or composer require Snippe directly.
JavaScript / TypeScript
npm install @snippe/sdkimport { Snippe } from "@snippe/sdk";
const snippe = new Snippe({ apiKey: process.env.SNIPPE_API_KEY! });
const payment = await snippe.payments.create({
payment_type: "mobile",
details: { amount: 500 },
phone_number: "255781000000",
customer: { firstname: "Jane", lastname: "Doe", email: "jane@example.com" },
});Python
pip install snippefrom snippe import Snippe, Customer
client = Snippe("snp_your_api_key")
payment = client.create_mobile_payment(
amount=5000,
currency="TZS",
phone_number="0712345678",
customer=Customer(firstname="Jane", lastname="Doe"),
)There's also AsyncSnippe for FastAPI / aiohttp / anything async.
PHP
composer require snippe/snippe-php$payment = $snippe->mobileMoney(5000, '0754123456')
->customer('John Doe', 'john@email.com')
->send();Each SDK ships with the same surface: payments, payouts, balance, and a verifyWebhook helper that handles the HMAC and replay-window check for you. No more "did I include the timestamp prefix?" or "should I use timingSafeEqual here?". The SDK does it.
If you're stuck on something rare, you can always drop down to the HTTP API — same key, same endpoints. The SDK is a shortcut, not a wall.
Docs: /docs/2026-01-25/sdks
Drop-in plugins for WooCommerce and WHMCS
Not every Snippe user is writing code.
If you run a WooCommerce store or use WHMCS for billing, you can now activate Snippe as a payment method without touching a backend.
WooCommerce: upload the plugin, paste your API key, pick which methods to enable (mobile money, card, QR, or all three), and customers see "Snippe" at checkout. We map the events for you — payment.completed flips the order to Processing, payment.failed to Failed, and so on.
WHMCS: copy three files into modules/gateways/, activate it in Setup → Payments, and your invoices get a "Pay with Snippe" button. The webhook callback marks the invoice paid via addInvoicePayment automatically.
Both plugins use Snippe's hosted Sessions under the hood, so customers get the same mobile-optimized checkout you'd get from the API.
Docs: /docs/2026-01-25/plugins
An agent skill for Claude Code, Cursor and Gemini CLI
Half of you reading this aren't going to write the integration yourself anymore — you're going to ask Claude Code or Cursor to write it.
That's fine. We built a skill for that.
npx skills add Neurotech-HQ/skills --skill snippe-integrationOnce installed, your agent has procedural knowledge of Snippe loaded on demand: it knows the request shapes, the webhook signature format, the 30-character idempotency-key limit, the TZS-only rule, the 500 TZS minimum, the difference between payment_url and payment_qr_code. You don't have to paste docs into the chat or correct it five times before it gets the HMAC right.
It triggers automatically — mention "Snippe", "Tanzania payments", "mobile money", "TZS", or "webhook verification" and the skill loads. No invocation syntax to remember.
If you build with an AI agent at all, install this. It's the highest-leverage thing on this list per minute spent.
Docs: /docs/2026-01-25/agent-skill
Every payment link is now an API endpoint
This is the one I'm most excited about.
Every snippe.me/p/... link can now carry structured metadata via a ?meta= query parameter. When the customer pays, that same metadata comes back to your webhook at data.metadata.url_metadata.
In other words: a payment link became programmable.
Build a JSON object:
{
"ref": "ORDER-4421",
"customer_id": "usr_882",
"plan": "premium"
}Base64-encode it:
import base64, json
meta = base64.b64encode(json.dumps({
"ref": "ORDER-4421",
"customer_id": "usr_882",
"plan": "premium",
}).encode()).decode()Stick it on the link:
https://snippe.me/p/your-page-slug?meta=eyJyZWYiOiJPUkRFUi00...Customer pays. You receive:
{
"type": "payment.completed",
"data": {
"metadata": {
"url_metadata": {
"ref": "ORDER-4421",
"customer_id": "usr_882",
"plan": "premium"
}
}
}
}That's the whole feature.
What it removes is the ugly part of every payment integration: figuring out which payment was for which thing. No more matching on phone numbers. No more guessing. No backend lookups, no extra database table, no manual reconciliation.
Use it for SaaS top-ups ({ user_id, package, credits }), affiliate attribution ({ partner_id }), invoice marking ({ invoice_id }), WhatsApp order flows — anywhere you'd have wanted a client_reference_id field but didn't want to write a full Sessions integration to get one.
Two caveats worth being explicit about:
- The blob is base64-encoded for transport, not encrypted. Don't put secrets in it.
- Always verify the webhook signature before trusting the metadata. Otherwise anyone can POST a forged event to your endpoint.
Docs: /docs/2026-01-25/sessions/payment-links#url-metadata
What changes for you
If you're already integrated, nothing breaks. The HTTP API is unchanged.
If you're starting today, you have four new ways in:
- Pull an SDK if you want code that feels native to your stack.
- Install a plugin if you don't want to write code at all.
- Install the agent skill if you'd rather have Claude Code or Cursor write the integration for you.
- Slap
?meta=on a payment link if you just need a webhook to know what the payment was for.
That's the goal — every developer should be able to integrate Snippe at the level of effort that matches the problem they're solving. Not one level higher.
The repos are open:
- snippe-js-sdk
- snippe-python-sdk
- snippe-php-sdk
- snippe-wordpress-plugin
- snippe-WHMCS
- skills — agent skill for Claude Code, Cursor, Gemini CLI
- snippe-101 — recipes in Node, Python, Go and cURL
File issues, send PRs, tell us what's missing.
Ship something this weekend.