capcom6/android-sms-gatewayPublic

The SMS Gateway for Android™ app enables sending and receiving SMS messages through an API that can be accessed directly on the device or via a cloud server when direct device access is not possible.

AI summary: An Android application that turns your smartphone into a programmable SMS gateway accessible via API and webhooks.

Stars
5.8K
+10 today
Forks
1K
Watchers
44
Open issues
10
Open PRs
8
Contributors
~4
Commits
426
Branches
16

KotlinApache-2.0Created Jun 15, 2022Last push 2d agoLatest release v1.77.0+40 stars this week+174 this month

Quick answers

What is android-sms-gateway?
An Android application that turns your smartphone into a programmable SMS gateway accessible via API and webhooks.
What does android-sms-gateway do?
SMS Gateway for Android is a lightweight application that transforms a standard Android device into a programmable hub for sending and receiving text messages. It exposes a programmatic API, allowing developers to trigger outbound SMS directly from their own applications, while utilizing webhooks to push real-time notifications for incoming SMS, MMS, and Data SMS payloads. The system operates without requiring mandatory cloud accounts, supporting fully local modes or integration with private backend servers. It includes advanced features like end-to-end encryption of message contents, multi-SIM routing, auto-partitioning of long multipart messages, and scheduled delivery windows.
Who is android-sms-gateway for?
Developers, home lab enthusiasts, and small businesses who need a cost-effective, programmable way to send and receive SMS messages. It is built for those who prefer to leverage their existing Android hardware and carrier plans rather than paying per-message commercial API fees.
How do I get started with android-sms-gateway?
Install the APK from GitHub releases or the Google Play Store, then configure your webhook endpoint in the app settings.
How popular is android-sms-gateway on GitHub?
capcom6/android-sms-gateway has 5,819 stars and 1,036 forks on GitHub, and gained 40 stars in the last 7 days.
What license does android-sms-gateway use?
capcom6/android-sms-gateway is released under the Apache-2.0 license.

Star history

since Jul 28, 2026
02K4KJul 2026Aug 2026Sep 2026Oct 2026
5.8K stars as of Oct 4, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Update history

1 recorded
  • Oct 4, 2026New release v1.77.0 (previously v1.75.0).

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 1 commit2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 1 commit2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 1 commit2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 1 commit2025-12-03: 0 commits2025-12-04: 1 commit2025-12-05: 0 commits2025-12-06: 1 commit2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 1 commit2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 1 commit2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 2 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 1 commit2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 2 commits2026-02-17: 0 commits2026-02-18: 2 commits2026-02-19: 1 commit2026-02-20: 0 commits2026-02-21: 1 commit2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 1 commit2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 1 commit2026-03-13: 1 commit2026-03-14: 0 commits2026-03-15: 1 commit2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 1 commit2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 1 commit2026-04-03: 1 commit2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 1 commit2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 5 commits2026-04-11: 0 commits2026-04-12: 1 commit2026-04-13: 0 commits2026-04-14: 1 commit2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 1 commit2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 1 commit2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 2 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 1 commit2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 1 commit2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 1 commit2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 1 commit2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 2 commits2026-06-17: 0 commits2026-06-18: 2 commits2026-06-19: 2 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 3 commits2026-06-23: 0 commits2026-06-24: 2 commits2026-06-25: 0 commits2026-06-26: 3 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 1 commit2026-07-01: 0 commits2026-07-02: 1 commit2026-07-03: 0 commits2026-07-04: 1 commit2026-07-05: 0 commits2026-07-06: 2 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 1 commit2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 1 commit2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 2 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 1 commit2026-08-07: 0 commits2026-08-08: 3 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 2 commits2026-08-12: 0 commits2026-08-13: 2 commits2026-08-14: 3 commits2026-08-15: 1 commit2026-08-16: 1 commit2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 1 commit2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 2 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 3 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 1 commit2026-09-29: 1 commit2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits
84 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

What android-sms-gateway does

SMS Gateway for Android is a lightweight application that transforms a standard Android device into a programmable hub for sending and receiving text messages. It exposes a programmatic API, allowing developers to trigger outbound SMS directly from their own applications, while utilizing webhooks to push real-time notifications for incoming SMS, MMS, and Data SMS payloads. The system operates without requiring mandatory cloud accounts, supporting fully local modes or integration with private backend servers. It includes advanced features like end-to-end encryption of message contents, multi-SIM routing, auto-partitioning of long multipart messages, and scheduled delivery windows.

Developers, home lab enthusiasts, and small businesses who need a cost-effective, programmable way to send and receive SMS messages. It is built for those who prefer to leverage their existing Android hardware and carrier plans rather than paying per-message commercial API fees.

  • Programmatic Sending: Exposes an API allowing external services to trigger outbound SMS messages directly through the Android device.
  • Real-Time Webhooks: Pushes instant webhook notifications to user-defined endpoints whenever an SMS or MMS is received.
  • End-to-End Encryption: Encrypts the message body and recipient numbers before they hit the API, decrypting them only on the local device.
  • Multi-SIM Support: Intelligently routes messages on devices equipped with dual or multiple SIM cards.
  • Binary Data SMS: Supports sending and receiving specialized binary data payloads for IoT device communication.
  • Private Server Compatibility: Allows users to route messages entirely through their own self-hosted backend infrastructure rather than a public cloud.

Where teams use it

Two-Factor Authentication

Allows small businesses or self-hosters to build their own secure SMS verification systems for user logins without paying commercial gateway fees.

IoT Device Management

Enables engineers to send encrypted binary data SMS commands to remote, low-bandwidth IoT hardware directly from a central server.

Transactional Notifications

Permits developers to automate appointment reminders, server alerts, or order confirmations using a dedicated, low-cost Android handset.

Centralized Inbox Routing

Helps teams aggregate incoming customer text messages by catching them via webhooks and routing them into tools like Slack or a CRM.

Getting started: Install the APK from GitHub releases or the Google Play Store, then configure your webhook endpoint in the app settings.

README

master branch

Contributors Forks Stargazers Issues Apache 2.0 License


Logo

SMS Gateway for Android™

Turns your smartphone into an SMS gateway for sending and receiving messages via API.
Explore the docs »

Report Bug · Request Feature

About The Project

SMS Gateway turns your Android smartphone into an SMS gateway. It's a lightweight application that allows you to send SMS messages programmatically via an API or CLI tool and receive webhooks on incoming SMS. This makes it ideal for integrating SMS functionality into your own applications or services.

Features

📱 Core Functionality:

  • 🆓 No registration required: No registration or email is required to create an account. In local mode, you don't need an account at all!
  • 📨 Send and Receive SMS via API: Use our API to send messages directly from your applications or services.
  • 🤖 Support for Android 5.0 and above: Compatible with Android 5.0 and later versions. See Android 15 Note

💬 Message Handling:

  • 📜 Multipart messages: Send long messages with auto-partitioning.
  • 📊 Message status tracking: Monitor the status of sent messages in real-time.
  • 📥 Incoming messages viewer: View all received SMS, Data SMS, and MMS messages directly in the app with organized tabs and statistics.
  • 🔔 Real-time incoming message notifications: Receive instant SMS and MMS notifications via webhooks.
  • 📖 Read received messages: Access previously received messages via the same webhooks used for real-time notifications.
  • 📎 MMS download notifications: Receive webhook notifications when MMS messages are fully downloaded, including message body and attachments.
  • 📤 Send MMS messages via API: Send multimedia messages (images, audio, video, files) with an optional subject and text body.
  • 📦 Batch webhook events: Receive batched webhook deliveries when multiple messages arrive at once, reducing the number of requests.
  • 🛑 Cancel pending messages: Cancel queued messages before they are sent.
  • 🔍 Message filtering: Filter the messages list by state (pending, sent, delivered, failed, etc.) and type to find messages quickly.
  • ⏳ Send rate limiting: Restrict the number of messages sent per period (e.g., per 30 minutes) to avoid operator throttling.
  • 🖼️ Send and receive MMS with payloads: Send images, audio, video, and other media as MMS with inline or URL-referenced attachments. Received attachments are persisted locally and exposed via the API. See docs/MMS.md.
  • 🔍 Message filtering: Filter messages by state (pending, sent, delivered, failed) and type (SMS, MMS, Data SMS) in the app's message list.
  • 📊 Webhook queue diagnostics: View and manage queued webhooks via a diagnostic screen in the app settings.

🔒 Security and Privacy:

  • 🔐 End-to-end encryption: Encrypts message content and recipients' phone numbers before sending them to the API and decrypts them on the device.
  • 🏢 Private server support: Use a backend server in your own infrastructure for enhanced security.

🔧 Advanced Features:

  • 💳 Multiple SIM card support: Supports devices with multiple SIM cards.
  • 📱📱 Multiple device support: Connect multiple devices to the same account with Cloud or Private server. Messages sent via the server are distributed across all connected devices.
  • 💾 Data SMS support: Send and receive binary data payloads via SMS for IoT commands, encrypted messages, and other specialized use cases.
  • 🕐 Working hours scheduling: Restrict message delivery to configurable time windows, automatically pausing the queue outside of them
  • 🔭 Webhook queue diagnostics: Inspect the webhook delivery queue in-app to see pending deliveries, retries, and their status.

🔌 Integration:

  • 🪝 Webhooks: Set up webhooks to be triggered on specified events.

Ideal For

  • 🔐 Authentication & Verification: Secure user accounts and transactions with SMS-based two-factor authentication, minimizing the risk of unauthorized access.
  • 📩 Transactional Messages: Send confirmation messages for user actions, enhancing the reliability and perception of your brand.
  • ⏰ SMS Reminders: Prompt users about upcoming events or appointments to ensure engagement and reduce missed opportunities.
  • 🔔 SMS Notifications: Deliver immediate notifications to users for important updates, offers, and service enhancements.
  • 📊 User Feedback: Solicit and collect user feedback through SMS, providing valuable insights for improving your services.

Note: It is not recommended to use this for batch sending due to potential mobile operator restrictions.

(back to top)

Built With

  • Kotlin
  • Ktor
  • Room
  • Firebase

(back to top)

Installation

You can install app to your device from prebuilt APK.

Build Variants

The project provides two pre-built variants:

  • Secure (release) build: Production-ready with strict security configurations. This is the recommended build for production deployments.
  • Insecure build: For development and testing with cleartext traffic allowed. This build should never be used in public environments.

Prerequisites

You need an Android device with Android 5.0 (Lollipop) or above for using the application.

Permissions

To use the application, you need to grant the following permissions:

  • SEND_SMS: This permission is required to send SMS messages.
  • READ_PHONE_STATE: This permission is optional. If you want to select the SIM card, you can grant this permission.
  • READ_SMS: This permission is optional. If you want to read previous SMS messages, you need to grant this permission.
  • RECEIVE_SMS: This permission is optional. If you want to receive webhooks on incoming SMS, you need to grant this permission.
  • RECEIVE_MMS, RECEIVE_WAP_PUSH: This permissions are optional. If you want to receive webhooks on incoming MMS messages, you need to grant these permissions.

Installation from APK

  1. Navigate to the Releases page.
  2. Download the latest APK file from the list of available releases.
  3. Transfer the APK file to your Android device.
  4. On your Android device, go to Settings > Security (or Privacy on some devices).
  5. Enable the Unknown sources option to allow installation of apps from sources other than the Play Store.
  6. Use a file manager app to navigate to the location of the downloaded APK file.
  7. Tap on the APK file to start the installation process.
  8. Follow the on-screen prompts to complete the installation.

(back to top)

Getting Started

For integration examples, please refer to the CLI Tool Documentation and API Documentation

The SMS Gateway for Android can work in two modes: with a Local Server started on the device or with a Cloud Server. The basic API is the same for both modes and is documented on the SMS Gateway for Android API Documentation page.

Local Server

Local server example settings

This mode is ideal for sending messages from a local network.

  1. Launch the app on your device.

  2. Toggle the Local Server switch to the "on" position.

  3. Tap the Offline button at the bottom of the screen to activate the server.

  4. In the Local Server section, your device's local and public IP addresses will be displayed, along with the credentials for basic authentication. Note that the public IP address is only accessible if you have a public (or "white") IP and your firewall is configured correctly.

  5. To send a message from within the local network, execute a curl command like the one below. Replace <username>, <password>, and <device_local_ip> with the actual values provided in the previous step:

    curl -X POST -u <username>:<password> \
      -H "Content-Type: application/json" \
      -d '{ "textMessage": { "text": "Hello, doctors!" }, "phoneNumbers": ["+19162255887", "+19162255888"] }' \
      http://<device_local_ip>:8080/message

    Alternatively, you can use the CLI Tool:

    smsgate -e 'http://<device_local_ip>:8080/message' -u <username> -p <password> \
      send --phones '+19162255887,+19162255888' 'Hello, doctors!'

    To send an MMS message, use the mmsMessage field with one or more Base64-encoded attachments:

    curl -X POST -u <username>:<password> \
      -H "Content-Type: application/json" \
      -d '{ "mmsMessage": { "subject": "Hello", "text": "See the photo", "attachments": [ { "contentType": "image/jpeg", "name": "photo.jpg", "data": "<base64-encoded-bytes>" } ] }, "phoneNumbers": ["+19162255887"] }' \
      http://<device_local_ip>:8080/message

    Note: The data field must contain Base64-encoded bytes. The app must be set as the device's default SMS app for reliable MMS sending on most carriers.

The full API reference is available as interactive Swagger documentation at http://<device_local_ip>:8080/docs.

Cloud Server

Cloud server example settings

Use the cloud server mode when dealing with dynamic or shared device IP addresses.

  1. Launch the app on your device.

  2. Toggle the Cloud Server switch to the "on" position.

  3. Tap the Online button located at the bottom of the screen to connect to the cloud server.

  4. In the Cloud Server section, the credentials for basic authentication will be displayed.

  5. To send a message via the cloud server, perform a curl request with a command similar to the following, substituting <username> and <password> with the actual values obtained in step 4:

    curl -X POST -u <username>:<password> \
      -H "Content-Type: application/json" \
      -d '{ "textMessage": { "text": "Hello, doctors!" }, "phoneNumbers": ["+19162255887", "+19162255888"] }' \
      https://api.sms-gate.app/3rdparty/v1/message

    Or with CLI:

    smsgate -u <username> -p <password> \
      send --phones '+19162255887,+19162255888' 'Hello, doctors!'

For further privacy, you can deploy your own private server. See the Private Server section for more details.

When connected to the cloud server, received messages (SMS, Data SMS, and MMS) are automatically uploaded to the server for centralized access.

Webhooks

Use webhooks to receive notifications for messaging events (e.g., incoming SMS and MMS).

Supported Events
Event Description
sms:received Triggered when an SMS message is received
sms:batch:received Triggered when multiple SMS messages are received at once (batched)
sms:sent Triggered when an SMS message is sent
sms:delivered Triggered when an SMS message is delivered
sms:failed Triggered when an SMS message fails to send
sms:cancelled Triggered when a pending SMS message is cancelled
sms:data-received Triggered when a data SMS is received
sms:batch:data-received Triggered when multiple data SMS messages are received at once (batched)
mms:received Triggered when an MMS notification is received (before download)
mms:batch:received Triggered when multiple MMS notifications are received at once (batched)
mms:downloaded Triggered when an MMS message is fully downloaded with body and attachments
mms:batch:downloaded Triggered when multiple MMS messages are fully downloaded (batched)
app:started Triggered when the app is started, with the list of active SIM cards
system:ping Periodic heartbeat event
Setting Up Webhooks

Follow these steps to set up webhooks:

  1. Set up your own HTTP server with a valid SSL certificate to receive webhooks. For testing purposes, webhook.site can be useful.

  2. Register your webhook with an API request:

    curl -X POST -u <username>:<password> \
      -H "Content-Type: application/json" \
      -d '{ "id": "unique-id", "url": "https://webhook.site/<your-uuid>", "event": "sms:received" }' \
      http://<device_local_ip>:8080/webhooks
  3. Send an SMS to the device.

  4. The application will dispatch POST request to the specified URL with a payload such as:

    {
      "event": "sms:received",
      "payload": {
        "messageId": "msg_12345abcde",
        "message": "Received SMS text",
        "phoneNumber": "+19162255887",
        "simNumber": 1,
        "receivedAt": "2024-06-07T11:41:31.000+07:00"
      }
    }
  5. To deregister a webhook, execute a curl request using the following pattern:

    curl -X DELETE -u <username>:<password> \
      http://<device_local_ip>:8080/webhooks/unique-id

For cloud mode the process is similar, simply change the URL to https://api.sms-gate.app/3rdparty/v1/webhooks. Webhooks in Local and Cloud mode are independent.

Note: Webhooks are transmitted directly from the device; therefore, the device must have an outgoing internet connection. As the requests originate from the device, incoming messages remain inaccessible to us.

(back to top)

Roadmap

  • Add functionality to modify user credentials.
  • Introduce option to adjust the local server port.
  • Send notifications to an external server when the status of a message changes.
  • Incorporate scheduling capabilities for dispatching messages at specific times.
  • Implement region-based restrictions to prevent international SMS.
  • Provide an API endpoint to retrieve the list of available SIM cards on the device.
  • Include detailed error messages in responses and logs.
  • Send MMS messages via the API.

See the open issues for a full list of proposed features (and known issues).

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the Apache-2.0 license. See LICENSE for more information.

(back to top)

Contact

If you have any questions or suggestions, feel free to reach out through the following channels:

Links

(back to top)

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Discussions

all 33

Releases and announcements

145 total
  1. v1.77.1v1.77.1Oct 1, 2026pre-release240 downloads

    ## What's Changed * [localserver] expose `createdAt` field by @capcom6 in https://github.com/capcom6/android-sms-gateway/pull/438 **Full Changelog**: https://github.com/capcom6/android-sms-gateway/compare/v1.77.0...v1.77.1 ## What's Changed * [localserver] expose `createdAt` field by @capcom6 in https://github.com/capcom6/android-sms-gateway/pull/438 **Full Changelog**: https://github.com/capcom6/android-sms-gateway/compare/v1.77.0...v1.77.1

  2. v1.77.0v1.77.0Sep 29, 20261.3K downloads

    ## What's Changed * [device] device key operations and hybrid encryption by @capcom6 in https://github.com/capcom6/android-sms-gateway/pull/415 **Full Changelog**: https://github.com/capcom6/android-sms-gateway/compare/v1.76.0...v1.77.0

  3. v1.76.0v1.76.0Sep 25, 2026852 downloads

    ## What's Changed * [gateway] add inbox upload flow by @capcom6 in https://github.com/capcom6/android-sms-gateway/pull/420 **Full Changelog**: https://github.com/capcom6/android-sms-gateway/compare/v1.75.1...v1.76.0

  4. v1.75.1v1.75.1Sep 8, 20262K downloads

    ## What's Changed * [messages] new API for delivery status parsing by @capcom6 in https://github.com/capcom6/android-sms-gateway/pull/419 **Full Changelog**: https://github.com/capcom6/android-sms-gateway/compare/v1.75.0...v1.75.1

  5. v1.75.0v1.75.0Sep 3, 20264.9K downloads

    ## What's Changed * [webhooks] queue UI by @capcom6 in https://github.com/capcom6/android-sms-gateway/pull/410 **Full Changelog**: https://github.com/capcom6/android-sms-gateway/compare/v1.74.1...v1.75.0

Commits per week

last 52 weeks
80Week of 2025-10-12: 1 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 1 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 1 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 3 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 2 commitsWeek of 2026-01-18: 2 commitsWeek of 2026-01-25: 1 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 6 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 1 commitsWeek of 2026-03-08: 2 commitsWeek of 2026-03-15: 1 commitsWeek of 2026-03-22: 1 commitsWeek of 2026-03-29: 2 commitsWeek of 2026-04-05: 6 commitsWeek of 2026-04-12: 2 commitsWeek of 2026-04-19: 2 commitsWeek of 2026-04-26: 2 commitsWeek of 2026-05-03: 1 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 1 commitsWeek of 2026-05-24: 1 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 1 commitsWeek of 2026-06-14: 6 commitsWeek of 2026-06-21: 8 commitsWeek of 2026-06-28: 3 commitsWeek of 2026-07-05: 2 commitsWeek of 2026-07-12: 1 commitsWeek of 2026-07-19: 1 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 6 commitsWeek of 2026-08-09: 8 commitsWeek of 2026-08-16: 2 commitsWeek of 2026-08-23: 2 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 3 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 2 commitsWeek of 2026-10-04: 0 commitsOct 12, 2025Oct 4, 2026
84 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 2 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 1 commitsSun 6:00 — 3 commitsSun 7:00 — 2 commitsSun 8:00 — 2 commitsSun 9:00 — 1 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 2 commitsSun 15:00 — 1 commitsSun 16:00 — 1 commitsSun 17:00 — 0 commitsSun 18:00 — 1 commitsSun 19:00 — 0 commitsSun 20:00 — 5 commitsSun 21:00 — 3 commitsSun 22:00 — 0 commitsSun 23:00 — 2 commitsMon 0:00 — 0 commitsMon 1:00 — 0 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 4 commitsMon 7:00 — 3 commitsMon 8:00 — 4 commitsMon 9:00 — 5 commitsMon 10:00 — 3 commitsMon 11:00 — 2 commitsMon 12:00 — 1 commitsMon 13:00 — 1 commitsMon 14:00 — 2 commitsMon 15:00 — 2 commitsMon 16:00 — 1 commitsMon 17:00 — 3 commitsMon 18:00 — 1 commitsMon 19:00 — 0 commitsMon 20:00 — 3 commitsMon 21:00 — 1 commitsMon 22:00 — 3 commitsMon 23:00 — 17 commitsTue 0:00 — 2 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 3 commitsTue 6:00 — 4 commitsTue 7:00 — 0 commitsTue 8:00 — 2 commitsTue 9:00 — 14 commitsTue 10:00 — 1 commitsTue 11:00 — 2 commitsTue 12:00 — 4 commitsTue 13:00 — 6 commitsTue 14:00 — 1 commitsTue 15:00 — 4 commitsTue 16:00 — 2 commitsTue 17:00 — 3 commitsTue 18:00 — 1 commitsTue 19:00 — 9 commitsTue 20:00 — 5 commitsTue 21:00 — 2 commitsTue 22:00 — 2 commitsTue 23:00 — 6 commitsWed 0:00 — 2 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 7 commitsWed 7:00 — 3 commitsWed 8:00 — 5 commitsWed 9:00 — 5 commitsWed 10:00 — 3 commitsWed 11:00 — 5 commitsWed 12:00 — 3 commitsWed 13:00 — 2 commitsWed 14:00 — 0 commitsWed 15:00 — 2 commitsWed 16:00 — 8 commitsWed 17:00 — 4 commitsWed 18:00 — 1 commitsWed 19:00 — 2 commitsWed 20:00 — 2 commitsWed 21:00 — 2 commitsWed 22:00 — 2 commitsWed 23:00 — 6 commitsThu 0:00 — 2 commitsThu 1:00 — 1 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 7 commitsThu 7:00 — 4 commitsThu 8:00 — 4 commitsThu 9:00 — 8 commitsThu 10:00 — 7 commitsThu 11:00 — 2 commitsThu 12:00 — 2 commitsThu 13:00 — 2 commitsThu 14:00 — 7 commitsThu 15:00 — 7 commitsThu 16:00 — 2 commitsThu 17:00 — 4 commitsThu 18:00 — 1 commitsThu 19:00 — 3 commitsThu 20:00 — 3 commitsThu 21:00 — 1 commitsThu 22:00 — 1 commitsThu 23:00 — 2 commitsFri 0:00 — 4 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 2 commitsFri 7:00 — 5 commitsFri 8:00 — 4 commitsFri 9:00 — 20 commitsFri 10:00 — 1 commitsFri 11:00 — 4 commitsFri 12:00 — 3 commitsFri 13:00 — 2 commitsFri 14:00 — 6 commitsFri 15:00 — 3 commitsFri 16:00 — 4 commitsFri 17:00 — 3 commitsFri 18:00 — 0 commitsFri 19:00 — 1 commitsFri 20:00 — 2 commitsFri 21:00 — 1 commitsFri 22:00 — 1 commitsFri 23:00 — 1 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 3 commitsSat 7:00 — 3 commitsSat 8:00 — 4 commitsSat 9:00 — 0 commitsSat 10:00 — 3 commitsSat 11:00 — 1 commitsSat 12:00 — 0 commitsSat 13:00 — 1 commitsSat 14:00 — 1 commitsSat 15:00 — 0 commitsSat 16:00 — 4 commitsSat 17:00 — 0 commitsSat 18:00 — 0 commitsSat 19:00 — 1 commitsSat 20:00 — 0 commitsSat 21:00 — 1 commitsSat 22:00 — 1 commitsSat 23:00 — 3 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits82 (98%)
Community commits2 (2%)

84 commits in total over the last year.

DateListRankStars gained
Apr 5, 2026daily#11+398
  • public-apis/public-apis

    A collective list of free APIs

    486.1K stars · Python

  • flutter/flutter

    Flutter makes it easy and fast to build beautiful apps for mobile and beyond

    179.3K stars · Dart

  • Genymobile/scrcpy

    Display and control your Android device

    151K stars · C

  • ocornut/imgui

    Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies

    76.5K stars · C++

  • bannedbook/fanqiang

    翻墙-科学上网

    53.8K stars · Kotlin

  • Kong/insomnia

    The open-source, cross-platform API client for GraphQL, REST, WebSockets, SSE and gRPC. With Cloud, Local and Git storage.

    40K stars · TypeScript