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
- Open Services → Communication → SMS in the dashboard
- Go to Sender Profiles
- Click Create
- 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: QUEUED → SENDING → SENT → DELIVERED (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
Related services
- SMS — full service documentation
- Verify (OTP/2FA) — purpose-built verification codes
- IoT Platform — SMS alerts from devices
Related guides
- Authentication — API key setup
API reference
- SMS API — all SMS endpoints
- SMS Keywords API — keyword routing