Receive a monitoring tool's webhook
The endpoint each integration's webhook URL points at, shown with its
key in On-Call → Integrations. type selects the parser.
For alerts the body is EvoHub's generic alert (below). For every
other type it is the tool's own webhook payload, sent unchanged — a
firing alert opens an alert, and where the tool reports recovery, the
matching open alert is resolved. Most tools send JSON; UptimeRobot,
StatusCake, Site24x7 and PRTG may send form-encoded data (UptimeRobot
and StatusCake may also append fields to the URL's query string), and
those are read too.
Answers 200 whenever the payload was read, even if it produced no
alert, so tools do not disable the webhook; created and resolved
say what happened. An AWS SNS subscription confirmation sent to
cloudwatch or eventbridge is confirmed automatically and answered
with created 0 and a note. SNS deliveries must carry a valid SNS
signature.
github, gitlab, jenkins and sonarqube deliveries can be signed:
once the integration has a signing secret (On-Call → Integrations, or
the On-Call API's signing-secret endpoints), a delivery without a valid
signature is refused. GitHub signs with X-Hub-Signature-256, SonarQube
with X-Sonar-Webhook-HMAC-SHA256, GitLab sends the secret as
X-Gitlab-Token or signs with its signing token, and Jenkins sends it as
the Basic auth password or X-EvoHub-Token.
Two more routes live under /ingest: /ingest/api (the Events API,
above) and /ingest/email, where EvoHub's mail provider delivers the
mail sent to an Email integration's address. You send email to that
address; you never call /ingest/email yourself.
Authorization
Parameters
Path parameters
typestring requiredThe integration type.
Query parameters
keystring requiredThe integration key.eventbridgealso accepts it in anX-EvoHub-Keyheader andhoneycombinX-Honeycomb-Webhook-Token.
Request body required
application/json
- GenericAlert
Show GenericAlert properties
titlestring requireddescriptionstringstatusstringresolved(orresolve,ok,up,online,recovered,closed) resolves the open alert with this fingerprint; anything else, or nothing, opens or retriggers one.severitystringCommon synonyms are read too (errorandmajorashigh,warningasmedium,minoraslow,p1–p5); anything else ismedium.sourcestringStored as the alert'ssourcelabel; the alert's own source is alwayswebhook.fingerprintstringDeduplicates repeated sends while the alert is open. When omitted, one is derived from the title, the labels andalert_instance/alert_service.escalation_policy_idstringUsed only when the integration has no escalation policy of its own.labelsobjectannotationsobject
- Native payloadThe monitoring tool's own webhook body, for every type except
alerts.
application/x-www-form-urlencoded
Form-encoded bodies sent by uptimerobot, statuscake, site24x7 and prtg.
Responses
200
The payload was read.
dataobjectreceivedintegerAlerts and recoveries found in the payload.createdintegerAlerts opened, or matched to an alert already open with the same fingerprint.resolvedintegerRecoveries processed.testbooleanPresent andtruewhen the delivery was the tool's test notification.notestringPresent when the delivery needed no alert work, for example a test notification, an AWS SNS subscription confirmation, or a delivery already processed.
successboolean
400
The body could not be read as this type's payload (INVALID_BODY); for azuremonitor, the common alert schema is not enabled (INVALID_SCHEMA); for alerts, title is missing, or a resolve has neither fingerprint nor title (VALIDATION_FAILED, with details).
errorobject requiredcodestring requiredmessagestring requireddetailsarray of objectField problems, onVALIDATION_FAILED.fieldstringmessagestring
401
key is missing, unknown, or names a disabled integration (INVALID_KEY).
errorobject requiredcodestring requiredmessagestring requireddetailsarray of objectField problems, onVALIDATION_FAILED.fieldstringmessagestring
403
For github, gitlab, jenkins and sonarqube: the integration has a signing secret and the delivery carries no signature, or one that does not verify (INVALID_SIGNATURE). For cloudwatch and eventbridge: an SNS message whose SNS signature does not verify (INVALID_SIGNATURE). On any other type: the key belongs to an integration with a signing secret, which only accepts signed deliveries on its own type (SIGNATURE_REQUIRED).
errorobject requiredcodestring requiredmessagestring requireddetailsarray of objectField problems, onVALIDATION_FAILED.fieldstringmessagestring
413
The body is larger than 1 MiB (PAYLOAD_TOO_LARGE).
errorobject requiredcodestring requiredmessagestring requireddetailsarray of objectField problems, onVALIDATION_FAILED.fieldstringmessagestring
500
The alert could not be stored (INTERNAL_ERROR).
errorobject requiredcodestring requiredmessagestring requireddetailsarray of objectField problems, onVALIDATION_FAILED.fieldstringmessagestring
503
The key, the integration's signing secret, or an SNS message's signature could not be checked right now (INGEST_UNAVAILABLE). Retry after the delay given.
Retry-AfterintegerSeconds to wait before retrying.
errorobject requiredcodestring requiredmessagestring requireddetailsarray of objectField problems, onVALIDATION_FAILED.fieldstringmessagestring
Example request
curl -X POST 'https://evohub.io/ingest/alerts?key=<INTEGRATION_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"title": "Disk almost full on web-03",
"labels": {
"host": "web-03.acme.example"
},
"source": "cron-disk-check",
"severity": "high",
"description": "/var is at 93%",
"fingerprint": "web-03-disk-var"
}'
