openapi: 3.1.0 info: title: Honeycomb Events 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. ' externalDocs: url: https://docs.honeycomb.io servers: - url: https://api.honeycomb.io - url: https://api.eu1.honeycomb.io tags: - name: Events description: 'The Events API endpoints are the lowest-level way to send Events to Honeycomb. **This should be your last resort!** If unsure where to start when instrumenting an application, read about how to [Send Data to Honeycomb](https://docs.honeycomb.io/send-data/). If you are building a tracing or metrics library, we recommend using [OpenTelemetry](https://docs.honeycomb.io/send-data/opentelemetry/). ## Authorization It is recommended that an Ingest API key is used for sending events. A Configuration API key will work, and must have the **Send Events** permission. Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/). ' - name: Kinesis Events description: 'The Kinesis Events API endpoints allow Honeycomb to process streaming events from Amazon Kinesis. Refer to the [Honeycomb AWS integrations](https://docs.honeycomb.io/integrations/aws/how-aws-integrations-work/) documentation for more information. ## Authorization It is recommended that an Ingest API key is used for sending events. A Configuration API key will work, and must have the **Send Events** permission. Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/). ' paths: /1/batch/{datasetSlug}: parameters: - $ref: '#/components/parameters/datasetSlug' post: security: - configuration_key: [] - ingest_key: [] summary: Create Events description: 'Supports batch creation of events. Dataset names are case insensitive. `POST` requests to "MyDatasET" will land in the same dataset as "mydataset". Names may contain URL-encoded spaces or other special characters, but not URL-encoded slashes. For example, "My%20Dataset" will show up in the UI as "My Dataset". The first event received for a dataset determines the casing of the displayed name. All subsequent variations in casing will use the originally specified case. ' tags: - Events operationId: createEvents parameters: - in: header name: Content-Encoding description: 'Included when sending events in a file. Size limitations may be addressed by compressing request bodies with gzip or zstd compression. Be sure to set the Content-Encoding to `gzip` or `zstd` when compressing the request body. If sending plaintext, omit this header; "plaintext" is included to simplify the example with curl. ' schema: type: string enum: - gzip - zstd example: plaintext requestBody: required: true description: "The array should contain one or more JSON objects representing Events. Each Event contains its payload under the `data` key. Values of `time` and/or `samplerate` can be included as\ \ well.\n\nThe JSON payload should have the structure:\n\n `[{ \"data\": { \"key1\": \"value1\", \"key2\": 2.0 } }, ... ]`\n\nSize limitations may be addressed by compressing request bodies with\ \ `gzip` or `zstd` compression.\n\nAn empty `202` response indicates that the event has been queued for processing.\n" content: application/json: schema: type: array items: $ref: '#/components/schemas/BatchEvent' example: - time: '2006-01-02T15:04:05.99Z' samplerate: 1 data: method: GET endpoint: /foo shard: users duration_ms: 32 - time: '2006-01-02T15:04:05.99Z' data: some_other_key: value duration_ms: 40 application/octet-stream: schema: type: string format: binary responses: '200': description: Enqueued for processing content: application/json: schema: type: array items: type: object properties: status: type: number error: type: string example: - status: 202 - status: 400 error: Request body should not be empty. - status: 400 error: Event has too many columns. - status: 400 error: Request body is malformed and cannot be read. '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' examples: not-empty: description: The body is empty, or blank. value: error: Request body should not be empty. dataset-too-many-columns: description: The dataset has reached the maximum number of columns. value: error: Dataset has too many columns. malformed-request: description: The API failed to decode the body as JSON. value: error: Request body is malformed and cannot be read. too-large: description: The body is too large. value: error: Request body is too large. '401': $ref: '#/components/responses/Unauthorized' '403': description: Dropped due to administrative throttling content: application/json: schema: $ref: '#/components/schemas/Error' example: error: Event dropped due to administrative throttling '404': $ref: '#/components/responses/NotFound' '429': description: Dropped due to rate limiting content: application/json: schema: $ref: '#/components/schemas/Error' examples: rate-limiting: value: error: Request dropped due to rate limiting. deny-list: value: error: Event dropped due to administrative denylist /1/events/{datasetSlug}: parameters: - $ref: '#/components/parameters/datasetSlug' post: security: - configuration_key: [] - ingest_key: [] summary: Create an Event description: 'Using this endpoint for anything more than testing is highly discouraged. Sending events in batches will be much more efficient and should be preferred if at all possible. ' tags: - Events operationId: createEvent parameters: - in: header name: X-Honeycomb-Event-Time description: The Event's timestamp. Optional. Defaults to server time. schema: type: integer - in: header name: X-Honeycomb-Samplerate description: Optional. Defaults to 1. schema: type: integer requestBody: description: 'The request body is limited to raw (potentially compressed) size of 1MB. The maximum number of distinct columns (fields) allowed in an event is `2000`. ' content: application/json: schema: $ref: '#/components/schemas/Event' example: method: GET endpoint: /foo shard: users duration_ms: 32 required: true responses: '200': description: Enqueued for processing '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' examples: not-empty: description: The body is empty, or blank. value: error: Request body should not be empty. dataset-too-many-columns: description: The dataset has reached the maximum number of columns. value: error: Dataset has too many columns. events-too-many-columns: description: The event has reached the maximum number of columns. value: error: Event has too many columns. malformed-request: description: The API failed to decode the body as JSON. value: error: Request body is malformed and cannot be read. too-large: description: The body is too large. value: error: Request body is too large. '401': $ref: '#/components/responses/Unauthorized' '403': description: Dropped due to administrative throttling content: application/json: schema: $ref: '#/components/schemas/Error' example: error: Event dropped due to administrative throttling '404': $ref: '#/components/responses/NotFound' '429': description: Dropped due to rate limiting content: application/json: schema: $ref: '#/components/schemas/Error' examples: rate-limiting: value: error: Request dropped due to rate limiting. deny-list: value: error: Event dropped due to administrative denylist /1/kinesis_events/{datasetSlug}: parameters: - in: header name: X-Amz-Firehose-Request-Id description: 'AWS Request ID associated with the Kinesis Firehose. ' schema: type: string required: true example: 33658b45-a8f1-4007-92e8-f601ae33db14 - $ref: '#/components/parameters/datasetSlug' post: summary: Create Kinesis Events description: 'This endpoint processes events and metrics coming from AWS through Kinesis Firehose. ' tags: - Kinesis Events operationId: createKinesisEvents security: - firehose_access_key: [] requestBody: description: 'The request body expected from Amazon Kinesis Firehose. Events and metrics have the same shape but the base64 encoded data blob for metrics is expected to be Protowire-encoded as well. CloudWatch Logs data coming through Amazon Kinesis Firehose is expected to have a gzip Content-Encoding. ' content: application/json: schema: $ref: '#/components/schemas/KinesisEvent' required: true responses: '200': description: Events queued for processing content: application/json: schema: $ref: '#/components/schemas/KinesisResponse' '401': $ref: '#/components/responses/Unauthorized' default: $ref: '#/components/responses/GenericError' components: responses: 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' GenericError: description: Error content: application/json: schema: $ref: '#/components/schemas/Error' 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' 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 schemas: 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 KinesisEvent: type: object properties: requestId: type: string timestamp: type: integer records: type: array items: $ref: '#/components/schemas/KinesisEventRecord' BatchEvent: type: object properties: data: type: object allOf: - $ref: '#/components/schemas/Event' time: type: string description: 'Should be in RFC3339 high precision format (for example, YYYY-MM-DDTHH:MM:SS.mmmZ). May be a Unix epoch (seconds since 1970) with second or greater precision (for example, 1452759330927). Optional. If not set, defaults to the time that the API receives the event. ' samplerate: type: integer description: 'An integer representing the denominator in the fraction 1/n when client-side sampling has been applied. Optional. If not set, defaults to `1`, meaning "not sampled". Refer to [Sampling](https://docs.honeycomb.io/manage-data-volume/sample/sampled-data-in-honeycomb/) for more detail. ' KinesisResponse: type: object properties: requestId: type: string timestamp: type: integer errorMessage: type: string Event: type: object minProperties: 1 maxProperties: 2000 additionalProperties: description: 'A collection of key-value properties that represent the Event. Honeycomb supports basic data types for the values of each Event attribute. ### Limits - 2,000 fields per event. The entire event must be less than 1 MB of uncompressed JSON. - String Fields: Each string field has a maximum length of 64KB. - Number Fields: Integers and Floats are both 64-bit. ' type: - string - number - boolean KinesisEventRecord: type: object properties: data: type: string description: Base64 encoded Kinesis record from AWS Error: x-tags: - Errors type: object description: A legacy error, containing only a textual description. properties: error: type: string readOnly: true parameters: datasetSlug: name: datasetSlug description: 'The dataset slug. ' in: path required: true schema: type: string