FAQ
Frequently asked questions about SMS messaging.
General Questions
What is the pool-based model?
Transactional uses a shared pool of phone numbers and pre-approved templates. This means:
- No number procurement - You don't need to buy or manage phone numbers
- No carrier registration - We handle 10DLC, DLT, and other requirements
- Pre-approved templates - Templates are already approved by carriers
- Automatic routing - We select the best number for each recipient
Which countries do you support?
We currently support:
- United States (+1)
- Canada (+1)
- United Kingdom (+44)
- India (+91)
More countries are being added. Contact us if you need a specific country.
What phone number format should I use?
All phone numbers must be in E.164 format:
+[country code][subscriber number]
Examples:
- US:
+14155551234 - UK:
+447911123456 - India:
+919876543210
Templates
Why can't I send custom message content?
To ensure deliverability and compliance, all messages must use pre-approved templates. This provides:
- Better delivery rates - Carriers trust pre-approved content
- Compliance - Templates meet regulatory requirements
- Quality control - Consistent, professional messaging
How do I request a custom template?
Enterprise customers can request custom templates:
- Contact support with your requirements
- We'll work with carriers for approval
- Once approved, the template is added to your organization
Can I modify template variables?
Templates use {{variable}} placeholders that you fill in when sending:
await client.sms.send({
to: '+14155551234',
templateAlias: 'otp-verification',
templateModel: {
code: '123456', // Replace {{code}}
company: 'Acme Inc', // Replace {{company}}
},
});You cannot modify the template structure itself.
Delivery
Why did my message fail?
Common failure reasons:
| Error | Cause | Solution |
|---|---|---|
| Recipient opted out | User sent STOP | Get re-consent before sending |
| Invalid number | Not a valid mobile number | Validate number format |
| Unreachable | Phone off or out of range | Retry later |
| Carrier blocked | Content flagged | Contact support |
How long does delivery take?
Typical delivery times:
- OTP/Verification: 2-5 seconds
- Transactional: 5-30 seconds
- Batch messages: Depends on volume
Delivery depends on carrier networks and is not guaranteed.
Can I track delivery?
Yes, in several ways:
- API polling - Check message status via GET /sms/{id}
- Webhooks - Receive real-time delivery events
- Dashboard - View delivery stats in the SMS dashboard
Opt-Outs
How does opt-out work?
When a user replies with STOP (or similar keywords):
- We automatically add them to your suppression list
- They receive a confirmation message
- Future messages to this number are blocked
Can I remove someone from the suppression list?
Yes, but only if you have valid re-consent:
await client.sms.suppressions.remove('+14155551234');Important: Never remove suppressions without explicit user consent.
What opt-out keywords do you recognize?
We process these keywords automatically:
Opt-out: STOP, UNSUBSCRIBE, CANCEL, END, QUIT
Opt-in: START, YES, UNSTOP
Billing
How is SMS pricing calculated?
SMS is billed per segment:
- Standard (GSM-7): 160 characters per segment
- Unicode: 70 characters per segment
Messages longer than one segment are billed as multiple messages.
What does a segment mean?
A segment is a unit of SMS. Long messages are split:
// 1 segment (under 160 chars)
"Your code is 123456"
// 2 segments (over 160 chars)
"Your verification code for Acme Inc is 123456. This code expires in 10 minutes. If you didn't request this, please ignore this message."
Do failed messages count?
Messages are billed when accepted by our system. If delivery fails due to carrier issues, you may be billed. Messages blocked before sending (suppressions, validation) are not billed.
Technical
What's the rate limit?
| Endpoint | Limit |
|---|---|
| Single send | 100 requests/second |
| Batch send | 10 requests/second |
| Read endpoints | 100 requests/second |
What's the maximum batch size?
You can send up to 500 messages per batch request.
Can I use both templateAlias and templateId?
No, use one or the other. templateAlias is recommended for readability:
// Recommended
{ templateAlias: 'otp-verification' }
// Also works
{ templateId: 123 }How do I test in development?
Use our test mode or sandbox environment:
- Use test API keys (prefix with
test_) - Messages are simulated, not sent
- Webhooks are still triggered
Compliance
Do I need consent to send SMS?
Yes. You must have appropriate consent:
| Message Type | Consent Required |
|---|---|
| OTP/Verification | Express or implied |
| Transactional | Express |
| Marketing | Express written |
What is 10DLC?
10DLC (10-Digit Long Code) is the US standard for Application-to-Person messaging. Our pool numbers are pre-registered for 10DLC, so you don't need to handle registration.
Do I need DLT registration for India?
For India, we use DLT-registered templates and headers. You benefit from our registrations automatically.
Troubleshooting
Message shows "QUEUED" for a long time
Possible causes:
- High volume - System processing backlog
- Carrier delays - Carrier network issues
- Rate limiting - Sending too fast
Usually resolves within minutes. Contact support if messages stay queued for over 30 minutes.
Why am I getting "Template not found"?
Check that:
- You're using the correct alias or ID
- The template is added to your organization
- The template is active (not archived)
Why am I getting "No pool number available"?
This means we don't have a number for the recipient's country. Check:
- Phone number format is correct
- Country is supported
- Contact support if the country should be supported
Getting Help
How do I contact support?
- Email: support@usetransactional.com
- Dashboard: Use the support widget in your dashboard
- Documentation: Check our docs at usetransactional.com/docs
Can I schedule a call?
Enterprise customers can schedule calls with our team. Contact sales@usetransactional.com.
Where can I see system status?
Check status.usetransactional.com for real-time system status and incident history.
On This Page
- General Questions
- What is the pool-based model?
- Which countries do you support?
- What phone number format should I use?
- Templates
- Why can't I send custom message content?
- How do I request a custom template?
- Can I modify template variables?
- Delivery
- Why did my message fail?
- How long does delivery take?
- Can I track delivery?
- Opt-Outs
- How does opt-out work?
- Can I remove someone from the suppression list?
- What opt-out keywords do you recognize?
- Billing
- How is SMS pricing calculated?
- What does a segment mean?
- Do failed messages count?
- Technical
- What's the rate limit?
- What's the maximum batch size?
- Can I use both templateAlias and templateId?
- How do I test in development?
- Compliance
- Do I need consent to send SMS?
- What is 10DLC?
- Do I need DLT registration for India?
- Troubleshooting
- Message shows "QUEUED" for a long time
- Why am I getting "Template not found"?
- Why am I getting "No pool number available"?
- Getting Help
- How do I contact support?
- Can I schedule a call?
- Where can I see system status?