SMSKit Documentation
API documentation and guidance for existing gateway devices.
Phone archive setup
Consent, permissions and import limits.
Troubleshooting
Installation, permissions and gateway problems.
Quickstart
Pair a phone, send your first SMS.
Authentication
API keys and rotation.
API reference
Every endpoint.
Webhooks
Real-time events.
Two-way messaging
Receive and thread replies.
SMS archiving & export
Import history, pull the timeline, export NDJSON/CSV.
SDKs & samples
.NET SDK and 6-language snippets.
SMS throttling & pacing
Why phones throttle bulk SMS, and how to provision a gateway phone.
Errors & rate limits
Status codes and backoff.
Quickstart
For accounts with an installed gateway app.
1. Create an account and API key
Sign up, open API Clients in the dashboard, and create a client. Copy the
key (sk_live_…); it's shown once.
2. Pair a phone
Public app downloads are currently unavailable. If SMSKit is already installed, open Devices, then Pair New Device in the dashboard, use Register in the phone app to scan or enter the code, then tap Start service.
3. Send your first SMS
curl https://api.smskit.cloud/api/v1/sms/send \
-H "X-Api-Key: sk_live_your_key" \
-H "Content-Type: application/json" \
-d '{
"recipient": "+254712345678",
"message": "Hello from SMSKit"
}'You get back a job id:
{ "jobId": "job_7H2K9M4P1Q6R3T8V5W0X", "status": "Pending" }Poll the job status or subscribe to webhooks to
follow it to Delivered.
For one page from pairing to the delivery webhook, see the guide to sending SMS from your own number.
Authentication
Every API request is authenticated with an API client key in the X-Api-Key header.
X-Api-Key: sk_live_your_api_client_key_here...- • Keys are created on the dashboard API Clients page. The raw key is shown once.
- • Keys are stored as SHA-256 hashes; we can't recover a lost key, so rotate it instead.
- • A suspended API client rejects its keys with 401.
Two keys, zero-downtime rotation
Each API client has two independent key slots: Key 1 and Key 2. Either authenticates. To rotate without downtime, run on Key 1, rotate Key 2 and deploy it, then rotate Key 1. Rotating a key invalidates its old value at once, so deploy the new key before you rotate the other one. Requests that use the other key keep working.