REST API v1
Build with the SplitSMS API
Send SMS, verify OTPs, manage contacts and campaigns, provision Connect customers, register sender IDs, and integrate WordPress v1.7.2 — with sandbox keys and HMAC-signed webhooks.
Bulk SMS
Queue & campaigns
OTP
Send & verify
Connect
Embed customers
WordPress
Plugin v1.7.2
Base URL
https://www.splitsms.comcurl -X POST 'https://www.splitsms.com/api/v1/sms/send' \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sender":"MYBRAND","recipients":["233201234567"],"message":"Hello"}'SplitSMS REST API
All API traffic goes through a single production base URL. Create scoped API keys in the developer portal, use sk_test_ keys for sandbox testing, provision embedded customers with Connect, and wire WordPress v1.7.2 with the official plugin.
Production base URL
https://www.splitsms.comAPI prefix: https://www.splitsms.com/api/v1
Bearer auth
Authorization header
Wallet + credits
Pay-as-you-go
Webhooks
HMAC-signed events
Connect + Sender IDs
Partner APIs
Quick start (API)
- 1
Create an API key
Developers → API Keys. Copy the key once — it is shown only at creation.
- 2
Check balance
GET https://www.splitsms.com/api/v1/balance with your Bearer token.
- 3
Send SMS
POST https://www.splitsms.com/api/v1/sms/send with sender, recipients, and message.
- 4
Add webhooks
Receive delivery events at your HTTPS endpoint.
- 5
Connect (optional)
POST https://www.splitsms.com/api/v1/connect/customers to provision embedded sub-accounts.
First request
curl -X GET 'https://www.splitsms.com/api/v1/balance' \ -H "Authorization: Bearer YOUR_API_KEY"
Authentication & permissions
Every request must include Authorization: Bearer <api_key>. Keys are scoped with permissions at creation time. Missing permission returns 403 FORBIDDEN.
sms.sendSend SMS and OTPsms.readRead messages, reports, and logswallet.readRead balance and transactionscontacts.readList contactscontacts.writeCreate and update contactscampaigns.readRead campaign statusconnect.customersProvision and list Connect customerssender_ids.readList sender IDs (own or Connect customer)sender_ids.writeRegister sender IDs for approval
Sandbox keys (sk_test_) validate requests but do not charge credits or send live SMS.
SplitSMS Connect
Partners and SaaS platforms can provision embedded customers with their own wallet and SMS credits. Requires the connect.customers permission on your API key.
POST https://www.splitsms.com/api/v1/connect/customers
Authorization: Bearer YOUR_PARTNER_KEY
{
"full_name": "Jane Doe",
"phone": "233201234567",
"country_code": "GH",
"external_ref": "your-user-42",
"initial_sms_credits": 25
}Connect WordPress
The free SplitSMS for WordPress plugin connects only to https://www.splitsms.com. Install on any WordPress 6+ site, paste your API key, and enable WooCommerce or form notifications in under three minutes.
Setup steps
- 1Download splitsms.zip and install via Plugins → Add New → Upload.
- 2In WordPress admin, open SplitSMS → Settings. API URL is locked to https://www.splitsms.com.
- 3Create an API key at App connections (live or sandbox for testing).
- 4Paste the key, set Sender ID and admin phone, then click Test connection.
- 5Send a test SMS from the plugin header to confirm delivery.
- 6Enable WooCommerce, WordPress core, CF7, WPForms, Elementor Pro, or Crocoblock under SplitSMS → Integrations.
What the plugin does
- •Shows SMS balance and wallet funds in the admin header
- •WooCommerce: placed, payment, processing, completed, failed, refunded, shipped
- •WordPress core: registration welcome SMS, optional password-reset SMS
- •CF7, WPForms, Elementor Pro — after submit with skip logs to dashboard
- •JetFormBuilder native Send SMS Post Submit Action + Crocoblock modules
- •Local logs + sync to your SplitSMS dashboard
- •Auto-updates from https://www.splitsms.com/api/plugin/update (v1.7.2)
Plugin → API calls
POST https://www.splitsms.com/api/v1/wordpress/connect # on save key GET https://www.splitsms.com/api/v1/account/status # dashboard header POST https://www.splitsms.com/api/v1/sms/send # all outbound SMS POST https://www.splitsms.com/api/v1/wordpress/logs # SMS event sync POST https://www.splitsms.com/api/v1/wordpress/events # generic plugin events
WooCommerce template placeholders
Use these in message templates under Integrations: {customer_name} {order_id} {order_total} {order_status} {payment_method} {site_name}. SMS is sent to the order billing phone.
Official SDKs
JavaScript
npm install https://www.splitsms.com/sdk/javascript/splitsms-sdk.tgzView docs →
PHP
composer require splitsms/sdkView docs →
Flutter
splitsms_flutterView docs →
Do not run npm install @splitsms/sdk
That name is not on registry.npmjs.org (404). Install from a SplitSMS .tgz URL instead — npm still installs it as @splitsms/sdk in node_modules.
Install now (local)
Run from your app folder (must have a package.json). With npm run dev running in this repo:
npm install http://localhost:3000/sdk/javascript/splitsms-sdk.tgz
npm install http://localhost:3000/api/sdk/javascript/tgz
Or use a file path after npm run sync:sdks: npm install ./path/to/splitsms/public/sdk/javascript/splitsms-sdk.tgz
npm install https://www.splitsms.com/sdk/javascript/splitsms-sdk.tgz
If splitsms.com returns 404, the latest build is not live yet — use the local commands above, then redeploy this app (npm run build runs sync:sdks automatically).
import { SplitSMS } from "@splitsms/sdk";
const client = new SplitSMS({
apiKey: process.env.SPLITSMS_API_KEY,
baseUrl: "https://www.splitsms.com",
});
await client.messages.send({
sender: "MYBRAND",
recipients: ["233201234567"],
message: "Hello from SplitSMS",
});API reference
All cURL examples use https://www.splitsms.com
Authentication
Send your API key in the Authorization header on every request. Use sk_test_ keys for sandbox (no real SMS charges).
Base URL
https://www.splitsms.com
Header
Authorization: Bearer YOUR_API_KEY
SMS
Send messages and check delivery status.
Error responses
All errors return { "success": false, "error": { "code", "message" } }
UNAUTHORIZED401Missing or invalid API keyFORBIDDEN403Key lacks required permissionINVALID_REQUEST400Bad JSON or validation failedNOT_FOUND404Resource does not existRATE_LIMITED429Too many requests — slow downINSUFFICIENT_CREDITS402Not enough SMS credits
Webhooks
Receive signed POST callbacks. Verify with X-SplitSMS-Signature (HMAC-SHA256). Retries: 1m → 5m → 30m → 2h.
- message.sent
- message.delivered
- message.failed
- campaign.completed
- wallet.low_balance
Rate limits
Per API key, configurable at creation. Check X-RateLimit-Remaining.
- Free10 req/min
- Standard100 req/min
- Enterprise1000 req/min
JavaScript SDK
Not on npm.org — install from SplitSMS: npm install https://www.splitsms.com/sdk/javascript/splitsms-sdk.tgz
npm install @splitsms/sdk returns 404 — use the URL above.
import { SplitSMS } from "@splitsms/sdk";
const sms = new SplitSMS({
apiKey: process.env.SPLITSMS_API_KEY,
baseUrl: "https://www.splitsms.com",
});
await sms.messages.send({
sender: "MYBRAND",
recipients: ["233201234567"],
message: "Hello",
});SplitSMS Connect
Provision embedded customers with POST /api/v1/connect/customers. Register sender IDs on their behalf with customer_id.
WordPress & WooCommerce
Official plugin v1.7.2 — order notifications, WordPress core SMS, CF7, WPForms, Elementor Pro, JetFormBuilder Post Submit Action, and Crocoblock. Per-event toggles and cloud log sync.