QuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countriesQuickComm formerly known as NRTSMS|Same trusted platform, bold new identity|Now serving 200+ countries
Documentation & API Reference

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 Reference

All 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:

1

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.

Set environment variablebash
export QUICKCOMM_API_KEY="qc_test_sk_a1b2c3d4e5f6g7h8"
2

Install the SDK

Install our SDK in your preferred language. We provide official SDKs for 8 languages.

Install SDKbash
npm install @quickcomm/node-sdk
3

Send Your First Message

Initialize the client and send a test SMS in sandbox mode. No real messages are sent — responses are simulated.

send-first-message.jsjavascript
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 }
Sandbox Mode: All API keys prefixed with 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.

Authorization headerbash
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_...
Sandbox Secret Key

For development & testing. No real messages sent.

qc_live_sk_...
Production Secret Key

For production. Real messages delivered. Keep this secret.

qc_live_pk_...
Publishable Key

Safe for client-side. Limited to read-only operations.

Security: Never expose secret keys (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.

RegionBase URLLocation
India (Default)https://api.quickcomm.comMumbai, IN
United Stateshttps://us.api.quickcomm.comVirginia, US
Europehttps://eu.api.quickcomm.comFrankfurt, DE
Singaporehttps://sg.api.quickcomm.comSingapore, 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.

Node.js
npm install @quickcomm/node-sdk
🐍Python
pip install quickcomm
Java
implementation "com.quickcomm:sdk:2.4.0"
🐘PHP
composer require quickcomm/php-sdk
🔵Go
go get github.com/quickcomm/go-sdk
#️⃣C#
dotnet add package QuickComm.SDK
💎Ruby
gem install quickcomm
🇰Kotlin
implementation("com.quickcomm:kotlin-sdk:2.4.0")

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

POST/v1/sms/send
POST/v1/sms/bulk
GET/v1/sms/{message_id}
GET/v1/sms/reports

Request Parameters

ParameterTypeRequiredDescription
tostringRequiredRecipient phone number in E.164 format (e.g., +919876543210)
messagestringRequiredSMS text content (max 1600 chars for concatenated SMS)
sender_idstringRequiredApproved sender ID / header (6 chars for India)
template_idstringOptionalDLT registered template ID (required for India)
callback_urlstringOptionalWebhook URL for delivery status callbacks
scheduled_atISO 8601OptionalSchedule message for future delivery
metadataobjectOptionalCustom key-value pairs returned in callbacks

Example

Request Body
POST /v1/sms/sendjson
{
  "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" }
}
Response (200 OK)
Responsejson
{
  "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

POST/v1/whatsapp/send
POST/v1/whatsapp/template
POST/v1/whatsapp/media
GET/v1/whatsapp/{message_id}

Request Parameters

ParameterTypeRequiredDescription
tostringRequiredRecipient WhatsApp number in E.164 format
typestringRequiredMessage type: text, template, image, document, video, audio, location, interactive
contentobjectRequiredMessage content (varies by type)
templateobjectOptionalTemplate config (name, language, components) — required for type: template
callback_urlstringOptionalWebhook URL for delivery/read status
reply_tostringOptionalMessage ID to reply to (contextual replies)

Example

Request Body
POST /v1/whatsapp/sendjson
{
  "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"
}
Response (200 OK)
Responsejson
{
  "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

POST/v1/email/send
POST/v1/email/template
GET/v1/email/{email_id}
GET/v1/email/analytics

Request Parameters

ParameterTypeRequiredDescription
fromobjectRequiredSender info: { email, name }
toarrayRequiredArray of recipients: [{ email, name }]
subjectstringRequiredEmail subject line
htmlstringOptionalHTML body content
textstringOptionalPlain text fallback body
template_idstringOptionalPre-defined email template ID
attachmentsarrayOptionalFile attachments (base64 or URL)
track_opensbooleanOptionalEnable open tracking (default: true)
track_clicksbooleanOptionalEnable click tracking (default: true)

Example

Request Body
POST /v1/email/sendjson
{
  "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
}
Response (200 OK)
Responsejson
{
  "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

POST/v1/voice/call
POST/v1/voice/ivr
GET/v1/voice/{call_id}
GET/v1/voice/{call_id}/recording

Request Parameters

ParameterTypeRequiredDescription
tostringRequiredRecipient phone number in E.164 format
fromstringRequiredYour virtual phone number
typestringRequiredCall type: tts, audio, ivr
contentobjectRequiredTTS text, audio URL, or IVR flow ID
recordbooleanOptionalEnable call recording (default: false)
max_durationintegerOptionalMax call duration in seconds
dtmf_callbackstringOptionalWebhook URL for DTMF input capture

Example

Request Body
POST /v1/voice/calljson
{
  "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
}
Response (200 OK)
Responsejson
{
  "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

POST/v1/otp/send
POST/v1/otp/verify
POST/v1/otp/resend
GET/v1/otp/{otp_id}/status

Request Parameters

ParameterTypeRequiredDescription
tostringRequiredRecipient phone number or email
channelstringOptionalPreferred channel: sms, whatsapp, voice, email (default: sms)
fallbackarrayOptionalFallback channels in priority order
lengthintegerOptionalOTP length: 4-8 digits (default: 6)
expiryintegerOptionalOTP validity in seconds (default: 300)
template_idstringOptionalCustom OTP message template

Example

Request Body
POST /v1/otp/sendjson
{
  "to": "+919876543210",
  "channel": "sms",
  "fallback": ["whatsapp", "voice"],
  "length": 6,
  "expiry": 300,
  "template_id": "TPL_OTP_LOGIN"
}
Response (200 OK)
Responsejson
{
  "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

POST/v1/rcs/send
POST/v1/rcs/carousel
POST/v1/rcs/card
GET/v1/rcs/{message_id}

Request Parameters

ParameterTypeRequiredDescription
tostringRequiredRecipient phone number in E.164 format
typestringRequiredMessage type: text, card, carousel, file
contentobjectRequiredMessage content (varies by type)
suggestionsarrayOptionalQuick reply buttons or suggested actions
fallback_smsobjectOptionalSMS fallback if RCS unavailable
agent_idstringOptionalVerified RCS agent/brand ID

Example

Request Body
POST /v1/rcs/sendjson
{
  "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://..."
  }
}
Response (200 OK)
Responsejson
{
  "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

EventDescriptionChannels
message.queuedMessage has been queued for deliveryAll
message.sentMessage sent to carrier/providerAll
message.deliveredConfirmed delivered to recipientAll
message.readRecipient opened/read the messageWhatsApp, RCS, Email
message.failedDelivery failed with error detailsAll
message.clickedLink or button clicked in messageWhatsApp, RCS, Email
otp.sentOTP dispatched to recipientOTP
otp.verifiedOTP successfully verifiedOTP
otp.expiredOTP expired without verificationOTP
otp.failedOTP delivery failed, fallback triggeredOTP
call.initiatedVoice call initiatedVoice
call.answeredCall answered by recipientVoice
call.completedCall ended with duration infoVoice
call.dtmfDTMF input received during callVoice

Webhook Payload

Webhook payload examplejson
{
  "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:

verify-webhook.jsjavascript
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)
  );
}
Retry Policy: Failed webhook deliveries are retried up to 5 times with exponential backoff (1s, 5s, 30s, 2min, 10min). After all retries, the event is logged in Dashboard → Webhooks → Failed Events.

Error Handling

QuickComm uses standard HTTP status codes. All error responses include a machine-readable error_code and human-readable message.

CodeStatusDescription
200OKRequest successful
201CreatedResource created successfully
202AcceptedRequest accepted, processing asynchronously
400Bad RequestInvalid parameters — check request body
401UnauthorizedMissing or invalid API key
403ForbiddenInsufficient permissions for this resource
404Not FoundResource does not exist
409ConflictDuplicate request detected (idempotency)
422UnprocessableValid JSON but semantic validation failed
429Rate LimitedToo many requests — see Retry-After header
500Server ErrorInternal error — retry or contact support
502Bad GatewayUpstream provider error
503UnavailableService temporarily unavailable

Error Response Format

Error response (400)json
{
  "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.

PlanReq/secDailyBurstMonthly
Free101,0002010,000
Starter10050,000200500,000
Business1,000500,0002,0005M
Enterprise10,000+UnlimitedCustomUnlimited

Rate Limit Headers

X-RateLimit-LimitMaximum requests per second for your plan
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the limit resets
Retry-AfterSeconds to wait before retrying (on 429)

Pagination

List endpoints return paginated results using cursor-based pagination for consistent performance at any scale.

ParameterTypeRequiredDescription
limitintegerOptionalNumber of items per page (default: 20, max: 100)
cursorstringOptionalCursor from previous response for next page
sortstringOptionalSort order: created_at.desc (default) or created_at.asc
Paginated responsejson
{
  "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.

Using idempotency keybash
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" }'
Use deterministic keys like 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.

Batch sendjson
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"
}
Batch responsejson
{
  "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.

Smart send with fallbackjson
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

1. WhatsAppfails within 30s2. SMSfails within 30s3. Voice

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 WhatsApp templatejson
// 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.

Mar 1, 2026v2.4.0feature

RCS Carousel API

New endpoint for sending interactive carousels via RCS with up to 10 cards.

Feb 15, 2026v2.3.2improvement

WhatsApp Interactive Lists

Support for list messages with up to 10 sections and 30 rows per section.

Feb 1, 2026v2.3.0feature

Email Template Variables

Dynamic variable substitution in email templates with conditional blocks.

Jan 20, 2026v2.2.5fix

Voice TTS Latency Fix

Reduced text-to-speech initiation latency by 40% for Indian English voices.

Jan 10, 2026v2.2.0feature

Batch Messaging API

New /v1/batch/send endpoint supporting up to 100K messages per call.

Dec 15, 2025v2.1.0feature

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.