Skip to content

Send an SMS

Send SMS messages globally with custom sender IDs, delivery tracking, scheduled sending, and webhook callbacks.

What you are building

A working SMS integration that sends messages to one or many recipients, with real-time delivery status and optional callback notifications.

When to use this approach

  • Notifications, alerts, or marketing messages
  • Bulk messaging to multiple recipients
  • Scheduled messages
  • Two-way SMS with keyword routing

If you need one-time password verification specifically, use Verify instead — it handles code generation, expiration, and rate limiting for you.

What you need

  • A WAYSCloud account
  • A sender profile (created in the dashboard or via API)

Step 1 — Create a sender profile

Before sending, you need a sender profile that defines your sender ID.

Dashboard

  1. Open ServicesCommunicationSMS in the dashboard
  2. Go to Sender Profiles
  3. Click Create
  4. Enter a name and sender ID (alphanumeric, max 11 characters)

API

bash
curl -X POST https://api.wayscloud.services/v1/dashboard/sms/sender-profiles \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "notifications",
    "sender_id": "WAYSCloud",
    "allow_reply": false,
    "is_default": true
  }'

Step 2 — Send a message

Single recipient

bash
curl -X POST https://api.wayscloud.services/v1/dashboard/sms/send \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["+4799999999"],
    "message": "Your order #12345 has been shipped."
  }'

Multiple recipients

bash
curl -X POST https://api.wayscloud.services/v1/dashboard/sms/send \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["+4799999999", "+4798888888", "+4797777777"],
    "message": "Server maintenance scheduled for tonight at 22:00 CET.",
    "customer_ref": "maintenance-2025-12"
  }'

Scheduled message

bash
curl -X POST https://api.wayscloud.services/v1/dashboard/sms/send \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["+4799999999"],
    "message": "Reminder: your appointment is tomorrow at 10:00.",
    "scheduled_at": "2025-12-14T18:00:00",
    "timezone": "Europe/Oslo"
  }'

With delivery callback

bash
curl -X POST https://api.wayscloud.services/v1/dashboard/sms/send \
  -H "Authorization: Bearer $JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["+4799999999"],
    "message": "Your code is 123456",
    "callback_url": "https://your-server.com/webhooks/sms"
  }'

Response:

json
{
  "sms_message_id": "550e8400-e29b-41d4-a716-446655440000",
  "to": ["+4799999999"],
  "status": "QUEUED",
  "units_estimate": 1,
  "customer_ref": "maintenance-2025-12"
}

Step 3 — Track delivery

Check message status:

bash
curl https://api.wayscloud.services/v1/dashboard/sms/messages/550e8400-... \
  -H "Authorization: Bearer $JWT_TOKEN"

Message statuses: QUEUEDSENDINGSENTDELIVERED (or FAILED).

Monitor overall usage:

bash
curl https://api.wayscloud.services/v1/dashboard/sms/overview \
  -H "Authorization: Bearer $JWT_TOKEN"

Step 4 — Next steps

  • Keyword routing — Set up auto-responses for inbound messages. See SMS Keywords API.
  • Contact lists — Manage recipient groups. See Contacts API.
  • Add verification — Use Verify for OTP flows. See Send OTP.
  • Monitor costs — View per-message pricing at GET /v1/dashboard/sms/pricing/messages

API reference

WAYSCloud AS