Signal
URL Format
signal://[user
[:password
]@]host
[:port
]/source_phone
/recipient1
[,recipient2
,...]
Setting up Signal API Server
Signal notifications require a Signal API server that can send messages on behalf of a registered Signal account. These implementations are built on top of signal-cli, the unofficial command-line interface for Signal (3.8k+ stars).
Popular open-source implementations include:
- signal-cli-rest-api: Dockerized REST API wrapper for signal-cli
- secured-signal-api: Security proxy for signal-cli-rest-api with authentication and access control
Common setup involves:
- Phone Number: A dedicated phone number registered with Signal
- API Server: A server running signal-cli with REST API capabilities
- Account Linking: Linking the server as a secondary device to your Signal account
- Optional Security Layer: Authentication and endpoint restrictions via a proxy
The server must be able to receive SMS verification codes during initial setup and maintain a persistent connection to Signal's servers.
Setup Resources
See the signal-cli-rest-api documentation and secured-signal-api documentation for detailed setup instructions.
URL Parameters
Host and Port
host
: The hostname or IP address of your Signal API server (default: localhost)port
: The port number (default: 8080)
Authentication
The Signal service supports multiple authentication methods:
user
: Username for HTTP Basic Authentication (optional)password
: Password for HTTP Basic Authentication (optional)token
orapikey
: API token for Bearer authentication (optional)
Authentication Priority
If both token and user/password are provided, the API token takes precedence and uses Bearer authentication. This is useful for secured-signal-api which prefers Bearer tokens.
Source Phone Number
The source_phone
is your Signal phone number with country code (e.g., +1234567890) that is registered with the API server.
Recipients
Recipients can be:
- Phone numbers: With country code (e.g., +0987654321)
- Group IDs: In the format
group.groupId
TLS Configuration
- Use
signal://
for HTTPS (default, recommended) - Use
signal://...?disabletls=yes
for HTTP (insecure, for local testing only)
Examples
Send to a single phone number
signal://localhost:8080/+1234567890/+0987654321
Send to multiple recipients
signal://localhost:8080/+1234567890/+0987654321/+1123456789/group.testgroup
Send to a group
signal://localhost:8080/+1234567890/group.abcdefghijklmnop=
With authentication
signal://user:password@localhost:8080/+1234567890/+0987654321
With API token (Bearer auth)
signal://localhost:8080/+1234567890/+0987654321?token=YOUR_API_TOKEN
Using HTTP instead of HTTPS
signal://localhost:8080/+1234567890/+0987654321?disabletls=yes
Optional Parameters
You can specify additional parameters in the URL query string:
disabletls=yes
: Force HTTP instead of HTTPS (same as usingsignals://
)
Implementation Notes
The Signal service sends messages using HTTP POST requests to the API server's send endpoint with JSON payloads containing the message, source number, and recipient list. The server handles the actual Signal protocol communication.