Developer-first • REST API

One API ma kɔ Ghanaian customer biara

SMS, WhatsApp, email, push, voice wɔ integration baako. Automatic failover Hubtel, Africa's Talking, ne more.

API Keys & Sandbox

Create sandbox keys wɔ Settings. X-API-Key header.

Node.js & Python SDKs

@notifybridge/sdk ne packages/sdk-python.

Delivery Webhooks

Signed callbacks ma message.status.updated, opt-outs, campaigns.

OpenAPI Spec

Import Postman anaa generate OpenAPI 3.0 clients.

Authentication

Create API key wɔ Settings → API Keys. Pass wɔ X-API-Key header wɔ request biara so.

Dashboard JWT: Authorization: Bearer <token> plus X-Organization-Id.

Base URL: https://api.notify.rorodigitalsolutions.com

Health check: GET https://api.notify.rorodigitalsolutions.com/health

Send message

POST /messages/send wɔ SMS, WHATSAPP, EMAIL, PUSH, anaa VOICE. async: true queues via BullMQ (202 + QUEUED).

cURL
curl -X POST https://api.notify.rorodigitalsolutions.com/messages/send \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "SMS",
    "to": "+233241234567",
    "body": "Your OTP is 482910. Valid for 5 minutes.",
    "countryCode": "GH"
  }'
Node.js
const response = await fetch('https://api.notify.rorodigitalsolutions.com/messages/send', {
  method: 'POST',
  headers: {
    'X-API-Key': process.env.NOTIFYBRIDGE_API_KEY,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    channel: 'SMS',
    to: '+233241234567',
    body: 'Your OTP is 482910. Valid for 5 minutes.',
    countryCode: 'GH',
  }),
});

const { data } = await response.json();
console.log(`Message ${data.internalMessageId} → ${data.status}`);

Bulk send

POST /messages/bulk kosi messages 100. async: true queues nyinaa (202 wɔ QUEUED logs).

cURL
curl -X POST https://api.notify.rorodigitalsolutions.com/messages/bulk \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "async": true,
    "countryCode": "GH",
    "messages": [
      { "channel": "SMS", "to": "+233241234567", "body": "Reminder 1" },
      { "channel": "SMS", "to": "+233241234568", "body": "Reminder 2" }
    ]
  }'

Node.js SDK

Install fi monorepo anaa copy packages/sdk.

@notifybridge/sdk
import { NotifyBridgeClient } from '@notifybridge/sdk';

const client = new NotifyBridgeClient({
  apiKey: process.env.NOTIFYBRIDGE_API_KEY!,
  baseUrl: 'https://api.notify.rorodigitalsolutions.com',
});

const message = await client.sendMessage({
  channel: 'SMS',
  to: '+233241234567',
  body: 'Hello from the NotifyBridge SDK!',
  countryCode: 'GH',
  async: true,
});
console.log(message.internalMessageId, message.status);

const bulk = await client.sendBulk({
  async: true,
  countryCode: 'GH',
  messages: [
    { channel: 'SMS', to: '+233241234567', body: 'Reminder 1' },
    { channel: 'SMS', to: '+233241234568', body: 'Reminder 2' },
  ],
});

const event = await client.triggerEvent({
  event: 'appointment.reminder',
  to: '+233241234567',
  variables: { firstName: 'Kwame', clinicName: 'Demo Clinic' },
});

Python SDK

Stdlib-only — pip install -e packages/sdk-python.

notifybridge (Python)
from notifybridge import NotifyBridgeClient

client = NotifyBridgeClient(
    api_key=os.environ["NOTIFYBRIDGE_API_KEY"],
    base_url="https://api.notify.rorodigitalsolutions.com",
)

message = client.send_message(
    channel="SMS",
    to="+233241234567",
    body="Hello from the NotifyBridge Python SDK!",
    country_code="GH",
    async_=True,
)
print(message["id"], message["status"])

bulk = client.send_bulk(
    async_=True,
    country_code="GH",
    messages=[
        {"channel": "SMS", "to": "+233241234567", "body": "Reminder 1"},
        {"channel": "SMS", "to": "+233241234568", "body": "Reminder 2"},
    ],
)

client.trigger_event(
    event="appointment.reminder",
    to="+233241234567",
    variables={"firstName": "Kwame", "clinicName": "Demo Clinic"},
)

Webhooks

Register endpoints wɔ Settings. HMAC-SHA256 signed payloads.

Signature verification
# Verify webhook signature (Node.js)
const crypto = require('crypto');

function verifySignature(body, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// Headers: X-NotifyBridge-Signature, X-NotifyBridge-Event
// Events: message.status.updated, contact.opted_out, campaign.completed

Event triggers

Configure events wɔ dashboard, fire fi wo app.

cURL
curl -X POST https://api.notify.rorodigitalsolutions.com/events/trigger \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "appointment.reminder",
    "to": "+233241234567",
    "variables": {
      "firstName": "Kwame",
      "clinicName": "Demo Clinic",
      "date": "2026-07-04",
      "time": "10:00"
    }
  }'

Ready ma integrate?

Free account, sandbox key, first test message wɔ 5 minutes mu.

Get Started Free
Developers — REST API ma SMS, WhatsApp ne Nkrato | NotifyBridge