Release validation configuration reference
Release validation evaluates webhook signals from your monitoring tool during an evaluation window after each deploy. This page documents every field you can set to control that evaluation.
The Set up Smart Deployments guided setup generates a starting validation configuration for you. Use this page when you want to extend that configuration, or when you need to write it by hand.
Introduction
Add a validation key to your release job to configure release validation. A release job is a job with type: release that references a release plan created by a circleci run release plan step.
For the release job keys and their accepted types, see the Configuration Reference. This page covers what CircleCI does with those values.
Release validation needs only one field to turn it on:
jobs:
release-service:
type: release
plan_name: service-release
validation:
enabled: true
With enabled: true and nothing else, CircleCI creates a system catch-all check that accepts any signal from your monitoring tool. See the Default Catch-All Check section.
You need to write this configuration by hand in the following cases:
-
You use a version control system other than GitHub, so the guided setup is unavailable.
-
Your organization does not have AI features enabled.
-
You want more than one named check per release.
-
Your monitoring tool sends payloads in a shape the provider defaults do not understand.
For the steps to configure validation and connect your monitoring tool by hand, see the Set up Release Validation Manually guide. This page is the field reference for that work.
Optional validation fields
| Field | Description |
|---|---|
|
How long the engine waits for validation signals before treating the release as successful, for example |
|
When |
|
A list of webhook validation checks. Each entry defines a named signal from a monitoring provider. |
Webhook fields
Each entry under webhooks supports the following fields:
| Field | Required | Description |
|---|---|---|
|
Yes |
The identifier for this validation check. Your monitoring tool must send a matching |
|
Yes |
One of |
|
No |
Maps fields from the incoming webhook payload to the values CircleCI matches on. Provider defaults apply to any key you omit. |
|
No |
An expression that determines when a webhook event counts as a failure. Provider defaults apply when you omit it. |
|
No |
The number of matching failures before this validation check fails. |
The guided setup offers Datadog, Prometheus, and Custom. The grafana and alertmanager values are accepted in your configuration file, and both use the same defaults as prometheus. For webhook setup steps, see the Connect Monitoring Webhooks section: Alertmanager is covered alongside Prometheus, and Grafana has no setup steps of its own.
Data point keys
The data_points block maps paths in the incoming webhook payload to the values CircleCI uses. The supported keys are component_name, env, version, project_id, namespace, signal_name, and criteria.
CircleCI extracts each value from the payload, then uses it to find the validation plan the event belongs to. The following table summarizes whether each extracted value must be present for a match to succeed.
Presence in the payload is separate from whether you need to write the mapping. Provider defaults cover the common payload shapes, so a required value often needs no mapping at all.
| Key | Required for a match | Summary |
|---|---|---|
|
Yes |
The deployable component the alert belongs to. |
|
Yes |
The environment for the release. |
|
Conditionally |
Which validation check handles this webhook. |
|
No |
The deployed version string. Acts as a filter when present. |
|
No |
The CircleCI project UUID. Acts as a filter when present. |
|
No |
The component instance namespace. Acts as a filter when present. |
|
No |
The condition signal your |
The sections below describe each key in full.
Component name
component_name identifies the deployable component the alert belongs to, for example web-api.
The extracted value must match the component name for the release under validation. If extraction yields an empty or incorrect name, CircleCI ignores the webhook for that validation plan.
Typical sources are Datadog alert_tags or tags, using component_name:<your-component>.
In your monitor setup, include a tag such as component_name:<your-component>.
For Datadog, the engine also accepts the monitor tags app:<name> and service:<name> as aliases for component_name. Prefer the canonical name.
|
Environment
env identifies the environment for the release, for example production or staging.
The extracted value must match the environment on the validation plan, which comes from the release and its environment integration. Unlike version, project_id, and namespace, env is not optional for matching. Both sides must agree.
Typical sources are env: in your monitor tags.
For Datadog, the engine also accepts the monitor tag environment:<name> as an alias for env. Prefer the canonical name.
|
Version
version holds the deployed version string, for example a Git tag, a semantic version, or a build ID.
CircleCI treats the version as an optional filter. If the webhook extracts a non-empty version, it must match the release version on the validation plan. If the webhook omits the version, any version on that plan matches. Omitting the version is useful when one monitor fires for every deploy, rather than one monitor per release.
Typical sources are version: in your monitor tags.
Project ID
project_id holds the CircleCI project UUID that ties the alert to a specific project.
CircleCI treats the project ID as an optional filter, following the same rules as version. When present, it must match the project_id on the validation plan. When absent, any project on that plan matches.
Typical sources are project_id in Datadog tags or alert_tags.
Namespace
namespace holds the component instance namespace, taken from the component slug of the release. A namespace can be a multi-tenant identifier or a logical partition.
CircleCI treats the namespace as an optional filter. When present in the webhook, it must match the namespace parsed from the component slug of the release. When absent, any namespace matches.
Typical sources are namespace: in your monitor tags.
| More than one validation plan can match when you omit optional fields. CircleCI sorts matching plans by newest release first, and may process more than one plan. |
Signal name
signal_name identifies which entry in validation.webhooks[] handles this webhook.
CircleCI compares the extracted value to the validation_name of the plan. That name comes from the name field of your webhook entry, not from a separate YAML field. The extracted signal_name must equal that name for the event to attach to that plan.
This matters because one release can define several checks, such as error_rate and latency_smoke. Send a distinct signal_name tag from each monitor, matching the corresponding webhooks[].name value.
Criteria
criteria holds the condition signal from your monitoring system, such as an alert transition or a firing state. Your fail_when expression interprets this value.
CircleCI does not use criteria for routing. Once a plan matches, CircleCI evaluates fail_when against the full extracted map, and criteria is the usual variable in that expression.
CircleCI normalizes values to lowercase before evaluation, so write your expressions with lowercase literals. Use "triggered", not "Triggered".
You can map criteria to another field and write your own expression, for example criteria == "critical" or criteria in ['firing', 'pending'].
Provider defaults
When you omit data_points or fail_when, CircleCI applies provider-specific defaults:
| Provider | Default criteria path |
Default fail_when |
|---|---|---|
|
|
|
|
|
|
Add explicit mappings when your monitoring tool sends payloads in a non-standard shape, and when you use the custom provider.
Default catch-all check
If your configuration sets only validation.enabled: true, CircleCI creates a system catch-all check. The catch-all accepts any signal_name, including none at all. It fails when the criteria matches firing, triggered, or alert.
As soon as you add entries under validation.webhooks, CircleCI stops using the catch-all. From that point, each monitor must send a signal_name matching the name of the entry that handles it. CircleCI ignores a monitor that sends no signal_name, and a name with no matching entry.
Full configuration example
The following example shows every supported option. The first webhook entry maps every data_points key explicitly and sets every per-webhook field. The remaining entries show the other supported providers, relying on defaults where data_points and fail_when are omitted.
jobs:
release-service:
type: release
plan_name: service-release
validation:
enabled: true
evaluation_time: 30m
auto_rollback_on_failure: true
webhooks:
# A fully explicit Datadog check, mapping every supported data_points
# key and setting every per-webhook field.
- name: error_rate
provider: datadog
data_points:
component_name: request.tags.component_name
version: request.tags.version
project_id: request.tags.project_id
namespace: request.tags.namespace
env: request.tags.env
criteria: request.alert_transition
signal_name: request.tags.signal_name
fail_when: 'criteria == "triggered" or criteria == "re-triggered"'
max_failures: 2
# Provider defaults apply when data_points and fail_when are omitted.
- name: latency_smoke
provider: datadog
- name: prom_check
provider: prometheus
fail_when: 'criteria == "firing"'
max_failures: 1
- name: grafana_check
provider: grafana
data_points:
criteria: request.status
fail_when: 'criteria == "firing"'
max_failures: 1
- name: alertmanager_check
provider: alertmanager
# Custom providers need explicit mappings, as no defaults apply.
- name: custom_ingest
provider: custom
data_points:
component_name: request.component_name
version: request.version
project_id: request.project_id
namespace: request.namespace
env: request.env
criteria: request.status
signal_name: request.signal_name
fail_when: 'criteria == "firing" or criteria == "triggered" or criteria == "alert"'
max_failures: 1
Next steps
-
Connect your monitoring tool so that it sends the tags these mappings expect. See the Connect Monitoring Webhooks section.
-
Understand what happens when validation passes or fails. See the How Release Validation Works section.
-
Configure the rollback pipeline that automatic rollback triggers. See the Set up Rollbacks guide.