Hellio Messaging
Docs /SDKs and libraries

SDKs and libraries

Official Hellio Messaging clients for six languages. Same token, same base URL, typed responses and errors, no HTTP boilerplate.

Every SDK wraps the full API: SMS, OTP and 2FA (SMS / voice / email, plus WhatsApp on PHP), voice broadcasts, number lookup (HLR), email verification, pricing, balance and webhooks. Recipients can be a single number, a comma-separated string or a list, and each library maps HTTP errors to typed exceptions so you catch exactly what you care about.

Install

Pick your language and pull in the package.

PHP PHP / Laravel helliosolutions/helliosms
composer require helliosolutions/helliosms
JS Node.js / TypeScript helliomessaging-nodejs
npm i helliomessaging-nodejs
PY Python helliomessaging
pip install helliomessaging
GO Go github.com/HellioSolutions/hellio-go
go get github.com/HellioSolutions/hellio-go
RB Ruby hellio-messaging
gem install hellio-messaging
.N .NET Hellio.Messaging
dotnet add package Hellio.Messaging

Authenticate once

Generate a token, then let the SDK read it from the environment.

Create a scoped token from your dashboard under Settings → API Keys & Webhooks. Every SDK reads the same three variables when you omit the constructor arguments, so you rarely hard-code anything:

HELLIO_API_TOKEN=your-token-here
HELLIO_BASE_URL=https://api.helliomessaging.com/v1
HELLIO_DEFAULT_SENDER=HellioSMS

Prefer explicit configuration? Pass token, baseUrl and defaultSender straight to the client constructor instead. See Authentication for scopes, idempotency and rate limits.

Send an SMS

The same call in every language.

curl -X POST https://api.helliomessaging.com/v1/sms/send \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"recipients":["233241234567"],"sender":"HellioSMS","message":"Hello from Hellio!"}'
import { Hellio } from 'helliomessaging-nodejs';

const hellio = new Hellio({ token: process.env.HELLIO_API_TOKEN });
await hellio.sms('233241234567', 'Hello from Hellio!', 'HellioSMS');
from hellio import Hellio

client = Hellio(token="your-token-here")
client.sms("233241234567", "Hello from Hellio!", sender="HellioSMS")
use Hellio\HellioMessaging\Facades\HellioMessaging;

HellioMessaging::sms('233241234567', 'Hello from Hellio!', 'HellioSMS');

Go

client := hellio.NewClient("your-token-here")
client.SMS(context.Background(), []string{"233241234567"}, "Hello from Hellio!", "HellioSMS", "")

Ruby

require "hellio"

client = Hellio::Client.new(token: "your-token-here")
client.sms("233241234567", "Hello from Hellio!", sender: "HellioSMS")

.NET

using Hellio.Messaging;

var hellio = new HellioClient(token: "your-token-here");
await hellio.SendSmsAsync("233241234567", "Hello from Hellio!", "HellioSMS");

A 202 Accepted means the campaign is queued. Every method returns the decoded JSON (payloads live under the data key), except the boolean verify helper. The other channels use the same client: OTP (otp / verifyOtp), voice (voice), number lookup (lookup) and email verification (verifyEmail).

What you get

  • Full API coverage — SMS, OTP and 2FA, voice, number lookup, email verification, pricing, balance and webhook management.
  • Typed errors — invalid token (401), insufficient balance (402), validation (422) and rate limit (429) each map to their own exception type.
  • Environment fallbacks — read HELLIO_API_TOKEN, HELLIO_BASE_URL and HELLIO_DEFAULT_SENDER automatically.
  • Recipient normalization — pass one number, a comma-separated string or an array.
  • No heavy dependencies — the Go, Ruby and Python clients use only their standard libraries; Node uses the built-in fetch.

Source and versioning

Open source on GitHub, released under MIT.

Each SDK lives in its own repository under github.com/HellioSolutions, follows Semantic Versioning, and ships a CHANGELOG. Found a bug or want a method added? Open an issue on the relevant repo, or talk to our team.

Working in a language we don't ship yet? Every SDK is a thin wrapper over the REST API, so you can call it directly. Start with the Quickstart and the API Reference.

Was this page helpful? Thanks for the feedback! Still stuck? Talk to our team