openapi: 3.1.0
info:
title: Honeycomb Auth Burn Alerts API
version: 1.0.0
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
contact:
email: support@honeycomb.io
description: 'The API allows programmatic management of many resources within Honeycomb.
Please report any discrepancies with actual API behavior in Pollinators Slack or to Honeycomb Support.
'
servers:
- url: https://api.honeycomb.io
- url: https://api.eu1.honeycomb.io
tags:
- name: Burn Alerts
description: 'This feature is available as part of the [Honeycomb Pro and Enterprise plans](https://www.honeycomb.io/pricing/).
Burn Alerts notify you when issues impact your SLO budget. Learn more about [Burn Alerts here](https://docs.honeycomb.io/notify/alert/slos/monitor/).
This API allows you to list, create, update, and delete burn alerts.
## Authorization
The API key must have the **Manage SLOs** permission. Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/).
'
paths:
/1/burn_alerts/{datasetSlug}:
parameters:
- $ref: '#/components/parameters/datasetSlugOrAll'
post:
security:
- configuration_key: []
summary: Create a Burn Alert
description: 'Create a Burn Alert against a specified SLO.
'
tags:
- Burn Alerts
operationId: createBurnAlert
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBurnAlertRequest'
required: true
responses:
'201':
description: Created
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/BurnAlertDetailResponse'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
get:
security:
- configuration_key: []
summary: List All Burn Alerts for an SLO
description: 'Get all burn alerts associated with the SLO specified in the `slo_id` query param. It is not currently possible to retrieve all burn alerts for a dataset, environment, or team.
'
tags:
- Burn Alerts
operationId: listBurnAlertsBySlo
parameters:
- in: query
name: slo_id
schema:
type: string
description: For use with the list endpoint to retrieve all burn alerts for a specified SLO.
required: true
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BurnAlertListResponse'
example:
- id: fS7vfB81Wcy
alert_type: exhaustion_time
description: Use this runbook (link) if this alert fires.
triggered: true
exhaustion_minutes: 120
slo:
id: 2LBq9LckbcA
created_at: '2022-09-22T17:32:11Z'
updated_at: '2022-10-22T17:32:11Z'
- id: gT7wgC82Xcz
alert_type: budget_rate
description: Use this runbook (link) if this alert fires.
triggered: true
budget_rate_window_minutes: 60
budget_rate_decrease_threshold_per_million: 1000
slo:
id: 2LBq9LckbcA
created_at: '2022-09-22T17:32:11Z'
updated_at: '2022-10-22T17:32:11Z'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
/1/burn_alerts/{datasetSlug}/{burnAlertId}:
parameters:
- $ref: '#/components/parameters/datasetSlugOrAll'
- name: burnAlertId
description: The unique identifier (ID) of a Burn Alert.
in: path
required: true
schema:
type: string
get:
security:
- configuration_key: []
summary: Get a Burn Alert
description: 'Get a single Burn Alert by ID.
'
tags:
- Burn Alerts
operationId: getBurnAlert
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/BurnAlertDetailResponse'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
put:
security:
- configuration_key: []
summary: Update a Burn Alert
description: 'Update a Burn Alert by specifying its ID and full details.
'
tags:
- Burn Alerts
operationId: updateBurnAlert
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateBurnAlertRequest'
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/BurnAlertDetailResponse'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/ValidationFailed'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
delete:
security:
- configuration_key: []
summary: Delete a Burn Alert
description: Delete a Burn Alert by specifying its ID.
tags:
- Burn Alerts
operationId: deleteBurnAlert
responses:
'204':
description: Success - no content
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
components:
responses:
Forbidden:
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
deny-management-apis:
description: Team cannot access management APIs.
value:
error: Your team has been denied access to Management APIs, please contact support to be unblocked.
application/problem+json:
schema:
$ref: '#/components/schemas/DetailedError'
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
RateLimited:
description: Rate Limit Exceeded
headers:
Retry-After:
$ref: '#/components/headers/RetryAfter'
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: Rate Limited
application/problem+json:
schema:
$ref: '#/components/schemas/DetailedError'
example:
status: 429
type: https://api.honeycomb.io/problems/rate-limited
title: You have exceeded your rate limit.
error: You have exceeded your rate limit.
detail: Please try again after 2025-02-01T15:23:12Z.
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
example:
errors:
- id: 06dcdd6508ca822f0e7e2bb4121c1f52
code: rate-limited/may-retry
title: request rate limit exceeded
detail: Please try again after 2025-02-01T15:23:12Z.
ValidationFailed:
description: Validation Failed
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/ValidationError'
example:
status: 422
type: https://api.honeycomb.io/problems/validation-failed
error: The provided input is invalid.
title: The provided input is invalid
type_detail:
- field: type
code: invalid
description: 'type: must be a valid value'
application/json:
schema:
$ref: '#/components/schemas/Error'
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
NotFound:
description: Not Found
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: dataset not found
application/problem+json:
schema:
$ref: '#/components/schemas/DetailedError'
example:
status: 404
type: https://api.honeycomb.io/problems/not-found
title: The requested resource cannot be found.
error: Dataset not found
detail: Dataset not found
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
GenericError:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
headers:
RateLimit:
description: "The (draft07) recommended header from the IETF on rate limiting.\nThe value of the header is formatted \"limit=X, remaining=Y, reset=Z\".\nWhere:\n - X is the maximum number of requests allowed in the window\n - Y is the number of requests remaining in the window\n - Z is the number of seconds until the limit resets\n"
schema:
type: string
example: limit=100, remaining=50, reset=60
RetryAfter:
description: 'The RFC7231 header used to indicate when a client should retry requests.
'
schema:
type: string
example: Fri, 22 Mar 2024 18:37:53 GMT
RateLimitPolicy:
description: "The (draft07) recommended header from the IETF on rate limiting.\nThe value of the header is formatted \"X;w=Y\".\nWhere:\n - X is the maximum number of requests allowed in a window\n - Y is the size of the window in seconds\n"
schema:
type: string
example: 100;w=60
schemas:
RecipientType:
type: string
description: One of the supported Recipient Types
enum:
- pagerduty
- email
- slack
- webhook
- msteams
- msteams_workflow
ExhaustionTimeBurnAlertDetailResponse:
title: Exhaustion Time
allOf:
- $ref: '#/components/schemas/ExhaustionTimeBurnAlertListResponse'
- type: object
properties:
recipients:
type: array
minItems: 1
description: 'A list of [Recipients](/api/recipients/) to notify when an alert fires. Using `type`+`target` is deprecated. First, create the Recipient via the Recipients API, and then specify the ID.
'
items:
$ref: '#/components/schemas/NotificationRecipient'
example:
- id: abcd123
type: email
target: alerts@example.com
BurnAlertDetailResponse:
type: object
required:
- alert_type
properties:
alert_type:
type: string
oneOf:
- $ref: '#/components/schemas/ExhaustionTimeBurnAlertDetailResponse'
- $ref: '#/components/schemas/BudgetRateBurnAlertDetailResponse'
discriminator:
propertyName: alert_type
mapping:
exhaustion_time: '#/components/schemas/ExhaustionTimeBurnAlertDetailResponse'
budget_rate: '#/components/schemas/BudgetRateBurnAlertDetailResponse'
UpdateBurnAlertRequest:
type: object
required:
- alert_type
properties:
alert_type:
type: string
oneOf:
- $ref: '#/components/schemas/UpdateExhaustionTimeBurnAlertRequest'
- $ref: '#/components/schemas/UpdateBudgetRateBurnAlertRequest'
discriminator:
propertyName: alert_type
mapping:
exhaustion_time: '#/components/schemas/UpdateExhaustionTimeBurnAlertRequest'
budget_rate: '#/components/schemas/UpdateBudgetRateBurnAlertRequest'
ExhaustionTimeBurnAlert:
title: Exhaustion Time
allOf:
- $ref: '#/components/schemas/BurnAlertSharedParams'
- type: object
required:
- exhaustion_minutes
properties:
alert_type:
type: string
description: 'One of the supported alert types:
1. `exhaustion_time`: Notifies when you are about to run out of SLO budget within a specified number of hours.
1. `budget_rate`: Notifies when budget drops by at least a specified percentage within a defined time window.
'
default: exhaustion_time
enum:
- exhaustion_time
- budget_rate
example: exhaustion_time
exhaustion_minutes:
type: integer
minimum: 0
description: 'Required when `alert_type` is `exhaustion_time`.
Must not be specified when `alert_type` is `budget_rate`.
Amount of time (in minutes) left until your projected SLO budget is exhausted.
The alert will fire when this exhaustion threshold is reached.
'
example: 120
CreateBudgetRateBurnAlertRequest:
allOf:
- $ref: '#/components/schemas/BudgetRateBurnAlert'
- type: object
required:
- slo
- recipients
properties:
slo:
type: object
description: Details about the SLO associated with the burn alert.
required:
- id
properties:
id:
type: string
description: Unique identifier (ID) of a SLO.
example:
id: 2LBq9LckbcA
recipients:
type: array
minItems: 1
description: 'A list of [Recipients](/api/recipients/) to notify when an alert fires. Using `type`+`target` is deprecated. First, create the Recipient via the Recipients API, and then specify the ID.
'
items:
$ref: '#/components/schemas/NotificationRecipient'
example:
- id: abcd123
type: email
target: alerts@example.com
BudgetRateBurnAlertDetailResponse:
allOf:
- $ref: '#/components/schemas/BudgetRateBurnAlertListResponse'
- type: object
properties:
recipients:
type: array
minItems: 1
description: 'A list of [Recipients](/api/recipients/) to notify when an alert fires. Using `type`+`target` is deprecated. First, create the Recipient via the Recipients API, and then specify the ID.
'
items:
$ref: '#/components/schemas/NotificationRecipient'
example:
- id: abcd123
type: email
target: alerts@example.com
BudgetRateBurnAlertListResponse:
title: Budget Rate
allOf:
- $ref: '#/components/schemas/BudgetRateBurnAlert'
- type: object
properties:
slo:
type: object
description: Details about the SLO associated with the burn alert.
properties:
id:
type: string
description: Unique identifier (ID) of a SLO.
example:
id: 2LBq9LckbcA
BudgetRateBurnAlert:
title: Budget Rate
allOf:
- $ref: '#/components/schemas/BurnAlertSharedParams'
- type: object
required:
- alert_type
- budget_rate_window_minutes
- budget_rate_decrease_threshold_per_million
properties:
alert_type:
type: string
description: 'One of the supported alert types:
1. `exhaustion_time`: Notifies when you are about to run out of SLO budget within a specified number of hours.
1. `budget_rate`: Notifies when budget drops by at least a specified percentage within a defined time window.
'
default: exhaustion_time
enum:
- exhaustion_time
- budget_rate
example: budget_rate
budget_rate_window_minutes:
type: integer
minimum: 60
description: 'Required when `alert_type` is `budget_rate`.
Must not be specified when `alert_type` is `exhaustion_time`.
Time period (in minutes) over which a budget rate will be calculated.
Must be no greater than the associated SLO''s time period.
'
example: 120
budget_rate_decrease_threshold_per_million:
type: integer
minimum: 1
maximum: 1000000
description: 'Required when `alert_type` is `budget_rate`.
Must not be specified when `alert_type` is `exhaustion_time`.
The percent the budget has decreased over the budget rate window, represented as a value out of one million.
The alert will fire when this budget decrease threshold is reached.
See the table below for some example conversions from desired budget decrease percent to the representation as a value out of one million
| Desired percent | Value per million |
|-----------------|-------------------|
| 0.001% | 1 |
| 1% | 10,000 |
| 5% | 50,000 |
| 99.99% | 999,900 |
'
example: 1000
CreateExhaustionTimeBurnAlertRequest:
allOf:
- $ref: '#/components/schemas/ExhaustionTimeBurnAlert'
- type: object
required:
- slo
- recipients
properties:
slo:
type: object
description: Details about the SLO associated with the burn alert.
required:
- id
properties:
id:
type: string
description: Unique identifier (ID) of a SLO.
example:
id: 2LBq9LckbcA
recipients:
type: array
minItems: 1
description: 'A list of [Recipients](/api/recipients/) to notify when an alert fires. Using `type`+`target` is deprecated. First, create the Recipient via the Recipients API, and then specify the ID.
'
items:
$ref: '#/components/schemas/NotificationRecipient'
example:
- id: abcd123
type: email
target: alerts@example.com
Error:
x-tags:
- Errors
type: object
description: A legacy error, containing only a textual description.
properties:
error:
type: string
readOnly: true
ValidationError:
x-tags:
- Errors
allOf:
- $ref: '#/components/schemas/DetailedError'
- type: object
properties:
status:
type: number
readOnly: true
default: 422
type:
type: string
readOnly: true
default: https://api.honeycomb.io/problems/validation-failed
title:
type: string
readOnly: true
default: The provided input is invalid.
type_detail:
type: array
items:
type: object
properties:
field:
type: string
readOnly: true
code:
type: string
readOnly: true
enum:
- invalid
- missing
- incorrect_type
- already_exists
description:
type: string
readOnly: true
NotificationRecipientDetails:
type: object
properties:
pagerduty_severity:
description: 'When using a Recipient of `type = "pagerduty"`, the severity of the alert can be specified.
'
type: string
default: critical
enum:
- critical
- error
- warning
- info
variables:
description: 'When using a Recipient of `type = "webhook"`, the alert-level variables can be specified.
'
type: array
items:
type: object
required:
- name
properties:
name:
type: string
pattern: ^[a-z](?:[a-zA-Z0-9]+$)?$
maxLength: 64
example: severity
value:
type: string
maxLength: 256
example: warning
UpdateExhaustionTimeBurnAlertRequest:
allOf:
- $ref: '#/components/schemas/ExhaustionTimeBurnAlert'
- type: object
required:
- recipients
properties:
recipients:
type: array
minItems: 1
description: 'A list of [Recipients](/api/recipients/) to notify when an alert fires. Using `type`+`target` is deprecated. First, create the Recipient via the Recipients API, and then specify the ID.
'
items:
$ref: '#/components/schemas/NotificationRecipient'
example:
- id: abcd123
type: email
target: alerts@example.com
BurnAlertSharedParams:
type: object
properties:
id:
type: string
description: Unique identifier (ID) of a Burn alert.
readOnly: true
example: fS7vfB81Wcy
description:
type: string
description: A description of the Burn Alert.
maxLength: 1023
example: Use this runbook if this alert fires.
triggered:
type: boolean
description: 'Indicates if the Burn Alert has been triggered. This field is read-only and is set to `true` when the alert is triggered.
'
readOnly: true
example: false
created_at:
type: string
format: date-time
description: The ISO8601-formatted time when the Burn Alert was created.
readOnly: true
example: '2022-09-22T17:32:11Z'
updated_at:
type: string
format: date-time
description: The ISO8601-formatted time when the Burn Alert was updated.
readOnly: true
example: '2022-10-31T15:08:11Z'
auto_investigate:
x-internal: true
type: boolean
description: 'When true, Honeycomb will automatically start an investigation when this Burn Alert fires.
'
default: false
example: false
NotificationRecipient:
type: object
properties:
id:
type: string
type:
deprecated: true
description: 'One of the allowed Recipient types.
Deprecated: Use the Recipients API first, then pass the Recipient ID.
'
allOf:
- $ref: '#/components/schemas/RecipientType'
target:
type: string
deprecated: true
description: 'The target of the notification. For example, the specific Slack channel or email address.
For Recipients of `type = "webhook"` or `type = "msteams_workflow"`,
this will be the Name in the UI and `webhook_name` in the Recipients API.
Deprecated: Use the Recipients API first, then pass the Recipient ID.
'
details:
$ref: '#/components/schemas/NotificationRecipientDetails'
BurnAlertListResponse:
type: object
required:
- alert_type
properties:
alert_type:
type: string
oneOf:
- $ref: '#/components/schemas/ExhaustionTimeBurnAlertListResponse'
- $ref: '#/components/schemas/BudgetRateBurnAlertListResponse'
discriminator:
propertyName: alert_type
mapping:
exhaustion_time: '#/components/schemas/ExhaustionTimeBurnAlertListResponse'
budget_rate: '#/components/schemas/BudgetRateBurnAlertListResponse'
DetailedError:
x-tags:
- Errors
description: An RFC7807 'Problem Detail' formatted error message.
type: object
required:
- error
- status
- type
- title
properties:
error:
type: string
readOnly: true
default: something went wrong!
status:
type: number
readOnly: true
description: The HTTP status code of the error.
type:
type: string
readOnly: true
description: Type is a URI used to uniquely identify the type of error.
title:
type: string
readOnly: true
description: Title is a human-readable summary that explains the `type` of the problem.
detail:
type: string
readOnly: true
description: The general, human-readable error message.
instance:
type: string
readOnly: true
description: The unique identifier (ID) for this specific error.
ExhaustionTimeBurnAlertListResponse:
allOf:
- $ref: '#/components/schemas/ExhaustionTimeBurnAlert'
- type: object
properties:
slo:
type: object
description: Details about the SLO associated with the burn alert.
properties:
id:
type: string
description: Unique identifier (ID) of a SLO.
example:
id: 2LBq9LckbcA
UpdateBudgetRateBurnAlertRequest:
title: Budget Rate
allOf:
- $ref: '#/components/schemas/BudgetRateBurnAlert'
- type: object
required:
- recipients
properties:
recipients:
type: array
minItems: 1
description: 'A list of [Recipients](/api/recipients/) to notify when an alert fires. Using `type`+`target` is deprecated. First, create the Recipient via the Recipients API, and then specify the ID.
'
items:
$ref: '#/components/schemas/NotificationRecipient'
example:
- id: abcd123
type: email
target: alerts@example.com
JSONAPIError:
x-tags:
- Errors
type: object
description: A JSONAPI-formatted error message.
properties:
errors:
type: array
items:
type: object
readOnly: true
required:
- id
- code
properties:
id:
type: string
readOnly: true
status:
type: string
readOnly: true
code:
type: string
readOnly: true
title:
type: string
readOnly: true
detail:
type: string
readOnly: true
source:
type: object
readOnly: true
properties:
pointer:
type: string
readOnly: true
header:
type: string
readOnly: true
parameter:
type: string
readOnly: true
CreateBurnAlertRequest:
type: object
required:
- alert_type
properties:
alert_type:
type: string
oneOf:
- $ref: '#/components/schemas/CreateExhaustionTimeBurnAlertRequest'
- $ref: '#/components/schemas/CreateBudgetRateBurnAlertRequest'
discriminator:
propertyName: alert_type
mapping:
exhaustion_time: '#/components/schemas/CreateExhaustionTimeBurnAlertRequest'
budget_rate: '#/components/schemas/CreateBudgetRateBurnAlertRequest'
parameters:
datasetSlugOrAll:
name: datasetSlug
description: 'The dataset slug or use `__all__` for endpoints that support environment-wide operations.
'
in: path
required: true
schema:
type: string
externalDocs:
url: https://docs.honeycomb.io