πŸ“– User Guide: v1

Get up and running
with Lunyazi

Everything you need to send your first SMS, set up OTP verification, and reach production, without contacting support.

1

Welcome

What Lunyazi is and what this guide will help you achieve.

2

Getting Started

A step-by-step onboarding journey from login to first message.

3

Credits & Billing

How credits work, the two pools, and how to recharge via MoMo.

4

Sender IDs

What they are, how to request one, and common mistakes.

5

SMS Messaging

Single sends, bulk sends, test mode, and delivery status.

6

API Integration

Three ways to connect Lunyazi to your own system, and which one to use.

7

OTP Verification

Integrate phone verification into your app in two API calls.

8

Secure Share

Send a document that only the intended recipient can open, with OTP verification and malware scanning.

9

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
New here? Continue to Getting Started β†’

2 of 7

Getting Started

A step-by-step onboarding journey from login to your first production message.

1
Log in

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.

2
Recharge your account

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.

3
Set up your Sender ID

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.

4
Send your first SMS

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.

5
Check delivery status

Go to Reports in the sidebar. Your message log shows each send with its delivery status: Delivered, Submitted, Pending, or Failed.

6
Get your API key and go to production

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.

Test number: +268000000000. Sends do not use credits and always succeed. Use this to verify your integration before going live.

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

PoolUsed forExpiry
EswatiniNumbers starting with +268End of month
InternationalSA (+27), UK (+44), and other countriesNever expire
Eswatini credits reset on the 1st of each month. Purchase international credits for numbers outside Eswatini.

How to recharge

  1. Go to Billing in the sidebar.
  2. Select Eswatini (+268) or International.
  3. Enter the quantity of credits you need.
  4. Review the total: pricing is tiered by volume.
  5. Enter your MTN MoMo number and click Pay with MoMo.
  6. Approve the payment prompt on your phone.
  7. 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.

Pricing: Credits are priced per SMS based on volume tiers. The higher your quantity, the lower the per-credit rate. The current rate is shown live when you enter a quantity on the Billing page.

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

  1. Contact Lunyazi support via email at sales@lunyazi.com or WhatsApp.
  2. 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.
  3. Allow 1–2 business days for activation.
  4. Once activated, all your outgoing messages will show your Sender ID.
Fastest approval: accounts that have topped up (from E40) and sent some real messages are typically activated without any back-and-forth, since it's easy for us to confirm genuine business use. Brand-new accounts with no activity yet may be asked a few extra questions first β€” topping up before you request is the quickest way to skip that.

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. MyBusiness not My 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
Pre-send validation: Lunyazi validates your messages before they are sent. If your account has not yet been configured with a Sender ID, messages will still route, but will show a default sender. Contact support to activate your custom Sender ID before your first production send.

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

  1. Go to SMS in the sidebar.
  2. Enter the recipient's phone number in international format (e.g. +26876123456).
  3. Type your message.
  4. Click Send.

Sending bulk messages

  1. On the SMS page, switch to the Bulk tab.
  2. Upload a CSV or paste numbers, one per line.
  3. Enter your message.
  4. Review the recipient count and estimated credit cost.
  5. 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.

StatusMeaning
βœ… DeliveredConfirmed received by the handset
πŸ“€ SubmittedAccepted by the carrier, delivery pending
⏳ PendingAwaiting delivery confirmation
❌ FailedCould not be delivered
Credit usage: One credit = one SMS to an Eswatini number. International destinations use more credits depending on the country. The cost is shown before you confirm a bulk send.

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.

1
Create a template for the event

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."
}
2
Fire the event from your system

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.

Why this scales better: whoever owns the actual wording (marketing, admissions, support) can revise an approved message centrally in the dashboard, with zero code changes on the engineering side. This matters most when the people maintaining the wording aren't the same people maintaining the code, which is the common case once a business grows past one person doing everything.

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.

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

1
Send an OTP

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.

2
User enters the code

Show an input field for the user to enter the code they received on their phone.

3
Verify the code

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.

Test number: +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.

8 of 9

Secure Share

Send a document that only the intended recipient can open. No account or app required on their side.

Secure Share lets you send a file to someone by phone number, protected behind an SMS one-time code. The recipient cannot download the document until they verify that code, and the document itself is automatically scanned for malware before any download link is ever issued.

Typical use cases

  • Sending a signed contract or agreement to a client
  • Delivering case files or correspondence that must reach only the named recipient
  • Sharing a sensitive report, invoice, or statement outside your organisation
  • Any handoff where you need proof the right person actually opened the document

Sending a document

  1. Go to Secure Share in the dashboard.
  2. Enter the recipient's phone number (required) and, optionally, their email address.
  3. Choose a file to upload and set how many days the link should remain valid (1-30 days).
  4. Click Create. The recipient is sent a link by SMS immediately, and by email too if you provided one.

What the recipient experiences

1
Opens the link

The link opens a page showing who sent the document and what it's called, with no document content visible yet.

2
Requests a verification code

A one-time code is sent by SMS to the phone number you specified when creating the share.

3
Enters the code

Once verified, the document is checked against its malware scan result. If the scan already completed cleanly, a download link appears immediately.

4
Downloads the document

The download link is valid for 15 minutes once issued.

Malware scanning

Every uploaded file is scanned automatically before it can ever be downloaded, using Amazon GuardDuty Malware Protection. This happens in the background right after upload and normally finishes within well under a minute.

If the recipient verifies before the scan finishes: they'll see a "Scan in progress" message with a Check again button rather than an error. They don't need to re-enter the code; checking again simply re-checks the scan result. If a file ever comes back flagged, no download link is issued under any circumstance, and you are alerted directly.

Limits

LimitDetail
File size50MB maximum per document
Link validity1-30 days, set when you create the share
Verification code requestsUp to 5 per share. After that, the recipient is asked to contact you for a new share link
Download link expiry15 minutes once issued, after a successful verification
Cost: Sending a Secure Share link uses the same credit pool as a regular SMS (plus one additional credit if you also send by email). There is no extra charge for malware scanning.

9 of 9

Troubleshooting

Solutions to common issues. If your issue is not listed, contact support.

SMS not delivered

Possible causeWhat to check
No credits remainingCheck your balance on the Overview page and top up via Billing.
Invalid phone number formatNumbers must be in international format: +26876123456. No spaces or dashes.
Recipient's phone is offA Pending status in Reports means the carrier is still attempting delivery.
Message blocked by content policyCertain words are blocked to comply with carrier policies. If you receive a 403 error, review your message content.

OTP code not received

Possible causeWhat to check
No creditsOTP sends use the same credit pool as SMS. Check your balance.
Invalid phone numberConfirm the number is in international format and is reachable.
Code expiredOTP codes expire after 5 minutes. Request a new one.

Unable to recharge

Possible causeWhat to check
MoMo approval not completedCheck your phone for the MoMo prompt. It expires after a few minutes.
Insufficient MoMo balanceEnsure your MoMo wallet has enough funds before initiating payment.
Incorrect number formatEnter 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-Key header, 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.
Still stuck? Contact support at sales@lunyazi.com or WhatsApp. Include your Customer ID (found on the Account page) and a description of the issue.