Send a Notification
Pushmark is designed around a single HTTPS request to a public channel hash.
Endpoint
POST https://api.pushmark.app/<channel_hash>
Replace <channel_hash> with the hash shown in your channel page.
Payload shape
Public channel delivery is centered around a compact JSON body:
{
"message": "Checkout API error rate passed 5% in the last 10 minutes.",
"type": "error"
}
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.",
"type": "success"
}'
pushmark -t success 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.',
type: 'success',
}),
});
import requests
requests.post(
"https://api.pushmark.app/YOUR_CHANNEL_HASH",
json={
"message": "CPU usage is back to normal.",
"type": "info",
},
)
- 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.",
"type": "success"
}'
More examples
- Go
- Java
- Swift
- PHP cURL
- PHP Guzzle
payload := map[string]string{
"message": "Nightly backup uploaded successfully.",
"type": "success",
}
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.\", \"type\": \"success\"}"))
.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.",
"type": "success"
])
URLSession.shared.dataTask(with: request).resume()
<?php
$data = json_encode([
"message" => "Nightly backup uploaded successfully.",
"type" => "success",
]);
$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.",
"type" => "success",
],
]);
echo $response->getBody();
Notification types
Current product examples use a small set of notification types:
infosuccesswarningerrorlog
Delivery expectations
- Send from a trusted server, automation, or CI environment
- Keep the
messageconcise enough to scan at a glance - Use separate public channels for unrelated workflows
- Treat private channels as coming soon
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
