Connect your monitoring
Ping receives alerts from the tools you already run. You send them to a URL and authenticate with your API key. The last part of the URL picks the provider — the format Ping should decode — so each alert maps to a clean incident instead of raw JSON. One API key works with every provider; only the URL changes.
The two things every tool needs
The ingestion URL — each provider has its own path. Use the one that matches your tool:
https://api.kunobi.ninja/api/webhooks/<provider>For example .../api/webhooks/signoz for SigNoz, .../api/webhooks/grafana
for Grafana, or .../api/webhooks/raw for the generic JSON format.
Your API key — created in the Ping tab (see
Get started). Send it as an
Authorization: Bearer <key> header, an x-api-key header, or the
password on a Basic-auth webhook — whichever your tool supports. Either
way, the key is what tells Ping which team to alert. The key is not tied to
any provider, so the same key works on every endpoint.
Pick the right endpoint
The provider is the last path segment of the ingestion URL. Ping uses it to map each incoming payload to a clean incident (title, summary, service, severity), so your notifications read well.
| Provider | Endpoint | Use it for |
|---|---|---|
| Generic | /api/webhooks/raw | Anything that can POST JSON. The safe default. |
| SigNoz | /api/webhooks/signoz | SigNoz alert webhooks. |
| Grafana | /api/webhooks/grafana | Grafana alerting contact points. |
| Prometheus (Alertmanager) | /api/webhooks/prometheus | Alertmanager webhook_configs. |
| VictoriaMetrics (vmalert) | /api/webhooks/vmalert | vmalert notifications. |
| Thanos | /api/webhooks/thanos | Thanos Ruler via Alertmanager. |
| Grafana Mimir | /api/webhooks/mimir | Mimir alerting via Alertmanager. |
One key, every provider. Send alerts from both Grafana and SigNoz with a single
key — just point each tool at its own endpoint (.../grafana and .../signoz).
Create more keys only when you want to revoke or rotate them independently.
Tool guides
Grafana
- In Grafana, go to Alerting → Contact points → Add contact point.
- Choose the Webhook integration.
- Set the URL to
https://api.kunobi.ninja/api/webhooks/grafana. - Under the webhook's authentication, set Basic auth and paste your Ping API
key as the password (leave the username blank or use
ping). - Save, then use Test to send a sample alert.
SigNoz
- In SigNoz, open Settings → Alert Channels → New channel.
- Choose the Webhook type.
- Set the URL to
https://api.kunobi.ninja/api/webhooks/signoz. - Add your Ping API key as the webhook credential — SigNoz sends it as an
Authorization: Bearer <key>header (or Basic-auth password). - Save and send a test.
Prometheus Alertmanager (and vmalert, Thanos, Mimir)
Add a webhook receiver to your Alertmanager config, pointing at the endpoint for
your tool (/prometheus, /vmalert, /thanos, or /mimir):
receivers:
- name: kunobi-ping
webhook_configs:
- url: https://api.kunobi.ninja/api/webhooks/prometheus
http_config:
basic_auth:
password: <your-ping-api-key>
vmalert, Thanos Ruler, and Grafana Mimir all speak the same Alertmanager webhook shape — use the matching endpoint for each and the same config otherwise.
Anything else
If your tool can send an HTTP POST with a JSON body, use the generic endpoint,
/api/webhooks/raw. Point it at that URL and pass your key as a bearer token, an
x-api-key header, or the Basic-auth password.
The generic webhook body
The generic endpoint (/api/webhooks/raw) accepts a small, predictable JSON
object — one alert per request. Send it with your API key in the x-api-key
header (or Authorization: Bearer):
curl -sS -X POST https://api.kunobi.ninja/api/webhooks/raw \
-H "Content-Type: application/json" \
-H "x-api-key: $PING_API_KEY" \
-d '{"source":"grafana","dedup_key":"checkout-5xx-01","title":"Payments API is down","summary":"Elevated 5xx on checkout","service":"payments-api","severity":"critical"}'
Fields
| Field | Required | Notes |
|---|---|---|
source | Yes | Where the alert came from, e.g. grafana. |
dedup_key | Recommended | A unique idempotency key. Repeats are de-duplicated, so a retried or flapping alert won't page your team twice. |
title | Yes | Short headline shown in the notification. |
summary | Yes | One-line detail. |
service | Yes | The affected service. |
severity | Yes | One of critical, warning, or info. |
Example
{
"source": "grafana",
"dedup_key": "checkout-5xx-01",
"title": "Payments API is down",
"summary": "Elevated 5xx on checkout",
"service": "payments-api",
"severity": "critical"
}
Field validation is owned by the Ping backend. If a value is rejected, confirm the exact, current contract with the Ping team rather than guessing — the fields above are the ones the generic webhook expects.
Keep your API key secret — it can send alerts to your team. Store it in your tool's secret manager, never in a shared config file or a public repo. If a key leaks, revoke it from the Ping tab and issue a new one.