Overview
The generic webhook accepts simple JSON from any system that canPOST — scripts, CI/CD, internal jobs, tools with no dedicated integration.
1. Create the alert source
Under Alert sources, create a source of type Generic. Copy the URL and the token.2. Send the alert
202 Accepted.
Accepted fields
If
status is absent, the alert is treated as a trigger. firing, alerting and resolved are case-insensitive. Any other value — including ok, normal, recovered or closed — is accepted with 202 but ignored: no incident is created or resolved.Grouping
Repeated sends with the sameexternalId for the same service are aggregated into the open incident instead of creating duplicates. Use a stable externalId per problem — the job name, the check identifier, the rule key.
Automatic recovery
When the problem is over, send the sameexternalId with "status": "resolved". aciona.me resolves the incident opened by that source on its own — no person required.
Example: a ping monitor opens an incident when the API stops responding and, a few minutes later, reports that it is back.
status and externalId. Title, description and severity may be sent and may differ from the opening; they are not used to find the incident. service is not needed either.
What happens:
- The incident moves to
resolvedfrom any active state — including after someone acknowledged it or took responsibility for it. Nobody has to approve the resolution in the dashboard. - The timeline records the automatic resolution by the generic webhook, with no person attached. Earlier acknowledgement, owner and history are preserved.
- Pending escalations and notifications stop. The recovery does not send a new resolution notice.
- The incident is closed automatically 5 minutes after the resolution, as with the other integrations. See Resolve and close.
- If the problem comes back — even during those 5 minutes — a new
firingopens a new incident.
Good practices and limits
- Same key on opening and recovery. The value is compared exactly as sent, with no trimming or case change.
- One key per problem. Use different identifiers for different problems or services on the same source: recovery does not use the service to disambiguate.
- Correlation is per source. A recovery only resolves incidents opened by the same alert source, in the same organization.
- A recovery with no open incident does nothing. The
202confirms the alert was accepted, not that something was resolved. A repeated recovery is ignored. - Late recovery. If the same key is reused, an old recovery arriving after a new outage may resolve the new occurrence. To avoid it, use one key per episode (for example,
ping-main-api-2026-10-15T10:00), stable across that episode’s opening, repeats and recovery. - Ordering under bursts. Under volume spikes, a recovery may be processed before its opening; it then finds nothing and the following trigger stays open. Space out the recovery or resolve it in the dashboard.
- Old events are not replayed. Recoveries sent before this feature existed were discarded and do not resolve anything retroactively.
Examples
Troubleshooting
Returned 202 but no incident appeared
Returned 202 but no incident appeared
The
status field probably has a value other than firing, alerting or resolved — in which case the alert is accepted and discarded. Send firing or omit the field. If it was a recovery (resolved), it never creates an incident.The recovery returned 400
The recovery returned 400
The
externalId is missing, empty, whitespace-only or not text/number. Send the same externalId used on the opening.Duplicate incidents
Duplicate incidents
The
externalId is changing between sends (for example, by including a timestamp). Use a stable identifier per problem.Incident with no service or no owner
Incident with no service or no owner
The
service field does not match any service in the organization, or the service has no responsible team with an active schedule.The recovery did not resolve the incident
The recovery did not resolve the incident
Check that the
externalId is exactly the same as on the opening and that the recovery was sent to the same source. Incidents opened without an externalId are not reliably resolved by the webhook — resolve them from the dashboard or the app.