Send SMS from your own code in one request
A REST API over the exact same sending, billing, and delivery-tracking engine the dashboard uses, so what you build against is what your team sees when they log in.
curl -X POST https://bulletsms.com/api/v1/sms/send \
-H "Authorization: Bearer $BULLETSMS_TOKEN" \
-H "Idempotency-Key: 3f29-a001-..." \
-H "Content-Type: application/json" \
-d '{
"to": ["9801234567"],
"message": "Your order has shipped.",
"senderId": "BulletSMS"
}'The parts every production integration ends up needing
Idempotency, rate limits, signed webhooks, and token scoping, available from your first request, not an enterprise add-on.
Idempotency-Key header
Retry a request with the same key and body as many times as you need; it's applied exactly once, so network retries never double-send.
Per-token rate limits
Every API token has its own rate limit, independent of the account's dashboard usage, so a runaway script can't starve the rest of your integration.
HMAC-signed webhooks
Subscribe to delivery events and verify each payload with an HMAC signature, no polling a status endpoint to know what happened.
Scoped tokens
Restrict a token to specific domains, IP addresses, and sender IDs, so a leaked credential can't be replayed from somewhere else or under a different identity.
A small, predictable surface
Everything you need to send, personalize, schedule, and track, nothing you don't.
/api/v1/sms/sendSend a message to one or more recipients.
/api/v1/sms/send-dynamicSend a different, personalized message to each recipient in one request.
/api/v1/sms/reportsQuery delivery status per message, filterable by date and operator.
/api/v1/campaignsCreate a scheduled or immediate campaign against a contact group.
/api/v1/campaigns/:idCancel a scheduled campaign before it fires.
Ready to integrate?
Create an account and generate an API token from your dashboard in minutes.