TL;DR

Zenduty is deprecating its legacy API Integration in favor of a more robust and flexible Generic Integration. Customers using API-based alerts must transition to Generic to ensure continuity. This guide outlines what changes, why it matters, how to migrate, and sample code to help you move quickly.

Why this matters

Zenduty is transitioning from the legacy API Integration method to a more modern, reliable, and flexible Generic Integration model.

If your services still send alerts using the older API Integration, we recommend you move to Generic immediately to maintain compatibility and unlock improved performance and reliability.

What’s changing?

We’re officially phasing out API Integration. This means:

  • New users will only be able to use Generic Integration.
  • Existing users should migrate to Generic for uninterrupted alerting.

Why Generic Integration?

Generic Integration offers:

  • A simplified payload structure
  • More transparent response handling
  • Easier traceability via trace_id
  • Unified endpoint format
  • Future-proofing for upcoming Zenduty improvements

Sample API response: Before vs. After

Previous (API Integration):

{
   "title": "Memory Leak Detected",
   "message": "A memory leak has been identified on the web application.",
   "alert_type": "critical",
   "status": "open",
   "payload": {
     "source": "web_server_1",
     "severity": "high"
   }
}

After Migration (Generic Integration):

{
  "message": "success",
  "trace_id": "<trace_id>"
}

Already Parsing Response?

If your current workflow handles API Integration response payloads and acts based on alert state, you will need to update your logic to use the new trace_id and polling pattern.

How to Check Alert Status After Migration

Once you post an alert using Generic, you'll receive a trace_id. You can then poll the status of the alert using this endpoint:

GET https://events.zenduty.com/api/alert/status/<trace_id>/

Status Possibilities:

  • queued: Alert received but not processed
  • failed: Alert processing failed (includes error message)
  • completed: Alert processed (includes incident details)

Note: Status is available only within 60 minutes of alert submission.

Example Python Script (Post + Poll Flow)

import requests, time
integration_webhook = "<PASTE_WEBHOOK_URL>"
api_token = "<API_TOKEN>"
data = {
  "alert_type": "critical",
  "message": "Sample alert via Generic Integration",
  "summary": "Summary text",
  "payload": {
    "severity": "1",
    "project": "kubeprod"
  }
}
response = requests.post(url=integration_webhook, json=data).json()
trace_id = response.get("trace_id")

# Poll for status
status_url = f"https://events.zenduty.com/api/alert/status/{trace_id}/"
for _ in range(10):
    status_resp = requests.get(status_url).json()
    print(status_resp)
    if status_resp["status"] in ["failed", "completed"]:
        break
    time.sleep(5)

If status is completed and is_incident_created is true, you can fetch incident details via:

GET https://www.zenduty.com/api/incidents/<incident_id>/

(Authenticated with your Authorization: Token <token> header)

Not Parsing API Responses?

If your service simply posts alerts and doesn’t depend on API responses, no changes are needed and you can update the endpoint to Generic, and everything works as-is.

Next Steps

📘 Read the full Generic Integration migration guide →

📘 See API Docs for /alert/status/{trace_id} →

Need help? Reach out to support@zenduty.com and we’ll guide you through it.

Rohan Taneja

Writing words that make tech less confusing.