Quickstart

Send your first SMS in under five minutes. No card, no sales call: a test key works instantly against the sandbox.

1. Get a key

Create a free account at the console. A sandbox tenant is provisioned automatically with a test key (ssms_sk_test_...) and a sandbox number. The key is shown once, so copy it. The console also asks you to verify your cell once. Test keys deliver to that number for real, so your first send makes your phone buzz; every other destination is simulated. If you just signed up in this browser, your key and phone are already in the snippets below.

2. Send a message

curl -X POST https://api.joinsimplesms.com/v1/messages \
  -H "Authorization: Bearer ssms_sk_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+15005550100",
    "to": "+15005550006",
    "body": "Hello from SimpleSMS"
  }'

3. Read the response

json
{
  "id": "msg_a1B2c3D4e5F6g7H8",
  "object": "message",
  "to": "+15005550006",
  "from": "+15005550100",
  "body": "Hello from SimpleSMS",
  "direction": "outbound",
  "status": "delivered",
  "test": true,
  "created_at": "2026-08-06T16:20:00.000Z"
}

Fetch it back anytime with GET /v1/messages/{id}, and watch the delivery lifecycle in GET /v1/events (message.sent, then message.delivered). The message's timeline shows each step with its timestamp.

4. Simulate a reply

bash
curl -X POST https://api.joinsimplesms.com/v1/test/inbound \
  -H "Authorization: Bearer ssms_sk_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+15005550100",
    "from": "+14155550132",
    "body": "Hey, got your message!"
  }'

The inbound message lands in GET /v1/messages and emits a message.received event, exactly what a real inbound SMS will do in live mode.

5. Go live

When you're ready to send real SMS from real numbers, request live access from the console: one sentence about what you're building, and we usually flip the switch same day. Live access is free during early access.