Environments
Lisoloo runs two environments — sandbox and production. They are configuration-distinct, not URL-prefixed: the same paths exist at every base URL.
| Environment | BASE_URL source | Key prefix | Purpose |
|---|---|---|---|
| Sandbox | Sandbox URL on the Bloonio dev portal dashboard | sk_test_* | Self-serve test traffic. SMS are routed to a stub carrier; no real delivery, no real cost. |
| Production | Production URL on the Bloonio dev portal dashboard | sk_live_* | Live SMS. Real carriers. Real cost against your balance. |
Every Lisoloo endpoint is mounted under /api/v1/lisoloo/sms-api/. The
unauthenticated /health probe is available in both environments.
Picking an environment
Section titled “Picking an environment”There is no global “environment” toggle — the choice of base URL and
the key prefix together determine the environment. A sandbox key
(sk_test_*) cannot authenticate against the production base URL,
and vice versa — that returns 401.
# Wrong — sandbox key against production base URLcurl $BASE_URL/api/v1/lisoloo/sms-api/balance \ -H "app-key: sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"# → 401 with "Missing or invalid app-key"Per-environment configuration
Section titled “Per-environment configuration”Both environments are independent: separate API keys, separate webhook configuration, separate balance, separate rate-limit buckets. Rotating a sandbox key does not affect production, and vice versa.
# Sandbox (paste the sandbox BASE_URL from your dashboard)export BASE_URL=<sandbox-base-url-from-dashboard>export LISOLOO_API_KEY=sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxexport LISOLOO_API_URL=$BASE_URL/api/v1/lisoloo/sms-api
# Production (paste the production BASE_URL from your dashboard)export BASE_URL=<production-base-url-from-dashboard>export LISOLOO_API_KEY=sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxexport LISOLOO_API_URL=$BASE_URL/api/v1/lisoloo/sms-apiSandbox quirks worth knowing
Section titled “Sandbox quirks worth knowing”- No real delivery. Sandbox SMS are accepted and walked through the
full status lifecycle (
pending → processing → sent → delivered) but no carrier traffic is generated. The recipient does not receive anything. - Test recipient numbers. Use any well-formed E.164 number — the
sandbox doesn’t validate against a real number database. We recommend
+243998857000for documentation parity. - Webhooks fire normally. Sandbox
callback_urlcalls andwebhook_urlPOSTs are real HTTP requests from the gateway. Use a service like webhook.site to inspect them. - No real cost.
total_coston the response is computed but never deducted from your balance. Theavailable_smsfield onGET /balancereports the sandbox quota, not production credits. - Rate limits are the same. Don’t tune your test harness on sandbox-specific limits — they match production.
See also
Section titled “See also”- Authentication — header format
- API keys — where the dashboard shows your
BASE_URL - Your first SMS — sandbox walkthrough