Overview
NICTBD.COM SMS API allows approved merchants to send SMS through a secure API.
Merchants can send single SMS, secure OTP SMS, bulk SMS and dynamic SMS using their own backend system.
This API is server-to-server only. Always call this API from your backend server.
Do not expose your API Secret in frontend JavaScript, Android APK, iOS app, Flutter app or public repository.
SMS charge is calculated by SMS count. If an SMS fails from provider response, the deducted SMS charge will be refunded to the merchant wallet automatically.
Masking SMS Registration
To send masking SMS, merchants must complete masking registration with NICTBD.COM first.
Without approved masking registration, masking SMS requests may not be available for your merchant account.
Masking SMS registration service charge is ৳3,500. To register a masking name,
please contact NICTBD.COM support.
Masking Name Rules
| Rule |
Requirement |
| Maximum Length |
Masking name must not be more than 11 characters. |
| Business Name Match |
The masking name should match the business/company name or approved brand name. |
| Trade License |
The trade license should be in the same business/company name as the requested masking name. |
Required Documents for Masking Registration
| Document |
Details |
| Trade License |
Valid trade license in the same business/company name. |
| Company Letterhead Pad |
Required forms must be filled on company letterhead pad. |
| Company Seal |
Company seal must be attached on the required documents. |
| Owner Signature |
Company owner or authorized person signature is required. |
| NID |
Company owner or authorized person NID copy is required. |
| Photo |
Two copies of owner or authorized person photo are required. |
For masking registration, contact NICTBD.COM support before using is_masking: true.
Masking SMS will use the merchant’s approved masking SID after registration.
Core Features
Single SMS
Send one SMS to one recipient.
Secure OTP SMS
Send secure OTP SMS. Encryption and signature are handled server-side.
Bulk SMS
Send the same message to multiple recipients. Maximum 100 recipients per request.
Dynamic SMS
Send unique SMS messages to different recipients in one request.
Masking SMS
Send SMS using approved masking name after masking registration.
Wallet Billing
SMS charge is deducted from merchant wallet and failed SMS charge is refunded automatically.
Merchant Credentials
Every request requires Store ID, API Key and API Secret.
Status Check
Check SMS result using batch ID, CSMS ID or reference ID.
API Flow
1. Authenticate
Send Store ID, API Key and API Secret with request.
2. Send Request
Choose single, secure OTP, bulk or dynamic endpoint.
3. Wallet Billing
SMS charge is calculated and deducted from merchant wallet.
4. Status Check
Check SMS logs using status check endpoint.
API Credentials
| Credential |
Required |
Example |
Usage |
| store_id |
Required |
STORE-2-FRXECLKM |
Your merchant Store ID. |
| api_key |
Required |
pk_live_xxxxxxxxx |
Your merchant API Key. |
| api_secret |
Required |
sk_live_xxxxxxxxx |
Your private API Secret. |
Merchant verification status must be approved. Inactive or unapproved merchants cannot use this API.
API Endpoints
POST
https://www.nictbd.com/api/send-sms/single
POST
https://www.nictbd.com/api/send-sms/secure-otp
POST
https://www.nictbd.com/api/send-sms/bulk
POST
https://www.nictbd.com/api/send-sms/dynamic
POST
https://www.nictbd.com/api/send-sms/status-check
Headers
Headers
Content-Type: application/json
Accept: application/json
SMS Charges
| SMS Type |
API Parameter |
Charge |
Credential Source |
| Non-masking SMS |
is_masking: false or not sent |
৳0.40 per SMS count |
Default SMS route |
| Masking SMS |
is_masking: true |
৳0.68 per SMS count |
Merchant approved masking route |
Charges are calculated by SMS count, not only by recipient count. If a message becomes 2 SMS parts,
charge will be calculated for 2 SMS parts.
If an SMS fails from provider response, the deducted SMS charge will be refunded to the merchant wallet automatically.
SMS Character Count Rules
| Language Type |
Character Limit |
SMS Count Example |
| English SMS |
159 characters = 1 SMS |
160 English characters = 2 SMS |
| Bangla / Unicode SMS |
69 characters = 1 SMS |
70 Bangla/Unicode characters = 2 SMS |
Bangla text, emoji or any Unicode/non-English character will be counted as Bangla/Unicode SMS.
Charge Example
Example
English 160 characters = 2 SMS
Non-masking charge:
2 × 0.40 = 0.80 BDT
Masking charge:
2 × 0.68 = 1.36 BDT
SMS Limits
| SMS Type |
Maximum Recipient Per Request |
Note |
| Single SMS |
1 |
One SMS to one recipient. |
| Secure OTP SMS |
1 |
One secure OTP message to one recipient. |
| Bulk SMS |
100 |
Maximum 100 recipients can be sent in one request. More than 100 recipients will be rejected. |
| Dynamic SMS |
100 |
Maximum 100 unique SMS objects can be sent in one request. |
Bulk SMS limit: Maximum 100 recipients are allowed per request.
Requests with more than 100 recipients will not be accepted.
Single SMS
Send a single SMS message to one recipient. Use is_masking: true only if your masking SMS registration is approved.
Request Parameters
| Field |
Required |
Example |
Description |
| store_id | Required | STORE-2-FRXECLKM | Your Store ID. |
| api_key | Required | pk_live_xxxxxxxxx | Your API Key. |
| api_secret | Required | sk_live_xxxxxxxxx | Your API Secret. |
| msisdn | Required | 01712000000 | Recipient mobile number. |
| sms | Required | Test message | SMS message body. Max 1000 characters. |
| is_masking | Optional | true | Send true for masking SMS. Default is non-masking. |
| csms_id | Optional | SMSG001 | Your custom unique message ID. Auto generated if not sent. |
Non-masking Request Example
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/single" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"msisdn": "01712000000",
"sms": "Test message",
"csms_id": "SMSG001"
}'
Masking Request Example
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/single" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"msisdn": "01712000000",
"sms": "Your order has been confirmed",
"is_masking": true,
"csms_id": "MASK001"
}'
Success Response
JSON
{
"success": true,
"batch_id": "SMS-20260616010101-A1B2C3D4",
"csms_id": "SMSG001",
"msisdn": "019XXXX0040",
"status": "Success",
"is_masking": false,
"sms_language": "en",
"sms_characters": 12,
"sms_count": 1,
"charge_per_sms": "0.40",
"charge_amount": "0.40",
"refunded_amount": "0.00",
"balance_after": "999.60",
"reference_id": "68cd6fa1a5ac2892125",
"message": "Success"
}
Secure OTP SMS
Send one-time-password SMS. Merchant sends plain OTP message to NICTBD.COM API.
Secure encryption and signature are handled server-side.
Merchant does not need to send SSLWireless secret key. Secret key is configured securely on NICTBD.COM server.
Request Example
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/secure-otp" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"msisdn": "01712000000",
"sms": "Your OTP is 123456",
"is_masking": false,
"csms_id": "OTP001"
}'
Response
JSON
{
"success": true,
"batch_id": "OTP-20260616010101-A1B2C3D4",
"csms_id": "OTP001",
"msisdn": "019XXXX0040",
"status": "Success",
"is_masking": false,
"sms_language": "en",
"sms_characters": 18,
"sms_count": 1,
"charge_per_sms": "0.40",
"charge_amount": "0.40",
"refunded_amount": "0.00",
"reference_id": "5d9d7ca5dac5e067314",
"message": "Success"
}
Bulk SMS
Send the same message to multiple recipients in one request.
Bulk SMS limit: Maximum 100 recipients are allowed per request.
Requests with more than 100 recipients will not be accepted.
Request Parameters
| Field |
Required |
Example |
Description |
| store_id | Required | STORE-2-FRXECLKM | Your Store ID. |
| api_key | Required | pk_live_xxxxxxxxx | Your API Key. |
| api_secret | Required | sk_live_xxxxxxxxx | Your API Secret. |
| msisdn | Required | ["0195...", "0170..."] | Array of recipient numbers. Maximum 100. |
| sms | Required | Bulk SMS message | Same SMS body for all recipients. |
| is_masking | Optional | true | Send true for masking bulk SMS. |
| batch_csms_id | Optional | BATCH-001 | Your unique batch reference ID. |
Request Example
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/bulk" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"msisdn": [
"01900000000",
"01700000000",
"01800000000"
],
"sms": "Bulk SMS message content",
"is_masking": false,
"batch_csms_id": "BATCH-001"
}'
Success Response
JSON
{
"success": true,
"batch_id": "BULK-20260616010101-A1B2C3D4",
"batch_csms_id": "BATCH-001",
"is_masking": false,
"total": 3,
"success_count": 3,
"failed_count": 0,
"sms_language": "en",
"sms_count_each": 1,
"charge_per_recipient": "0.40",
"total_charge": "1.20",
"refunded_amount": "0.00",
"results": [
{
"success": true,
"csms_id": "BATCH-001-123456",
"msisdn": "019XXXX0040",
"status": "Success",
"reference_id": "68cd6fa1a5ac2892125",
"message": "Success"
}
]
}
Dynamic SMS
Send unique SMS messages to different recipients in one request.
Dynamic SMS limit: Maximum 100 SMS objects are allowed per request.
Request Example
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/dynamic" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"is_masking": false,
"sms": [
{
"msisdn": "01712000000",
"text": "Hello John!",
"csms_id": "DYN-001"
},
{
"msisdn": "01700000000",
"text": "Hello Jane!",
"csms_id": "DYN-002"
}
]
}'
Success Response
JSON
{
"success": true,
"batch_id": "DYN-20260616010101-A1B2C3D4",
"is_masking": false,
"total": 2,
"success_count": 2,
"failed_count": 0,
"total_charge": "0.80",
"refunded_amount": "0.00",
"results": [
{
"success": true,
"csms_id": "DYN-001",
"msisdn": "019XXXX0040",
"status": "Success",
"reference_id": "5da2f0b5ba3a2248110",
"message": "Success"
}
]
}
Status Check
Check SMS status using batch_id, csms_id or reference_id.
Request Example: By Batch ID
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/status-check" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"batch_id": "BULK-20260616010101-A1B2C3D4"
}'
Request Example: By CSMS ID
cURL
curl -X POST "https://www.nictbd.com/api/send-sms/status-check" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"store_id": "YOUR_STORE_ID",
"api_key": "YOUR_API_KEY",
"api_secret": "YOUR_API_SECRET",
"csms_id": "DYN-001"
}'
Response
JSON
{
"success": true,
"batch_id": "BULK-20260616010101-A1B2C3D4",
"total": 3,
"success_count": 3,
"failed_count": 0,
"total_charge": "1.20",
"refunded_amount": "0.00",
"messages": [
{
"csms_id": "BATCH-001-123456",
"batch_csms_id": "BATCH-001",
"message_type": "bulk",
"is_masking": false,
"sms_language": "en",
"sms_characters": 24,
"sms_count": 1,
"charge_amount": "0.40",
"refunded_amount": "0.00",
"msisdn": "019XXXX0040",
"status": "Success",
"provider_status": "SUCCESS",
"status_code": 200,
"status_message": "Success",
"error_message": null,
"reference_id": "68cd6fa1a5ac2892125",
"sent_at": "2026-06-16 10:30:20"
}
]
}
Error Responses
Invalid Credentials
JSON
{
"success": false,
"error": "Invalid API credentials."
}
Merchant Verification Not Approved
JSON
{
"success": false,
"error": "Merchant verification is not approved."
}
Masking Not Configured
JSON
{
"success": false,
"error": "Masking SMS is not configured for this merchant."
}
Insufficient Balance
JSON
{
"success": false,
"error": "Insufficient balance."
}
Bulk Limit Exceeded
JSON
{
"success": false,
"error": "Maximum recipient limit exceeded.",
"max_recipients": 100
}
Invalid MSISDN
JSON
{
"success": false,
"error": "Invalid MSISDN."
}
Security Guidelines
- Always call SMS API from backend server.
- Never expose
api_secret in frontend JavaScript or mobile app source code.
- Keep credentials in environment variables or secure configuration.
- Use unique
csms_id for each SMS when possible.
- For bulk SMS, do not send more than
100 recipients in one request.
- Use
is_masking: true only after masking registration approval.
- Check API response before showing success to your customer.
If your API Secret is compromised, regenerate credentials from merchant dashboard or contact NICTBD.COM support.
Important Notes
| Topic |
Explanation |
| Merchant Approval |
Only approved merchants can use SMS API. |
| Non-masking SMS |
If is_masking is not sent or false, SMS will be sent as non-masking SMS. |
| Masking SMS |
To send masking SMS, use is_masking: true. Masking registration approval is required. |
| Masking Registration Fee |
Masking registration service charge is ৳3,500. Contact NICTBD.COM support. |
| SMS Count |
English 159 characters = 1 SMS. Bangla/Unicode 69 characters = 1 SMS. |
| SMS Charge |
Non-masking ৳0.40 per SMS count. Masking ৳0.68 per SMS count. |
| Failed SMS Refund |
If SMS fails from provider response, deducted SMS charge is refunded to merchant wallet. |
| Bulk Limit |
Bulk SMS request can contain maximum 100 recipients. |
| Dynamic Limit |
Dynamic SMS request can contain maximum 100 SMS objects. |
| Status Check |
Use batch_id, csms_id or reference_id to check SMS status. |
For SMS API support, please contact NICTBD.COM support team with your Store ID and CSMS ID or batch ID.