openapi: 3.1.0
info:
title: Honeycomb Auth Recipients 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: Recipients
description: 'Honeycomb Recipients allow you to define and manage the Recipients that will get notified by a Trigger or Burn Alert.
The types of Recipients supported are: PagerDuty, Email, Webhook, Microsoft Teams, and Slack.
## Authorization
The API key must have the **Manage Recipients** permission. Recipients are team-wide and NOT environment-specific.
API Keys with the **Manage Recipients** permission can modify recipients used by ALL environments for a given team.
Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/).
'
paths:
/1/recipients:
post:
security:
- configuration_key: []
summary: Create a Recipient
description: 'Unlike many resources, Recipients are not linked to a specific Environment or Dataset. The Recipient will be created for the Team associated with your API key.
The `details` fields will vary depending on the `type` of Recipient. Use the drop-down to view the specific fields for each `type` value.
Before Slack Recipients can be created, the Slack OAuth flow in the Integration Center must be completed.
'
tags:
- Recipients
operationId: createRecipient
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
required: true
responses:
'201':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/ValidationFailed'
get:
security:
- configuration_key: []
summary: List all Recipients
description: 'Retrieve all recipients for a team.
'
tags:
- Recipients
operationId: listRecipients
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/Recipient'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: unknown API key - check your credentials
/1/recipients/{recipientId}:
parameters:
- $ref: '#/components/parameters/recipientId'
get:
security:
- configuration_key: []
summary: Get a single Recipient
description: 'Retrieve a Recipient by recipient ID.
'
tags:
- Recipients
operationId: getRecipient
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
put:
security:
- configuration_key: []
summary: Update a Recipient
description: 'Update a Recipient by specifying the recipient ID and full recipient details. (Partial PUT is not supported.)
Updates to the Recipient Type is not supported. For example, changing an existing Recipient from PagerDuty to Email is not allowed.
**Important**: Modifying an existing recipient will change the destination of all triggers/burn alerts that use that recipient.
'
tags:
- Recipients
operationId: updateRecipient
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
required: true
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Recipient'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'422':
$ref: '#/components/responses/ValidationFailed'
delete:
security:
- configuration_key: []
summary: Delete a Recipient
description: 'Delete a recipient by specifying the recipient ID.
A Recipient can only be deleted if it is NOT in use by any Triggers or Burn Alerts associated to the team.
'
tags:
- Recipients
operationId: deleteRecipient
responses:
'204':
description: Success - no content
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: unknown API key - check your credentials
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
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'
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'
Conflict:
description: Conflict
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: 409
type: https://api.honeycomb.io/problems/conflict
title: Request could not be completed due to a conflict with the current state of the target resource.
error: A resource by that name already exists.
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
Unauthorized:
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: unknown API key - check your credentials
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
BadRequest:
description: The provided request body was invalid.
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/DetailedError'
examples:
DetailedError:
value:
status: 400
type: https://api.honeycomb.io/problems/unparseable
title: The request body could not be parsed.
error: invalid gzip data
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
GenericError:
value:
error: invalid Query data
application/vnd.api+json:
schema:
$ref: '#/components/schemas/JSONAPIError'
examples:
JSONAPIError:
value:
errors:
- id: 06dcdd6508ca822f0e7e2bb4121c1f52
code: invalid
title: request body could not be parsed
detail: invalid gzip data
schemas:
RecipientProperties:
type: object
properties:
id:
type: string
readOnly: true
example: yUheCUmgZ8p
created_at:
type: string
format: date-time
description: ISO8601 formatted time the Recipient was created.
example: '2022-07-26T22:38:04Z'
readOnly: true
updated_at:
type: string
format: date-time
description: ISO8601 formatted time the Recipient was updated.
example: '2022-07-26T22:38:04Z'
readOnly: true
type:
$ref: '#/components/schemas/RecipientType'
PagerDutyRecipient:
allOf:
- $ref: '#/components/schemas/RecipientProperties'
- type: object
properties:
type:
type: string
enum:
- pagerduty
- type: object
properties:
details:
type: object
required:
- pagerduty_integration_name
- pagerduty_integration_key
description: Specific schema for the Pagerduty Recipient Type
properties:
pagerduty_integration_name:
type: string
description: A name for this Integration.
example: Example PagerDuty Service
pagerduty_integration_key:
type: string
description: Pagerduty Integration Key.
example: 7zOwh1edS8xHGcwfb2bA4sqY8E6PJzSK
minLength: 32
maxLength: 32
WebhookHeader:
type: object
required:
- header
properties:
header:
type: string
maxLength: 64
value:
type: string
maxLength: 750
MSTeamsRecipient:
allOf:
- $ref: '#/components/schemas/RecipientProperties'
- type: object
properties:
type:
type: string
enum:
- msteams
- type: object
deprecated: true
properties:
details:
type: object
required:
- webhook_name
- webhook_url
description: Specific schema for the MS Teams Recipient Type. Now deprecated, please use the `msteams_workflow` type instead.
properties:
webhook_name:
type: string
description: A name for this recipient.
example: My Teams Channel
webhook_url:
type: string
description: Incoming webhook URL of an Teams instance.
example: https://yourco.webhook.office.com/webhook/xxxx
RecipientType:
type: string
description: One of the supported Recipient Types
enum:
- pagerduty
- email
- slack
- webhook
- msteams
- msteams_workflow
EmailRecipient:
allOf:
- $ref: '#/components/schemas/RecipientProperties'
- type: object
properties:
type:
type: string
enum:
- email
- type: object
properties:
details:
type: object
required:
- email_address
description: Specific schema for the Email Recipient Type
properties:
email_address:
type: string
description: Email address to notify.
example: notify-me@example-email.com
PayloadTemplate:
type: object
properties:
body:
type: string
example: '{ \"alert\": \"{{.Alert.Description}}\" }'
Recipient:
type: object
required:
- type
properties:
type:
type: string
discriminator:
propertyName: type
mapping:
pagerduty: '#/components/schemas/PagerDutyRecipient'
email: '#/components/schemas/EmailRecipient'
slack: '#/components/schemas/SlackRecipient'
webhook: '#/components/schemas/WebhookRecipient'
msteams: '#/components/schemas/MSTeamsRecipient'
msteams_workflow: '#/components/schemas/MSTeamsWorkflowRecipient'
oneOf:
- $ref: '#/components/schemas/PagerDutyRecipient'
- $ref: '#/components/schemas/EmailRecipient'
- $ref: '#/components/schemas/SlackRecipient'
- $ref: '#/components/schemas/WebhookRecipient'
- $ref: '#/components/schemas/MSTeamsRecipient'
- $ref: '#/components/schemas/MSTeamsWorkflowRecipient'
TemplateVariableDefinition:
type: object
required:
- name
properties:
name:
type: string
pattern: ^[a-z](?:[a-zA-Z0-9]+$)?$
maxLength: 64
example: severity
default_value:
type: string
maxLength: 256
example: CRITICAL
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
MSTeamsWorkflowRecipient:
allOf:
- $ref: '#/components/schemas/RecipientProperties'
- type: object
properties:
type:
type: string
enum:
- msteams_workflow
- type: object
properties:
details:
type: object
required:
- webhook_name
- webhook_url
description: Specific schema for the MS Teams Workflow Recipient Type.
properties:
webhook_name:
type: string
maxLength: 255
description: A name for this recipient.
example: My Teams Channel
webhook_url:
type: string
maxLength: 2048
description: Incoming webhook URL of an Teams instance.
example: https://test-123.westus.logic.azure.com:443/workflows/54321/triggers/manual/paths/invoke
SlackRecipient:
allOf:
- $ref: '#/components/schemas/RecipientProperties'
- type: object
properties:
type:
type: string
enum:
- slack
- type: object
properties:
details:
type: object
required:
- slack_channel
description: Specific schema for the Slack Recipient Type.
properties:
slack_channel:
type: string
description: Slack channel to notify.
example: '#alerts-channel'
WebhookRecipient:
allOf:
- $ref: '#/components/schemas/RecipientProperties'
- type: object
properties:
type:
type: string
enum:
- webhook
- type: object
properties:
details:
type: object
required:
- webhook_name
- webhook_url
description: Specific schema for the Webhook Recipient Type
properties:
webhook_headers:
type: array
maxItems: 5
description: Custom headers for this webhook
items:
$ref: '#/components/schemas/WebhookHeader'
example:
- header: Authorization
value: Bearer xyz123
webhook_name:
type: string
maxLength: 255
description: A name for this Integration.
example: Example webhook
webhook_url:
type: string
description: Webhook URL.
maxLength: 2048
example: https://webhook.example.com
webhook_secret:
type: string
description: Webhook secret.
maxLength: 255
example: secret
webhook_payloads:
type: object
description: Specify a custom webhook payload.
properties:
template_variables:
type: array
maxItems: 10
description: Custom variable definitions for this webhook
items:
$ref: '#/components/schemas/TemplateVariableDefinition'
example:
- name: severity
default_value: CRITICAL
payload_templates:
type: object
properties:
trigger:
$ref: '#/components/schemas/PayloadTemplate'
budget_rate:
$ref: '#/components/schemas/PayloadTemplate'
exhaustion_time:
$ref: '#/components/schemas/PayloadTemplate'
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.
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
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
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
parameters:
recipientId:
name: recipientId
description: Unique identifier (ID) of a Recipient.
in: path
required: true
schema:
type: string
externalDocs:
url: https://docs.honeycomb.io