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.

1

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.

curl
# 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"
  }'
2

Create an API key

Go to API keys → New key and copy the lap_live_… key - it is shown exactly once.

3

Send your first message

curl
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:

response
{
  "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.

4

Check a message's status

curl
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.

5

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:

C#
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"));
TypeScript
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);