Get up and running
with Lunyazi
Everything you need to send your first SMS, set up OTP verification, and reach production, without contacting support.
Welcome
What Lunyazi is and what this guide will help you achieve.
Getting Started
A step-by-step onboarding journey from login to first message.
Credits & Billing
How credits work, the two pools, and how to recharge via MoMo.
Sender IDs
What they are, how to request one, and common mistakes.
SMS Messaging
Single sends, bulk sends, test mode, and delivery status.
API Integration
Three ways to connect Lunyazi to your own system, and which one to use.
OTP Verification
Integrate phone verification into your app in two API calls.
Secure Share
Send a document that only the intended recipient can open, with OTP verification and malware scanning.
Troubleshooting
Solutions to common issues with SMS, OTP, and billing.
1 of 7
Welcome to Lunyazi
What Lunyazi is, what problems it solves, and what this guide will help you achieve.
Lunyazi is a prepaid business communications platform that lets you send SMS messages and OTP verification codes to your customers, members, or users, through a simple dashboard or API.
What problems does Lunyazi solve?
- Send SMS to many people at once: reminders, notifications, alerts.
- Verify phone numbers or identities using one-time codes (OTP).
- Reach Eswatini and international numbers from one account.
- Automate recurring messages without building complex infrastructure.
What this guide covers
By the end of this guide you will be able to:
- Recharge your account with credits
- Set up your Sender ID
- Send your first SMS
- Integrate OTP verification into your application
- Reach production without needing to contact support
Did this page help?
2 of 7
Getting Started
A step-by-step onboarding journey from login to your first production message.
Go to lunyazi.com/dashboard and sign in with your email and password. If you don't have an account, click Create account. You'll receive 10 free credits on signup.
Go to Billing in the sidebar. Select your credit pool, enter the quantity you want, and pay via MTN MoMo. Credits are added instantly. See Credits & Billing for full details.
Your Sender ID is the name that appears on your recipients' phones. Contact the Lunyazi team to request one before your first production send. See Sender IDs for full details.
Go to SMS in the sidebar. Enter a recipient number and a message, then click Send. Use test number +268000000000 to send without using credits. See SMS Messaging for full details.
Go to Reports in the sidebar. Your message log shows each send with its delivery status: Delivered, Submitted, Pending, or Failed.
Go to Account in the sidebar. Click Show next to your API key, copy it, and include it as the X-Api-Key header in every API request.
+268000000000. Sends do not use credits and always succeed. Use this to verify your integration before going live.Did this page help?
3 of 7
Credits & Billing
How credits work, the two credit pools, how to recharge, and purchase history.
Lunyazi uses a credit system. You buy credits in advance and spend them when you send messages.
Two credit pools
| Pool | Used for | Expiry |
|---|---|---|
| Eswatini | Numbers starting with +268 | End of month |
| International | SA (+27), UK (+44), and other countries | Never expire |
How to recharge
- Go to Billing in the sidebar.
- Select Eswatini (+268) or International.
- Enter the quantity of credits you need.
- Review the total: pricing is tiered by volume.
- Enter your MTN MoMo number and click Pay with MoMo.
- Approve the payment prompt on your phone.
- Credits appear in your balance instantly once payment is confirmed.
Purchase history
Scroll to the bottom of the Billing page to see your full purchase history: date, pool, credits, and payment status for each transaction.
Did this page help?
4 of 7
Sender IDs
What a Sender ID is, why it matters, how to request one, and common mistakes to avoid.
A Sender ID is the name or number that appears on your recipient's phone when they receive your message.
Why it matters
- A recognised Sender ID improves open rates: recipients know who sent the message.
- Without a custom Sender ID, messages arrive from a generic number.
- A branded Sender ID looks professional and builds trust with your audience.
How to request a Sender ID
- Contact Lunyazi support via email at sales@lunyazi.com or WhatsApp.
- Provide the name you want to use (max 11 characters, letters and numbers only), a short description of your use case, and your business website.
- Allow 1β2 business days for activation.
- Once activated, all your outgoing messages will show your Sender ID.
Sender ID rules
- Maximum 11 characters
- Letters and numbers only, no spaces or special characters
- Must represent your organisation or brand
- Cannot impersonate another organisation
Common mistakes
- Spaces in the name: use a single word or abbreviation (e.g.
MyBusinessnotMy Business) - Too long: names over 11 characters are truncated by the carrier
- Sending before activation: messages will show a default sender until your Sender ID is activated
Did this page help?
5 of 7
SMS Messaging
How to send a single message, send in bulk, use test mode, and check delivery status.
Sending a single message
- Go to SMS in the sidebar.
- Enter the recipient's phone number in international format (e.g.
+26876123456). - Type your message.
- Click Send.
Sending bulk messages
- On the SMS page, switch to the Bulk tab.
- Upload a CSV or paste numbers, one per line.
- Enter your message.
- Review the recipient count and estimated credit cost.
- Click Send to all.
Test mode
Enable Test mode on the SMS page to simulate sending without using credits or reaching the carrier. The test number +268000000000 always succeeds.
Delivery status
Go to Reports to check delivery status for each message.
| Status | Meaning |
|---|---|
| β Delivered | Confirmed received by the handset |
| π€ Submitted | Accepted by the carrier, delivery pending |
| β³ Pending | Awaiting delivery confirmation |
| β Failed | Could not be delivered |
Did this page help?
6 of 8
API Integration
Three ways to connect Lunyazi's SMS API to your own system, and which one to use.
Every integration boils down to one question: what triggers a send, and where does the message wording live? There are three patterns, in increasing order of how well they scale as your system grows.
Option 1: Raw send
Your system builds the full message text itself, every time.
POST https://api.lunyazi.com/sms/send
X-Api-Key: your_api_key
{
"to": "+26876123456",
"message": "Hi Thabo, your order is ready for collection."
}
Simplest to start with, but any wording change means editing your own code and redeploying. Fine for a single internal tool with one message type.
Option 2: Template by ID
Message wording lives in Lunyazi and can be edited without a redeploy, but your code still needs to know the specific template's ID.
POST https://api.lunyazi.com/sms/send
X-Api-Key: your_api_key
{
"to": "+26876123456",
"template_id": "tpl_02b4b421",
"variables": {"name": "Thabo"}
}
Option 3: Event-driven (recommended)
Your system fires a plain event name it already understands from its own business logic, e.g. PAYMENT_RECEIVED or APPLICATION_CONFIRMED. No template IDs, no coupling to Lunyazi's internals. This is the right fit whenever the wording of a message might need to change without a code deploy, which is the common case for most businesses.
Do this once per message type, from your own code or directly in the dashboard.
POST https://api.lunyazi.com/sms/templates
X-Api-Key: your_api_key
{
"name": "Application Confirmed",
"event_name": "APPLICATION_CONFIRMED",
"body": "Hi {{name}}, we've received your application to {{program}}. We'll be in touch soon."
}This is the only call your application code ever needs to make, whenever the event happens.
POST https://api.lunyazi.com/sms/post
X-Api-Key: your_api_key
{
"event": "APPLICATION_CONFIRMED",
"to": "+26876123456",
"data": {"name": "Thabo", "program": "Software Engineering"}
}Lunyazi looks up your active template for that event, substitutes data into the {{variables}}, and sends.
Validation: a
data object missing a required {{variable}} returns 400 with the missing field named, no send attempted. An unknown or inactive event returns 404.Did this page help?
7 of 9
OTP Verification
What OTP is, typical use cases, and how to integrate it into your application in two API calls.
OTP (One-Time Password) lets you verify that a user owns a phone number by sending them a code and checking that they entered it correctly.
Typical use cases
- User registration: confirm the phone number during signup
- Login verification: two-factor authentication (2FA)
- Password reset: verify identity before allowing a reset
- Transaction confirmation: confirm high-value actions
- Membership verification: confirm a member's identity
Integration flow
Call the Lunyazi OTP API with the user's phone number. Lunyazi generates a code and sends it via SMS.
POST https://api.lunyazi.com/otp/send
X-Api-Key: your_api_key
{
"channel": "sms",
"recipient": "+26876123456",
"app_name": "Your App Name"
}The response includes an otp_id. Save this for the verification step.
Show an input field for the user to enter the code they received on their phone.
Pass the otp_id and the user's entered code to the verify endpoint.
POST https://api.lunyazi.com/otp/verify
X-Api-Key: your_api_key
{
"otp_id": "otp_abc123",
"code": "492817"
}A successful response means the code is valid and the phone number is verified.
+268000000000 always returns code 123456 and uses no credits, so use this to test your integration before going live.Eswatini DPA 2022: OTP verification meets the identity verification requirements of Section 14 of the Data Protection Act 2022. See lunyazi.com/otp for more.
Did this page help?
9 of 9
Troubleshooting
Solutions to common issues. If your issue is not listed, contact support.
SMS not delivered
| Possible cause | What to check |
|---|---|
| No credits remaining | Check your balance on the Overview page and top up via Billing. |
| Invalid phone number format | Numbers must be in international format: +26876123456. No spaces or dashes. |
| Recipient's phone is off | A Pending status in Reports means the carrier is still attempting delivery. |
| Message blocked by content policy | Certain words are blocked to comply with carrier policies. If you receive a 403 error, review your message content. |
OTP code not received
| Possible cause | What to check |
|---|---|
| No credits | OTP sends use the same credit pool as SMS. Check your balance. |
| Invalid phone number | Confirm the number is in international format and is reachable. |
| Code expired | OTP codes expire after 5 minutes. Request a new one. |
Unable to recharge
| Possible cause | What to check |
|---|---|
| MoMo approval not completed | Check your phone for the MoMo prompt. It expires after a few minutes. |
| Insufficient MoMo balance | Ensure your MoMo wallet has enough funds before initiating payment. |
| Incorrect number format | Enter your MoMo number without the + sign: 26878XXXXXX. |
API returning 401 Unauthorized
- Your API key may be incorrect. Go to Account and copy it again.
- Ensure you are sending the key as the
X-Api-Keyheader, not in the request body.
API returning 429 Too Many Requests
- You have exceeded the per-minute rate limit. Add a delay between sends or use the bulk send endpoint for large batches.
Did this page help?