Developers
API Documentation
Everything you need to send, verify, and track messages across SMS, WhatsApp, and Voice.
Authentication
Every request is authenticated with an API key sent as a bearer token in the
Authorization
header. Generate and manage keys from your dashboard's API Keys section.
curl https://api.tasdeeqly.com/v1/otp/send \
-H "Authorization: Bearer YOUR_API_KEY" Send SMS
Send a transactional or promotional SMS to a single recipient.
POST /v1/sms/send
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"recipient": "+92300XXXXXXX",
"message": "Your order #1042 has shipped.",
"sender_id": "your_business"
} {
"id": "sms_9f1c2e",
"status": "queued",
"channel": "sms",
"recipient": "+92300XXXXXXX",
"created_at": "2026-08-18T10:15:00Z"
} Send OTP
Generates and delivers a one-time code. Configure fallback
channels to automatically retry through WhatsApp or Voice if the primary channel
fails to deliver.
POST /v1/otp/send
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"channel": "sms",
"fallback": ["whatsapp", "voice"],
"recipient": "+92300XXXXXXX",
"template": "order_verification",
"expires_in": 300
} {
"id": "otp_7b21a4",
"status": "sent",
"channel": "sms",
"expires_at": "2026-08-18T10:20:00Z"
} Verify OTP
Validate the code entered by the user against the OTP request ID.
POST /v1/otp/verify
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"id": "otp_7b21a4",
"code": "482913"
} {
"id": "otp_7b21a4",
"status": "verified",
"verified_at": "2026-08-18T10:16:42Z"
} Send WhatsApp
Send a pre-approved WhatsApp template message.
POST /v1/whatsapp/send
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"recipient": "+92300XXXXXXX",
"template": "order_confirmation",
"params": { "order_id": "1042" }
} Send Voice
Trigger an automated voice call with configurable retry behavior.
POST /v1/voice/send
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"recipient": "+92300XXXXXXX",
"template": "otp_voice_prompt",
"params": { "code": "482913" },
"retry": { "attempts": 2, "interval_seconds": 30 }
} Webhooks
Configure a webhook URL in your dashboard to receive real-time events for message and verification status changes. Webhook payloads are signed so you can verify they originated from Tasdeeqly.
{
"event": "message.delivered",
"id": "sms_9f1c2e",
"channel": "sms",
"recipient": "+92300XXXXXXX",
"timestamp": "2026-08-18T10:15:04Z"
} Delivery Reports
Every message returns a status you can poll or receive via webhook:
queued,
sent,
delivered,
or failed.
Error Handling
Errors return a consistent object with a machine-readable code and a request ID for support.
{
"error": {
"code": "invalid_recipient",
"message": "The recipient number is not a valid E.164 phone number.",
"request_id": "req_3f9a1c"
}
} Rate Limits
Requests are rate-limited per API key. Current limit and remaining quota are returned on every response.
HTTP/1.1 200 OK
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 582
X-RateLimit-Reset: 1755511200 Idempotency
Pass an Idempotency-Key
header on send requests to safely retry without risk of sending a message twice.
POST /v1/sms/send
Idempotency-Key: 3f9a1c-order-1042-shipped
Authorization: Bearer YOUR_API_KEY
{ "recipient": "+92300XXXXXXX", "message": "Your order has shipped." } Request Logs
Query historical requests by channel, status, or date range for debugging and audits.
GET /v1/logs?channel=sms&status=failed&limit=20
Authorization: Bearer YOUR_API_KEY Ready to integrate?
Get API access and start sending your first verification today.