Troubleshooting Common Issues
Common issues and step-by-step solutions.
Authentication Issues
401 Unauthorized
Symptoms: API returns 401 Unauthorized with error code AUTH_002 (invalid or missing API key)
Solutions:
- Verify your API key is correct
- Check the
x-api-keyheader is set (notx-sender-id- that's v2 legacy) - Ensure no extra whitespace in the key
- Verify the key hasn't been revoked
# Test your API key
curl -H "x-api-key: YOUR_API_KEY" \
https://api.sent.dm/v3/templates403 Forbidden
Symptoms: API returns 403 Forbidden with an AUTH_004–AUTH_007 error code
Solutions:
AUTH_004: your API key doesn't have permission for this operation; use a key with the required accessAUTH_005: account onboarding is not complete; finish onboarding in the dashboardAUTH_006: KYC verification is not complete; submit KYC and wait for approvalAUTH_007: channel setup is not complete; finish setup for the channel you're sending on- A suspended account also returns
403with codeBUSINESS_014; contact support
Message Sending Issues
Messages Stuck in "Queued"
Symptoms: Message status doesn't change from QUEUED
A message normally leaves QUEUED within the first few seconds after a send. If it stays queued longer:
Solutions:
- Check KYC status is approved
- Verify account has sufficient balance
- Check dashboard for errors
Insufficient Balance
Symptoms: The send returns 202 Accepted, but the message is finalized as BLOCKED (insufficient balance). The status appears on GET /v3/messages/{id}/activities and arrives as a message.blocked webhook. Legacy v2 send endpoints instead return 402 with error code BUSINESS_003.
Solutions:
- Add credits manually from Billing → Overview
- Enable Auto Charge (Billing → Overview → gear icon) to automatically top up when your balance falls below a set threshold. This prevents the block from recurring
- Check Billing → Billing History for failed payments
Payment failed (Auto Charge or manual top-up)
Symptoms: Red alert banner on the Dashboard reads "Your last payment didn't go through," or you received a "Your payment didn't go through" email.
Common causes:
- Card declined (insufficient funds, expired card, or bank block on off-session charges)
- No default payment method on file
- No Stripe customer record linked to the account
Solutions:
- Go to Billing → Payment Methods and update or re-add your card
- After updating, add credits manually to confirm the new payment method works
- Auto Charge will resume automatically on the next trigger once a valid payment method is on file
- If the problem persists, contact support@sent.dm with the decline reason from the email
429 Rate Limited (BUSINESS_002)
Symptoms: API returns 429 with error code BUSINESS_002
Rate Limits:
- Standard endpoints: 200 requests per minute
- Sensitive endpoints: 10 requests per minute
Solutions:
- Implement exponential backoff
- Reduce request frequency
- Consider batching requests
- Check rate limit headers for reset time
// Implement backoff
const retryAfter = error.headers['retry-after'] || 60;
await sleep(retryAfter * 1000);Invalid Phone Number (VALIDATION_002)
Symptoms: Error code VALIDATION_002
Solutions:
- Use E.164 format (+1234567890)
- Include country code
- Remove spaces and special characters
- Validate before sending
function validateE164(phone: string): boolean {
return /^\+[1-9]\d{1,14}$/.test(phone);
}Template Issues
Template Not Found (RESOURCE_002)
Symptoms: Error code RESOURCE_002
Solutions:
- Verify template ID is correct (use
template.idin request body, nottemplate_id) - Check template exists in dashboard
- Ensure you're using the right account
Template Pending Approval
Symptoms: WhatsApp messages not sending
Solutions:
- Wait for Meta approval (24-48 hours)
- Use SMS in the meantime
- Check template status
- Review rejection reason if applicable
Template Rejected
Symptoms: Template status rejected
Solutions:
- Review Meta's feedback
- Fix identified issues
- Resubmit template
- Contact support if unclear
Webhook Issues
Webhooks Not Received
Symptoms: No webhook events arriving
Solutions:
- Verify webhook URL is correct
- Check endpoint returns 2xx status
- Ensure endpoint responds within 5 seconds
- Verify HTTPS is working
- Check webhook is enabled in dashboard
Duplicate Webhooks
Symptoms: Same event received multiple times
Solutions:
- Implement idempotency using event ID
- Store processed event IDs
- Use database transactions
See Handling Retries.
Webhook Signature Invalid
Symptoms: Signature verification fails
Solutions:
- Use raw request body (not parsed JSON)
- Check secret key is correct
- Use constant-time comparison
- Verify timestamp is recent
Channel Issues
WhatsApp Not Working
Symptoms: WhatsApp messages failing
Solutions:
- Verify WhatsApp Business account is connected
- Check template is approved
- Confirm recipient has WhatsApp
- Verify Meta Business account is in good standing
SMS Delivery Failed
Symptoms: SMS messages failing
Solutions:
- Check phone number format
- Verify recipient hasn't opted out
- Check for carrier blocks
- Review message content compliance
Performance Issues
Slow API Responses
Symptoms: API calls taking > 5 seconds
Solutions:
- Check your network connection
- Verify server location (use closest region)
- Implement connection pooling
- Check for rate limiting
High Error Rate
Symptoms: > 5% of requests failing
Solutions:
- Check error logs for patterns
- Review recent code changes
- Verify API key validity
- Check account status
Dashboard Issues
Can't Access Dashboard
Solutions:
- Check API Status for ongoing incidents
- Verify your account hasn't been suspended - suspended accounts also receive
403responses with codeBUSINESS_014on API calls - If access still fails, email support@sent.dm with your account email and the time of the failure
Data Not Loading
Solutions:
- Check API Status for ongoing incidents
- Check the browser console for JavaScript errors and include them in your support ticket
- Contact support@sent.dm if the problem persists
Debugging Steps
General Debugging Process
-
Enable debug logging
const client = new SentDm({ logLevel: 'debug' }); -
Check request/response
console.log('Request:', request); console.log('Response:', response); console.log('Error:', error); -
Test in sandbox mode
await client.messages.send({ to: ['+1234567890'], template: { id: 'tmpl_123' }, sandbox: true }); -
Check dashboard logs
Getting Support
When contacting support, include:
- Request ID (from
meta.request_idin error response) - Timestamp of issue (from
meta.timestamp) - Error code (from
error.code) - Code snippet (remove API keys)
- Expected vs actual behavior
- Steps to reproduce
email: support@sent.dm
Frequently Asked Questions
Answers to common questions about Sent: getting started without KYC, pricing and billing, messaging and templates, webhooks, security, and technical limits.
Support & Developer Resources
Get help with Sent: support channels and response times, plus changelog, glossary, error catalog, troubleshooting guides, and FAQ resources for developers.