Quickstart
From zero to your first real SMS in under 10 minutes. New accounts come with free welcome credit, so your first sends cost you nothing.
Create an account
Sign up in the dashboard (or via the API). You immediately get a production project, a ZAR wallet, and free welcome credit for your first messages.
# Or just use the dashboard: /signup
curl -X POST https://api.lapsms.co.za/dashboard/signup \
-H "Content-Type: application/json" \
-d '{
"email": "you@company.co.za",
"password": "a-strong-password",
"organizationName": "My Company"
}'Create an API key
Go to API keys → New key and copy the lap_live_… key - it is shown exactly once.
Send your first message
curl -X POST https://api.lapsms.co.za/v1/messages \
-H "Authorization: Bearer lap_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+27821234567",
"body": "Hello from LapSMS!"
}'The response comes back immediately:
{
"id": "msg_01j9v7...",
"status": "queued",
"to": "+27821234567",
"segments": 1,
"encoding": "gsm7",
"charge": { "amount": 0.49, "currency": "ZAR" }
}This is a real SMS: it moves queued → submitted → delivered and lands on the phone within seconds. The charge comes off your wallet balance - your welcome credit covers the first few.
Check a message's status
curl https://api.lapsms.co.za/v1/messages/msg_01j9v7... \ -H "Authorization: Bearer lap_live_YOUR_KEY"
You can also watch every message in the dashboard's message log, and get pushed status updates via webhooks.
Top up and keep sending
When the welcome credit runs out, top up your wallet from the dashboard - the balance page always shows roughly how many SMSes you have left at the current rate.
Client libraries
Any HTTP client works. Here's the same call in C# and TypeScript:
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new("Bearer", "lap_live_YOUR_KEY");
var response = await http.PostAsJsonAsync(
"https://api.lapsms.co.za/v1/messages",
new { to = "+27821234567", body = "Hello from LapSMS!" });
var message = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(message.GetProperty("id"));const res = await fetch("https://api.lapsms.co.za/v1/messages", {
method: "POST",
headers: {
Authorization: "Bearer lap_live_YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
to: "+27821234567",
body: "Hello from LapSMS!",
}),
});
const message = await res.json();
console.log(message.id, message.status);