Honeycomb SLOs API

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. You can also access historical reporting for your SLOs to analyze long-term performance trends. For more information, see [Get SLO History](https://api-docs.honeycomb.io/api/reporting/getslohistory) ## Authorization The API key must have the **Manage SLOs** permission. Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/).

Documentation

Specifications

OpenAPI Specification

honeycomb-io-slos-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Honeycomb Auth SLOs API
  version: 1.0.0
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  contact:
    email: support@honeycomb.io
  description: 'The API allows programmatic management of many resources within Honeycomb.


    Please report any discrepancies with actual API behavior in <a href="https://docs.honeycomb.io/troubleshoot/community/">Pollinators Slack</a> or to <a href="https://support.honeycomb.io/">Honeycomb Support</a>.

    '
servers:
- url: https://api.honeycomb.io
- url: https://api.eu1.honeycomb.io
tags:
- 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.


    You can also access historical reporting for your SLOs to analyze long-term performance trends. For more information, see [Get SLO History](https://api-docs.honeycomb.io/api/reporting/getslohistory)


    ## Authorization


    The API key must have the **Manage SLOs** permission. Learn more about [API keys here](https://docs.honeycomb.io/configure/environments/manage-api-keys/).

    '
paths:
  /1/slos/{datasetSlug}:
    parameters:
    - $ref: '#/components/parameters/datasetSlugOrAll'
    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/SLOCreate'
        required: true
      responses:
        '201':
          description: Success - SLO created
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SLOCreate'
        '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'
        default:
          $ref: '#/components/responses/GenericError'
    get:
      security:
      - configuration_key: []
      summary: Get all SLOs
      description: 'Get all SLOs for a dataset or environment (using  `__all__`). This action returns any SLOs, including those applied with multiple datasets.

        '
      tags:
      - SLOs
      operationId: listSlos
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SLO'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/GenericError'
  /1/slos/{datasetSlug}/{sloId}:
    parameters:
    - $ref: '#/components/parameters/datasetSlugOrAll'
    - 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 (`status`, `burn_rate`, `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/).


          **Note:** `burn_rate` is calculated based on the last 4 hours of data.

          '
        required: false
        allowEmptyValue: true
        example: ''
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          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'
                    dataset_slugs:
                    - mydataset1
                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
                    status: normal
                    burn_rate: 5.39
                    reset_at: '2022-10-15T13:53:11Z'
                    created_at: '2022-09-15T05:39:42Z'
                    updated_at: '2022-12-20T08:10:05Z'
                    dataset_slugs:
                    - mydataset1
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        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
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          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'
        '429':
          $ref: '#/components/responses/RateLimited'
        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
          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'
        default:
          $ref: '#/components/responses/GenericError'
  /1/slos/{datasetSlug}/{sloId}/counts:
    parameters:
    - $ref: '#/components/parameters/datasetSlugOrAll'
    - name: sloId
      description: Unique identifier (ID) of the SLO.
      in: path
      required: true
      schema:
        type: string
    get:
      security:
      - configuration_key: []
      summary: Get SLO Realtime Counts
      description: "Get per-minute success and failure event counts for an SLO, updated approximately once per minute from a rolling 24-hour window.\n\nThis endpoint is intended for near-real-time integrations such as external SLO dashboards and alerting tools (e.g. nobl9). For weekly compliance history, use the [Get SLO History endpoint](https://api-docs.honeycomb.io/api/reporting/getSloHistory/).\n\n**Requirements:**\n- Available on the [Enterprise plan](https://www.honeycomb.io/pricing/) only.\n- This feature must be enabled for your team. Contact your account team\n  to request access.\n\n\n**Gaps:** Some minutes may have no entry in the `windows` array. The first window after a gap may contain a larger-than-usual delta. Treat missing timestamps as unavailable data, not zero-event periods.\n\n**Epoch:** The response includes an `epoch` field — a hash of the SLO's SLI expression and dataset configuration. If this value changes between responses, the underlying SLO definition has changed and any client-side cache should be invalidated.\n\n**Partial windows:** Windows marked `is_partial: true` may still receive additional events. This occurs for the most recent 10 minutes (late-arriving data settlement) or when no prior snapshot exists to compute a delta from.\n"
      tags:
      - SLOs
      operationId: getSloRealtimeCounts
      parameters:
      - in: query
        name: start_time
        required: true
        schema:
          type: integer
        description: 'Start of the time range as a Unix timestamp (seconds). Must be within the last 24 hours and no later than `end_time`.

          '
        example: 1745251200
      - in: query
        name: end_time
        required: true
        schema:
          type: integer
        description: 'End of the time range as a Unix timestamp (seconds). Must be greater than `start_time` and within the same clock hour as `start_time`. Realtime counts accumulate from the start of each hour and reset at hour boundaries; use the [Get SLO Hourly Counts History endpoint](https://api-docs.honeycomb.io/api/slos/getSloHourlyCountsHistory/) for completed hours.

          '
        example: 1745254740
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SLOCountsResponse'
              example:
                slo_id: bZ1aRHAUsjG
                resolution_seconds: 60
                epoch: a3f9c2d1e8b74056
                period_start: 1745251200
                windows:
                - window_start: 1745251200
                  window_end: 1745251260
                  total_count: 1243
                  error_count: 3
                  is_partial: false
                - window_start: 1745251260
                  window_end: 1745251320
                  total_count: 1188
                  error_count: 1
                  is_partial: false
                - window_start: 1745251320
                  window_end: 1745251380
                  total_count: 1301
                  error_count: 0
                  is_partial: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/GenericError'
  /1/slos/{datasetSlug}/{sloId}/counts/history:
    parameters:
    - $ref: '#/components/parameters/datasetSlugOrAll'
    - name: sloId
      description: Unique identifier (ID) of the SLO.
      in: path
      required: true
      schema:
        type: string
    get:
      security:
      - configuration_key: []
      summary: Get SLO Hourly Counts History
      description: "Get hourly-bucketed total and error event counts for an SLO from the persistent historical store. Use this endpoint to retrieve completed historical hours; pair with the [Get SLO Realtime Counts endpoint](https://api-docs.honeycomb.io/api/slos/getslorealtimecounts/) for the current in-progress hour.\n\n**Requirements:**\n- Available on the [Enterprise plan](https://www.honeycomb.io/pricing/) only.\n- This feature must be enabled for your team. Contact your account team\n  to request access.\n\n\n**Partial buckets:** The most recent bucket may be marked `is_partial: true` if it covers the current in-progress hour. Counts for that bucket will increase until the hour completes.\n"
      tags:
      - SLOs
      operationId: getSloHourlyCountsHistory
      parameters:
      - in: query
        name: start_time
        required: true
        schema:
          type: integer
        description: 'Start of the time range as a Unix timestamp (seconds).

          '
        example: 1745168400
      - in: query
        name: end_time
        required: true
        schema:
          type: integer
        description: 'End of the time range as a Unix timestamp (seconds). Must be greater than `start_time`.

          '
        example: 1745254800
      responses:
        '200':
          description: Success
          headers:
            Ratelimit:
              $ref: '#/components/headers/RateLimit'
            RateLimitPolicy:
              $ref: '#/components/headers/RateLimitPolicy'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SLOHourlyCountsResponse'
              example:
                slo_id: bZ1aRHAUsjG
                resolution_seconds: 3600
                buckets:
                - start_time: 1745168400
                  end_time: 1745172000
                  total_count: 74520
                  error_count: 182
                  is_partial: false
                - start_time: 1745172000
                  end_time: 1745175600
                  total_count: 71043
                  error_count: 97
                  is_partial: false
                - start_time: 1745251200
                  end_time: 1745254800
                  total_count: 12300
                  error_count: 14
                  is_partial: true
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/GenericError'
components:
  responses:
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            deny-management-apis:
              description: Team cannot access management APIs.
              value:
                error: Your team has been denied access to Management APIs, please contact support to be unblocked.
        application/problem+json:
          schema:
            $ref: '#/components/schemas/DetailedError'
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIError'
    RateLimited:
      description: Rate Limit Exceeded
      headers:
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
        Ratelimit:
          $ref: '#/components/headers/RateLimit'
        RateLimitPolicy:
          $ref: '#/components/headers/RateLimitPolicy'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Rate Limited
        application/problem+json:
          schema:
            $ref: '#/components/schemas/DetailedError'
          example:
            status: 429
            type: https://api.honeycomb.io/problems/rate-limited
            title: You have exceeded your rate limit.
            error: You have exceeded your rate limit.
            detail: Please try again after 2025-02-01T15:23:12Z.
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIError'
          example:
            errors:
            - id: 06dcdd6508ca822f0e7e2bb4121c1f52
              code: rate-limited/may-retry
              title: request rate limit exceeded
              detail: Please try again after 2025-02-01T15:23:12Z.
    ValidationFailed:
      description: Validation Failed
      headers:
        Ratelimit:
          $ref: '#/components/headers/RateLimit'
        RateLimitPolicy:
          $ref: '#/components/headers/RateLimitPolicy'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/ValidationError'
          example:
            status: 422
            type: https://api.honeycomb.io/problems/validation-failed
            error: The provided input is invalid.
            title: The provided input is invalid
            type_detail:
            - field: type
              code: invalid
              description: 'type: must be a valid value'
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIError'
    NotFound:
      description: Not Found
      headers:
        Ratelimit:
          $ref: '#/components/headers/RateLimit'
        RateLimitPolicy:
          $ref: '#/components/headers/RateLimitPolicy'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: dataset not found
        application/problem+json:
          schema:
            $ref: '#/components/schemas/DetailedError'
          example:
            status: 404
            type: https://api.honeycomb.io/problems/not-found
            title: The requested resource cannot be found.
            error: Dataset not found
            detail: Dataset not found
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIError'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unknown API key - check your credentials
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIError'
    BadRequest:
      description: The provided request body was invalid.
      headers:
        Ratelimit:
          $ref: '#/components/headers/RateLimit'
        RateLimitPolicy:
          $ref: '#/components/headers/RateLimitPolicy'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/DetailedError'
          examples:
            DetailedError:
              value:
                status: 400
                type: https://api.honeycomb.io/problems/unparseable
                title: The request body could not be parsed.
                error: invalid gzip data
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            GenericError:
              value:
                error: invalid Query data
        application/vnd.api+json:
          schema:
            $ref: '#/components/schemas/JSONAPIError'
          examples:
            JSONAPIError:
              value:
                errors:
                - id: 06dcdd6508ca822f0e7e2bb4121c1f52
                  code: invalid
                  title: request body could not be parsed
                  detail: invalid gzip data
    GenericError:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Tag:
      type: object
      required:
      - key
      - value
      properties:
        key:
          type: string
          description: A key to identify the tag, lowercase letters only.
          maxLength: 32
        value:
          type: string
          description: A value for the tag, must begin with a lowercase letter, contain only alphanumeric characters (all letters lowercase) and special characters of `/` and `-` allowed.
          maxLength: 128
    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
        status:
          type: string
          description: 'Reporting data to express the status of the SLO.


            Status can be one of the following:

            - `normal`   : The SLO has no burn alerts triggered.

            - `triggered`: The SLO has at least one burn alert triggered.

            - `no_alerts`: The SLO has no burn alerts associated with it.

            - `no_events`: The SLO has no events streaming in.


            Only included when the `?detailed` query param is passed.

            '
          enum:
          - normal
          - triggered
          - no_alerts
          - no_events
          readOnly: true
          example: normal
        burn_rate:
          type: number
          description: 'Reporting data to express the ratio of actual failures in the SLO

            to expected failures in the given time window.


            The time window defaults to 4 hours for the API response.


            Only included when the `?detailed` query param is passed.

            '
          format: double
          readOnly: true
          example: 5.39
    SLOHourBucket:
      type: object
      properties:
        start_time:
          type: integer
          format: int64
          description: Start of the hour as a Unix timestamp (seconds).
          readOnly: true
          example: 1745168400
        end_time:
          type: integer
          format: int64
          description: 'End of the hour as a Unix timestamp (seconds). Always `start_time + 3600`.

            '
          readOnly: true
          example: 1745172000
        total_count:
          type: integer
          description: Total number of events (good + bad) in this hour.
          readOnly: true
          example: 74520
        error_count:
          type: integer
          description: Number of failed (bad) events in this hour.
          readOnly: true
          example: 182
        is_partial:
          type: boolean
          description: 'When `true`, this bucket covers the current in-progress hour and its counts will increase until the hour completes. Clients should treat `is_partial: true` buckets as provisional.

            '
          readOnly: true
          example: false
    Error:
      x-tags:
      - Errors
      type: object
      description: A legacy error, containing only a textual description.
      properties:
        error:
          type: string
          readOnly: true
    SLOCountWindow:
      type: object
      properties:
        window_start:
          type: integer
          description: Start of the window as a Unix timestamp (seconds).
          readOnly: true
          example: 1745251200
        window_end:
          type: integer
          description: 'End of the window as a Unix timestamp (seconds). Always `window_start + 60`.

            '
          readOnly: true
          example: 1745254260
        total_count:
          type: integer
          description: Total number of events (good + bad) in this window.
          readOnly: true
          example: 1243
        error_count:
          type: integer
          description: Number of failed (bad) events in this window.
          readOnly: true
          example: 3
        is_partial:
          type: boolean
          description: "When `true`, the data for this window may be incomplete. This occurs in three cases:\n1. **No prior anchor**: The first window has no preceding snapshot\n   to delta from, so the value is a raw cumulative total rather\n   than a true per-minute delta.\n\n2. **Settlement window**: The window started within the last 10\n   minutes. Late-arriving events from client buffering or\n   ingestion lag may still appear in a subsequent snapshot.\n\n3. **Hour boundary reset**: Cumulative totals reset to zero at\n   each hour boundary. A request spanning a boundary will see\n   the new hour's counts start near zero while the anchor came\n   from the prior hour's larger total. Both `total_count` and\n   `error_count` are zeroed for this window. Use `period_start`\n   to detect this and avoid requesting ranges that cross a\n   boundary.\n\nClients building alerting on top of this data should treat `is_partial: true` windows as provisional.\n"
          readOnly: true
          example: false
    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
    SLOHourlyCountsResponse:
      type: object
      properties:
        slo_id:
          type: string
          description: The unique identifier of the SLO.
          readOnly: true
          example: bZ1aRHAUsjG
        resolution_seconds:
          type: integer
          description: The width of each bucket in seconds. Always `3600`.
          readOnly: true
          example: 3600
        buckets:
          type: array
          description: 'Ordered list of hourly count buckets within the requested time range. Gaps indicate hours with no recorded data. An empty array means no data exists for the requested range.

            '
          items:
            $ref: '#/components/schemas/SLOHourBucket'
    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 [Calculated Field](/api/calculated-fields/) used as the indicator of event success.
          required:
          - alias
          properties:
            alias:
              type: string
              description: The alias of the Calculated Field (also called 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
        tags:
          type: array
          description: A list of key-value pairs to help identify the SLO.
          maxItems: 10
          items:
            $ref: '#/components/schemas/Tag'
          example:
          - key: team
            value: blue
        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'
        dataset_slugs:
          type: array
          description: The dataset(s) the SLO will be evaluated against. Required if using `__all__` in the path.
          readOnly: true
          minItems: 1
          maxItems: 10
          example:
          - mydataset1
          - mydataset2
    SLOCreate:
      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 [Calculated Field (also called Derived Column)](/api/calculated-fields/) used as the indicator of event success.
          required:
          - alias
          properties:
            alias:
              type: string
              description: The alias of the Calculated Field (also called 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: 999

# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/honeycomb-io/refs/heads/main/openapi/honeycomb-io-slos-api-openapi.yml