Skip to content
Tasdeeqly — Secure OTP Verification

Developers

API Documentation

Everything you need to send, verify, and track messages across SMS, WhatsApp, and Voice.

Note: Endpoints, request IDs, and payloads on this page are illustrative examples of the Tasdeeqly API shape. Confirm your live base URL, credentials, and exact field names in your dashboard once API access is provisioned.

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
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.

Request
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"
}
Response
{
  "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.

Request
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
}
Response
{
  "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.

Request
POST /v1/otp/verify
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY

{
  "id": "otp_7b21a4",
  "code": "482913"
}
Response
{
  "id": "otp_7b21a4",
  "status": "verified",
  "verified_at": "2026-08-18T10:16:42Z"
}

Send WhatsApp

Send a pre-approved WhatsApp template message.

Request
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.

Request
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.

Example payload — message.delivered
{
  "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 response
{
  "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.

Response headers
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.

Request
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.

Request
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.