BulkSMSRates

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

MethodEndpointDescription
POST/v1/messagesSend a single or batch SMS
GET/v1/messages/{id}Get message status & DLR
GET/v1/messagesList messages with filters
DELETE/v1/messages/{id}Cancel a scheduled message
GET/v1/balanceCheck account balance
POST/v1/webhooksCreate webhook endpoint
GET/v1/webhooksList configured webhooks
DELETE/v1/webhooks/{id}Delete a webhook
POST/v1/templatesCreate a message template
GET/v1/templatesList 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
PlanRate limitBatch size
Free trial10 req/s100 messages
Pay-as-you-go100 req/s10,000 messages
Enterprise1,000 req/s100,000 messages

When rate limited, you'll receive a 429 response with a Retry-After header. Use exponential backoff for best results.

Error Codes

CodeMeaningAction
400Bad request — invalid parametersCheck request body and parameters
401Unauthorized — invalid or missing API keyVerify your API key
402Insufficient balanceTop up your account balance
404Resource not foundCheck the endpoint URL or message ID
422Validation error (e.g. invalid phone number)Fix the validation errors returned
429Rate limitedWait and retry with exponential backoff
500Server errorRetry — contact support if persistent

Official SDKs

Python

pip install bulksmsrates

Node.js

npm install bulksmsrates

PHP

composer require bulksmsrates/sdk

Ruby

gem install bulksmsrates

Frequently Asked Questions