Find solutions to common TrackPost issues. If you don’t find your answer here, contact support.
Table of Contents
Quick Fixes
Common Issues at a Glance
| Issue | Quick Fix |
|---|---|
| “Unauthorized” error | Check API key, ensure not expired |
| “Domain not verified” | Complete DNS setup, wait for propagation |
| “Rate limit exceeded” | Wait 60 seconds, upgrade plan, or implement backoff |
| Emails not sending | Check AWS credentials, verify SES access |
| High bounce rate | Clean email list, implement double opt-in |
| Webhooks not working | Ensure HTTPS URL, check server responds 200 |
API Errors
401 Unauthorized
Symptoms: API calls return 401 error
Causes:
- Invalid or missing API key
- API key expired or revoked
- Wrong environment (test key in production)
Solutions:
Check your API key:
# Test key (for development) tp_test_abc123def456 # Live key (for production) tp_live_abc123def456Verify header format:
Authorization: Bearer tp_live_your_keyCheck key in dashboard:
- Dashboard → API Keys
- Verify key exists and is active
- Generate new key if needed
403 Forbidden
Symptoms: API calls return 403 error
Causes:
- Insufficient permissions
- API key doesn’t have access to resource
- Domain restrictions
Solutions:
- Verify API key has correct permissions
- Check if resource belongs to your workspace
- Ensure domain is verified for sending
404 Not Found
Symptoms: API calls return 404 error
Causes:
- Resource doesn’t exist (template ID, email ID)
- Wrong endpoint URL
- Typo in ID
Solutions:
- Double-check resource IDs
- Verify endpoint URL:
https://api.trackpost.de/v1/... - List resources to find correct ID:
curl https://api.trackpost.de/v1/templates \ -H "Authorization: Bearer tp_live_your_key"
429 Rate Limit Exceeded
Symptoms: API calls return 429 error
Causes:
- Too many requests per minute
- Exceeded plan limits
- No backoff implementation
Solutions:
Check your limits in headers:
X-RateLimit-Limit: 60 X-RateLimit-Remaining: 0 X-RateLimit-Reset: 1705323000Implement exponential backoff:
async function sendWithRetry(data, retries = 3) { for (let i = 0; i < retries; i++) { try { return await sendEmail(data); } catch (error) { if (error.status === 429) { const delay = Math.pow(2, i) * 1000; await new Promise(r => setTimeout(r, delay)); continue; } throw error; } } }Upgrade your plan for higher limits
422 Validation Error
Symptoms: API calls return 422 error with validation message
Causes:
- Invalid request parameters
- Missing required fields
- Invalid email format
- Template variables missing
Solutions:
- Check error message for specific field
- Verify all required fields are present
- Validate email format
- Ensure template variables match template requirements
Example:
{
"error": {
"code": "validation_error",
"message": "Invalid email format",
"field": "to"
}
}
AWS SES Issues
“AWS credentials invalid”
Symptoms: Error when sending emails, AWS connection fails
Solutions:
Verify credentials:
- Check Access Key ID and Secret Access Key
- No extra spaces or characters
- Credentials not expired
Check IAM permissions:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ses:SendEmail", "ses:SendRawEmail", "ses:GetSendQuota" ], "Resource": "*" } ] }Test in AWS Console:
- SES → Email Sending → Send Test Email
- If this fails, issue is with AWS credentials
Domain Verification “Pending”
Symptoms: Domain status stuck on “Pending” for hours
Solutions:
Check DNS propagation:
dig TXT yourdomain.com dig TXT _amazonses.yourdomain.com dig TXT selector1._domainkey.yourdomain.comVerify DNS records:
- Exact values match what TrackPost provided
- No extra quotes in values
- Correct record type (TXT, not CNAME)
Wait longer:
- DNS can take up to 48 hours
- Most complete within 2-4 hours
Use online checker:
- https://whatsmydns.net
- Check globally for your records
“Sandbox Access” Error
Symptoms: Can only send to verified emails
Cause: New AWS accounts start in sandbox mode
Solution:
Request production access:
- AWS Console → SES → Account dashboard
- Click “Request production access”
- Fill out the form explaining your use case
While waiting:
- Verify recipient email addresses in AWS
- Continue testing with verified addresses
- Approval usually takes 24 hours
Emails Going to Spam
Symptoms: Recipients report emails in spam folder
Checklist:
Authentication:
- SPF record:
v=spf1 include:amazonses.com ~all - DKIM: Enabled in TrackPost
- DMARC:
_dmarcTXT record set
- SPF record:
Content:
- Avoid spammy words (“FREE!!!”, “Act now!!!”)
- Balanced text-to-image ratio
- Valid HTML structure
Reputation:
- Check AWS SES reputation dashboard
- Low bounce rate (< 2%)
- Low complaint rate (< 0.1%)
Test:
- Use mail-tester.com
- Check spam score
CLI Issues
“command not found: trackpost”
Symptoms: After installing CLI, command not found
Solutions:
Install globally:
npm install -g @trackpost/cliCheck npm global path:
npm bin -g # Add to PATH if neededUse npx:
npx @trackpost/cli --version
“Authentication failed”
Symptoms: CLI can’t authenticate
Solutions:
- Run
trackpost auth loginagain - Check API key is correct
- Verify key is for correct environment
- Try
trackpost auth logoutthen login again
Template Issues
“Template not found”
Symptoms: Error when using template_id
Solutions:
- Verify template ID exists:
trackpost templates list - Check for typos in template_id
- Ensure template is in correct workspace
“Invalid variables”
Symptoms: Template validation fails
Solutions:
- Preview template with variables:
trackpost templates render template_id \ --variables '{"var":"value"}' - Check all required variables are provided
- Verify variable names match template
“Liquid syntax error”
Symptoms: Template won’t save or render
Common errors:
{% if condition %} {# Missing endif #}
{% for item in items {# Missing closing brace #}
{{ variable | unknown_filter }} {# Invalid filter #}
Solutions:
- Ensure all tags are properly closed
- Use valid Liquid filters only
- Check template in preview mode
Webhook Issues
Webhooks not received
Symptoms: No webhook calls coming to your endpoint
Checklist:
Verify webhook is active:
- Dashboard → Webhooks
- Status should be “Active”
Check URL is correct:
- Must be HTTPS (not HTTP)
- Publicly accessible
- Returns 200 status
Test endpoint:
curl -X POST https://your-endpoint.com/webhook \ -d '{"test": true}'Check server logs:
- Look for incoming requests
- Check for errors processing webhooks
“Invalid signature”
Symptoms: Signature verification fails
Solutions:
- Ensure you’re using the correct webhook secret
- Verify signature calculation:
const signature = crypto .createHmac('sha256', secret) .update(JSON.stringify(payload)) .digest('hex'); - Check for extra whitespace in payload
Duplicate webhooks
Symptoms: Same event received multiple times
Cause: TrackPost retries failed webhooks
Solution: Implement idempotency:
// Check if already processed
const processed = await db.webhooks.findOne({
event_id: event.id
});
if (processed) {
return res.status(200).send('Already processed');
}
// Process and record
await processEvent(event);
await db.webhooks.insert({
event_id: event.id,
processed_at: new Date()
});
Email Delivery Issues
High Bounce Rate
Symptoms: > 5% of emails bouncing
Solutions:
Clean your list:
- Remove hard bounces immediately
- Verify emails before adding
- Use double opt-in
Check for typos:
- Common: gmial.com, yahooo.com
- Validate email format
Monitor soft bounces:
- Temporary issues (full mailbox, server down)
- Retry with exponential backoff
High Complaint Rate
Symptoms: > 0.1% of emails marked as spam
Solutions:
Verify opt-in:
- Only send to users who opted in
- Use double opt-in
- Honor unsubscribe immediately
Improve content:
- Clear subject lines
- Recognizable sender name
- Easy unsubscribe
Review frequency:
- Don’t send too often
- Segment by engagement
- Sunset inactive users
Emails Not Sending
Symptoms: API returns success but no emails sent
Checklist:
Check dashboard:
- Do emails appear in Emails list?
- What status do they show?
Check AWS:
- AWS credentials configured?
- SES sending quota not exceeded?
- Account not paused?
Check suppression list:
- Email might be suppressed
- Check Dashboard → Suppressions
Frequently Asked Questions
General
Yes. TrackPost is a BYO-SES (Bring Your Own SES) platform. You connect your own AWS SES account, which gives you:
- Full control over your sending reputation
- Direct access to AWS deliverability tools
- Cost savings by using AWS’s email pricing
- No shared IP pools
Test keys (tp_test_...):
- For development and testing
- Don’t actually deliver emails to recipients
- Show in dashboard for review
- Don’t count against rate limits
Live keys (tp_live_...):
- For production use
- Actually deliver emails
- Count against rate limits
- Can affect reputation
Yes! The Free plan includes:
- 1,000 emails per month
- 60 requests per minute
- All core features (templates, tracking, webhooks)
- Email analytics
- No credit card required
Technical
Any language that can make HTTP requests:
- Official SDKs: Node.js (available), Python (coming soon), Go (coming soon)
- REST API: Works with any language (cURL, fetch, axios, etc.)
- CLI: Node.js-based, works on any system with Node.js 18+
Implement exponential backoff:
async function sendWithRetry(data, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
return await send(data);
} catch (error) {
if (error.status === 429) {
await sleep(Math.pow(2, i) * 1000);
continue;
}
throw error;
}
}
}
Or upgrade your plan for higher limits.
Yes! TrackPost supports:
- HTML templates
- Plain text templates
- MJML for responsive emails
- Liquid templating for dynamic content
You can create templates via dashboard, API, or CLI.
Billing
TrackPost charges a monthly fee based on your plan. You pay AWS separately for email sending.
TrackPost Pricing:
- Free: $0/month (1,000 emails)
- Indie: $29/month (10,000 emails)
- Startup: $99/month (50,000 emails)
- Growth: $299/month (250,000 emails)
AWS SES Pricing:
- First 62,000 emails/month: Free (if sent from EC2)
- Additional emails: $0.10 per 1,000 emails
- Attachments: $0.12 per GB
Yes, you can change your plan at any time:
- Upgrades take effect immediately
- Downgrades take effect at the end of your billing cycle
- Prorated billing for mid-cycle changes
Getting Help
Support Channels
- Documentation: You’re here! Check all guides first.
- GitHub Issues: https://github.com/anomalyco/trackpost/issues
- Email Support: [email protected]
- Contact Form: Contact us
Information to Provide
When contacting support, include:
Account details:
- Workspace ID (from dashboard)
- API key type (test/live) - don’t share the actual key!
Error information:
- Exact error message
- Error code (if any)
- Request ID (from error response)
What you were doing:
- API endpoint used
- Code snippet (remove sensitive data)
- Timestamp of error
What you’ve tried:
- Steps already attempted
- Documentation sections checked
Response Times
| Plan | Response Time |
|---|---|
| Free | Best effort (usually 24-48 hours) |
| Paid | Within 24 hours |
| Enterprise | Within 4 hours |
Still stuck? Contact Support with the information above and we’ll help you out!