-
Notifications
You must be signed in to change notification settings - Fork 308
ROB-3785 Add Send Events API documentation with integration guides #2076
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
naomi-robusta
merged 18 commits into
master
from
claude/reorganize-alerts-events-api-iHfSY
May 14, 2026
Merged
Changes from 1 commit
Commits
Show all changes
18 commits
Select commit
Hold shift + click to select a range
412042f
Reorganize alerts/events docs: move Send Alerts API to Classic, add S…
claude 9889a91
Address review on send-events docs
claude 88af105
Remove labels query parameter from Send Events API docs
claude fec0efe
Move Configuration Changes API to Robusta Classic under Send Alerts API
claude c58ccca
Merge branch 'master' into claude/reorganize-alerts-events-api-iHfSY
naomi-robusta f398591
Tighten Send Events API docs: customer-facing wording and param order
claude 055b037
Use bundled octicons in Send Events API cards
claude 42bc0b7
Clarify Splunk auth: single URL example with token, header as fallback
claude 1cedc9a
Restrict Send Events API docs to alerts only
claude d4b30e7
Treat origin as a closed set of supported values
claude c8f913b
Collapse SolarWinds curl example to a single line
claude 9e49e10
Flatten Send Alerts to Robusta sidebar tree
claude aafd0b0
Sort Send Events API origin toctree alphabetically
claude df2f77f
Trim Send Events API docs to setup-only content
claude a160789
Restore Delivery Log verify steps, 401-scoping note, Response section
claude a31c316
Merge branch 'master' into claude/reorganize-alerts-events-api-iHfSY
naomi-robusta 22a2ff2
Merge branch 'master' into claude/reorganize-alerts-events-api-iHfSY
naomi-robusta 932791a
Merge branch 'master' into claude/reorganize-alerts-events-api-iHfSY
naomi-robusta File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,253 @@ | ||
| Send Events API | ||
| ================ | ||
|
|
||
| Send alerts, incidents, and changes from any monitoring system to Robusta through a single webhook endpoint. HolmesGPT investigates each event against your live cluster state, logs, metrics, and connected data sources, and attaches its findings to help accelerate triage. | ||
|
|
||
| This is the recommended ingestion path for new integrations. The legacy :doc:`Send Alerts API </configuration/exporting/send-alerts-api>` remains available for existing customers. | ||
|
|
||
| .. toctree:: | ||
| :maxdepth: 1 | ||
| :hidden: | ||
|
|
||
| send-events/alertmanager | ||
| send-events/pagerduty | ||
| send-events/datadog | ||
| send-events/newrelic | ||
| send-events/dynatrace | ||
| send-events/grafana | ||
| send-events/gcp-monitoring | ||
| send-events/azure-monitor | ||
| send-events/splunk | ||
| send-events/sentry | ||
| send-events/launchdarkly | ||
| send-events/argocd | ||
| send-events/github | ||
| send-events/opsgenie | ||
| send-events/rootly | ||
| send-events/incidentio | ||
| send-events/nagios | ||
| send-events/solarwinds | ||
| send-events/aws-cloudwatch | ||
|
|
||
| Overview | ||
| -------- | ||
|
|
||
| The endpoint accepts any JSON payload. The request is parameterized by query string: | ||
|
|
||
| .. code-block:: | ||
|
|
||
| POST https://api.robusta.dev/webhooks?account_id=<ACCOUNT_ID>&origin=<ORIGIN>&type=<TYPE>&labels=<LABELS> | ||
|
|
||
| Robusta stores every payload verbatim, then asynchronously parses it into the Robusta UI timeline. If a per-origin parser is registered for ``origin``, it is used; otherwise a generic JSON parser handles the payload. Parse failures are visible in the **Delivery Log** UI page so you can self-debug. | ||
|
|
||
| Query Parameters | ||
| ---------------- | ||
|
|
||
| .. list-table:: | ||
| :widths: 20 10 60 10 | ||
| :header-rows: 1 | ||
|
|
||
| * - Parameter | ||
| - Type | ||
| - Description | ||
| - Required | ||
| * - ``account_id`` | ||
| - string | ||
| - Your Robusta account ID, found in ``generated_values.yaml``. | ||
| - Yes | ||
| * - ``origin`` | ||
| - string | ||
| - Identifies the monitoring product (for example ``alertmanager``, ``pagerduty``, ``datadog``). Free-form; selects the per-origin parser when one exists. | ||
| - Yes | ||
| * - ``type`` | ||
| - string | ||
| - One of ``alert``, ``incident``, or ``change``. | ||
| - Yes | ||
| * - ``labels`` | ||
| - string | ||
| - Comma-separated list of free-form tags. Forwarded to the parsed event for use in workflows, routing, and AI investigation policies. | ||
| - No | ||
|
|
||
| Authentication | ||
| -------------- | ||
|
|
||
| Send your Robusta API key as a Bearer token. Generate keys in the Robusta UI under **Settings → API Keys → New API Key**. | ||
|
|
||
| .. code-block:: | ||
|
|
||
| Authorization: Bearer <API_KEY> | ||
|
|
||
| The key must be scoped to the ``account_id`` query parameter. Mismatches return ``401``. | ||
|
|
||
| Example Request | ||
| --------------- | ||
|
|
||
| .. code-block:: bash | ||
|
|
||
| curl --location --request POST \ | ||
| 'https://api.robusta.dev/webhooks?account_id=ACCOUNT_ID&origin=datadog&type=alert&labels=env=prod,team=payments' \ | ||
| --header 'Authorization: Bearer API_KEY' \ | ||
| --header 'Content-Type: application/json' \ | ||
| --data-raw '{ "title": "High error rate", "severity": "high" }' | ||
|
|
||
| Response | ||
| -------- | ||
|
|
||
| A successful request returns ``200`` with the ID of the stored event: | ||
|
|
||
| .. code-block:: json | ||
|
|
||
| { "id": "8f1b...e21" } | ||
|
|
||
| Errors: | ||
|
|
||
| * ``400`` — missing or empty ``account_id``, ``origin``, or ``type``; invalid ``type`` value. | ||
| * ``401`` — invalid or out-of-scope API key. | ||
| * ``429`` — rate limit exceeded (300 requests per 5-minute window per account). | ||
| * ``503`` — transient storage failure; vendors should retry. | ||
|
|
||
| Integrations | ||
| ------------ | ||
|
|
||
| Pick your monitoring system below for step-by-step instructions. Each page provides the URL to paste into your vendor's webhook configuration along with the API key. | ||
|
|
||
| Prometheus & AlertManager | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| .. grid:: 1 1 2 3 | ||
| :gutter: 3 | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` AlertManager | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/alertmanager | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` Grafana | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/grafana | ||
| :link-type: doc | ||
|
|
||
| APM & Observability | ||
| ~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| .. grid:: 1 1 2 3 | ||
| :gutter: 3 | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` Datadog | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/datadog | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` New Relic | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/newrelic | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` Dynatrace | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/dynatrace | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` Splunk | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/splunk | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` Sentry | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/sentry | ||
| :link-type: doc | ||
|
|
||
| Cloud Provider Monitoring | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| .. grid:: 1 1 2 3 | ||
| :gutter: 3 | ||
|
|
||
| .. grid-item-card:: :octicon:`cloud;1em;` GCP Cloud Monitoring | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/gcp-monitoring | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`cloud;1em;` Azure Monitor | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/azure-monitor | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`cloud;1em;` AWS CloudWatch | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/aws-cloudwatch | ||
| :link-type: doc | ||
|
|
||
| Incident Management | ||
| ~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| .. grid:: 1 1 2 3 | ||
| :gutter: 3 | ||
|
|
||
| .. grid-item-card:: :octicon:`bell;1em;` PagerDuty | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/pagerduty | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`bell;1em;` Opsgenie | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/opsgenie | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`bell;1em;` Rootly | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/rootly | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`bell;1em;` Incident.io | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/incidentio | ||
| :link-type: doc | ||
|
|
||
| Changes & Deployments | ||
| ~~~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| .. grid:: 1 1 2 3 | ||
| :gutter: 3 | ||
|
|
||
| .. grid-item-card:: :octicon:`git-branch;1em;` Argo CD | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/argocd | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`mark-github;1em;` GitHub | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/github | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`flame;1em;` LaunchDarkly | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/launchdarkly | ||
| :link-type: doc | ||
|
|
||
| Other | ||
| ~~~~~~ | ||
|
|
||
| .. grid:: 1 1 2 3 | ||
| :gutter: 3 | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` Nagios | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/nagios | ||
| :link-type: doc | ||
|
|
||
| .. grid-item-card:: :octicon:`pulse;1em;` SolarWinds | ||
| :class-card: sd-bg-light sd-bg-text-light | ||
| :link: send-events/solarwinds | ||
| :link-type: doc | ||
|
|
||
| Unsupported sources | ||
| ------------------- | ||
|
|
||
| Any monitoring system that can POST JSON to a URL works. Pick a free-form ``origin`` value, paste the URL into the vendor's webhook configuration, and Robusta's generic parser will handle the payload. The AI investigator reads the raw payload along with the structured event, so source-specific fields are preserved even without a dedicated parser. | ||
|
|
||
| Delivery Log | ||
| ------------ | ||
|
|
||
| Every received payload — parsed, pending, or failed — is visible in the Robusta UI under **Settings → Delivery Log**, scoped to your account and sorted by recency. Use it to confirm that a vendor is reaching Robusta, view the original request body, and inspect parser errors. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,48 @@ | ||
| AlertManager | ||
| ============= | ||
|
|
||
| Forward Prometheus alerts from AlertManager directly to Robusta. Robusta's per-origin parser maps AlertManager labels and annotations onto the timeline; the original payload is preserved for HolmesGPT. | ||
|
|
||
| Prerequisites | ||
| ------------- | ||
|
|
||
| * A Robusta account with API access. | ||
| * Your Robusta ``account_id``, found in ``generated_values.yaml``. | ||
| * A Robusta API key with ``Read/Write`` access to alerts, generated under **Settings → API Keys → New API Key**. | ||
|
|
||
| Webhook URL | ||
| ----------- | ||
|
|
||
| .. code-block:: | ||
|
|
||
| https://api.robusta.dev/webhooks?account_id=<ACCOUNT_ID>&origin=alertmanager&type=alert | ||
|
|
||
| Append ``&labels=<comma-separated-tags>`` to attach routing tags to every event from this receiver. | ||
|
|
||
| Configure AlertManager | ||
| ---------------------- | ||
|
|
||
| Add a webhook receiver to ``alertmanager.yml``: | ||
|
|
||
| .. code-block:: yaml | ||
|
|
||
| receivers: | ||
| - name: robusta | ||
| webhook_configs: | ||
| - url: 'https://api.robusta.dev/webhooks?account_id=<ACCOUNT_ID>&origin=alertmanager&type=alert' | ||
| send_resolved: true | ||
| http_config: | ||
| authorization: | ||
| type: Bearer | ||
| credentials: <ROBUSTA_API_KEY> | ||
|
|
||
| route: | ||
| receiver: robusta | ||
| continue: true | ||
|
|
||
| Set ``continue: true`` if Robusta is not your only receiver, so alerts also reach your other destinations. | ||
|
|
||
| Verify | ||
| ------ | ||
|
|
||
| Open **Settings → Delivery Log** in the Robusta UI to see the request arrive, then check the timeline for the parsed alert. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,52 @@ | ||
| Argo CD | ||
| ======== | ||
|
|
||
| Forward Argo CD sync and health events to Robusta as ``change`` events. | ||
|
|
||
| Prerequisites | ||
| ------------- | ||
|
|
||
| * A Robusta account with API access. | ||
| * Your Robusta ``account_id``, found in ``generated_values.yaml``. | ||
| * A Robusta API key with ``Read/Write`` access to alerts. | ||
| * Argo CD with the ``argocd-notifications`` controller (built into Argo CD 2.3+). | ||
|
|
||
| Webhook URL | ||
| ----------- | ||
|
|
||
| .. code-block:: | ||
|
|
||
| https://api.robusta.dev/webhooks?account_id=<ACCOUNT_ID>&origin=argocd&type=change | ||
|
|
||
| Configure Argo CD Notifications | ||
| -------------------------------- | ||
|
|
||
| Add a webhook service and a template to ``argocd-notifications-cm``: | ||
|
|
||
| .. code-block:: yaml | ||
|
|
||
| service.webhook.robusta: | | ||
| url: https://api.robusta.dev/webhooks?account_id=<ACCOUNT_ID>&origin=argocd&type=change | ||
| headers: | ||
| - name: Authorization | ||
| value: Bearer <ROBUSTA_API_KEY> | ||
|
|
||
| template.app-event: | | ||
| webhook: | ||
| robusta: | ||
| method: POST | ||
| body: | | ||
| { | ||
| "app": "{{.app.metadata.name}}", | ||
| "namespace": "{{.app.metadata.namespace}}", | ||
| "syncStatus": "{{.app.status.sync.status}}", | ||
| "healthStatus": "{{.app.status.health.status}}", | ||
| "operationState": "{{.app.status.operationState.phase}}" | ||
| } | ||
|
|
||
| Subscribe applications to the trigger using the ``notifications.argoproj.io/subscribe.<trigger>.robusta`` annotation. | ||
|
|
||
| Verify | ||
| ------ | ||
|
|
||
| Trigger a sync on a subscribed application. The event should appear in **Settings → Delivery Log** and on the Robusta timeline. | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.