openapi: 3.1.0
info:
  title: Honeycomb API
  x-logo:
    url: https://docs.honeycomb.io/images/2021-HC-Logo-RGB.svg
    href: https://www.honeycomb.io/
  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 <a
    href="https://docs.honeycomb.io/troubleshoot/community/">Pollinators
    Slack</a> or to <a href="https://support.honeycomb.io/">Honeycomb
    Support</a>.
externalDocs:
  url: https://docs.honeycomb.io
servers:
  - url: https://api.honeycomb.io
  - url: https://api.eu1.honeycomb.io
tags:
  - name: Auth
    description: >
      API Keys have various scopes permissions and belong to a specific Team or
      Environment.


      Any valid Honeycomb ingest or configuration API Key will work with this
      endpoint. Learn more about [API
      keys](https://docs.honeycomb.io/get-started/best-practices/api-keys).


      These endpoints can be used to validate authentication for a key, to
      determine what authorizations have been granted

      to a key, and to determine the Team and Environment that a key belongs to.
  - name: Boards
    description: >
      Boards are a place to pin and save useful queries and graphs you want to
      retain for later reuse and reference.


      This API allows you to list, create, update, and delete Boards.

      ## Authorization

      The API key must have the **Manage Public Boards** permission. Learn more
      about [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - 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/get-started/configure/environments/manage-api-keys/).
  - name: Columns
    description: >
      Columns are fields in the events you send to Honeycomb.


      This API allows you to list, create, update, and delete columns in a
      dataset.

      ## Authorization

      The API key must have the **Manage Queries and Columns** permission. Learn
      more about [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Datasets
    description: >
      A Dataset represents a collection of related events that come from the
      same source, or are related to the same source.


      This API allows you to list, create, and update datasets.

      ## Authorization

      The API key must have the **Create Datasets** permission. Learn more about
      [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Dataset Definitions
    description: >
      Dataset definitions describe the fields with special meaning in the
      Dataset.


      Refer to the [Dataset
      Definitions](https://docs.honeycomb.io/get-started/configure/datasets/definitions/)
      documentation for more information.


      **Honeycomb automatically creates these Dataset definition fields when the
      Dataset is created.** Manual creation of Dataset definitions is **not**
      needed.

      ## Authorization

      The API key must have the **Create Datasets** permission. Learn more about
      [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Derived Columns
    description: >
      Derived columns allow you to run queries based on the value of an
      expression that is derived from the columns in an event.


      This API allows you to list, create, update, and delete derived columns in
      a dataset or across a whole environment, paralleling the behavior of the
      Schema tab within a Dataset's or Environment's Settings UI.

      ## Authorization

      The API key must have the **Manage Queries and Columns** permission. Learn
      more about [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - 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/get-started/configure/environments/manage-api-keys/).
  - name: Environments
    description: |
      This API allows you to list, create, and update, and delete Environments.
  - name: Key Management
    description: >
      This API allows you to list, create, update, and delete API Keys for a
      Team.
  - 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/get-started/configure/environments/manage-api-keys/).
  - name: Markers
    description: >
      Markers indicate points in time on graphs where interesting things happen,
      such as deploys or outages.


      This API allows you to list, create, update, and delete Markers.

      ## Authorization

      The API key must have the **Manage Markers** permission. Learn more about
      [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Marker Settings
    description: >
      Marker Settings apply to groups of similar Markers.

      For example, "deploys" markers appear with the same color on a graph.


      This API allows you to list, create, update, and delete Marker Settings.

      ## Authorization

      The API key must have the **Manage Markers** permission. Learn more about
      [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Queries
    description: >
      Queries in Honeycomb are specifications for queries, and are used to
      identify queries in other parts of the API - in particular: boards,
      triggers, and query annotations.


      This API allows you to create and get query objects.

      ## Authorization

      The API key must have the **Manage Queries and Columns** permission. Learn
      more about [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - 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/get-started/configure/environments/manage-api-keys/).
  - name: Query Data
    description: >
      This feature is available as part of the [Honeycomb Enterprise
      plan](https://www.honeycomb.io/pricing/).


      Query Results are the aggregated data from a Query, similar to what is
      displayed in graphs or heatmaps within the Honeycomb UI. Receiving results
      from a Query is a three-step process:


      Create the Query (or Query Spec), which validates that the query
      parameters are valid. Creating a query does not actually run the query to
      get results.

      Run the query asynchronously by creating a Query Result referencing the
      Query’s ID. This returns a Query Result ID.

      Poll the query result endpoint (with the Query Result ID) until the data
      is ready.


      Note that many Query Results can be created from a single Query. This is
      particularly useful when using a relative time_range parameter in the
      Query.

      For example, a Query with `time_range: 7200` and no explicit `start_time`
      or `end_time` can be re-run over and over, with each resulting Query
      Result containing the most recent 2 hours of data.

      This is conceptually similar to clicking Run Query in the Honeycomb UI
      without changing any query parameters.


      **IMPORTANT API RESTRICTIONS:**


      To ensure the stability of Honeycomb systems, we have enabled the
      following API restrictions. These restrictions may change over time.


      * Query Results can only be created for events with timestamps within the
      past 7 days.


      * When creating a Query Result, the time ranges from the Query are
      truncated according to the following rules. For queries with a time range
      of:

          * less than or equal to 6 hours, results are truncated to the nearest 1 minute. For example, a start/end time of 2021-04-22T05:28:12Z will be truncated to 2021-04-22T05:28:00Z.

          * greater than 6 hours and less than or equal to 2 days, results are truncated to the nearest 5 minutes. For example, a start/end time of 2021-04-22T05:28:12Z will be truncated to 2021-04-22T05:25:00Z.

          * greater than 2 days and less than or equal to 7 days, results are truncated to the nearest 30 minutes. For example, a start/end time of 2021-04-22T05:28:12Z will be truncated to 2021-04-22T05:00:00Z.

      * Creating a Query Result is rate limited to 10 requests per minute.
      Status code 429 will be returned when rate limited.


      * Query Results cannot take longer than 10 seconds to run.

      ## Authorization

      The API key must have the **Manage Queries and Columns** and **Run
      Queries** permission. Learn more about [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - 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/get-started/configure/environments/manage-api-keys/).
  - name: SLOs
    description: >
      This feature is available as part of the [Honeycomb Pro and Enterprise
      plans](https://www.honeycomb.io/pricing).


      Honeycomb SLOs allow you to define and monitor Service Level Objectives
      (SLOs) for your organization.


      This API allows you to list, create, update, and delete SLO objects.

      ## Authorization

      The API key must have the **Manage SLOs** permission. Learn more about
      [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Triggers
    description: >
      Triggers let you receive notifications when your data in Honeycomb crosses
      the thresholds that you configure.

      The graph on which to alert is as flexible as a Honeycomb query, which
      helps reduce false positives due to known errors.Triggers fire


      This API allows you to list, create, update, and delete Triggers.

      ## Authorization

      The API key must have the **Manage Triggers** permission. Learn more about
      [API keys
      here](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
  - name: Errors
    description: >
      The Honeycomb API returns standardized error responses, as documented
      here.
paths:
  /1/auth:
    get:
      security:
        - configuration_key: []
        - ingest_key: []
      summary: List Authorizations
      description: >
        Returns metadata about the API Key used to call the API.

        Note: a Honeycomb Classic API key will return an empty string for both
        of the `environment` values.
      tags:
        - Auth
      operationId: getAuth
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Auth'
              examples:
                environment:
                  description: Environment API Key
                  value:
                    id: FL_xMM5LapLC
                    type: configuration
                    api_key_access:
                      events: true
                      markers: true
                      triggers: false
                      boards: false
                      queries: false
                      columns: false
                      createDatasets: true
                      slos: false
                      recipients: false
                      privateBoards: false
                    environment:
                      name: Production
                      slug: production
                    team:
                      name: Honeycomb Docs
                      slug: honeycomb-docs
                classic:
                  description: Classic Environment API Key
                  value:
                    id: A3jatwoWSxA
                    type: configuration
                    api_key_access:
                      events: true
                      markers: true
                      triggers: false
                      boards: false
                      queries: false
                      columns: false
                      createDatasets: false
                      slos: false
                      recipients: false
                      privateBoards: false
                    environment:
                      name: ''
                      slug: ''
                    team:
                      name: Honeycomb Docs
                      slug: honeycomb-docs
                ingest:
                  description: Ingest API Key
                  value:
                    id: hcxik_01j1824es7n4evcmv81cn392jb
                    type: ingest
                    api_key_access:
                      createDatasets: true
                    environment:
                      name: Production
                      slug: production
                    team:
                      name: Honeycomb Docs
                      slug: honeycomb-docs
        '401':
          $ref: '#/components/responses/Unauthorized'
        default:
          $ref: '#/components/responses/GenericError'
  /2/auth:
    get:
      security:
        - bearerAuth: []
      summary: List Authorizations V2
      description: |
        Returns metadata about the Management API Key used to call the API.
      tags:
        - Auth
      operationId: getV2Auth
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/AuthV2Response'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /1/boards:
    post:
      security:
        - configuration_key: []
      summary: Create a Board
      description: |
        Create a Board comprised of one or more Queries.
      tags:
        - Boards
      operationId: createBoard
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Board'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Board'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        default:
          $ref: '#/components/responses/GenericError'
    get:
      security:
        - configuration_key: []
      summary: List All Boards
      description: >
        Retrieves a list of all non-secret Boards within an environment.
        **Note**: For Honeycomb Classic users, all boards within Classic will be
        returned.
      tags:
        - Boards
      operationId: listBoards
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Board'
        '401':
          $ref: '#/components/responses/Unauthorized'
        default:
          $ref: '#/components/responses/GenericError'
  /1/boards/{boardId}:
    parameters:
      - name: boardId
        description: The unique identifier (ID) of a Board.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get a Board
      description: Get a single Board by ID.
      tags:
        - Boards
      operationId: getBoard
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Board'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
    put:
      security:
        - configuration_key: []
      summary: Update a Board
      description: >
        Update a Board by specifying its ID and full details.

        **Note**: Queries can be added to, removed from, and re-ordered by
        updating the board itself. It is not possible to reference individual
        queries via the API.
      tags:
        - Boards
      operationId: updateBoard
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Board'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Board'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        default:
          $ref: '#/components/responses/GenericError'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Board
      description: Delete a public Board by specifying its ID.
      tags:
        - Boards
      operationId: deleteBoard
      responses:
        '204':
          description: Success - no Content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /1/burn_alerts/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
    post:
      security:
        - configuration_key: []
      summary: Create a Burn Alert
      description: |
        Create a Burn Alert in a specified dataset against a specified SLO.
      tags:
        - Burn Alerts
      operationId: createBurnAlert
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateBurnAlertRequest'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BurnAlertDetailResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        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
          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'
        default:
          $ref: '#/components/responses/GenericError'
  /1/burn_alerts/{datasetSlug}/{burnAlertId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
      - 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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BurnAlertDetailResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BurnAlertDetailResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        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'
        default:
          $ref: '#/components/responses/GenericError'
  /1/datasets:
    post:
      security:
        - configuration_key: []
      summary: Create a Dataset
      description: >
        Create a Dataset in the environment associated with your API key.

        If a Dataset already exists by that name (or slug), then the existing
        dataset will be returned.
      tags:
        - Datasets
      operationId: createDataset
      requestBody:
        description: >
          The dataset will be created within the environment associated with
          your API key.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetCreationPayload'
        required: true
      responses:
        '200':
          description: OK - Dataset already exists
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dataset'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dataset'
              example:
                name: MyDataset!
                slug: mydataset-
                description: A nice description of my dataset
                expand_json_depth: 3
                created_at: '2022-07-21T18:39:23Z'
                last_written_at: null
                regular_columns_count: 0
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: we could not create a dataset with that name
        '422':
          $ref: '#/components/responses/ValidationFailed'
        default:
          $ref: '#/components/responses/GenericError'
    get:
      security:
        - configuration_key: []
      summary: List All Datasets
      description: >
        Lists all Datasets for an environment.

        **Note**: For Honeycomb Classic users, all datasets in Classic are
        returned.
      tags:
        - Datasets
      operationId: listDatasets
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Dataset'
              example:
                - name: my dataset!
                  description: my dataset described!
                  slug: my-dataset-
                  expand_json_depth: 2
                  created_at: '2022-07-21T18:39:23Z'
                  last_written_at: '2022-07-22T19:52:00Z'
                  regular_columns_count: 12
                - name: another dataset
                  description: ''
                  slug: another-dataset
                  expand_json_depth: 0
                  created_at: '2022-07-21T18:39:23Z'
                  last_written_at: '2022-07-22T19:52:00Z'
                  regular_columns_count: 98
        '401':
          $ref: '#/components/responses/Unauthorized'
        default:
          $ref: '#/components/responses/GenericError'
  /1/datasets/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
    get:
      security:
        - configuration_key: []
      summary: Get a Dataset
      description: |
        Get a single Dataset by slug.
      tags:
        - Datasets
      operationId: getDataset
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dataset'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Dataset
      description: >
        Deletes the Dataset. This is an irreversible operation.

        It may take several minutes for the deletion process to complete.



        **WARNING**: This endpoint will allow anyone with an API key that has
        the

        manage dataset permission to delete any dataset in the environment (or

        any dataset in the whole team for Classic customers).



        Datasets with Deletion Protection enabled cannot be deleted.


        To delete a Dataset with Deletion Protection enabled, first disable
        Deletion Protection by updating the Dataset with
        `settings.delete_protected = false`.
      tags:
        - Datasets
      operationId: deleteDataset
      responses:
        '202':
          description: Deleted
          content:
            application/json: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        default:
          $ref: '#/components/responses/GenericError'
    put:
      security:
        - configuration_key: []
      summary: Update a Dataset
      description: |
        Update a Dataset's settings.
      tags:
        - Datasets
      operationId: updateDataset
      requestBody:
        description: >
          Update a Dataset's settings.

          All fields must be specified, as omitting one will have the effect of
          reverting the setting to the default.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetUpdatePayload'
            example:
              expand_json_depth: 3
              description: my updated description
              settings:
                delete_protected: false
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dataset'
              example:
                name: My Dataset!
                slug: my-dataset-
                description: my updated description
                settings:
                  delete_protected: false
                expand_json_depth: 3
                created_at: '2022-07-21T18:39:23Z'
                last_written_at: '2022-09-22T17:32:03Z'
                regular_columns_count: 100
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /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 zst.
          schema:
            type: string
            enum:
              - gzip
              - zst
          example: gzip
      requestBody:
        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.


          The JSON payload should have the structure:

            `[{ "data": { "key1": "value1", "key2": 2.0 } }, ... ]`

          Size limitations may be addressed by compressing request bodies with
          `gzip` or `zstd` compression.


          An empty `202` response indicates that the event has been queued for
          processing.
        content:
          application/octet-stream:
            schema:
              type: string
              format: binary
          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
        required: true
      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/dataset_definitions/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
    patch:
      security:
        - configuration_key: []
      summary: Set or Update Dataset Definitions
      description: >
        Set or update one or more definitions for a Dataset.

        **Note**: While the PATCH payload can include the `column_type`,
        Honeycomb does not use this field when updating Dataset Definitions.
      tags:
        - Dataset Definitions
      operationId: patchDatasetDefinitions
      requestBody:
        description: >
          The PATCH payload takes a map of Dataset definition type to Dataset
          definition. Fields not defined in the request are not modified on the
          server.

          **Note**: In order to **CLEAR** a column of a Dataset definition set
          the column’s name field to an empty string.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetDefinitions'
            examples:
              setting:
                description: Set the duration_ms definition.
                value:
                  duration_ms:
                    name: duration_we_send
                    column_type: derived_column
              clearing:
                description: Clear the definitions.
                value:
                  error:
                    name: ''
                  link_trace_id:
                    name: ''
        required: true
      responses:
        '200':
          description: Dataset Definitions have been updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetDefinitions'
              example:
                duration_ms:
                  name: duration_ms
                  column_type: column
                error: null
                name: null
                parent_id: null
                route: null
                service_name: null
                span_id:
                  name: my_span_id
                  column_type: column
                span_kind: null
                annotation_type: null
                link_trace_id: null
                link_span_id: null
                status: null
                trace_id: null
                user: null
                log_severity: null
                log_message: null
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DetailedError'
              example:
                status: 400
                type: https://api.honeycomb.io/problems/unparseable
                title: The request body could not be parsed.
                detail: could not parse request body
                error: could not parse request body
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          description: 422 Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: 'The following columns were not found: duration_we_send'
    get:
      security:
        - configuration_key: []
      summary: Get all Dataset Definitions
      description: >
        Get all definitions for a Dataset.

        The response returns an object with a Dataset Definition for each set
        Dataset Definition type.
      tags:
        - Dataset Definitions
      operationId: listDatasetDefinitions
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetDefinitions'
              example:
                duration_ms:
                  name: duration_ms
                  column_type: column
                error: null
                name: null
                parent_id: null
                route: null
                service_name: null
                span_id:
                  name: my_span_id
                  column_type: column
                span_kind: null
                annotation_type: null
                link_trace_id: null
                link_span_id: null
                status: null
                trace_id: null
                user: null
                log_severity: null
                log_message: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /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
          100KB.


          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'
  /1/markers/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
    post:
      security:
        - configuration_key: []
      summary: Create a Marker
      description: >
        Create a Marker in the specified dataset. To create an environment
        marker, use the `__all__` keyword and an API key associated with the
        desired environment.
      tags:
        - Markers
      operationId: createMarker
      requestBody:
        description: |
          The marker body can include as many of the Marker fields as desired.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Marker'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Marker'
              example:
                created_at: '2016-08-13T05:39:42Z'
                updated_at: '2016-08-13T05:39:42Z'
                start_time: 1471040808
                message: 'backend deploy #123'
                type: deploy
                id: d1c84ec0
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
    get:
      security:
        - configuration_key: []
      summary: List All Markers
      description: |
        Lists all Markers for a dataset.
      tags:
        - Markers
      operationId: getMarker
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Marker'
              example:
                - created_at: '2016-08-13T05:39:42Z'
                  updated_at: '2016-08-13T05:39:42Z'
                  start_time: 1471040808
                  message: 'backend deploy #123'
                  type: deploy
                  id: d1c84ec0
                - created_at: '2016-08-14T05:39:42Z'
                  updated_at: '2016-08-14T05:39:42Z'
                  start_time: 1471040808
                  message: 'frontend deploy #123'
                  type: deploy
                  id: c2b52fa0
        '401':
          $ref: '#/components/responses/Unauthorized'
        default:
          $ref: '#/components/responses/GenericError'
  /1/markers/{datasetSlug}/{markerId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
      - name: markerId
        description: The unique identifier (ID) of a Marker.
        in: path
        required: true
        schema:
          type: string
    put:
      security:
        - configuration_key: []
      summary: Update a Marker
      description: >
        Update a Marker in the specified dataset. To update an environment
        marker, use the `__all__` keyword and an API key associated with the
        desired environment.
      tags:
        - Markers
      operationId: updateMarker
      requestBody:
        description: >
          If an existing field is not included in the payload, it will be
          erased.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Marker'
        required: true
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Marker'
              example:
                created_at: '2016-08-13T05:39:42Z'
                updated_at: '2016-08-13T05:39:42Z'
                start_time: 1471040808
                message: 'backend deploy #123'
                type: deploy
                id: d1c84ec0
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Marker
      tags:
        - Markers
      operationId: deleteMarker
      responses:
        '200':
          description: |
            Success
            The deleted Marker will be in the body of the response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Marker'
              example:
                created_at: '2016-08-13T05:39:42Z'
                updated_at: '2016-08-13T05:39:42Z'
                start_time: 1471040808
                message: 'backend deploy #123'
                type: deploy
                id: d1c84ec0
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /1/marker_settings/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
    post:
      security:
        - configuration_key: []
      summary: Create a Marker Setting
      tags:
        - Marker Settings
      operationId: createMarkerSetting
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarkerSetting'
        required: true
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarkerSetting'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    get:
      security:
        - configuration_key: []
      summary: Get a Marker Setting
      tags:
        - Marker Settings
      operationId: listMarkerSettings
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/MarkerSetting'
        '404':
          $ref: '#/components/responses/NotFound'
  /1/marker_settings/{datasetSlug}/{id}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
      - name: id
        description: The unique identifier (ID) of a marker setting.
        in: path
        required: true
        schema:
          type: string
    put:
      security:
        - configuration_key: []
      summary: Update a Marker Setting
      description: |
        A marker setting's `type` may not be changed after creation.
      tags:
        - Marker Settings
      operationId: updateMarkerSettings
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MarkerSetting'
            example:
              type: deploy
              color: '#1fa297'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MarkerSetting'
              example:
                type: deploy
                color: '#1fa297'
                id: gwAHiE5TS4j
                created_at: '2022-09-15T05:39:42Z'
                updated_at: '2022-12-20T08:10:05Z'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Marker Setting
      tags:
        - Marker Settings
      operationId: deleteMarkerSettings
      responses:
        '204':
          description: Success
        '404':
          $ref: '#/components/responses/NotFound'
  /1/queries/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
    post:
      security:
        - configuration_key: []
      summary: Create a Query
      description: >
        Create a query from a specification. DOES NOT run the query to retrieve
        results.
      tags:
        - Queries
      operationId: createQuery
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Query'
            examples:
              Simple Query:
                value:
                  calculations:
                    - op: COUNT
                  orders:
                    - op: COUNT
                      order: descending
                  time_range: 7200
              Query With Filter and Group By:
                value:
                  calculations:
                    - op: COUNT
                  breakdowns:
                    - user_agent
                  filters:
                    - op: '>='
                      column: response.status_code
                      value: 400
                  orders:
                    - op: COUNT
                      order: descending
                  time_range: 7200
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Query'
              examples:
                Simple Query:
                  value:
                    id: abc3419d
                    calculations:
                      - op: COUNT
                    orders:
                      - op: COUNT
                        order: descending
                    time_range: 7200
                Query With Filter and Group By:
                  value:
                    id: xyz321a
                    calculations:
                      - op: COUNT
                    breakdowns:
                      - user_agent
                    filters:
                      - op: '>='
                        column: response.status_code
                        value: 400
                    orders:
                      - op: COUNT
                        order: descending
                    time_range: 7200
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
  /1/queries/{datasetSlug}/{queryId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
      - name: queryId
        description: The unique identifier (ID) of a query.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get a Query
      description: |
        Retrieve a query by its ID.
      tags:
        - Queries
      operationId: getQuery
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Query'
              example:
                id: abc3419d
                breakdowns:
                  - user_agent
                calculations:
                  - op: COUNT
                orders:
                  - op: COUNT
                    order: descending
                limit: 10
                time_range: 7200
                end_time: 1676467828
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryAnnotation'
        '400':
          description: Bad Request
          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'
        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
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/QueryAnnotation'
        '404':
          $ref: '#/components/responses/NotFound'
        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
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryAnnotation'
        '404':
          $ref: '#/components/responses/NotFound'
        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
          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
          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'
        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
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /1/query_results/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
    post:
      security:
        - configuration_key: []
      summary: Create a Query Result
      description: >
        Kick off processing of a Query to then get back the Query Results.

        Once the Query Result has been created, the query will be run
        asynchronously, allowing the result data to be fetched from the GET
        query result endpoint.

        Only the last 7 days of data can be queried. Any queries with a
        `start_time`, `end_time`, or `time_range` older than last 7 days will
        result in a `400` error response.
      tags:
        - Query Data
      operationId: createQueryResult
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateQueryResultRequest'
        required: true
      responses:
        '201':
          description: Created
          headers:
            Location:
              schema:
                type: string
              description: >-
                The Location header will contain the URL where the results can
                be fetched.
              example: >-
                https://api.honeycomb.io/1/query_results/test-via-curl/HprJhV1fYyr
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResult'
              examples:
                Simple Query:
                  value:
                    query:
                      calculations:
                        - op: COUNT
                      orders:
                        - op: COUNT
                          order: descending
                      limit: 10000
                      time_range: 7200
                    complete: false
                    id: dfg456
                    links:
                      query_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/dfg456
                      graph_image_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/dfg456/snapshot
                Query with Filter and Group By:
                  value:
                    query:
                      calculations:
                        - op: COUNT
                      breakdowns:
                        - user_agent
                      filters:
                        - op: '>='
                          column: response.status_code
                          value: 400
                      orders:
                        - op: COUNT
                          order: descending
                      limit: 10000
                      time_range: 7200
                    complete: false
                    id: hij678a
                    links:
                      query_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/hij678a
                      graph_image_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/hij678a/snapshot
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        default:
          $ref: '#/components/responses/GenericError'
  /1/query_results/{datasetSlug}/{queryResultId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
      - name: queryResultId
        description: The unique identifier (ID) of the query result.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get Query Result
      description: >
        Get the Query Result details for a specific Query Result ID.

        This endpoint is used to fetch the results of a query that had
        previously been created. It is recommended to follow the Location header
        included in the Create Query Result output, but the URL can also be
        constructed manually with the &lt;query-result-id&gt;.
      tags:
        - Query Data
      operationId: getQueryResult
      responses:
        '200':
          description: Success
          headers:
            Last-Modified:
              schema:
                type: string
              description: >-
                The Last-Modified response HTTP header contains a date and time
                when the origin server believes the resource was last modified.
              example: Mon, 02 Jan 2006 15:04:05 GMT
            Cache-Control:
              schema:
                type: string
              description: >-
                The max-age=N response directive indicates that the response
                remains fresh until N seconds after the response is generated.
              example: private, max-age=86400
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResultDetails'
              examples:
                Simple Query:
                  value:
                    query:
                      calculations:
                        - op: COUNT
                      orders:
                        - op: COUNT
                          order: descending
                      limit: 10000
                      time_range: 7200
                    complete: true
                    id: dfg456
                    data:
                      series: []
                      results:
                        - data:
                            COUNT: 20769
                    links:
                      query_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/dfg456
                      graph_image_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/dfg456/snapshot
                Query with Filter and Group By:
                  value:
                    query:
                      calculations:
                        - op: COUNT
                      breakdowns:
                        - user_agent
                      filters:
                        - op: '>='
                          column: response.status_code
                          value: 400
                      orders:
                        - op: COUNT
                          order: descending
                      limit: 10000
                      time_range: 7200
                    complete: false
                    id: hij678a
                    data:
                      series: []
                      results:
                        - data:
                            COUNT: 2728
                            user_agent: Mozilla/5.0 (X11; Linux x86_64)
                        - data:
                            COUNT: 4
                            user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
                        - data:
                            COUNT: 7
                            user_agent: >-
                              Mozilla/5.0 (Linux; Android 7.1.2; AFTMM
                              Build/NS6265; wv)
                    links:
                      query_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/hij678a
                      graph_image_url: >-
                        https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/hij678a/snapshot
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /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
          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
          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
          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
          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
        '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'
  /1/slos/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
    post:
      security:
        - configuration_key: []
      summary: Create an SLO
      description: |
        Create an SLO on the provided dataset
      tags:
        - SLOs
      operationId: createSlo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SLO'
        required: true
      responses:
        '201':
          description: Success - SLO created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SLO'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        default:
          $ref: '#/components/responses/GenericError'
    get:
      security:
        - configuration_key: []
      summary: Get all SLOs
      description: Get all SLOs for a dataset
      tags:
        - SLOs
      operationId: listSlos
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SLO'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /1/slos/{datasetSlug}/{sloId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
      - name: sloId
        description: Unique identifier (ID) of the SLO.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get an SLO
      description: |
        Get an SLO by ID.
      tags:
        - SLOs
      operationId: getSlo
      parameters:
        - in: query
          name: detailed
          schema:
            type: boolean
          description: >
            Allows SLO reporting data (`budget_remaining` and `compliance`) to
            be returned when retrieving a single SLO.

            This feature is available as part of the [Honeycomb Enterprise
            plan](https://www.honeycomb.io/pricing/).
          required: false
          allowEmptyValue: true
          example: ''
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/SLO'
                  - $ref: '#/components/schemas/SLODetailedResponse'
              examples:
                get-slo:
                  description: Get an SLO by ID
                  value:
                    id: bZ1aRHAUsjG
                    name: My SLO
                    description: My SLO description
                    sli:
                      alias: my-sli
                    time_period_days: 30
                    target_per_million: 989900
                    reset_at: '2022-10-15T13:53:11Z'
                    created_at: '2022-09-15T05:39:42Z'
                    updated_at: '2022-12-20T08:10:05Z'
                get-slo-detailed:
                  description: Get SLO by ID with detailed response
                  value:
                    id: bZ1aRHAUsjG
                    name: My SLO
                    description: My SLO description
                    sli:
                      alias: my-sli
                    time_period_days: 30
                    target_per_million: 989900
                    compliance: 95.39
                    budget_remaining: 7.73
                    reset_at: '2022-10-15T13:53:11Z'
                    created_at: '2022-09-15T05:39:42Z'
                    updated_at: '2022-12-20T08:10:05Z'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
    put:
      security:
        - configuration_key: []
      summary: Update an SLO
      description: |
        Update an SLO by specifying its ID and full SLO details.
      tags:
        - SLOs
      operationId: updateSlo
      requestBody:
        description: |
          Partial updates are not supported.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SLO'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SLO'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        default:
          $ref: '#/components/responses/GenericError'
    delete:
      security:
        - configuration_key: []
      summary: Delete an SLO
      description: |
        Delete an SLO by specifying its ID.
      tags:
        - SLOs
      operationId: deleteSlo
      responses:
        '204':
          description: Success - no content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /1/triggers/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
    get:
      security:
        - configuration_key: []
      summary: List All Triggers
      description: |
        List all triggers on the provided dataset.
      tags:
        - Triggers
      operationId: listTriggers
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TriggerResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
    post:
      security:
        - configuration_key: []
      summary: Create a Trigger
      description: |
        Create a trigger on the provided dataset.
      tags:
        - Triggers
      operationId: createTrigger
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTriggerRequest'
        required: true
      responses:
        '201':
          description: Success - trigger created
          headers:
            Location:
              schema:
                type: string
              description: Relative path to fetch this trigger via API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TriggerResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /1/triggers/{datasetSlug}/{triggerId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
      - name: triggerId
        description: The unique identifier (ID) of a Trigger.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get a Trigger
      description: |
        Fetch details for a single Trigger by Trigger ID.
      tags:
        - Triggers
      operationId: getTrigger
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TriggerResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      security:
        - configuration_key: []
      summary: Update a Trigger
      description: >
        Update a trigger by specifying the trigger ID and the same fields used
        when creating a new trigger.
      tags:
        - Triggers
      operationId: updateTrigger
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TriggerResponse'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TriggerResponse'
        '400':
          $ref: '#/components/responses/GenericError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Trigger
      description: >
        Delete a trigger by specifying the trigger ID. The body of the DELETE
        request should be empty.
      tags:
        - Triggers
      operationId: deleteTrigger
      responses:
        '204':
          description: Success - no content
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /1/recipients/{recipientId}/triggers:
    parameters:
      - $ref: '#/components/parameters/recipientId'
    get:
      security:
        - configuration_key: []
      summary: Get Triggers Associated with a Recipient
      description: >
        List all triggers that will alert a given Recipient. **Important:** This
        request will return all Triggers associated with the specific Recipient
        across your entire Honeycomb team rather than being scoped to a dataset
        or environment.
      tags:
        - Triggers
      operationId: listTriggersWithRecipient
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TriggerResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        default:
          $ref: '#/components/responses/GenericError'
  /1/derived_columns/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
    post:
      security:
        - configuration_key: []
      summary: Create a Derived Column
      description: >
        Create a derived column. Derived columns allow you to run queries based
        on the value of an expression that is derived from the columns in an
        event.
      tags:
        - Derived Columns
      operationId: createDerivedColumn
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DerivedColumn'
        required: true
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DerivedColumn'
              example:
                id: yUheCUmgZ8p
                alias: one
                description: just one
                expression: INT(1)
                created_at: '2022-07-26T22:38:04Z'
                updated_at: '2022-11-16T17:34:01Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
    get:
      security:
        - configuration_key: []
      summary: List all Derived Columns
      description: >-
        Get all the Derived Columns in a dataset or environment. With the
        `?alias=X` query parameter, can return a single derived column by its
        `alias`.
      tags:
        - Derived Columns
      operationId: listDerivedColumns
      parameters:
        - name: alias
          description: The derived column `alias`.
          in: query
          schema:
            type: string
      responses:
        '200':
          description: >
            When listing all columns, an array of DerivedColumn objects will be
            returned. When using `key_name`, will return a single DerivedColumn
            object if found.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/DerivedColumnList'
                  - $ref: '#/components/schemas/DerivedColumn'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /1/derived_columns/{datasetSlug}/{derivedColumnId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlugOrAll'
      - name: derivedColumnId
        description: Unique identifier (ID) of a derived column.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get a Derived Column
      tags:
        - Derived Columns
      operationId: getDerivedColumn
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DerivedColumn'
              example:
                id: yUheCUmgZ8p
                alias: one
                description: just one
                expression: INT(1)
                created_at: '2022-07-26T22:38:04Z'
                updated_at: '2022-11-16T17:34:01Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      security:
        - configuration_key: []
      summary: Update a Derived Column
      description: |
        Update a derived column.
      tags:
        - Derived Columns
      operationId: updateDerivedColumn
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DerivedColumn'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DerivedColumn'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Derived Column
      description: >
        Delete a derived column. **Note**: A Derived Column used by a SLO,
        Trigger, or Board cannot be deleted without removing or modifying the
        SLO, Trigger, or Board first.
      tags:
        - Derived Columns
      operationId: deleteDerivedColumn
      responses:
        '204':
          description: Success - no content
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
  /1/columns/{datasetSlug}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
    post:
      security:
        - configuration_key: []
      summary: Create a Column
      description: |
        Create a column by providing corresponding details for that type.
      tags:
        - Columns
      operationId: createColumn
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateColumn'
        required: true
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Column'
              example:
                id: yUheCUmgZ8p
                key_name: my_column
                hidden: false
                description: An integer column
                type: integer
                last_written: '2022-07-26T22:38:05Z'
                created_at: '2022-07-26T22:38:04Z'
                updated_at: '2022-07-26T22:38:04Z'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Key name cannot be blank
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    get:
      security:
        - configuration_key: []
      summary: List all Columns
      description: Get all the Columns in a dataset
      tags:
        - Columns
      operationId: listColumns
      parameters:
        - name: key_name
          description: the column key name
          in: query
          schema:
            type: string
      responses:
        '200':
          description: >
            When listing all columns, an array of Column objects will be
            returned. When using `key_name`, will return a single Column object
            if found.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ColumnList'
                  - $ref: '#/components/schemas/Column'
              examples:
                list-of-columns:
                  description: Lists all columns.
                  value:
                    - id: yUheCUmgZ8p
                      key_name: my_column
                      hidden: false
                      description: ''
                      type: integer
                      last_written: '2022-07-26T22:38:05Z'
                      created_at: '2022-07-26T22:38:04Z'
                      updated_at: '2022-07-26T22:38:04Z'
                    - id: yUheCUmgZ8q
                      key_name: other_column
                      hidden: false
                      description: ''
                      type: string
                      last_written: '2022-07-26T22:38:05Z'
                      created_at: '2022-07-26T22:38:04Z'
                      updated_at: '2022-07-26T22:38:04Z'
                get-column-by-key-name:
                  description: Get back column details for a key name
                  value:
                    id: yUheCUmgZ8p
                    key_name: my_column
                    hidden: false
                    description: ''
                    type: integer
                    last_written: '2022-07-26T22:38:05Z'
                    created_at: '2022-07-26T22:38:04Z'
                    updated_at: '2022-07-26T22:38:04Z'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /1/columns/{datasetSlug}/{columnId}:
    parameters:
      - $ref: '#/components/parameters/datasetSlug'
      - name: columnId
        description: Unique identifier (ID) of a column.
        in: path
        required: true
        schema:
          type: string
    get:
      security:
        - configuration_key: []
      summary: Get a Column
      tags:
        - Columns
      operationId: getColumn
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Column'
              example:
                id: yUheCUmgZ8p
                key_name: my_column
                hidden: false
                description: ''
                type: integer
                last_written: '2022-07-26T22:38:05Z'
                created_at: '2022-07-26T22:38:04Z'
                updated_at: '2022-07-26T22:38:04Z'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: >-
                  The id provided in the URL is malformed - we expected a
                  12-char base58-safe string.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      security:
        - configuration_key: []
      summary: Update a Column
      description: |
        Update a column
      tags:
        - Columns
      operationId: updateColumn
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Column'
        required: true
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Column'
              example:
                id: yUheCUmgZ8p
                key_name: my_column
                hidden: false
                description: ''
                type: string
                last_written: '2022-07-26T22:38:05Z'
                created_at: '2022-07-26T22:38:04Z'
                updated_at: '2022-07-26T22:38:04Z'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Key name cannot be blank
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
    delete:
      security:
        - configuration_key: []
      summary: Delete a Column
      description: >
        Delete a column. **Note**: Deleted columns are no longer queryable, but
        data in existing permalinks (query results and trace views) will remain
        stored and available at those links.
      tags:
        - Columns
      operationId: deleteColumn
      responses:
        '204':
          description: Success - no content
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
  /2/teams/{teamSlug}/api-keys:
    parameters:
      - $ref: '#/components/parameters/teamSlug'
    get:
      security:
        - bearerAuth:
            - api-keys:read
      tags:
        - Key Management
      summary: List all API Keys
      operationId: listApiKeys
      parameters:
        - $ref: '#/components/parameters/PaginationCursor'
        - $ref: '#/components/parameters/PaginationSize'
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ApiKeyListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      security:
        - bearerAuth:
            - api-keys:write
      tags:
        - Key Management
      summary: Create an API Key
      description: >
        This creates an API Key, which will return the API Key components in the
        response. The Key ID will be found at `data.id` and 

        the Key Secret will be found at `data.attributes.secret`. For security
        reasons the Key Secret will only be available during creation so make
        sure to save it.


        To use a newly-created Ingest Key it should be passed in the
        `X-Honeycomb-Team` header with the API Key's ID and secret 

        concatenated (and with no separator). For example, `X-Honeycomb-Team:
        hcxik_1234567890123456789012345612345678901234567890123456789012`


        Check out our [best practices for API
        Keys](https://docs.honeycomb.io/get-started/best-practices/api-keys/#ingest-keys).
      operationId: createApiKey
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/ApiKeyCreateRequest'
      responses:
        '201':
          description: Created
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ApiKeyCreateResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /2/teams/{teamSlug}/api-keys/{ID}:
    parameters:
      - $ref: '#/components/parameters/teamSlug'
      - $ref: '#/components/parameters/ID'
    get:
      security:
        - bearerAuth:
            - api-keys:read
      tags:
        - Key Management
      summary: Get an API Key
      operationId: getApiKey
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ApiKeyResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    patch:
      security:
        - bearerAuth:
            - api-keys:write
      tags:
        - Key Management
      summary: Update an API Key
      operationId: updateApiKey
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/ApiKeyUpdateRequest'
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/ApiKeyResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      security:
        - bearerAuth:
            - api-keys:write
      tags:
        - Key Management
      summary: Delete an API Key
      description: >-
        This deletes and immediately deactivates the API Key. This is an
        irreversible operation.
      operationId: deleteApiKey
      responses:
        '204':
          description: No Content
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /2/teams/{teamSlug}/environments:
    parameters:
      - $ref: '#/components/parameters/teamSlug'
    get:
      security:
        - bearerAuth:
            - environments:read
      tags:
        - Environments
      summary: List all Environments
      operationId: listEnvironments
      parameters:
        - $ref: '#/components/parameters/PaginationCursor'
        - $ref: '#/components/parameters/PaginationSize'
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EnvironmentListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      security:
        - bearerAuth:
            - environments:write
      tags:
        - Environments
      summary: Create an Environment
      operationId: createEnvironment
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/CreateEnvironmentRequest'
      responses:
        '201':
          description: Created
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EnvironmentResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /2/teams/{teamSlug}/environments/{ID}:
    parameters:
      - $ref: '#/components/parameters/teamSlug'
      - $ref: '#/components/parameters/ID'
    get:
      security:
        - bearerAuth:
            - environments:read
      tags:
        - Environments
      summary: Get an Environment
      operationId: getEnvironment
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EnvironmentResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    patch:
      security:
        - bearerAuth:
            - environments:write
      tags:
        - Environments
      summary: Update an Environment
      operationId: updateEnvironment
      requestBody:
        required: true
        content:
          application/vnd.api+json:
            schema:
              $ref: '#/components/schemas/UpdateEnvironmentRequest'
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/EnvironmentResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '415':
          $ref: '#/components/responses/UnsupportedMediaType'
        '422':
          $ref: '#/components/responses/ValidationFailed'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      security:
        - bearerAuth:
            - environments:write
      tags:
        - Environments
      summary: Delete an Environment
      description: >
        This deletes and immediately deactivates the Environment. This is an
        irreversible operation.


        Environments with Deletion Protection enabled cannot be deleted. To
        delete an Environment with Deletion Protection enabled, first disable
        Deletion Protection by updating the Environment with
        `settings.delete_protected = false`.
      operationId: deleteEnvironment
      responses:
        '204':
          description: No Content
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  parameters:
    datasetSlug:
      name: datasetSlug
      description: |
        The dataset slug.
      in: path
      required: true
      schema:
        type: string
    datasetSlugOrAll:
      name: datasetSlug
      description: >
        The dataset slug or use `__all__` for endpoints that support
        environment-wide operations.
      in: path
      required: true
      schema:
        type: string
    recipientId:
      name: recipientId
      description: Unique identifier (ID) of a Recipient.
      in: path
      required: true
      schema:
        type: string
    teamSlug:
      name: teamSlug
      description: The slug of the Team
      in: path
      required: true
      schema:
        type: string
    ID:
      name: ID
      description: A unique identifier
      in: path
      required: true
      schema:
        type: string
    PaginationCursor:
      name: page[next]
      description: >
        The string value of the `next` attribute from a previous result page.

        The cursor value must be empty or omitted for the first request of a
        cursor-paginated query.
      in: query
      schema:
        type: string
      example: eyxJjcmAVhdGVkX
    PaginationSize:
      name: page[size]
      description: The number of entries to include per response. Maximum
      in: query
      schema:
        type: number
        minimum: 1
        maximum: 100
        default: 20
      example: 10
  headers:
    RateLimit:
      description: |
        The (draft07) recommended header from the IETF on rate limiting.
        The value of the header is formatted "limit=X, remaining=Y, reset=Z".
        Where:
          - X is the maximum number of requests allowed in the window
          - Y is the number of requests remaining in the window
          - Z is the number of seconds until the limit resets
      schema:
        type: string
      example: limit=100, remaining=50, reset=60
    RateLimitPolicy:
      description: |
        The (draft07) recommended header from the IETF on rate limiting.
        The value of the header is formatted "X;w=Y".
        Where:
         - X is the maximum number of requests allowed in a window
         - Y is the size of the window in seconds
      schema:
        type: string
      example: 100;w=60
    RetryAfter:
      description: >
        The RFC7231 header used to indicate when a client should retry requests
        in UTC time.
      schema:
        type: string
      example: '2024-03-22T18:37:83Z'
    ETag:
      description: >
        The ETag header is a response header that allows a client to cache the
        response. If the client has a cached copy of the pipeline configuration,
        it can provide the ETag value of the cached copy in the If-None-Match
        header. If the configuration has not changed since the client last
        fetched it, the server will respond with a 304 Not Modified status code.
      schema:
        type: string
  responses:
    InternalError:
      description: InternalError
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/DetailedError'
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIErrors'
    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/JSONAPIErrors'
    NotFound:
      description: Not Found
      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/JSONAPIErrors'
    Conflict:
      description: Conflict
      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/JSONAPIErrors'
    PayloadTooLarge:
      description: The provided request body was over the maximum allowed size.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DetailedError'
          example:
            status: 413
            type: https://api.honeycomb.io/problems/payload-too-large
            title: Request body is too large.
            error: Body size is larger than maximum size of 100000 bytes
    UnsupportedMediaType:
      description: The provided request body had an invalid Content-Type.
      content:
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIErrors'
    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/JSONAPIErrors'
    UnprocessableEntity:
      description: Invalid request
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ValidationError'
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: >
        The provided request body was invalid. Most APIs will return a
        DetailedError for this condition, explaining what went wrong, but some
        older APIs only return a GenericError.
      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
    ValidationFailed:
      description: Validation Failed
      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/JSONAPIErrors'
    GenericError:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: RateLimited
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate Limited
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIErrors'
  schemas:
    Error:
      x-tags:
        - Errors
      type: object
      description: A legacy error, containing only a textual description.
      properties:
        error:
          type: string
          readOnly: true
    JSONAPIErrors:
      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
    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.
    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
    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.
    Event:
      type: object
      additionalProperties:
        minItems: 1
        maxItems: 2000
        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 100KB 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
    Auth:
      type: object
      required:
        - id
        - type
        - api_key_access
        - environment
        - team
      properties:
        id:
          type: string
          description: Unique identifier (ID) of the API Key.
        type:
          type: string
          enum:
            - configuration
            - ingest
          description: The type of API Key.
        api_key_access:
          type: object
          properties:
            events:
              type: boolean
              default: false
            markers:
              type: boolean
              default: false
            triggers:
              type: boolean
              default: false
            boards:
              type: boolean
              default: false
            queries:
              type: boolean
              default: false
            columns:
              type: boolean
              default: false
            createDatasets:
              type: boolean
              default: false
            slos:
              type: boolean
              default: false
            recipients:
              type: boolean
              default: false
            privateBoards:
              type: boolean
              default: false
        environment:
          type: object
          properties:
            name:
              type: string
              description: >-
                The name of the Environment. Will be empty for Classic
                environments.
            slug:
              type: string
              description: >-
                The slug of the Environment. Will be empty for Classic
                environments.
        team:
          type: object
          properties:
            name:
              type: string
            slug:
              type: string
    Board:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the Board.
          minLength: 1
          maxLength: 255
          example: My Board
        description:
          type: string
          description: A description of the Board.
          minLength: 0
          maxLength: 1024
          example: A board created via the API
        style:
          type: string
          description: >-
            All boards are displayed visually in the UI. The field can still be
            sent, but it will have no functional effect in the UI.
          default: visual
          deprecated: true
        column_layout:
          type: string
          description: The number of columns to layout on the board.
          enum:
            - multi
            - single
          default: multi
        queries:
          type: array
          items:
            $ref: '#/components/schemas/BoardQuery'
        slos:
          type: array
          description: A list of SLO IDs to add to the board
          items:
            type: string
            minLength: 0
            maxLength: 24
          example:
            - BGfyxhFto
            - dF1URaPGL
            - oSxbG7eiA
        links:
          type: object
          readOnly: true
          properties:
            board_url:
              type: string
              example: >-
                https://ui.honeycomb.io/myteam/environments/myenvironment/board/2NeeaE9bBLd
        id:
          type: string
          readOnly: true
          description: Unique identifier (ID), returned in response bodies.
          example: 2NeeaE9bBLd
    BoardQuery:
      type: object
      properties:
        caption:
          type: string
          description: >-
            Descriptive text to contextualize the value of the Query within the
            Board.
          maxLength: 1023
          example: context for this query
        graph_settings:
          type: object
          description: >
            A map of boolean values to control the display settings for the
            Query on the Board. Unspecified values are assumed to be `false`.
          properties:
            hide_markers:
              type: boolean
              default: false
            log_scale:
              type: boolean
              default: false
            omit_missing_values:
              type: boolean
              default: false
            stacked_graphs:
              type: boolean
              default: false
            utc_xaxis:
              type: boolean
              default: false
            overlaid_charts:
              type: boolean
              default: false
        query_style:
          type: string
          description: How the query should be displayed on the board.
          enum:
            - graph
            - table
            - combo
          default: graph
        dataset:
          type: string
          description: >
            The Dataset to Query. Required if using the deprecated `query`. Does
            not support the Environment-wide `__all__` value. Environment-wide
            queries must be specified by `query_id`. Note: this field can take
            either `name` ("My Dataset") or `slug` ("my_dataset"); the response
            will always use the name.
          example: My Dataset
        query_id:
          type: string
          description: >
            The ID of a Query object. Cannot be used with `query`. Query IDs can
            be retrieved from the UI or from the Query API.
          example: abc1234e
        query:
          type:
            - 'null'
            - object
          description: |
            An inline Query Specification. Cannot be used with `query_id`.
          writeOnly: true
          deprecated: true
        query_annotation_id:
          type: string
          description: >
            The ID of a Query Annotation that provides a name and description
            for the Query. The Query Annotation must apply to the `query_id` or
            `query` specified.
          example: e4c24a35
    ColumnList:
      type: array
      items:
        $ref: '#/components/schemas/Column'
    DerivedColumn:
      type: object
      required:
        - id
        - alias
        - expression
        - created_at
        - updated_at
      properties:
        id:
          type: string
          readOnly: true
          description: Unique identifier (ID), returned in response bodies.
        alias:
          type: string
          description: >-
            The human-readable name of the derived column, as it will be
            referenced when building queries.
          minLength: 1
          maxLength: 255
        expression:
          type: string
          description: >
            The expression to evaluate to construct this derived column's value.
            Refer to the [Derived Column
            Reference](https://docs.honeycomb.io/reference/derived-column-formula/).
          minLength: 1
          maxLength: 4095
        description:
          type: string
          description: >-
            A human-readable description for the derived column that displays in
            the UI.
          default: ''
          maxLength: 255
        created_at:
          type: string
          readOnly: true
          description: ISO8601 formatted time when the column was created.
        updated_at:
          type: string
          readOnly: true
          description: ISO8601 formatted time when the column was updated.
    DerivedColumnList:
      type: array
      items:
        $ref: '#/components/schemas/DerivedColumn'
    CreateColumn:
      type: object
      required:
        - key_name
      properties:
        key_name:
          type: string
          description: Name of the Column.
          example: my_column
          minLength: 1
          maxLength: 255
        type:
          type: string
          default: string
          enum:
            - string
            - float
            - integer
            - boolean
          description: Type of the data that the Column will contain.
          example: integer
        description:
          type: string
          description: Column description.
          maxLength: 255
          example: An integer column
        hidden:
          type: boolean
          default: false
          description: >-
            If `true`, the column is excluded from autocomplete and raw data
            field lists.
        id:
          type: string
          readOnly: true
          description: Unique identifier (ID), returned in response bodies.
        last_written:
          type: string
          readOnly: true
          description: >-
            ISO8601 formatted time the column was last written to (received
            event data).
        created_at:
          type: string
          readOnly: true
          description: ISO8601 formatted time the column was created.
        updated_at:
          type: string
          readOnly: true
          description: ISO8601 formatted time the column was updated.
    Column:
      allOf:
        - $ref: '#/components/schemas/CreateColumn'
      properties:
        key_name:
          readOnly: true
    DatasetDefinition:
      type:
        - 'null'
        - object
      required:
        - name
      properties:
        name:
          type: string
          description: >-
            The name of the Column or Derived Column to map to this Dataset
            Definition Type. An empty string clears the mapping, potentially
            reverting to a default mapping.
          minLength: 0
          maxLength: 255
        column_type:
          type: string
          readOnly: true
          description: >-
            Optional: `column` for regular columns and `derived_column` for
            derived columns when setting Dataset Definitions. Honeycomb does not
            use this field when updating Dataset definitions.
          enum:
            - column
            - derived_column
    DatasetDefinitions:
      type: object
      description: >
        Dataset Definitions describe the fields with special meaning in the
        Dataset.
      properties:
        span_id:
          description: The unique identifier (ID) for each span.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        trace_id:
          description: The ID of the trace this span belongs to.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        parent_id:
          description: >-
            The Parent Span ID - The ID of this span's parent span, the call
            location the current span was called from.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        name:
          description: The name of the function or method where the span was created.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        service_name:
          description: The name of the instrumented service.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        duration_ms:
          description: Span Duration - How much time the span took, in milliseconds.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        span_kind:
          description: >-
            Metadata: Kind - The kind of Span. For example, `client` or
            `server`. The use of this field to identify Span Events and Links is
            deprecated. Use the field Metadata: Annotation Type.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        annotation_type:
          description: >-
            Metadata: Annotation Type - The type of span annotation. For
            example, `span_event` or `link`. This lets Honeycomb visualize this
            type of event differently in a trace. Do not use this field for
            other purposes.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        link_span_id:
          description: >-
            Metadata: Link Span ID - Links let you tie traces and spans to one
            another. The Link Span ID lets you link to a different span (when
            used with Link Trace ID).
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        link_trace_id:
          description: >-
            Metadata: Link Trace ID - Links let you tie traces and spans to one
            another. The Link Trace Id lets you link to a different trace or a
            different span in the same trace (when used with Link Span ID).
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        error:
          description: Use a Boolean or String to indicate error.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        status:
          description: Indicates the success, failure, or other status of a request.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        route:
          description: The HTTP URL or equivalent route processed by the request.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        user:
          description: The user making the request in the system.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        log_severity:
          description: >-
            Severity level of the event (also known as log level). Supported
            values: trace, debug, info, warn, error, fatal, unspecified.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
        log_message:
          description: >-
            A value containing the log event message. Can be a human-readable
            string message (including multi-line) describing the event in a free
            form.
          allOf:
            - $ref: '#/components/schemas/DatasetDefinition'
    Dataset:
      type: object
      description: >
        Datasets are a collection of events from a specific source or related
        source.
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the dataset.
          example: My Dataset!
          minLength: 1
          maxLength: 255
        description:
          type: string
          default: ''
          description: A description for the dataset.
          example: A nice description of my dataset
          minLength: 0
          maxLength: 1024
        settings:
          type: object
          properties:
            delete_protected:
              type: boolean
              description: If true, the dataset cannot be deleted.
        expand_json_depth:
          type: integer
          description: The maximum unpacking depth of nested JSON fields.
          example: 3
          default: 0
          minimum: 0
          maximum: 10
        slug:
          type: string
          example: my-dataset-
          description: The 'slug' of the dataset to be used in URLs.
          readOnly: true
        regular_columns_count:
          type:
            - 'null'
            - integer
          description: >
            The total number of unique fields for this Dataset. The value will
            be null if the dataset does not contain any fields yet.
          example: 100
          readOnly: true
        last_written_at:
          type:
            - 'null'
            - string
          description: >
            The ISO8601-formatted time when the dataset last received event
            data. The value will be null if no data has been received yet.
          example: '2022-07-21T18:39:23Z'
          readOnly: true
        created_at:
          type: string
          description: The ISO8601-formatted time when the dataset was created.
          example: '2022-09-22T17:32:11Z'
          readOnly: true
    DatasetCreationPayload:
      type: object
      description: an object to send to the Dataset API via PUT
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the dataset.
          minLength: 1
          maxLength: 255
        description:
          type: string
          default: ''
          description: A description for the dataset.
          example: A nice description of my dataset
          minLength: 0
          maxLength: 1024
        expand_json_depth:
          type: integer
          description: The maximum unpacking depth of nested JSON fields.
          example: 3
          default: 0
          minimum: 0
          maximum: 10
    DatasetUpdatePayload:
      type: object
      description: an object to send to the Dataset API via PUT
      required:
        - description
        - expand_json_depth
      properties:
        description:
          type: string
          default: ''
          description: A description for the dataset.
          example: A nice description of my dataset
          minLength: 0
          maxLength: 1024
        expand_json_depth:
          type: integer
          description: The maximum unpacking depth of nested JSON fields.
          example: 3
          default: 0
          minimum: 0
          maximum: 10
        settings:
          type: object
          properties:
            delete_protected:
              type: boolean
              description: If true, the dataset cannot be deleted.
    KinesisEvent:
      type: object
      properties:
        requestId:
          type: string
        timestamp:
          type: integer
        records:
          type: array
          items:
            $ref: '#/components/schemas/KinesisEventRecord'
    KinesisEventRecord:
      type: object
      properties:
        data:
          type: string
          description: Base64 encoded Kinesis record from AWS
    KinesisResponse:
      type: object
      properties:
        requestId:
          type: string
        timestamp:
          type: integer
        errorMessage:
          type: string
    Marker:
      type: object
      properties:
        start_time:
          type: integer
          description: >-
            Indicates the time the Marker should be placed. If missing, defaults
            to the time the request arrives. Expressed in Unix Time.
          example: 1471040808
        end_time:
          type: integer
          description: >-
            Specifies end time, and allows a Marker to be recorded as
            representing a time range, such as a 5 minute deploy. Expressed in
            Unix Time.
          example: 1668453920
        message:
          type: string
          description: A message to describe this specific Marker.
          example: 'backend deploy #123'
        type:
          type: string
          description: >-
            Groups similar Markers. For example, `deploys`. All Markers of the
            same type appear with the same color on the graph. Refer to the
            [Marker Settings](/api/marker-settings/) API for altering the color
            of each type.
          example: deploy
        url:
          type: string
          description: >-
            A target for the marker. Clicking the marker text will take you to
            this URL.
          example: http://link-to-build.here
        id:
          type: string
          description: A 6 character hexadecimal string assigned on Marker creation.
          readOnly: true
        created_at:
          type: string
          description: The ISO8601-formatted time when the Marker was created.
          readOnly: true
        updated_at:
          type: string
          description: The ISO8601-formatted time when the Marker was updated.
          readOnly: true
        color:
          type: string
          description: >-
            Color can be assigned to Markers using the Marker Settings endpoint.
            This field will be populated when List All Markers is called.
          readOnly: true
    MarkerSetting:
      type: object
      required:
        - type
        - color
      properties:
        type:
          type: string
          description: >
            Groups similar Markers. For example, 'deploys'. All Markers of the
            same type appears with the same color on the graph.
          example: deploy
        color:
          type: string
          description: >
            Color to use for display of this marker type. Specified as
            hexadecimal RGB. For example, "#F96E11".
          example: '#7b1fa2'
        id:
          type: string
          description: The unique identifier (ID) for the Marker Setting.
          readOnly: true
          example: gwAHiE5TS4j
        created_at:
          type: string
          description: The ISO8601-formatted time when the Marker Setting was created.
          readOnly: true
          example: '2022-09-15T05:39:42Z'
        updated_at:
          type:
            - 'null'
            - string
          description: The ISO8601-formatted time when the Marker Setting was updated.
          readOnly: true
          example: '2022-12-15T04:25:14Z'
    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'
    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
    FilterOp:
      type: string
      enum:
        - '='
        - '!='
        - '>'
        - '>='
        - <
        - <=
        - starts-with
        - does-not-start-with
        - ends-with
        - does-not-end-with
        - exists
        - does-not-exist
        - contains
        - does-not-contain
        - in
        - not-in
    HavingOp:
      type: string
      enum:
        - '='
        - '!='
        - '>'
        - '>='
        - <
        - <=
    HavingCalculateOp:
      type: string
      enum:
        - COUNT
        - CONCURRENCY
        - SUM
        - AVG
        - COUNT_DISTINCT
        - MAX
        - MIN
        - P001
        - P01
        - P05
        - P10
        - P20
        - P25
        - P50
        - P75
        - P80
        - P90
        - P95
        - P99
        - P999
        - RATE_AVG
        - RATE_SUM
        - RATE_MAX
    QueryOp:
      type: string
      enum:
        - COUNT
        - CONCURRENCY
        - SUM
        - AVG
        - COUNT_DISTINCT
        - HEATMAP
        - MAX
        - MIN
        - P001
        - P01
        - P05
        - P10
        - P20
        - P25
        - P50
        - P75
        - P80
        - P90
        - P95
        - P99
        - P999
        - RATE_AVG
        - RATE_SUM
        - RATE_MAX
    Query:
      type: object
      properties:
        id:
          type: string
          readOnly: true
        breakdowns:
          type: array
          default:
            - user_agent
          maxItems: 100
          items:
            type: string
          description: the columns by which to break events down into groups
        calculations:
          type: array
          description: the calculations to return as a time series and summary table
          maxItems: 100
          items:
            type: object
            required:
              - op
            properties:
              op:
                allOf:
                  - $ref: '#/components/schemas/QueryOp'
                  - default: COUNT
              column:
                type:
                  - 'null'
                  - string
                description: the name of the column
        filters:
          type: array
          maxItems: 100
          required:
            - column
            - op
          items:
            type: object
            required:
              - op
            properties:
              op:
                $ref: '#/components/schemas/FilterOp'
              column:
                type:
                  - 'null'
                  - string
              value:
                anyOf:
                  - type: 'null'
                  - type: integer
                  - type: number
                  - type: string
                  - type: boolean
                  - type: array
          description: the filters with which to restrict the considered events
        filter_combination:
          type: string
          default: AND
          enum:
            - AND
            - OR
          description: set to "OR" to match ANY filter in the filter list
        granularity:
          type: integer
          minimum: 1
          description: >
            The time resolution of the query's graph, in seconds. Given a query
            time range T, valid values (T/1000...T/10).
        orders:
          type: array
          maxItems: 100
          items:
            type: object
            properties:
              column:
                type: string
              op:
                $ref: '#/components/schemas/QueryOp'
              order:
                type: string
                default: ascending
                enum:
                  - ascending
                  - descending
          description: >
            The terms on which to order the query results. Each term must appear
            in either the `breakdowns` field or the `calculations` field.
        limit:
          type: integer
          default: 100
          minimum: 1
          maximum: 10000
          description: >
            The maximum number of unique groups returned in 'results'.
            Aggregating many unique groups across a large time range is
            computationally expensive, and too high a limit with too many unique
            groups may cause queries to fail completely. Limiting the results to
            only the needed values can significantly speed up queries.

            The normal allowed maximum value when creating a query is 1_000.
            When running 'disable_series' queries, this can be overridden to be
            up to 10_000, so the maximum value returned from the API when
            fetching a query may be up to 10_000.
        start_time:
          type: integer
          minimum: 1
          default: 1676399428
          description: >
            Absolute start time of query, in seconds since UNIX epoch. Must be
            <= `end_time`.
        end_time:
          type: integer
          minimum: 1
          default: 1676467828
          description: Absolute end time of query, in seconds since UNIX epoch.
        time_range:
          type: integer
          minimum: 1
          default: 7200
          description: >
            Time range of query in seconds. Can be used with either `start_time`
            (seconds after `start_time`), `end_time` (seconds before
            `end_time`), or without either (seconds before now).
        havings:
          type: array
          description: >
            The Having clause allows you to filter on the results table. This
            operation is distinct from the Where clause, which filters the
            underlying events. Order By allows you to order the results, and
            Having filters them.
          maxItems: 100
          items:
            type: object
            required:
              - calculate_op
            properties:
              calculate_op:
                allOf:
                  - $ref: '#/components/schemas/HavingCalculateOp'
              column:
                type:
                  - 'null'
                  - string
                description: The name of the column to filter against
              op:
                allOf:
                  - $ref: '#/components/schemas/HavingOp'
              value:
                type: number
                default: 10
    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: 80
        description:
          type: string
          description: A description of the Query.
          example: A nice description of My Named Query
          maxLength: 280
        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
    CreateQueryResultRequest:
      type: object
      description: A Query Result is created with the Query ID.
      required:
        - query_id
      properties:
        query_id:
          type: string
          writeOnly: true
          description: >
            The ID of a query returned from the [Queries
            endpoint](/api/queries/).
          example: mabAMpSPDjH
        disable_series:
          type: boolean
          writeOnly: true
          description: >
            If true, will disable calculation and return of the full time-series
            data, usually included in the 'series' response field, instead only
            returning the summarized 'results'.
        limit:
          type: integer
          writeOnly: true
          maximum: 10000
          description: >
            If 'disable_series' is true, then a limit may optionally be given,
            which will override the limit normally associated with the query.
            Unlike normal query results which are limited to 1_000 results,
            'disable_series' results may have a limit of up to 10_000. If
            'disable_series' is false, then this field will be ignored.
    QueryResult:
      type: object
      description: A Query Result is created with the Query ID.
      properties:
        query:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/Query'
        id:
          type: string
          description: The unique identifier (ID) of a Query Result.
          readOnly: true
          example: sGUnkBHgRFN
        complete:
          type: boolean
          description: >-
            Indicates if the query results are available yet or not. For
            example, is the query still being processed or complete?
          readOnly: true
          example: false
        links:
          type: object
          description: >-
            An object containing UI links to the query result and query result
            graph
          readOnly: true
          properties:
            query_url:
              type: string
              example: >-
                https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/HprJhV1fYy
            graph_image_url:
              type: string
              example: >-
                https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/HprJhV1fYy/snapshot
    QueryResultsData:
      type: object
      description: Query result details
      properties:
        data:
          type: object
          examples:
            - COUNT: 1
              P99(duration_ms): 210
              name: TestGoogleCallbackLogin
              test.classname: github.com/honeycombio/hound/cmd/poodle/handlers
              test.status: passed
            - COUNT: 77481
              P99(duration_ms): 857.0309715273646
              name: TestGoogleCallbackLogin
              test.classname: github.com/honeycombio/hound/cmd/poodle/handlers
              test.status: passed
          additionalProperties:
            type:
              - string
              - boolean
              - number
    QueryResultsSeries:
      type: object
      allOf:
        - $ref: '#/components/schemas/QueryResultsData'
      properties:
        time:
          type: string
          example: '2021-04-09T14:16:00Z'
    QueryResultDetails:
      type: object
      description: >
        Query Results for the Query ID.

        The response body will be a JSON object with "complete": true and the
        results populated once the query is complete. The response body will
        contain caching headers to indicate that once complete, and the Query
        Result may be cached, as it will not change.
      properties:
        query:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/Query'
        id:
          type: string
          description: The unique identifier (ID) of a Query Result
          readOnly: true
          example: sGUnkBHgRFN
        complete:
          type: boolean
          description: >-
            Indicates if the query results are available yet or not. For
            example, is the query still being processed or complete?
          readOnly: true
          example: true
        data:
          type: object
          description: An object containing the query result data
          properties:
            series:
              type: array
              description: >-
                Timeseries data from the query result (equivalent to the graph
                data in the Honeycomb UI)
              items:
                $ref: '#/components/schemas/QueryResultsSeries'
            results:
              type: array
              description: >-
                Query results data (equivalent to the Overview in the Honeycomb
                UI below the graph)
              items:
                $ref: '#/components/schemas/QueryResultsData'
        links:
          type: object
          description: >-
            An object containing UI links to the query result and query result
            graph
          properties:
            query_url:
              type: string
              description: A link to the query result in the Honeycomb UI
              example: >-
                https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/HprJhV1fYy
            graph_image_url:
              type: string
              description: A direct link to the graph image from the query result
              example: >-
                https://ui.honeycomb.io/myteam/datasets/test-via-curl/result/HprJhV1fYy/snapshot
    RecipientType:
      type: string
      description: One of the supported Recipient Types
      enum:
        - pagerduty
        - email
        - slack
        - webhook
        - msteams
        - msteams_workflow
    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
    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
    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'
    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
    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
    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_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
    Recipient:
      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'
    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'
    BaseTrigger:
      type: object
      properties:
        id:
          type: string
          readOnly: true
          description: The unique identifier (ID) for this Trigger.
        name:
          type: string
          description: >
            A short, human-readable name for this Trigger, which will be
            displayed in the UI and when the trigger fires.
          minLength: 1
          maxLength: 120
        description:
          type: string
          description: |
            A longer description, displayed on the Trigger's detail page.
          maxLength: 1023
        threshold:
          type: object
          required:
            - op
            - value
          description: >
            The threshold over which the trigger will fire, specified as both an
            operator and a value.
          properties:
            op:
              type: string
              enum:
                - '>'
                - '>='
                - <
                - <=
            value:
              type: number
            exceeded_limit:
              type: integer
              description: >
                The number of times the threshold must be met before an alert is
                sent.
              default: 1
              minimum: 1
              maximum: 5
        frequency:
          type: integer
          description: >
            The interval in seconds in which to check the results of the query’s
            calculation against the threshold. Cannot be more than 4 times the
            query's duration (i.e. `duration <= frequency*4`). See [A Caveat on
            Time](https://docs.honeycomb.io/investigate/collaborate/share-query/define-query-json/#a-caveat-on-time)
            for more information on specifying a query's duration. minimum: 60
            maximum: 86400 multipleOf: 60 default: 900
        alert_type:
          type: string
          description: >
            How often to fire an alert when a trigger threshold is crossed.

            - `on_change` sends a trigger notification when the result of the
            specified calculation crosses the threshold.
              The trigger resolves only when the result of the query no longer satisfies the threshold condition.
            - `on_true` keeps sending a trigger notification at current
            frequency when and while the threshold is met.
              (This reflects the same behavior as the "Send an alert every time a threshold is met" checkbox in the Honeycomb UI.)
          enum:
            - on_change
            - on_true
          default: on_change
        disabled:
          type: boolean
          default: false
          description: >
            If true, the trigger will not be evaluated and alerts will not be
            sent.
        triggered:
          type: boolean
          readOnly: true
          description: >
            If true, the trigger has crossed its specified threshold without
            resolving.
        recipients:
          type: array
          description: >
            A list of [Recipients](/api/recipients/) to notify when the Trigger
            fires. Using `type`+`target` is deprecated. First, create the
            Recipient via the Recipients API, and then specify the ID.
          items:
            $ref: '#/components/schemas/NotificationRecipient'
        evaluation_schedule_type:
          type: string
          description: >
            The schedule type used by the trigger. The default is frequency,
            where the trigger runs at the

            specified frequency. The window type means that the trigger will run
            at the specified frequency,

            but only in the time window specified in the evaluation_schedule
            field.
          enum:
            - frequency
            - window
        evaluation_schedule:
          type: object
          description: >
            A schedule that determines when the trigger is run. When the time is
            within the scheduled

            window, the trigger will be run at the specified frequency. Outside
            of the window, the trigger

            will not be run.
          required:
            - window
          properties:
            window:
              type: object
              description: >
                Window start/end times and days of the week are calculated in
                UTC. If the end time is the same as or earlier than the start
                time, the end time is treated as being in the following day.
              required:
                - days_of_week
                - start_time
                - end_time
              properties:
                days_of_week:
                  type: array
                  minItems: 1
                  maxItems: 7
                  items:
                    type: string
                    enum:
                      - sunday
                      - monday
                      - tuesday
                      - wednesday
                      - thursday
                      - friday
                      - saturday
                start_time:
                  type: string
                  description: A UTC time in HH:mm format (13:00)
                  example: '14:00'
                  pattern: ^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$
                end_time:
                  type: string
                  description: A UTC time in HH:mm format (13:00)
                  example: '21:00'
                  pattern: ^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
    TriggerWithInlineQuery:
      allOf:
        - $ref: '#/components/schemas/BaseTrigger'
        - type: object
          properties:
            query:
              type: object
              description: >
                A query ID or an inline query that is a strict subset of a Query
                Specification.
              properties: {}
    TriggerWithQueryReference:
      allOf:
        - $ref: '#/components/schemas/BaseTrigger'
        - type: object
          properties:
            query_id:
              type: string
              description: >
                The ID of a Query that meets the criteria for being used as a
                Trigger, per above.
    CreateTriggerRequest:
      oneOf:
        - $ref: '#/components/schemas/TriggerWithInlineQuery'
        - $ref: '#/components/schemas/TriggerWithQueryReference'
    TriggerResponse:
      allOf:
        - $ref: '#/components/schemas/TriggerWithInlineQuery'
        - $ref: '#/components/schemas/TriggerWithQueryReference'
    SLO:
      type: object
      required:
        - name
        - time_period_days
        - target_per_million
        - sli
      properties:
        id:
          type: string
          readOnly: true
        name:
          type: string
          description: The name of the SLO.
          minLength: 1
          maxLength: 120
          example: My SLO
        description:
          type: string
          description: A nice description of the SLO's intent and context.
          minLength: 0
          maxLength: 1023
          example: SLO to ensure requests succeed and are fast
        sli:
          type: object
          description: >-
            Reference to the [Derived Column](/api/derived-columns/) used as the
            indicator of event success.
          required:
            - alias
          properties:
            alias:
              type: string
              description: The alias of the derived column.
              minLength: 1
              maxLength: 255
          example:
            alias: error_sli
        time_period_days:
          type: integer
          description: The time period, in days, over which the SLO will be evaluated.
          minimum: 1
          example: 30
        target_per_million:
          type: integer
          description: >-
            The number of events out of one million (1,000,000) that you
            expected qualified events to succeed.
          minimum: 0
          maximum: 999999
          example: 990000
        reset_at:
          type:
            - 'null'
            - string
          format: date-time
          description: >-
            The ISO8601-formatted time the SLO was last reset. The value will be
            `null` if the SLO has not yet been reset.
          readOnly: true
          example: 2022-011-11T09:53:04Z
        created_at:
          type: string
          description: The ISO8601-formatted time when the SLO was created.
          format: date-time
          readOnly: true
          example: '2022-09-22T17:32:11Z'
        updated_at:
          type: string
          format: date-time
          description: The ISO8601-formatted time when the SLO was updated.
          readOnly: true
          example: '2022-10-31T15:08:11Z'
    SLODetailedResponse:
      allOf:
        - $ref: '#/components/schemas/SLO'
      type: object
      properties:
        compliance:
          type: number
          description: >
            Reporting data to express historical compliance of the SLO. Only
            included when the `?detailed` query param is passed.
          format: double
          readOnly: true
          example: 95.39
        budget_remaining:
          type: number
          description: >
            Reporting data to express how much error budget remains for the time
            period of the SLO. Only included when the `?detailed` query param is
            passed.
          format: double
          readOnly: true
          example: 7.73
    BurnAlertListResponse:
      anyOf:
        - $ref: '#/components/schemas/ExhaustionTimeBurnAlertListResponse'
        - $ref: '#/components/schemas/BudgetRateBurnAlertListResponse'
    BurnAlertDetailResponse:
      anyOf:
        - $ref: '#/components/schemas/ExhaustionTimeBurnAlertDetailResponse'
        - $ref: '#/components/schemas/BudgetRateBurnAlertDetailResponse'
    CreateBurnAlertRequest:
      anyOf:
        - $ref: '#/components/schemas/CreateExhaustionTimeBurnAlertRequest'
        - $ref: '#/components/schemas/CreateBudgetRateBurnAlertRequest'
    UpdateBurnAlertRequest:
      anyOf:
        - $ref: '#/components/schemas/UpdateExhaustionTimeBurnAlertRequest'
        - $ref: '#/components/schemas/UpdateBudgetRateBurnAlertRequest'
    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'
    ExhaustionTimeBurnAlert:
      title: Exhaustion Time
      allOf:
        - $ref: '#/components/schemas/BurnAlertSharedParams'
        - type: object
          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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    IngestKeyAttributes:
      type: object
      allOf:
        - $ref: '#/components/schemas/IngestKeyType'
        - $ref: '#/components/schemas/ApiKeyBaseAttributes'
    ApiKeyBaseAttributes:
      type: object
      required:
        - name
      properties:
        name:
          type: string
          description: A human-readable name for the API Key
          example: us-west-2 collectors key
          maxLength: 100
        disabled:
          type: boolean
          description: Whether the API Key is disabled
          default: false
          example: false
        permissions:
          type: object
          description: The permissions granted to this API Key
          properties:
            create_datasets:
              type: boolean
              description: Whether this API Key can create new Datasets
              default: false
        timestamps:
          type: object
          readOnly: true
          properties:
            created:
              type: string
              format: date-time
              description: The ISO8601-formatted time when the API Key was created.
              readOnly: true
              example: '2022-09-22T17:32:11Z'
            updated:
              type: string
              format: date-time
              description: The ISO8601-formatted time when the API Key was updated.
              readOnly: true
              example: '2022-10-31T15:08:11Z'
    ApiKeyTypes:
      type: object
      properties:
        key_type:
          type: string
          description: The type of API Key
          enum:
            - ingest
          example: ingest
    IngestKeyType:
      type: object
      required:
        - key_type
      properties:
        key_type:
          type: string
          description: The type of API Key
          enum:
            - ingest
          example: ingest
    UserRelationship:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
          properties:
            id:
              type: string
              description: |
                The ID of this user.
              examples:
                - hcxus_01hzqr5g7jg9qz40xtgx7rjwj0
            type:
              type: string
              enum:
                - users
    CreatorRelationship:
      type: object
      readOnly: true
      description: The User who initially created this resource.
      allOf:
        - $ref: '#/components/schemas/UserRelationship'
    EditorRelationship:
      type: object
      readOnly: true
      description: The User who last edited this resource.
      allOf:
        - $ref: '#/components/schemas/UserRelationship'
    EnvironmentRelationship:
      type: object
      required:
        - data
      description: The Environment this object is associated with.
      properties:
        data:
          type: object
          required:
            - id
            - type
          properties:
            id:
              type: string
              description: The ID of the Environment this object is associated with.
              example: hxenv_12345678901234567890123456
            type:
              type: string
              enum:
                - environments
    TeamRelationship:
      type: object
      required:
        - team
      properties:
        team:
          type: object
          required:
            - data
          properties:
            data:
              type: object
              required:
                - id
                - type
              properties:
                id:
                  type: string
                  description: The ID of the Team this object is associated with
                  example: hxctm_12345678901234567890123456
                type:
                  type: string
                  enum:
                    - teams
    ApiKeyObject:
      type: object
      properties:
        id:
          type: string
          readOnly: true
          description: The unique identifier of the API Key
          example: hcxik_12345678901234567890123456
        type:
          type: string
          readOnly: true
          enum:
            - api-keys
        attributes:
          $ref: '#/components/schemas/ApiKeyAttributes'
        relationships:
          type: object
          required:
            - environment
            - creator
            - editor
          properties:
            environment:
              $ref: '#/components/schemas/EnvironmentRelationship'
            creator:
              $ref: '#/components/schemas/CreatorRelationship'
            editor:
              $ref: '#/components/schemas/EditorRelationship'
        links:
          type: object
          properties:
            self:
              type: string
              description: The URL of this resource
              readOnly: true
              example: /2/teams/my-team/api-keys/hcxik_12345678901234567890123456
    ApiKeyAttributes:
      type: object
      allOf:
        - $ref: '#/components/schemas/ApiKeyTypes'
        - $ref: '#/components/schemas/ApiKeyBaseAttributes'
    IncludedResource:
      type: object
      properties:
        id:
          type: string
          readOnly: true
          description: The unique identifier of the resource
          example: hcxen_01hznmeqrcq8rz533xrvtc6mk0
        type:
          type: string
          readOnly: true
          example: environments
        attributes:
          type: object
          readOnly: true
          example:
            name: Production
            slug: production
    ApiKeyResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/ApiKeyObject'
    ApiKeyCreateRequest:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
            - relationships
          properties:
            type:
              type: string
              enum:
                - api-keys
            attributes:
              $ref: '#/components/schemas/IngestKeyAttributes'
            relationships:
              type: object
              required:
                - environment
              properties:
                environment:
                  $ref: '#/components/schemas/EnvironmentRelationship'
      example:
        data:
          type: api-keys
          attributes:
            name: my ingest key
            key_type: ingest
            permissions:
              create_datasets: true
          relationships:
            environment:
              data:
                id: hcxen_12345678901234567890123456
                type: environments
    ApiKeyCreateResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
            - relationships
            - links
          properties:
            id:
              type: string
              readOnly: true
              description: The unique identifier of the API Key
              example: hcxik_12345678901234567890123456
            type:
              type: string
              readOnly: true
              enum:
                - api-keys
            attributes:
              allOf:
                - $ref: '#/components/schemas/IngestKeyAttributes'
                - type: object
                  properties:
                    secret:
                      type: string
                      description: >-
                        The API Key secret. This is the only time it will be
                        returned.
                      readOnly: true
                      example: '12345678901234567890123456789'
            relationships:
              type: object
              required:
                - environment
                - creator
                - editor
              properties:
                environment:
                  $ref: '#/components/schemas/EnvironmentRelationship'
                creator:
                  $ref: '#/components/schemas/CreatorRelationship'
                editor:
                  $ref: '#/components/schemas/EditorRelationship'
            links:
              type: object
              properties:
                self:
                  type: string
                  description: The URL of this resource
                  readOnly: true
                  example: /2/teams/my-team/api-keys/hcxik_12345678901234567890123456
    ApiKeyUpdateRequest:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
          properties:
            id:
              type: string
              description: The unique identifier of the API Key
              example: hcxik_12345678901234567890123456
            type:
              type: string
              enum:
                - api-keys
            attributes:
              type: object
              properties:
                name:
                  type: string
                  description: A human-readable name for the API Key
                  example: updated key name
                enabled:
                  type: boolean
                  description: Whether the API Key is enabled
                  example: false
    ApiKeyListResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ApiKeyObject'
        links:
          $ref: '#/components/schemas/PaginationLinks'
    CreateEnvironmentRequest:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - type
            - attributes
          properties:
            type:
              type: string
              enum:
                - environments
            attributes:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  maxLength: 255
                description:
                  type: string
                  maxLength: 255
                color:
                  $ref: '#/components/schemas/EnvironmentColor'
    UpdateEnvironmentRequest:
      type: object
      required:
        - data
      properties:
        data:
          type: object
          required:
            - id
            - type
            - attributes
          properties:
            id:
              type: string
            type:
              type: string
              enum:
                - environments
            attributes:
              type: object
              properties:
                description:
                  type: string
                  maxLength: 255
                color:
                  $ref: '#/components/schemas/EnvironmentColor'
                settings:
                  type: object
                  properties:
                    delete_protected:
                      type: boolean
                      description: If true, the environment cannot be deleted.
    EnvironmentColor:
      type: string
      enum:
        - blue
        - green
        - gold
        - red
        - purple
        - lightBlue
        - lightGreen
        - lightGold
        - lightRed
        - lightPurple
    Environment:
      type: object
      required:
        - id
        - type
        - links
        - attributes
      properties:
        id:
          type: string
        type:
          type: string
          enum:
            - environments
        links:
          type: object
          required:
            - self
          properties:
            self:
              type: string
        attributes:
          type: object
          required:
            - name
            - description
            - color
            - slug
            - settings
          properties:
            name:
              type: string
            description:
              type: string
            color:
              description: >
                'classic' color is used only for auto-created Classic
                environments and cannot be set on any other environment. Classic
                environments cannot be set to any other color.
              oneOf:
                - $ref: '#/components/schemas/EnvironmentColor'
                - type: string
                  enum:
                    - classic
            slug:
              type: string
            settings:
              type: object
              required:
                - delete_protected
              properties:
                delete_protected:
                  type: boolean
                  description: If true, the environment cannot be deleted.
    EnvironmentResponse:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/Environment'
    EnvironmentListResponse:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Environment'
        links:
          $ref: '#/components/schemas/PaginationLinks'
    AuthV2Response:
      type: object
      required:
        - data
      properties:
        included:
          type: array
          items:
            $ref: '#/components/schemas/IncludedResource'
          example:
            - id: hcxtm_12345678901234567890123456
              type: teams
              attributes:
                name: My Team
                slug: my-team
        data:
          type: object
          required:
            - id
            - type
            - attributes
          properties:
            id:
              type: string
              readOnly: true
              description: The unique identifier of the API Key making the request
              example: hcxik_12345678901234567890123456
            type:
              type: string
              readOnly: true
              enum:
                - api-keys
            relationships:
              type: object
              readOnly: true
              allOf:
                - $ref: '#/components/schemas/TeamRelationship'
            attributes:
              type: object
              readOnly: true
              properties:
                name:
                  type: string
                  description: A human-readable name for the API Key
                  example: mgmt write key
                key_type:
                  type: string
                  description: The type of API Key
                  enum:
                    - management
                disabled:
                  type: boolean
                  description: Whether the API Key is disabled
                  default: false
                scopes:
                  type: array
                  description: The scopes assigned to this API Key
                  example:
                    - api-keys:write
                timestamps:
                  type: object
                  properties:
                    created:
                      type: string
                      format: date-time
                      description: The ISO8601-formatted time when the API Key was created.
                      readOnly: true
                      example: '2022-09-22T17:32:11Z'
                    updated:
                      type: string
                      format: date-time
                      description: The ISO8601-formatted time when the API Key was updated.
                      readOnly: true
                      example: '2022-10-31T15:08:11Z'
    PaginationLinks:
      type: object
      description: Links to iterate through the pages of results.
      required:
        - next
      properties:
        next:
          type:
            - string
            - 'null'
          description: The URL for the next page of results.
          readOnly: true
          example: /2/teams/my-team/api-keys?page[after]=3025fa645ad1100d&page[size]=10
  securitySchemes:
    configuration_key:
      type: apiKey
      name: X-Honeycomb-Team
      in: header
      description: >
        A Honeycomb Configuration Key is required to use this API.

        A Configuration Key can be found in the API Keys section of the
        environment configuration,

        which can be found under Environment Settings -> API Keys ->
        Configuration tab.

        Check out our documentation to [find your API
        Keys](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/#find-api-keys).


        More information can be found in [Manage
        Environments](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
    ingest_key:
      type: apiKey
      name: X-Honeycomb-Team
      in: header
      description: >
        A Honeycomb Ingest Key is required to use this API. The Ingest Key is
        the concatenation of the Ingest Key ID and the Ingest Key Secret. 

        For security reasons the Ingest Key Secret will only be available during
        creation of the Ingest Key while the Ingest Key ID will always be
        available.


        More information can be found in [Manage
        Environments](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
    firehose_access_key:
      type: apiKey
      name: X-Amz-Firehose-Access-Key
      in: header
      description: >
        A Honeycomb Ingest Key is recommended for use with this API, though a
        Configuration key will work.


        More information can be found in [Manage
        Environments](https://docs.honeycomb.io/get-started/configure/environments/manage-api-keys/).
    bearerAuth:
      type: http
      scheme: bearer
      description: >
        A Honeycomb Management Key is required to use this API.


        The token should be passed in the "Authorization" header,

        and the secret should be prefixed with "Bearer " followed by the API
        Key's ID and secret, separated by a colon.


        For example, `Authorization: Bearer
        hcxmk_12345678901234567890123456:12345678901234567890123456789012`


        More information can be found in the [Manage API Keys
        documentation](https://docs.honeycomb.io/get-started/configure/teams/manage-api-keys/).
      bearerFormat: HONEYCOMB_KEY_ID:HONEYCOMB_KEY_SECRET
