Complete guide to integrate SkySMS into your application
Getting Started: Create a free account to get your API key. You'll receive 10 free SMS credits.
Create Free Account →All API requests require authentication using an API key passed in the request header:
X-API-Key: your_api_key_here
Generate API keys from your dashboard after logging in.
/api/v1/sms/send
| Parameter | Type | Required | Description |
|---|---|---|---|
phone_number |
string | Yes | Recipient phone number (e.g., +639123456789) |
message |
string | Yes | SMS content (max 160 characters) |
use_subscription |
boolean | No | Use subscription instead of credits (default: false) |
use_subscription: true to charge from your subscription daily limit instead of credits. You can also set this per API key from your dashboard — no parameter needed when the toggle is on.
curl -X POST https://www.skysms.skyio.site/api/v1/sms/send \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+639123456789",
"message": "Hello from SkySMS!"
}'
{ "success": true, "message": "SMS queued successfully", "data": { "id": 123, "status": "pending" } }
{{otp}} placeholder in your message. The system auto-generates a 6-digit code.
/api/v1/otp/send
curl -X POST https://www.skysms.skyio.site/api/v1/otp/send \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"phone_number": "+639123456789",
"message": "Your code is {{otp}}",
"expire": 300
}'
/api/v1/otp/verify?otp=123456&phone=+639123456789
/api/v1/sms/send-bulk
| Parameter | Type | Required | Description |
|---|---|---|---|
recipients |
array | Yes | Array of objects with phone_number key |
message |
string | Yes | Message content for all recipients |
use_subscription |
boolean | No | Use subscription instead of credits (default: false) |
use_subscription: true to charge from your subscription daily limit instead of credits. You can also set this per API key from your dashboard — no parameter needed when the toggle is on.
curl -X POST https://www.skysms.skyio.site/api/v1/sms/send-bulk \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"recipients": [{"phone_number": "+639123456789"}, {"phone_number": "+639987654321"}],
"message": "Hello everyone!"
}'
Fetch your sent messages with optional filters. Use this to sync message status with your system.
/api/v1/sms/messages
| Parameter | Type | Description |
|---|---|---|
status |
string | Filter: pending, sent, failed, queued |
from |
date | Start date (YYYY-MM-DD) |
to |
date | End date (YYYY-MM-DD) |
per_page |
integer | Results per page (max 100) |
curl -X GET "https://www.skysms.skyio.site/api/v1/sms/messages?status=failed" \
-H "X-API-Key: your_api_key"
/api/v1/sms/messages/failed
/api/v1/sms/messages/resend
curl -X POST "https://www.skysms.skyio.site/api/v1/sms/messages/resend" \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{"unique_message_id": "msg_4a8b2c9d1e3f5a6b"}'
/api/v1/sms/messages/{'{id}'}/resend
/api/v1/sms/messages/bulk-resend
curl -X POST "https://www.skysms.skyio.site/api/v1/sms/messages/bulk-resend" \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{"ids": [123, 456, 789]}'
Violations result in credit penalties. Messages that violate our policy appear as "sent" but are NOT delivered to the recipient.
Rules are automatically enforced on /sms/send and /sms/send-bulk.
| Violation | Penalty | Description |
|---|---|---|
| URL / Links | 10 credits/msg | Any URLs, domains, IPs, shortened links (http, www, bit.ly, etc.) |
| Profanity | 50 credits/msg | Filipino (Tagalog, Bisaya) or English profanity, insults, bullying |
{"success":true,"status":"sent","warning":"Message contained a URL. A 10-credit penalty has been applied and the message was not delivered.","penalty_credits":10,"credits_remaining":90}
| Type | Requests | Period | Scope |
|---|---|---|---|
| Standard | 60 | per minute | Per API Key |
| Burst | 10 | per second | Per API Key |
Best Practices
429 Too Many Requests, check the Retry-After header.| Code | Message | Description |
|---|---|---|
| 400 | Bad Request | Invalid parameters |
| 401 | Unauthorized | Invalid API key |
| 402 | Payment Required | Insufficient credits |
| 403 | Forbidden | Access denied |
| 422 | Validation Error | Missing/invalid parameters |
| 429 | Too Many Requests | Rate limit exceeded (60/min) |
| 500 | Server Error | Internal error |