Applies to:
- Plan - Any
- Deployment - Any
- Use case - Debugging Braintrust webhook alerts that do not appear in incident.io
Summary
If a Braintrust alert does not appear in incident.io, check whether Braintrust sent the webhook, which destination received it, and how that destination responded. Before you begin, check the Braintrust alert documentation, incident.io HTTP alert-event API reference, and Custom HTTP source guide for current payload requirements and configuration options. Compare these with your alert and source configuration, as either product may have changed since this guide was written.1. Confirm the destination and source type
Compare the webhook URL configured in Braintrust with the URL provided by the intended incident.io HTTP alert source. Check that authentication matches that source’s configuration. In incident.io, check whether Type of HTTP source is set to Default or Custom:- Default expects incident.io’s standard payload.
- Custom lets you transform Braintrust’s incoming payload into that format.
2. Identify where the request failed
For a log alert using a webhook action, click Test beside the webhook URL in Braintrust and read the result shown in the UI. If the test fails, use the error message to identify the next check. See Test an alert for supported alert types.
If incident.io rejects the request with a validation error, use the response body to identify the rejected fields and check the required fields and mapping below.
If you use a service to forward alerts to incident.io, check its logs to confirm incident.io accepted the request. Braintrust’s successful test may only confirm that the forwarding service received it.
3. Check required fields and mapping
If the error identifies missing or invalid fields, compare your mapping with the Braintrust webhook payload and incident.io’s expected format. For the standard incident.io HTTP alert-event body:
See the incident.io API reference for current requirements and optional fields.
Braintrust’s log alert payload includes nested fields such as
automation.name and details.message. These need to be mapped to the fields incident.io expects. For example:
automation.name→titledetails.message→descriptionautomation.url→source_url
status to "firing" in your incident.io transform or forwarding service.
When mapping log alerts to
"firing", configure how they resolve:- Set up automatic resolution after a delay. Check whether alerts in active incidents are excluded. This clears alerts on a timer, regardless of recovery.
- Use a forwarder to check for recovery and send
"resolved"to the same incident.io source with the same deduplication key.
details.transition explicitly:
Handle
scheduled, evaluation_failed, and evaluation_recovered separately. These describe scheduled execution or evaluation health, rather than whether the monitored condition is firing or resolved. Do not map them to resolved by default.