Push Notification API
for Critical Alerts

Signalgrid provides a simple API to developers, sysadmins, and ops teams
for sending push notifications to iOS, Android, Browsers and more.

App Preview

Integrate tonight.

A simple API so you can start sending notifications in minutes.
It fits right into your favorite programming languages.

import requests response = requests.post( 'https://api.signalgrid.co/v1/push', data={ 'client_key': '[your-client-key]', 'channel': '[channel-token]', 'type': 'info', 'title': 'This is the title', 'body': 'This is the body', } ) print(response.text)
View on Github
use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
   let mut params = HashMap::new();
   params.insert("client_key", "[your-client-key]");
   params.insert("channel", "[channel-token]");
   params.insert("type", "info");
   params.insert("title", "This is the title");
   params.insert("body", "This is the body");

   let data: serde_json::Value = reqwest::Client::new()
      .post("https://api.signalgrid.co/v1/push")
      .form(&params)
      .send()
      .await?
      .json()
      .await?;

   Ok(())
}
require 'net/http'
require 'uri'
require 'json'

uri = URI.parse("https://api.signalgrid.co/v1/push")

payload = {
   "client_key" => "[your-client-key]",
   "channel" => "[channel-token]",
   "type" => "info",
   "title" => "This is the title",
   "body" => "This is the body"
}
response = Net::HTTP.post_form(uri, payload)
data = JSON.parse(response.body)
use HTTP::Tiny;

my $response = HTTP::Tiny->new->post_form('https://api.signalgrid.co/v1/push', {
   client_key => '[your-client-key]',
   channel => '[channel-token]',
   type => 'info',
   title => 'This is the title',
   body => 'This is the body',
});

my $result = $response->{content};
$request = stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/x-www-form-urlencoded', 'content' => http_build_query([ "client_key" => "[your-client-key]", "channel" => "[channel-token]", "type" => "info", "title" => "This is the title", "body" => "This is the body", ]) ] ]); $result = file_get_contents( "https://api.signalgrid.co/v1/push", false, $request );
use Illuminate\Support\Facades\Http;

$response = Http::asForm()->post('https://api.signalgrid.co/v1/push', [
   'client_key' => '[your-client-key]',
   'channel' => '[channel-token]',
   'type' => 'info',
   'title' => 'This is the title',
   'body' => 'This is the body',
]);

$result = $response->body();
import requests

url = 'https://api.signalgrid.co/v1/push'
payload = {
   'client_key': '[your-client-key]',
   'channel': '[channel-token]',
   'type': 'info',
   'title': 'This is the title',
   'body': 'This is the body'
}

response = requests.post(url, data=payload)
result = response.text
use Cake\Http\Client;

$http = new Client();

$response = $http->post('https://api.signalgrid.co/v1/push', [
   'client_key' => '[your-client-key]',
   'channel' => '[channel-token]',
   'type' => 'info',
   'title' => 'This is the title',
   'body' => 'This is the body',
]);

$result = $response->getStringBody();
// INSTALL
// curl -fsSL https://signalgrid.co/install.sh | bash

signalgrid send \
 -c [channel-token] \
 -s info \
 -t "This is the title" \
 -b "This is the body"
View on Github
// INSTALL
// composer require signalgridco/signalgrid-php

require DIR . '/vendor/autoload.php';

use Signalgrid\Client;
use Signalgrid\Exception;

try {
   $client = new Signalgrid\Client('[your-client-key]');

   $response = $client->send([
      'channel' => '[channel-token]',
      'type' => 'info',
      'title' => 'This is the title',
      'body' => 'This is the body',
   ]);

}catch (Exception $e) {
   echo $e->getMessage();
}
View on Github
const formData = new FormData();
formData.append('client_key', '[your-client-key]');
formData.append('channel', '[channel-token]');
formData.append('type', 'INFO');
formData.append('title', 'This is the title');
formData.append('body', 'This is the body');

fetch('https://api.signalgrid.co/v1/push', {
   method: 'POST',
   body: formData
})
.then(response => response.json())
.then(data => console.log('Success:', data))
.catch(error => console.error('Error:', error));
import Signalgrid from '@signalgrid/signalgrid-push';

const sg = new Signalgrid('[your-client-key]');

const result = await sg.send({
   channel: '[channel-token]',
   title: 'This is the title',
   body: 'This is the body',
   type: 'info',
});

console.log(result);
View on Github
package main

import "github.com/signalgridco/signalgrid-go"

func main() {
   c, _ := signalgrid.NewClient("[your-client-key]")
   c.Send(signalgrid.Message{
      Channel: "[channel-token]",
      Type: "info",
      Title: "This is the title",
      Body: "This is the body",
   })
}
View on Github
curl -s \
   --form-string "client_key=[your-client-key]" \
   --form-string "channel=[channel-token]" \
   --form-string "type=INFO" \
   --form-string "title=This is the title" \
   --form-string "body=This is the body" \
https://api.signalgrid.co/v1/push

Pushing past the basics.

Signalgrid provides all the tools you need to stay in the loop

Clean & Simple Interface

With a clean and intuitive interface, Signalgrid helps you find what you need quickly, understand your setup at a glance, and stay focused on the alerts that matter instead of getting lost in noise.

On all platforms.

Deliver alerts to Apple and Google devices, browsers, email, and your own API's.

If everything is urgent, nothing is.

Signalgrid lets you set severity levels and channels to keep your alerts organized, readable, and actually useful. Because once everything looks urgent, people stop caring.

Track progress with Activities.

Using Apple Live Activities, and Android Ongoing Notifications - Signalgrid lets you create live, persistent updates for workflows that stay active over time - from deployments and backups to imports and long-running jobs.

Everything in one place.

Manage channels, send notifications, review activity, and keep an eye on what is happening from a clean web dashboard built to stay clear and easy to use.

See what’s going on.

Understand activity, volume, and changes at a glance with a cleaner view of your data.

Working with software
you already use.

Monitoring

Turn noisy Zabbix alerts into notifications people actually notice.

Integrate

Stop relying on emails and send Nagios alerts right where they matter.

Integrate

Push Icinga alerts through Signalgrid instead of hoping email does the job.

Integrate

SDKs & Libraries

Add notifications to your Python app without building the whole delivery stack yourself.

Integrate

Send notifications from PHP without stitching together your own alerting mess.

Integrate

Wire notifications into your Node.js app without wasting a weekend on infrastructure.

Integrate

Other Plugins

Send notifications from WordPress without relying on plugins held together by hope.

Integrate
OpenClaw Push

Let OpenClaw trigger Signalgrid notifications as part of your automations and agent workflows.

Integrate
OpenClaw Activities

Want regular updates on long-running jobs? Look no further.

Integrate

Pricing

One subscription. All platforms.

Free License

Free plan with essential features and reliable delivery to get you started


  • 10.000 Notifications per month
  • 3 Devices / Endpoints
  • Unlimited Channels
  • Web, iOs, Android
  • App badge-sync
  • High Priority Queue
  • Critical notifications
  • Members

Free
This is a free version, no payment required Get started  

Single License

For individual users who need fast, reliable notifications across all their devices


  • Unlimited Notifications
  • 10 Devices / Endpoints
  • Unlimited Channels
  • Web, iOs, Android
  • App badge-sync
  • High Priority Queue
  • Critical notifications
  • Team members

$4.99/mo
Plan auto-renews for $4.99/month until canceled Get started  

Teams License

For organizations needing synchronized notifications and centralized management


  • Unlimited Notifications
  • 20 Devices / Endpoints
  • Unlimited Channels
  • Web, iOs, Android
  • App badge-sync
  • High Priority Queue
  • Critical notifications
  • Team members

$4.99/mo per seat
Plan auto-renews for $4.99/month until canceled Get started  

* With paid subscriptions we do not limit the number of notifications you can send.
We do however enforce rate-limits to prevent abuse and make sure our service stays healthy and usable for everybody.
For more information about rate-limits visit our Documentation

Any questions?

Frequently asked
questions

Everything you need to know about our service and policies.
Can't find the answer you're looking for? Reach out!


Contact us
What platforms are supported?
Signalgrid is available on iOS (iPhone and iPad), Android, and macOS.
We also offer a full-featured web dashboard for managing your alerts from any browser.
How does the Team subscription work?
The Teams Subscription lets you add members to your team.
As the owner, you handle the billing; your team members do not need their own subscriptions to receive alerts or use the app.
What devices / endpoints are supported?
Our platform supports seamless notification delivery across Web, Android, and iOS platforms, as well as via Email and External APIs.
By leveraging our API capabilities, you can develop custom notification actions or integrate existing endpoints, such as Pushover and ntfy, into your workflow.
Can I be a member of multiple teams?
Yes. A single Signalgrid account can be part of multiple teams.
This is ideal for freelancers or consultants who manage alerts for different clients or projects.

Critical alerts on every platform. One API

Send push notifications to iOS, Android, and browsers without building the whole stack