Notification services
The notification services API endpoints let you manage an organization's notification services over REST. Notification services deliver Buildkite Pipelines notifications to destinations such as Slack, webhooks, and Datadog. See Integrations for provider setup guides.
All endpoints require the authenticated user to have the Change Notification Services permission. Read operations require the read_notification_services API access token scope. Create, update, delete, enable, and disable operations require the write_notification_services scope.
Notification service data model
The API returns the following fields for a notification service:
id |
UUID of the notification service. |
|---|---|
graphql_id |
GraphQL ID of the notification service. The value is null for providers without a corresponding GraphQL type. |
url |
Canonical REST API URL of the notification service. |
provider |
Map containing the provider's id and display name. |
description |
Description of the notification service. |
enabled |
Whether the notification service is enabled. |
scope |
Resources that use the notification service: all, some_projects, some_teams, or some_clusters. |
scope_uuids |
Array of pipeline, team, or cluster UUIDs selected by scope. The array is empty when scope is all. |
branch_configuration |
Branch pattern that limits notifications, or an empty string when no branch filter is configured. |
build_states |
Map of notification events and whether each event is enabled. See Build state fields. |
settings |
Provider-specific settings. Secret fields can be masked or omitted. See Provider settings. |
created_at |
Time when the notification service was created. |
created_by |
User who created the notification service, or null when the creator is unavailable. |
Build state fields
The build_states map contains boolean values for these fields:
build_passedbuild_fixedbuild_failedbuild_blockedbuild_canceledbuild_failingjob_activated
Provider settings
The provider value is immutable after you create a notification service. The following provider IDs and settings are available:
| Provider ID | Writable settings | Notes | |||
|---|---|---|---|---|---|
| Provider ID | aws_event_bridge |
Writable settings |
aws_region, aws_account_id, include_build_meta_data
|
Notes |
aws_region and aws_account_id are required when creating the service and cannot be changed later. |
| Provider ID | datadog_pipeline_visibility |
Writable settings |
api_key, datadog_site, datadog_tags
|
Notes | The API masks api_key in responses. |
| Provider ID | event_log_api |
Writable settings | events |
Notes | Available only to organizations with the Event Log API provider enabled. |
| Provider ID | linear |
Writable settings | None | Notes | Uses OAuth. Create the service in the Buildkite interface. You can update its common fields using the API. |
| Provider ID | open_telemetry_tracing |
Writable settings |
endpoint, service_name, headers, resource_attributes, tracestate
|
Notes | The API omits encrypted headers from responses. Availability of tracestate depends on the organization. |
| Provider ID | slack |
Writable settings |
url, theme
|
Notes | The API omits url from responses. OAuth-connected Slack service URLs cannot be changed using the API. |
| Provider ID | slack_workspace |
Writable settings | None | Notes | Uses OAuth. Create the service in the Buildkite interface. You can update its common fields using the API. |
| Provider ID | webhook |
Writable settings |
url, token, token_mode, version, events, tls_verify
|
Notes | New services must use the latest webhook payload version. The API returns token without masking so it can be used to verify webhook signatures. |
List notification services
Returns an organization's notification services in chronological order. The response uses cursor pagination and excludes Package Registries notification services, hosted agent dispatch webhooks, and providers that are not available to the organization.
curl -H "Authorization: Bearer $TOKEN" \
-X GET "https://api.buildkite.com/v2/organizations/{org.slug}/services"
{
"items": [
{
"id": "01234567-89ab-cdef-0123-456789abcdef",
"graphql_id": "Tm90aWZpY2F0aW9uU2VydmljZVdlYmhvb2stLS0wMTIzNDU2Ny04OWFiLWNkZWYtMDEyMy00NTY3ODlhYmNkZWY=",
"url": "https://api.buildkite.com/v2/organizations/acme-inc/services/01234567-89ab-cdef-0123-456789abcdef",
"provider": {
"id": "webhook",
"name": "Webhook"
},
"description": "Deployment events",
"enabled": true,
"scope": "all",
"scope_uuids": [],
"branch_configuration": "main",
"build_states": {
"build_passed": true,
"build_fixed": true,
"build_failed": true,
"build_blocked": false,
"build_canceled": false,
"build_failing": false,
"job_activated": false
},
"settings": {
"url": "https://example.com/webhook",
"token": "YOUR_WEBHOOK_TOKEN",
"token_mode": "token",
"version": 3,
"events": ["build.finished"],
"tls_verify": true
},
"created_at": "2026-07-01T12:00:00.000Z",
"created_by": {
"id": "abcdef01-2345-6789-abcd-ef0123456789",
"name": "Sam Kim"
}
}
],
"links": {
"self": "https://api.buildkite.com/v2/organizations/acme-inc/services?per_page=30"
}
}
Optional query string parameters:
per_page |
Number of notification services to return per page. |
|---|---|
after |
Returns the page after this cursor. Do not use with before. |
before |
Returns the page before this cursor. Do not use with after. |
Required scope: read_notification_services
Success response: 200 OK
Get a notification service
Returns one notification service.
curl -H "Authorization: Bearer $TOKEN" \
-X GET "https://api.buildkite.com/v2/organizations/{org.slug}/services/{uuid}"
The response uses the notification service data model.
Required scope: read_notification_services
Success response: 200 OK
Error response: 404 Not Found when the notification service does not exist, belongs to another organization, or is not visible through this API.
Create a notification service
Creates a notification service. The following example creates a webhook notification service:
curl -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-X POST "https://api.buildkite.com/v2/organizations/{org.slug}/services" \
-d '{
"provider": "webhook",
"description": "Deployment events",
"scope": "all",
"branch_configuration": "main",
"build_states": {
"build_failed": true,
"build_passed": true
},
"settings": {
"url": "https://example.com/webhook",
"events": ["build.finished"],
"tls_verify": true
}
}'
Request body fields:
provider |
Required provider ID. See Provider settings. |
|---|---|
description |
Description of the notification service. |
scope |
Resources that use the notification service: all, some_projects, some_teams, or some_clusters. Defaults to all. |
scope_uuids |
Array of pipeline, team, or cluster UUIDs. Supply this field when scope is a corresponding some_* value. |
branch_configuration |
Branch pattern that limits notifications. |
build_states |
Map containing the events to enable or disable. See Build state fields. |
settings |
Map of settings accepted by the selected provider. |
Returns the created notification service.
Required scope: write_notification_services
Success response: 201 Created
Error response: 422 Unprocessable Entity when the provider, scope, event, or provider-specific setting is invalid. Providers that use OAuth must be created in the Buildkite interface.
Update a notification service
Updates the supplied fields of a notification service. Omitted fields remain unchanged. The provider cannot be changed.
curl -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-X PATCH "https://api.buildkite.com/v2/organizations/{org.slug}/services/{uuid}" \
-d '{
"description": "Production deployment events",
"build_states": {
"build_failed": true,
"build_passed": false
}
}'
The request accepts the same fields as Create a notification service. The API accepts a masked secret from a previous response without replacing the stored secret. OAuth-managed and create-only settings cannot be changed.
Returns the updated notification service.
Required scope: write_notification_services
Success response: 200 OK
Error responses: 404 Not Found when the notification service is unavailable, or 422 Unprocessable Entity when a field is invalid or cannot be changed.
Delete a notification service
Deletes a notification service.
curl -H "Authorization: Bearer $TOKEN" \
-X DELETE "https://api.buildkite.com/v2/organizations/{org.slug}/services/{uuid}"
Required scope: write_notification_services
Success response: 204 No Content
Enable a notification service
Enables a notification service. If delivery failures automatically disabled the service, enabling it also clears its broken state and associated error message.
curl -H "Authorization: Bearer $TOKEN" \
-X PUT "https://api.buildkite.com/v2/organizations/{org.slug}/services/{uuid}/enable"
Returns the updated notification service and records an audit event.
Required scope: write_notification_services
Success response: 200 OK
Disable a notification service
Disables a notification service and records the user who disabled it.
curl -H "Authorization: Bearer $TOKEN" \
-X PUT "https://api.buildkite.com/v2/organizations/{org.slug}/services/{uuid}/disable"
Returns the updated notification service and records an audit event.
Required scope: write_notification_services
Success response: 200 OK