openapi: 3.1.0
info:
title: Honeycomb Auth Query Annotations 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: Query Annotations
description: 'Query Annotations in Honeycomb allow you to associate names and descriptions to queries to add additional information in collaboration features.
This API allows you to list, create, update, and delete Query Annotations.
## Authorization
The API key must have the **Manage Queries and Columns** permission. Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/).
'
paths:
/1/query_annotations/{datasetSlug}:
parameters:
- $ref: '#/components/parameters/datasetSlugOrAll'
post:
security:
- configuration_key: []
summary: Create a Query Annotation
description: 'Create a Query Annotation for the specified query ID.
'
tags:
- Query Annotations
operationId: createQueryAnnotation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryAnnotation'
required: true
responses:
'201':
description: Created
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/QueryAnnotation'
'400':
description: Bad Request
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
invalid-query-id:
description: The query ID is invalid.
value:
error: Query ID included in body is invalid
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
get:
security:
- configuration_key: []
summary: List Query Annotations
description: 'List all Query Annotations in the specified dataset.
'
tags:
- Query Annotations
operationId: listQueryAnnotations
parameters:
- name: include_board_annotations
in: query
description: 'Whether to include Query Annotations that were created from boards. By default, only Query Annotations created directly from queries are returned.
'
schema:
type: boolean
default: false
required: false
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/QueryAnnotation'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
/1/query_annotations/{datasetSlug}/{queryAnnotationId}:
parameters:
- $ref: '#/components/parameters/datasetSlugOrAll'
- name: queryAnnotationId
description: The unique identifier (ID) of the annotation.
in: path
required: true
schema:
type: string
get:
security:
- configuration_key: []
summary: Get a Query Annotation
description: 'Get a Query Annotation by its ID.
'
tags:
- Query Annotations
operationId: getQueryAnnotation
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/QueryAnnotation'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
put:
security:
- configuration_key: []
summary: Update a Query Annotation
description: 'Update a Query Annotation by specifying its ID. The Query ID associated with the Query Annotation cannot be updated. Partial updates are not supported.
'
tags:
- Query Annotations
operationId: updateQueryAnnotation
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QueryAnnotation'
example:
name: My Updated Annotation
description: A nice description of My Update Annotation
query_id: mabAMpSPDjH
id: sGUnkBHgRFN
created_at: '2022-10-26T21:36:04Z'
updated_at: '2022-12-16T10:44:08Z'
required: true
responses:
'200':
description: Success
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/QueryAnnotation'
example:
name: My Updated Annotation
description: A nice description of My Update Annotation
query_id: mabAMpSPDjH
'400':
description: Bad Request
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
examples:
update-includes-bad-id:
description: The ID in the URL and the ID in the request body do not match.
value:
error: Query annotation id included in body does not match URL
invalid-query-id:
description: The query ID is invalid.
value:
error: Query id included in body is invalid
cannot-update-query-id:
description: The query ID cannot be updated.
value:
error: queries in annotations cannot be changed
query-not-in-dataset:
description: The query ID does not exist in the specified dataset.
value:
error: Query is not in the dataset
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
delete:
security:
- configuration_key: []
summary: Delete a Query Annotation
description: 'Delete a Query Annotation by specifying its ID.
'
tags:
- Query Annotations
operationId: deleteQueryAnnotation
responses:
'204':
description: Success - no content
headers:
Ratelimit:
$ref: '#/components/headers/RateLimit'
RateLimitPolicy:
$ref: '#/components/headers/RateLimitPolicy'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimited'
default:
$ref: '#/components/responses/GenericError'
components:
headers:
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
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
responses:
GenericError:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
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.
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'
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
schemas:
QueryAnnotation:
type: object
description: A Query Annotation consists of a name and description associated with a query to add context when collaborating.
required:
- name
- query_id
properties:
name:
type: string
description: A name for the Query.
example: My Named Query
minLength: 1
maxLength: 320
description:
type: string
description: A description of the Query.
example: A nice description of My Named Query
maxLength: 1023
query_id:
type: string
description: 'The ID of the Query that the annotation describes. **Note**: Once created, it is NOT possible to change the query ID associated with an annotation. It is possible to have multiple annotations associated with a Query.
'
example: mabAMpSPDjH
id:
type: string
description: The unique identifier (ID) of a Query Annotation.
readOnly: true
example: sGUnkBHgRFN
created_at:
type: string
format: date-time
description: ISO8601 formatted time when the Query Annotation was created.
example: '2022-10-26T21:36:04Z'
readOnly: true
updated_at:
type: string
format: date-time
description: ISO8601 formatted time when the Query Annotation was updated.
example: '2022-12-04T08:14:26Z'
readOnly: true
source:
type: string
description: The source of the Query Annotation.
example: query
enum:
- query
- board
readOnly: true
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
Error:
x-tags:
- Errors
type: object
description: A legacy error, containing only a textual description.
properties:
error:
type: string
readOnly: true
externalDocs:
url: https://docs.honeycomb.io