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

quick-start.sh

Base URL

https://www.splitsms.com
curl -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.com

API 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. 1

    Create an API key

    Developers → API Keys. Copy the key once — it is shown only at creation.

  2. 2

    Check balance

    GET https://www.splitsms.com/api/v1/balance with your Bearer token.

  3. 3

    Send SMS

    POST https://www.splitsms.com/api/v1/sms/send with sender, recipients, and message.

  4. 4

    Add webhooks

    Receive delivery events at your HTTPS endpoint.

  5. 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 OTP
  • sms.readRead messages, reports, and logs
  • wallet.readRead balance and transactions
  • contacts.readList contacts
  • contacts.writeCreate and update contacts
  • campaigns.readRead campaign status
  • connect.customersProvision and list Connect customers
  • sender_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

  1. 1Download splitsms.zip and install via Plugins → Add New → Upload.
  2. 2In WordPress admin, open SplitSMS → Settings. API URL is locked to https://www.splitsms.com.
  3. 3Create an API key at App connections (live or sandbox for testing).
  4. 4Paste the key, set Sender ID and admin phone, then click Test connection.
  5. 5Send a test SMS from the plugin header to confirm delivery.
  6. 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

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:

Dev server
npm install http://localhost:3000/sdk/javascript/splitsms-sdk.tgz
Dev API fallback
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

Production (after deploy)
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 key
  • FORBIDDEN403Key lacks required permission
  • INVALID_REQUEST400Bad JSON or validation failed
  • NOT_FOUND404Resource does not exist
  • RATE_LIMITED429Too many requests — slow down
  • INSUFFICIENT_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
Configure in portal →

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",
});
All SDKs →

SplitSMS Connect

Provision embedded customers with POST /api/v1/connect/customers. Register sender IDs on their behalf with customer_id.

Connect documentation →

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.