Send a Notification
Pushmark is designed around a single HTTPS request to a channel hash. Create a channel — in the dashboard or directly in the Pushmark app — copy its hash, and post a message to it.
Endpoint
POST https://api.pushmark.app/<channel_hash>
Replace <channel_hash> with the hash shown in your channel page.
Payload shape
Delivery is centered around a compact JSON body. At its simplest, all you need is a message:
{
"message": "Checkout API error rate passed 5% in the last 10 minutes."
}
Integration examples
Use the tabs below for the fastest copy-paste starting points. If you need a language-specific variant, see More examples right after.
- cURL
- Pushmark CLI
- JavaScript
- Python
- GitHub Actions
curl -X POST "https://api.pushmark.app/YOUR_CHANNEL_HASH" \
-H "Content-Type: application/json" \
-d '{
"message": "Nightly backup uploaded successfully."
}'
pushmark YOUR_CHANNEL_HASH "Nightly backup uploaded successfully."
Install guide: pushmark/pushmark-cli
await fetch('https://api.pushmark.app/YOUR_CHANNEL_HASH', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Deploy finished successfully.',
}),
});
import requests
requests.post(
"https://api.pushmark.app/YOUR_CHANNEL_HASH",
json={
"message": "CPU usage is back to normal.",
},
)
- name: Notify Pushmark
run: |
curl -X POST "https://api.pushmark.app/${{ secrets.PUSHMARK_CHANNEL_HASH }}" \
-H "Content-Type: application/json" \
-d '{
"message": "Release '${{ github.sha }}' is live."
}'
More examples
- Go
- Java
- Swift
- PHP cURL
- PHP Guzzle
payload := map[string]string{
"message": "Nightly backup uploaded successfully.",
}
jsonData, _ := json.Marshal(payload)
resp, _ := http.Post(
"https://api.pushmark.app/YOUR_CHANNEL_HASH",
"application/json",
bytes.NewBuffer(jsonData),
)
defer resp.Body.Close()
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.pushmark.app/YOUR_CHANNEL_HASH"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("{\"message\": \"Nightly backup uploaded successfully.\"}"))
.build();
client.send(request, HttpResponse.BodyHandlers.ofString());
let url = URL(string: "https://api.pushmark.app/YOUR_CHANNEL_HASH")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try! JSONSerialization.data(withJSONObject: [
"message": "Nightly backup uploaded successfully."
])
URLSession.shared.dataTask(with: request).resume()
<?php
$data = json_encode([
"message" => "Nightly backup uploaded successfully.",
]);
$ch = curl_init("https://api.pushmark.app/YOUR_CHANNEL_HASH");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
<?php
use GuzzleHttp\Client;
$client = new Client();
$response = $client->post("https://api.pushmark.app/YOUR_CHANNEL_HASH", [
"json" => [
"message" => "Nightly backup uploaded successfully.",
],
]);
echo $response->getBody();
Delivery expectations
- Send from a trusted server, automation, or CI environment
- Keep the
messageconcise enough to scan at a glance - Use separate channels for unrelated workflows
Next: configure your notifications
The examples above send a plain message. Need a severity type, a custom title, images, or structured JSON? See Notification Configuration for the full request-body reference.
Using Pushmark from AI agents
If you want an AI agent to work with Pushmark directly, use the Pushmark MCP endpoint instead of asking the model to generate raw HTTP requests every time.
That setup works well with tools like Codex, Cursor, Claude Code, and other MCP-compatible clients. See AI Agents and MCP for:
- MCP client setup
- examples for Codex, Cursor, and Claude Code
- agent prompt examples for sending notifications and inspecting channels
