SMS WhatsApp Viber Voice Push Email 2FA / OTP FlashCall Number Lookup Number Validation Email Validation URL Tracking REST API SDKs WordPress Zapier Make All integrations
Pricing Developers Company Start building
For developers

Ship your first message in minutes.

Clean REST API. Predictable responses. Detailed documentation. A full sandbox. Five SDKs. Everything a serious integration needs from day one.

The API

A surface area you can hold in your head.

One resource-oriented REST API does the work. No SOAP, no bespoke protocols, no surprises in the response body.

REST API

Predictable, resource-oriented endpoints that return the same JSON shape every time — easy to read, easy to test.

OpenAPI 3.1 spec
JSON responses · ISO-8601 dates
OAuth2 & bearer-key auth

Webhooks

Subscribe to delivery and engagement events. Signed, retried with backoff, and replayable from the dashboard.

HMAC-SHA256 signatures
Automatic retry with backoff
Replay & inspect in dashboard

Sandbox

A full-parity test environment that never touches a live carrier. Build, test, and demo without spending a cent.

100% API parity
Simulated delivery events
Permanent, free access
Code in your language

Authenticate and send, however you build.

Copy-paste examples for the full round trip: authenticate with your key, send a message with cross-channel failover, and read the response.

<?php // Authenticate with your secret key $apiKey = getenv('COMNICUBE_API_KEY'); $ch = curl_init('https://api.comnicube.com/v1/messages'); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . $apiKey, 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'to' => '+447700900184', 'channels' => ['sms', 'whatsapp'], 'text' => 'Your ComniCube code is 481920', ]), ]); $message = json_decode(curl_exec($ch), true); echo $message['id']; // → msg_5f2a9c01
use Illuminate\Support\Facades\Http; // Token comes from config/services.php $response = Http::withToken(config('services.comnicube.key')) ->post('https://api.comnicube.com/v1/messages', [ 'to' => '+447700900184', 'channels' => ['sms', 'whatsapp'], 'text' => 'Your ComniCube code is 481920', ]); return $response->json('id'); // → msg_5f2a9c01
import ComniCube from '@comnicube/node'; // Reads COMNICUBE_API_KEY from the environment const cc = new ComniCube(process.env.COMNICUBE_API_KEY); const message = await cc.messages.send({ to: '+447700900184', channels: ['sms', 'whatsapp'], text: 'Your ComniCube code is 481920', }); console.log(message.id); // → msg_5f2a9c01
import os from comnicube import ComniCube cc = ComniCube(api_key=os.environ["COMNICUBE_API_KEY"]) message = cc.messages.send( to="+447700900184", channels=["sms", "whatsapp"], text="Your ComniCube code is 481920", ) print(message.id) # → msg_5f2a9c01
require "comnicube" cc = ComniCube::Client.new(api_key: ENV["COMNICUBE_API_KEY"]) message = cc.messages.send( to: "+447700900184", channels: ["sms", "whatsapp"], text: "Your ComniCube code is 481920" ) puts message.id # => msg_5f2a9c01
package main import ( "context" "fmt" "os" "github.com/comnicube/comnicube-go" ) func main() { cc := comnicube.New(os.Getenv("COMNICUBE_API_KEY")) msg, _ := cc.Messages.Send(context.Background(), &comnicube.SendParams{ To: "+447700900184", Channels: []string{"sms", "whatsapp"}, Text: "Your ComniCube code is 481920", }) fmt.Println(msg.ID) // → msg_5f2a9c01 }
Official SDKs

Typed, idiomatic libraries for five runtimes.

Each SDK wraps authentication, retries, idempotency, and webhook signature verification — so you write product code, not plumbing.

PHP
composer require comnicube/comnicube
Laravel
composer require comnicube/laravel
Node.js
npm install @comnicube/node
Python
pip install comnicube
Ruby
gem install comnicube
Go
go get github.com/comnicube/comnicube-go
Webhook events

Know what happened, the moment it does.

Subscribe an HTTPS endpoint and ComniCube streams every state change to you — no polling. Each event is signed, timestamped, and carries the full message context.

Signed & verifiableEvery payload is signed with HMAC-SHA256; verify it with one SDK call.
Retried with backoffNon-2xx responses retry for up to 24 hours with exponential backoff.
ReplayableInspect, filter, and re-deliver any past event from the dashboard.
EventFires when
message.queuedAccepted and queued for routing
message.sentHanded off to the selected carrier
message.deliveredConfirmed delivered to the handset
message.failoverRerouted to the next channel in the cascade
message.failedDelivery failed on all attempted channels
mfa.verifiedA Verify code was successfully checked
message.delivered
"event": "message.delivered", "id": "evt_3a9c01", "created": 1769894402, "data": { "message_id": "msg_5f2a9c01", "channel": "sms", "to": "+447700900184", "status": "delivered", "attempts": 1 }
Sandbox

Test without touching live carriers.

The sandbox mirrors production exactly — same endpoints, same responses, same webhook events — but every message is simulated. No carrier charges, no real handsets, no risk.

  • Full API parity with production
  • Simulated delivery, failover & failure events
  • Permanent, free access on every plan
  • Switch to live by swapping one key
Activate sandbox
BASE_URLhttps://sandbox.comnicube.com/v1
API_KEYck_test_9f2b…a71
CARRIERsimulated
BILLING£0.00 — no charges
Messages are simulated end-to-end. Webhook events fire exactly as they would in production.
Two API calls away

Ready to integrate?

Grab your keys, drop in an SDK, and send your first message against the sandbox today — go live whenever you're ready.