SMS API
A simple, powerful REST API for sending SMS at scale. Integrate in minutes with your favourite language.
Quick Start
Send your first SMS in under 5 minutes. Get an API key from the dashboard and make a request:
curl -X POST https://api.bulksmsrates.com/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"to": "+447700900000", "body": "Hello from BulkSMSRates!"}'Simple REST API
JSON in, JSON out. Standard HTTP methods with clear error codes. No XML, no SOAP, no complexity.
Webhooks
Receive delivery reports and inbound messages via configurable webhooks. Real-time or batched — your choice.
Batch sending
Send up to 10,000 messages in a single API call. Each message can have unique content and merge fields.
Unicode support
Full Unicode support for non-Latin characters and emoji. Automatic encoding detection and segment calculation.
Scheduled sending
Schedule messages for future delivery with the 'send_at' parameter. Cancel scheduled messages before they're sent.
Custom sender IDs
Send from your brand name (up to 11 alphanumeric characters) or a dedicated number. Per-country rules apply.
Message templates
Create reusable templates with merge fields like {{name}} and {{code}}. Store and manage templates via API.
Inbound SMS
Receive replies and inbound messages via webhook. Automatic opt-out handling for STOP keywords.
API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /v1/messages | Send a single or batch SMS |
| GET | /v1/messages/{id} | Get message status & DLR |
| GET | /v1/messages | List messages with filters |
| DELETE | /v1/messages/{id} | Cancel a scheduled message |
| GET | /v1/balance | Check account balance |
| POST | /v1/webhooks | Create webhook endpoint |
| GET | /v1/webhooks | List configured webhooks |
| DELETE | /v1/webhooks/{id} | Delete a webhook |
| POST | /v1/templates | Create a message template |
| GET | /v1/templates | List templates |
| GET | /v1/rates/{country} | Get per-network rates |
Rate Limiting
All API endpoints are rate-limited to ensure fair usage and platform stability. Rate limit info is included in every response header.
HTTP/1.1 200 OK X-RateLimit-Limit: 100 X-RateLimit-Remaining: 87 X-RateLimit-Reset: 1706184000
| Plan | Rate limit | Batch size |
|---|---|---|
| Free trial | 10 req/s | 100 messages |
| Pay-as-you-go | 100 req/s | 10,000 messages |
| Enterprise | 1,000 req/s | 100,000 messages |
When rate limited, you'll receive a 429 response with a Retry-After header. Use exponential backoff for best results.
Error Codes
| Code | Meaning | Action |
|---|---|---|
| 400 | Bad request — invalid parameters | Check request body and parameters |
| 401 | Unauthorized — invalid or missing API key | Verify your API key |
| 402 | Insufficient balance | Top up your account balance |
| 404 | Resource not found | Check the endpoint URL or message ID |
| 422 | Validation error (e.g. invalid phone number) | Fix the validation errors returned |
| 429 | Rate limited | Wait and retry with exponential backoff |
| 500 | Server error | Retry — contact support if persistent |
Official SDKs
Python
pip install bulksmsratesNode.js
npm install bulksmsratesPHP
composer require bulksmsrates/sdkRuby
gem install bulksmsrates