Integrations & Endpoints
Is there an API?
There is no management API yet. You cannot currently create, update, list or delete monitors programmatically, and there is no user-facing API token feature.
What Pingniner does expose is ingest endpoints — URLs that accept data into the platform. There are two kinds, and only the first is intended for you to call directly:
| Endpoint | Called by | Purpose |
|---|---|---|
| Heartbeat ping | Your code | Report that a scheduled job ran |
| Agent ingest | The agent | Report server and workstation metrics |
If you need a management API, say so in a support ticket — demand is what decides what gets built.
Heartbeat ping
This is the endpoint you will actually integrate with. Full documentation with code examples for cron, PHP, Python, Ruby, Node.js, Perl and Bash is on the Heartbeats page; this is the reference.
Endpoint
GET https://ingest.pingniner.com/api/heartbeat/{key}{key} is the heartbeat monitor's ID, shown on its Overview page.
Optional query parameters
| Parameter | Type | Description |
|---|---|---|
runtime | number | How long the job took, in seconds |
memory | number | Peak memory used, in MB |
message | string | A short note, URL-encoded |
Example
curl -fsS -m 10 --retry 5 -o /dev/null \
"https://ingest.pingniner.com/api/heartbeat/YOUR_KEY?runtime=42&memory=128&message=Backup%20complete"Response
{ "success": true, "message": "Received successfully" }An unknown key returns:
{ "success": false, "message": "Heartbeat not found" }Authentication: none. The key in the URL is the credential.
Pingniner also records the source IP address and user agent of each ping, both visible in the heartbeat's history.
TIP
Call the ping URL after your job succeeds, not at the start. A heartbeat that fires before the work happens only proves the job started.
Agent ingest
These endpoints exist for the agent and are documented for completeness. You should not need to call them yourself — install the agent instead.
POST https://ingest.pingniner.com/api/server/{key}
POST https://ingest.pingniner.com/api/workstation/{key}{key} is the server or workstation monitor's key. The body is a JSON payload produced by the systeminformation library — see What the Agent Collects for the fields.
Authentication: none. The key in the URL is the credential.
WARNING
Because these endpoints are unauthenticated beyond the key, anyone holding a monitor key can post data to that monitor. Treat keys like passwords: do not paste install commands containing real keys into tickets, shared documents or chat.
Outbound webhooks
Pingniner can call your endpoint when an incident opens or closes. That is configured per user as a notification channel, not here.
The request is a POST with a User-Agent of Pingniner and a body of:
{
"message": "Incident: My Website - Offline @ 2026-08-27 14:32:00"
}Use this to reach anything without a built-in integration — PagerDuty, Opsgenie or your own automation. Slack, Microsoft Teams, Google Chat and Discord all have dedicated channels of their own; see Notification Channels.
Status page subscriptions
Status page subscribers manage themselves through the public page. There is no endpoint for adding subscribers programmatically, deliberately — subscriptions are double opt-in so that nobody can be signed up by someone else.
Network requirements
Everything ingested goes to a single host:
| Host | Port | Direction |
|---|---|---|
ingest.pingniner.com | 443 (HTTPS) | Outbound from your infrastructure |
Add it to any egress allowlist. Nothing needs to be open inbound.
If you are allowlisting Pingniner's outbound checks — the addresses our site, ping and port monitors connect from — see the IP list in the FAQ.
