Authentication

All API requests require authentication using an API key. Include your key in the request header:

# Include in every request Authorization: Bearer YOUR_API_KEY # Get your API key from the dashboard # https://dashboard.sendpulse.io/settings/keys
Keep your API key secure. Never expose it in client-side code or public repositories.

Quick Start

Send your first SMS in under a minute. Here's an example using cURL:

curl -X POST https://api.sendpulse.io/v1/sms/send \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "to": "+1234567890", "from": "MyApp", "text": "Hello from SendPulse!" }'

Python Example

import requests response = requests.post( "https://api.sendpulse.io/v1/sms/send", headers={"Authorization": "Bearer YOUR_API_KEY"}, json={ "to": "+1234567890", "from": "MyApp", "text": "Hello from SendPulse!" } ) print(response.json())

Send SMS

POST /v1/sms/send

Send an SMS message to a single recipient or a list of recipients.

ParameterTypeRequiredDescription
tostringYesRecipient phone number in E.164 format
fromstringYesSender ID or phone number
textstringYesMessage content (max 1600 chars)
callback_urlstringNoURL for delivery status webhook
scheduled_atstringNoISO 8601 datetime for scheduled delivery

Message Status

GET /v1/sms/{message_id}

Retrieve the current status of a sent message.

// Response { "id": "msg_9f8a7b6c", "to": "+1234567890", "status": "delivered", "delivered_at": "2026-01-15T10:30:00Z", "segments": 1, "cost": 0.0075 }

Make a Call

POST /v1/voice/call

Initiate an outbound voice call with programmable actions.

ParameterTypeRequiredDescription
tostringYesRecipient phone number
fromstringYesYour voice-enabled number
actionsarrayYesCall flow actions (say, play, gather, record)
timeoutintegerNoRing timeout in seconds (default: 30)

Start Verification

POST /v1/verify/start

Send a one-time verification code to a user.

ParameterTypeRequiredDescription
tostringYesPhone number to verify
channelstringNoDelivery channel: sms, voice, whatsapp (default: sms)
code_lengthintegerNoOTP length: 4-8 digits (default: 6)
expiryintegerNoCode expiry in seconds (default: 300)

Check Verification Code

POST /v1/verify/check
curl -X POST https://api.sendpulse.io/v1/verify/check \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "request_id": "vrf_a1b2c3d4", "code": "482901" }' // Response { "valid": true, "request_id": "vrf_a1b2c3d4" }

Error Codes

CodeStatusDescription
401UnauthorizedInvalid or missing API key
400Bad RequestInvalid parameters
402Payment RequiredInsufficient balance
404Not FoundResource does not exist
429Rate LimitedToo many requests (wait and retry)
500Server ErrorInternal error (contact support)

Webhooks

Receive real-time notifications about message delivery, call events, and verification results by configuring webhook URLs.

// Delivery webhook payload POST your-callback-url { "event": "sms.delivered", "message_id": "msg_9f8a7b6c", "to": "+1234567890", "status": "delivered", "timestamp": "2026-01-15T10:30:00Z" }
Webhook requests include an X-Signature header for payload verification. Always validate signatures in production.