A modern Android app that forwards SMS messages to a webhook endpoint in real-time. Perfect for integrating SMS functionality into your applications, automation workflows, or archiving messages to your own server.
- 📱 Real-time SMS forwarding - Instantly sends incoming SMS to your webhook
- 📤 Bulk sync - Upload your entire SMS history with one tap
- 🔄 Reliable delivery - Automatic retries with exponential backoff
- 🔒 Secure - Supports API key authentication
- 📊 Progress tracking - Visual statistics and activity logs
- 🎨 Modern UI - Material Design 3 with dark mode support
- ⚡ Efficient - Prevents duplicate uploads with smart caching
- Configure your webhook - Enter your server's webhook URL and optional API key
- Grant SMS permissions - Allow the app to read SMS messages
- Automatic forwarding - New messages are sent to your webhook instantly
- Sync existing messages - Optionally upload your SMS history
The app sends a JSON payload to your webhook endpoint:
{
"_id": "2",
"thread_id": "2",
"address": "6505551212",
"date": 1724154171042,
"date_sent": 1724154170000,
"protocol": "0",
"read": "0",
"status": "-1",
"type": "1",
"reply_path_present": "0",
"body": "This is the message body",
"locked": "0",
"sub_id": "1",
"error_code": "0",
"creator": "com.google.android.apps.messaging",
"seen": "1"
}
If you configure an API key in the app settings, it will be sent as an HTTP header:
Authorization: Bearer your-api-key
The API key is NOT included in the JSON payload itself.
Download the latest APK from the Releases page and install it on your Android device.
# Clone the repository
git clone https://github.com/rossigee/sms2webhook.git
cd sms2webhook
# Build the APK (requires Java 17)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
./gradlew assembleDebug
# Install on connected device
./gradlew installDebug
-
Webhook URL: Your server endpoint that will receive the SMS data
- Example:
https://api.example.com/sms-webhook
- HTTPS recommended for security (HTTP supported for local testing)
- Example:
-
API Key (optional): Add authentication to your webhook requests
- Sent as
apiKey
field in the JSON payload - Useful for protecting your endpoint from unauthorized requests
- Sent as
-
Test Connection: Verify your webhook is working before syncing
- Sends a test message to your endpoint
- Shows success/failure in the activity log
- 📊 SMS Analytics - Analyze messaging patterns and trends
- 🤖 Automation - Trigger workflows based on SMS content
- 💾 Backup - Archive messages to your own cloud storage
- 🔗 Integration - Connect SMS to CRM, ticketing, or notification systems
- 📱 Multi-device - Access SMS from multiple devices through your server
- Android 9.0 (API level 28) or higher
- SMS permissions (requested on first launch)
- Internet connection for webhook delivery
- 🔒 All data transmission uses HTTPS (recommended)
- 📱 Messages are only sent to your configured webhook
- 💾 Local cache only stores message hashes, not content
- 🚫 No third-party servers or analytics
- ✅ Complete source code available for audit
Messages not sending?
- Check your webhook URL is correct and accessible
- Verify internet connectivity
- Look at the activity log for error messages
Duplicate messages?
- The app prevents duplicates automatically
- Use "Clear Cache" if you need to re-sync everything
Permission denied?
- Go to Settings → Apps → SMS2Webhook → Permissions
- Enable SMS permission manually
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.