Everything You Need to Build & Ship
Comprehensive guides, complete API reference for all 6 channels, code examples in 8 languages, webhook documentation, and best practices — all in one place.
Introduction
Welcome to the QuickComm API documentation. QuickComm is an enterprise-grade Communication Platform as a Service (CPaaS) that provides a unified REST API to send and receive messages across 6 communication channels: SMS, WhatsApp, Email, Voice, OTP, and RCS.
Looking for the Complete API Reference?
For detailed endpoint documentation with request/response examples from our actual Postman collection, visit our dedicated API Reference page. It includes all SMS, Voice, OTP, and Account Management endpoints with real code examples.
View API ReferenceAll APIs follow RESTful conventions, accept JSON request bodies, return JSON responses, and use standard HTTP status codes. Authentication is via API key and secret.
Sub-Second Delivery
Average 340ms latency across all channels
Enterprise Security
SOC 2 Type II, ISO 27001, GDPR compliant
Global Reach
190+ countries, DLT & TRAI compliant
Quick Start Guide
Get your first message sent in under 5 minutes. Follow these three steps:
Get Your API Key
Sign up at quickcomm.com/signup, verify your email, and navigate to Dashboard → API Keys. You'll get a sandbox key instantly.
export QUICKCOMM_API_KEY="qc_test_sk_a1b2c3d4e5f6g7h8"Install the SDK
Install our SDK in your preferred language. We provide official SDKs for 8 languages.
npm install @quickcomm/node-sdkSend Your First Message
Initialize the client and send a test SMS in sandbox mode. No real messages are sent — responses are simulated.
const QuickComm = require('@quickcomm/node-sdk');
const client = new QuickComm({
apiKey: process.env.QUICKCOMM_API_KEY,
region: 'in' // 'in', 'us', 'eu', 'sg'
});
const response = await client.sms.send({
to: '+919876543210',
message: 'Hello from QuickComm! 🎉',
senderId: 'QCOMM'
});
console.log(response);
// { messageId: 'msg_...', status: 'queued', credits: 0.25 }qc_test_ operate in sandbox. Messages are simulated with realistic responses, delivery receipts, and webhook events. Switch to production by using a qc_live_ key — zero code changes.Authentication
QuickComm uses Bearer token authentication. Include your API key in the Authorization header of every request.
curl -X POST https://api.quickcomm.com/v1/sms/send \
-H "Authorization: Bearer qc_live_sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "to": "+91...", "message": "Hello!" }'API Key Types
qc_test_sk_...For development & testing. No real messages sent.
qc_live_sk_...For production. Real messages delivered. Keep this secret.
qc_live_pk_...Safe for client-side. Limited to read-only operations.
sk_) in client-side code, public repositories, or mobile apps. Use environment variables or a secrets manager. Rotate keys immediately if compromised via Dashboard → API Keys → Rotate.Base URL & Environments
QuickComm API is available in multiple regions for optimal latency. All endpoints are versioned.
| Region | Base URL | Location |
|---|---|---|
| India (Default) | https://api.quickcomm.com | Mumbai, IN |
| United States | https://us.api.quickcomm.com | Virginia, US |
| Europe | https://eu.api.quickcomm.com | Frankfurt, DE |
| Singapore | https://sg.api.quickcomm.com | Singapore, SG |
API version is included in the URL path: /v1/. We follow semantic versioning and will never introduce breaking changes within a major version.
SDKs & Libraries
Official SDKs with built-in retry logic, type safety, and automatic rate limit handling. All SDKs are open source.
API Reference
Complete endpoint documentation for all 6 communication channels.
SMS API
Send transactional and promotional SMS globally with DLT compliance, delivery tracking, and sub-second delivery to 190+ countries.
Endpoints
/v1/sms/send/v1/sms/bulk/v1/sms/{message_id}/v1/sms/reportsRequest Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Required | Recipient phone number in E.164 format (e.g., +919876543210) |
| message | string | Required | SMS text content (max 1600 chars for concatenated SMS) |
| sender_id | string | Required | Approved sender ID / header (6 chars for India) |
| template_id | string | Optional | DLT registered template ID (required for India) |
| callback_url | string | Optional | Webhook URL for delivery status callbacks |
| scheduled_at | ISO 8601 | Optional | Schedule message for future delivery |
| metadata | object | Optional | Custom key-value pairs returned in callbacks |
Example
{
"to": "+919876543210",
"message": "Your OTP is 834521. Valid for 5 mins.",
"sender_id": "QCOMM",
"template_id": "TPL_OTP_001",
"callback_url": "https://your-app.com/webhook/sms",
"metadata": { "user_id": "usr_123" }
}{
"success": true,
"data": {
"message_id": "msg_sms_a1b2c3d4e5f6",
"channel": "sms",
"status": "queued",
"to": "+919876543210",
"segments": 1,
"credits_used": 0.25,
"created_at": "2026-03-06T14:32:18.456Z"
}
}WhatsApp API
Send rich media messages, interactive buttons, list messages, and template messages via WhatsApp Business API with read receipts.
Endpoints
/v1/whatsapp/send/v1/whatsapp/template/v1/whatsapp/media/v1/whatsapp/{message_id}Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Required | Recipient WhatsApp number in E.164 format |
| type | string | Required | Message type: text, template, image, document, video, audio, location, interactive |
| content | object | Required | Message content (varies by type) |
| template | object | Optional | Template config (name, language, components) — required for type: template |
| callback_url | string | Optional | Webhook URL for delivery/read status |
| reply_to | string | Optional | Message ID to reply to (contextual replies) |
Example
{
"to": "+919876543210",
"type": "template",
"template": {
"name": "order_confirmation",
"language": "en",
"components": [{
"type": "body",
"parameters": [
{ "type": "text", "text": "QC-45821" },
{ "type": "text", "text": "₹2,499" }
]
}]
},
"callback_url": "https://your-app.com/webhook/wa"
}{
"success": true,
"data": {
"message_id": "msg_wa_x7y8z9a0b1c2",
"channel": "whatsapp",
"status": "sent",
"to": "+919876543210",
"type": "template",
"credits_used": 0.50,
"created_at": "2026-03-06T14:32:20.123Z"
}
}Email API
Enterprise-grade transactional email with DKIM/SPF authentication, template engine, attachments, and inbox placement analytics.
Endpoints
/v1/email/send/v1/email/template/v1/email/{email_id}/v1/email/analyticsRequest Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | object | Required | Sender info: { email, name } |
| to | array | Required | Array of recipients: [{ email, name }] |
| subject | string | Required | Email subject line |
| html | string | Optional | HTML body content |
| text | string | Optional | Plain text fallback body |
| template_id | string | Optional | Pre-defined email template ID |
| attachments | array | Optional | File attachments (base64 or URL) |
| track_opens | boolean | Optional | Enable open tracking (default: true) |
| track_clicks | boolean | Optional | Enable click tracking (default: true) |
Example
{
"from": { "email": "noreply@yourapp.com", "name": "YourApp" },
"to": [{ "email": "user@example.com", "name": "John" }],
"subject": "Your invoice #INV-2026-001",
"template_id": "tpl_invoice",
"variables": { "amount": "₹12,500", "due_date": "Mar 15" },
"track_opens": true,
"track_clicks": true
}{
"success": true,
"data": {
"email_id": "eml_p4q5r6s7t8u9",
"channel": "email",
"status": "sent",
"to": ["user@example.com"],
"credits_used": 0.10,
"created_at": "2026-03-06T14:33:01.789Z"
}
}Voice API
Programmable voice calls with IVR builder, call recording, transcription, and virtual phone numbers across 50+ countries.
Endpoints
/v1/voice/call/v1/voice/ivr/v1/voice/{call_id}/v1/voice/{call_id}/recordingRequest Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Required | Recipient phone number in E.164 format |
| from | string | Required | Your virtual phone number |
| type | string | Required | Call type: tts, audio, ivr |
| content | object | Required | TTS text, audio URL, or IVR flow ID |
| record | boolean | Optional | Enable call recording (default: false) |
| max_duration | integer | Optional | Max call duration in seconds |
| dtmf_callback | string | Optional | Webhook URL for DTMF input capture |
Example
{
"to": "+919876543210",
"from": "+911800XXXXXX",
"type": "tts",
"content": {
"text": "Hello! Your OTP is 8 3 4 5 2 1.",
"language": "en-IN",
"voice": "female",
"repeat": 2
},
"record": false,
"max_duration": 60
}{
"success": true,
"data": {
"call_id": "call_m3n4o5p6q7r8",
"channel": "voice",
"status": "initiated",
"to": "+919876543210",
"duration_limit": 60,
"credits_used": 1.00,
"created_at": "2026-03-06T14:34:10.000Z"
}
}OTP API
Multi-channel OTP with intelligent fallback (SMS → WhatsApp → Voice), auto-verification, and built-in fraud detection.
Endpoints
/v1/otp/send/v1/otp/verify/v1/otp/resend/v1/otp/{otp_id}/statusRequest Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Required | Recipient phone number or email |
| channel | string | Optional | Preferred channel: sms, whatsapp, voice, email (default: sms) |
| fallback | array | Optional | Fallback channels in priority order |
| length | integer | Optional | OTP length: 4-8 digits (default: 6) |
| expiry | integer | Optional | OTP validity in seconds (default: 300) |
| template_id | string | Optional | Custom OTP message template |
Example
{
"to": "+919876543210",
"channel": "sms",
"fallback": ["whatsapp", "voice"],
"length": 6,
"expiry": 300,
"template_id": "TPL_OTP_LOGIN"
}{
"success": true,
"data": {
"otp_id": "otp_j1k2l3m4n5o6",
"channel_used": "sms",
"status": "sent",
"to": "+919876543210",
"expires_at": "2026-03-06T14:39:18.456Z",
"created_at": "2026-03-06T14:34:18.456Z"
}
}RCS API
Next-gen rich messaging with carousels, suggested actions, rich cards, and branded sender — directly in the native SMS inbox.
Endpoints
/v1/rcs/send/v1/rcs/carousel/v1/rcs/card/v1/rcs/{message_id}Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string | Required | Recipient phone number in E.164 format |
| type | string | Required | Message type: text, card, carousel, file |
| content | object | Required | Message content (varies by type) |
| suggestions | array | Optional | Quick reply buttons or suggested actions |
| fallback_sms | object | Optional | SMS fallback if RCS unavailable |
| agent_id | string | Optional | Verified RCS agent/brand ID |
Example
{
"to": "+919876543210",
"type": "card",
"content": {
"title": "Order Shipped! 🚀",
"description": "Your order #QC-45821 is on its way.",
"media": { "url": "https://cdn.example.com/tracking.png" }
},
"suggestions": [
{ "type": "url", "text": "Track Order", "url": "https://..." },
{ "type": "reply", "text": "Contact Support" }
],
"fallback_sms": {
"message": "Your order #QC-45821 has shipped! Track: https://..."
}
}{
"success": true,
"data": {
"message_id": "msg_rcs_w1x2y3z4a5b6",
"channel": "rcs",
"status": "sent",
"to": "+919876543210",
"type": "card",
"fallback_triggered": false,
"credits_used": 0.75,
"created_at": "2026-03-06T14:35:02.111Z"
}
}Webhooks
QuickComm sends real-time event notifications to your webhook URL. Configure webhooks in Dashboard → Webhooks or per-request via the callback_url parameter.
Event Types
| Event | Description | Channels |
|---|---|---|
| message.queued | Message has been queued for delivery | All |
| message.sent | Message sent to carrier/provider | All |
| message.delivered | Confirmed delivered to recipient | All |
| message.read | Recipient opened/read the message | WhatsApp, RCS, Email |
| message.failed | Delivery failed with error details | All |
| message.clicked | Link or button clicked in message | WhatsApp, RCS, Email |
| otp.sent | OTP dispatched to recipient | OTP |
| otp.verified | OTP successfully verified | OTP |
| otp.expired | OTP expired without verification | OTP |
| otp.failed | OTP delivery failed, fallback triggered | OTP |
| call.initiated | Voice call initiated | Voice |
| call.answered | Call answered by recipient | Voice |
| call.completed | Call ended with duration info | Voice |
| call.dtmf | DTMF input received during call | Voice |
Webhook Payload
{
"event": "message.delivered",
"timestamp": "2026-03-06T14:32:18.456Z",
"data": {
"message_id": "msg_a1b2c3d4e5f6",
"channel": "sms",
"to": "+919876543210",
"status": "delivered",
"delivered_at": "2026-03-06T14:32:18.123Z",
"latency_ms": 847,
"metadata": {
"user_id": "usr_123",
"campaign_id": "camp_456"
}
},
"signature": "sha256=a1b2c3d4e5..."
}Signature Verification
Every webhook includes an X-QuickComm-Signature header. Verify it server-side:
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}Error Handling
QuickComm uses standard HTTP status codes. All error responses include a machine-readable error_code and human-readable message.
| Code | Status | Description |
|---|---|---|
| 200 | OK | Request successful |
| 201 | Created | Resource created successfully |
| 202 | Accepted | Request accepted, processing asynchronously |
| 400 | Bad Request | Invalid parameters — check request body |
| 401 | Unauthorized | Missing or invalid API key |
| 403 | Forbidden | Insufficient permissions for this resource |
| 404 | Not Found | Resource does not exist |
| 409 | Conflict | Duplicate request detected (idempotency) |
| 422 | Unprocessable | Valid JSON but semantic validation failed |
| 429 | Rate Limited | Too many requests — see Retry-After header |
| 500 | Server Error | Internal error — retry or contact support |
| 502 | Bad Gateway | Upstream provider error |
| 503 | Unavailable | Service temporarily unavailable |
Error Response Format
{
"success": false,
"error": {
"code": "INVALID_PHONE_NUMBER",
"message": "The 'to' field must be a valid E.164 phone number.",
"param": "to",
"doc_url": "https://docs.quickcomm.com/errors/INVALID_PHONE_NUMBER"
},
"request_id": "req_a1b2c3d4"
}Rate Limits
Rate limits are applied per API key. Limits vary by plan. Rate limit headers are included in every response.
| Plan | Req/sec | Daily | Burst | Monthly |
|---|---|---|---|---|
| Free | 10 | 1,000 | 20 | 10,000 |
| Starter | 100 | 50,000 | 200 | 500,000 |
| Business | 1,000 | 500,000 | 2,000 | 5M |
| Enterprise | 10,000+ | Unlimited | Custom | Unlimited |
Rate Limit Headers
X-RateLimit-LimitMaximum requests per second for your planX-RateLimit-RemainingRequests remaining in current windowX-RateLimit-ResetUnix timestamp when the limit resetsRetry-AfterSeconds to wait before retrying (on 429)Pagination
List endpoints return paginated results using cursor-based pagination for consistent performance at any scale.
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | Optional | Number of items per page (default: 20, max: 100) |
| cursor | string | Optional | Cursor from previous response for next page |
| sort | string | Optional | Sort order: created_at.desc (default) or created_at.asc |
{
"success": true,
"data": [ ... ],
"pagination": {
"has_more": true,
"next_cursor": "cur_x7y8z9a0b1c2",
"total_count": 1842
}
}Idempotency
Prevent duplicate operations by including an Idempotency-Key header. If a request with the same key is received within 24 hours, the original response is returned.
curl -X POST https://api.quickcomm.com/v1/sms/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: order_12345_otp_attempt_1" \
-H "Content-Type: application/json" \
-d '{ "to": "+91...", "message": "OTP: 123456" }'order_id + action + attempt to ensure retries are safe. Our SDKs generate idempotency keys automatically for critical operations.Batch Messaging
Send up to 100,000 messages in a single API call with individual content per recipient. Batches are processed asynchronously with per-message tracking.
POST /v1/batch/send
{
"channel": "sms",
"sender_id": "QCOMM",
"messages": [
{
"to": "+919876543210",
"message": "Hi Rahul, your order #QC-001 has shipped!",
"metadata": { "order_id": "QC-001" }
},
{
"to": "+919876543211",
"message": "Hi Priya, your order #QC-002 is ready!",
"metadata": { "order_id": "QC-002" }
}
],
"callback_url": "https://your-app.com/webhook/batch"
}{
"success": true,
"data": {
"batch_id": "batch_m1n2o3p4q5r6",
"total_messages": 2,
"status": "processing",
"estimated_completion": "2026-03-06T14:36:00.000Z"
}
}Channel Fallback
Maximize delivery by specifying a cascade of channels. QuickComm automatically falls back to the next channel if the primary fails within the timeout.
POST /v1/smart/send
{
"to": "+919876543210",
"message": "Your OTP is 834521",
"channels": ["whatsapp", "sms", "voice"],
"fallback_timeout": 30,
"callback_url": "https://your-app.com/webhook/smart"
}Fallback Flow
Webhook events are sent for each attempt, so you can track exactly what happened.
Message Templates
Pre-approve message templates for WhatsApp Business, DLT-registered SMS templates for India, and dynamic email templates with variable substitution.
// Create a template
POST /v1/templates
{
"channel": "whatsapp",
"name": "order_update",
"language": "en",
"category": "UTILITY",
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Order Update"
},
{
"type": "BODY",
"text": "Hi {{1}}, your order {{2}} has been {{3}}.",
"example": ["Rahul", "#QC-45821", "shipped"]
},
{
"type": "FOOTER",
"text": "QuickComm - Enterprise CPaaS"
}
]
}Security Best Practices
Use Environment Variables
Never hardcode API keys. Use secrets managers or environment variables.
Verify Webhook Signatures
Always validate the HMAC-SHA256 signature before processing webhook events.
IP Whitelisting
Restrict API access to known IP ranges. Configure in Dashboard → Security.
Rotate Keys Regularly
Rotate production keys every 90 days. Use key versioning to avoid downtime.
Enable 2FA on Dashboard
Protect your QuickComm dashboard with two-factor authentication.
Use Publishable Keys Client-Side
Never expose secret keys in browser/mobile code. Use pk_ keys for read-only ops.
Monitor API Usage
Set up alerts for unusual traffic patterns. Enable audit logs for compliance.
API Changelog
Track all API changes, new features, and bug fixes. Subscribe to changelog notifications in Dashboard → Settings.
RCS Carousel API
New endpoint for sending interactive carousels via RCS with up to 10 cards.
WhatsApp Interactive Lists
Support for list messages with up to 10 sections and 30 rows per section.
Email Template Variables
Dynamic variable substitution in email templates with conditional blocks.
Voice TTS Latency Fix
Reduced text-to-speech initiation latency by 40% for Indian English voices.
Batch Messaging API
New /v1/batch/send endpoint supporting up to 100K messages per call.
OTP Auto-Verify (Android)
Hash-based SMS auto-verification for Android apps without user input.
Ready to Start Building?
Get your free API key and send your first message in minutes. Full sandbox environment included — no credit card required.