honeycomb · AsyncAPI Specification

Honeycomb Streaming, OTLP Ingest & Trigger Webhooks

Version 1.0.0

AsyncAPI description of Honeycomb's event-driven and streaming-style surfaces. Honeycomb does not publish a long-lived bidirectional streaming API (no public Kafka topic, no WebSocket, no Server-Sent Events feed for query results). Instead, the platform exposes two real, production surfaces that benefit from an event-driven description: 1. Inbound OTLP ingest — OpenTelemetry Protocol over gRPC and HTTP, used by every Honeycomb-instrumented application to push traces, metrics, and logs into the platform. This is a unary request / response protocol per OTLP, not a persistent stream, but it is the primary "publish telemetry" channel for Honeycomb. 2. Outbound Trigger and SLO Burn Alert webhooks — Honeycomb posts JSON to a customer-controlled URL when a Trigger fires, recovers, or when an SLO Budget-Rate / Exhaustion-Time burn condition is met. Slack and PagerDuty are delivered via vendor-managed channels (Honeycomb Slack app, PagerDuty Events API integration key) and therefore the customer does not host an endpoint for those — they are noted here but not modelled as customer-facing channels. Transport notes (honest): - OTLP/gRPC is unary HTTP/2; AsyncAPI's "grpc" binding is a best-fit description but Honeycomb does not expose server-streaming RPCs. - OTLP/HTTP accepts both protobuf and JSON encodings on the same paths; documented header for auth is "x-honeycomb-team", and the legacy "x-honeycomb-dataset" header is only required for Honeycomb Classic environments. - Trigger webhooks are single HTTP POSTs with a 10-second response deadline; authenticity is asserted via the "X-Honeycomb-Webhook-Token" shared-secret header — Honeycomb does not document an HMAC signature scheme for outbound webhooks at this time. - "X-Honeycomb-Webhook-Delivery-ID" is supplied for at-least-once delivery deduplication; retry policy beyond the 10s timeout is not publicly documented.

View Spec View on GitHub AsyncAPIWebhooksEvents

Channels

v1/traces
publish publishOtlpTraces
Export OpenTelemetry spans to Honeycomb.
OTLP/HTTP traces ingest. Spans are encoded per the OpenTelemetry protobuf schema (or JSON equivalent) inside ExportTraceServiceRequest. A 200 response indicates Honeycomb accepted the batch for processing.
v1/metrics
publish publishOtlpMetrics
Export OpenTelemetry metrics to Honeycomb.
OTLP/HTTP metrics ingest. ExportMetricsServiceRequest in protobuf or JSON. Metrics quota is plan-dependent (see apis.yml Features).
v1/logs
publish publishOtlpLogs
Export OpenTelemetry log records to Honeycomb.
OTLP/HTTP logs ingest. ExportLogsServiceRequest in protobuf or JSON.
opentelemetry.proto.collector.trace.v1.TraceService/Export
publish publishOtlpTracesGrpc
Export spans via OTLP/gRPC.
OTLP/gRPC traces ingest — unary Export RPC. Use OpenTelemetry SDK gRPC exporters; no server-streaming or client-streaming variants are offered by Honeycomb.
opentelemetry.proto.collector.metrics.v1.MetricsService/Export
publish publishOtlpMetricsGrpc
Export metrics via OTLP/gRPC.
OTLP/gRPC metrics ingest — unary Export RPC.
opentelemetry.proto.collector.logs.v1.LogsService/Export
publish publishOtlpLogsGrpc
Export log records via OTLP/gRPC.
OTLP/gRPC logs ingest — unary Export RPC.
trigger.fired
subscribe receiveTriggerWebhook
Receive a Honeycomb Trigger notification.
Honeycomb POSTs to the configured webhook URL when a Trigger crosses its threshold (Status TRIGGERED) or returns to a healthy state (Status OK). The default payload is a JSON object built from the documented template variables; payload can be customised per recipient.
slo.burn_alert.budget_rate
subscribe receiveBudgetRateBurnAlert
Receive an SLO Budget-Rate burn alert webhook.
Webhook delivery for an SLO Budget-Rate burn alert (consumption over a rolling window).
slo.burn_alert.exhaustion_time
subscribe receiveExhaustionTimeBurnAlert
Receive an SLO Exhaustion-Time burn alert webhook.
Webhook delivery for an SLO Exhaustion-Time burn alert (projected time until budget is exhausted).

Messages

OtlpTraces
OTLP ExportTraceServiceRequest
OpenTelemetry trace export payload.
OtlpMetrics
OTLP ExportMetricsServiceRequest
OpenTelemetry metrics export payload.
OtlpLogs
OTLP ExportLogsServiceRequest
OpenTelemetry logs export payload.
TriggerAlert
Honeycomb Trigger Webhook
Payload Honeycomb POSTs when a Trigger fires or recovers.
BudgetRateBurnAlert
SLO Budget-Rate Burn Alert Webhook
Payload for an SLO Budget-Rate burn alert.
ExhaustionTimeBurnAlert
SLO Exhaustion-Time Burn Alert Webhook
Payload for an SLO Exhaustion-Time burn alert.

Servers

grpc
otlp-grpc-us api.honeycomb.io:443
Honeycomb US OTLP/gRPC ingest. TLS on port 443. Used by OpenTelemetry SDKs and collectors configured with OTLP/gRPC exporter.
grpc
otlp-grpc-eu api.eu1.honeycomb.io:443
Honeycomb EU OTLP/gRPC ingest. TLS on port 443. Use for tenants provisioned in the EU instance.
https
otlp-http-us https://api.honeycomb.io
Honeycomb US OTLP/HTTP ingest. Accepts both application/x-protobuf and application/json encodings on the /v1/traces, /v1/metrics, and /v1/logs paths.
https
otlp-http-eu https://api.eu1.honeycomb.io
Honeycomb EU OTLP/HTTP ingest. Same paths and encodings as US.
https
trigger-webhook {webhookUrl}
Customer-hosted HTTPS endpoint registered as a "Webhook" recipient on a Trigger or SLO Burn Alert. Honeycomb POSTs JSON here when the alert condition fires or recovers.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Honeycomb Streaming, OTLP Ingest & Trigger Webhooks
  version: 1.0.0
  description: |
    AsyncAPI description of Honeycomb's event-driven and streaming-style
    surfaces. Honeycomb does not publish a long-lived bidirectional streaming
    API (no public Kafka topic, no WebSocket, no Server-Sent Events feed for
    query results). Instead, the platform exposes two real, production
    surfaces that benefit from an event-driven description:

      1. Inbound OTLP ingest — OpenTelemetry Protocol over gRPC and HTTP,
         used by every Honeycomb-instrumented application to push traces,
         metrics, and logs into the platform. This is a unary request /
         response protocol per OTLP, not a persistent stream, but it is the
         primary "publish telemetry" channel for Honeycomb.

      2. Outbound Trigger and SLO Burn Alert webhooks — Honeycomb posts
         JSON to a customer-controlled URL when a Trigger fires, recovers,
         or when an SLO Budget-Rate / Exhaustion-Time burn condition is
         met. Slack and PagerDuty are delivered via vendor-managed channels
         (Honeycomb Slack app, PagerDuty Events API integration key) and
         therefore the customer does not host an endpoint for those — they
         are noted here but not modelled as customer-facing channels.

    Transport notes (honest):
      - OTLP/gRPC is unary HTTP/2; AsyncAPI's "grpc" binding is a best-fit
        description but Honeycomb does not expose server-streaming RPCs.
      - OTLP/HTTP accepts both protobuf and JSON encodings on the same
        paths; documented header for auth is "x-honeycomb-team", and the
        legacy "x-honeycomb-dataset" header is only required for Honeycomb
        Classic environments.
      - Trigger webhooks are single HTTP POSTs with a 10-second response
        deadline; authenticity is asserted via the "X-Honeycomb-Webhook-Token"
        shared-secret header — Honeycomb does not document an HMAC
        signature scheme for outbound webhooks at this time.
      - "X-Honeycomb-Webhook-Delivery-ID" is supplied for at-least-once
        delivery deduplication; retry policy beyond the 10s timeout is not
        publicly documented.
  contact:
    name: Honeycomb
    url: https://docs.honeycomb.io
  license:
    name: Proprietary
    url: https://www.honeycomb.io/terms
  x-apis-json:
    aid: honeycomb
    modified: '2026-05-30'

defaultContentType: application/json

servers:
  otlp-grpc-us:
    url: api.honeycomb.io:443
    protocol: grpc
    description: |
      Honeycomb US OTLP/gRPC ingest. TLS on port 443. Used by OpenTelemetry
      SDKs and collectors configured with OTLP/gRPC exporter.
  otlp-grpc-eu:
    url: api.eu1.honeycomb.io:443
    protocol: grpc
    description: |
      Honeycomb EU OTLP/gRPC ingest. TLS on port 443. Use for tenants
      provisioned in the EU instance.
  otlp-http-us:
    url: https://api.honeycomb.io
    protocol: https
    description: |
      Honeycomb US OTLP/HTTP ingest. Accepts both application/x-protobuf
      and application/json encodings on the /v1/traces, /v1/metrics, and
      /v1/logs paths.
  otlp-http-eu:
    url: https://api.eu1.honeycomb.io
    protocol: https
    description: |
      Honeycomb EU OTLP/HTTP ingest. Same paths and encodings as US.
  trigger-webhook:
    url: '{webhookUrl}'
    protocol: https
    description: |
      Customer-hosted HTTPS endpoint registered as a "Webhook" recipient on
      a Trigger or SLO Burn Alert. Honeycomb POSTs JSON here when the alert
      condition fires or recovers.
    variables:
      webhookUrl:
        description: HTTPS URL configured on the Honeycomb Recipient.
        default: https://example.com/honeycomb-webhook

channels:
  v1/traces:
    description: |
      OTLP/HTTP traces ingest. Spans are encoded per the OpenTelemetry
      protobuf schema (or JSON equivalent) inside ExportTraceServiceRequest.
      A 200 response indicates Honeycomb accepted the batch for processing.
    servers:
      - otlp-http-us
      - otlp-http-eu
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: publishOtlpTraces
      summary: Export OpenTelemetry spans to Honeycomb.
      message:
        $ref: '#/components/messages/OtlpTraces'

  v1/metrics:
    description: |
      OTLP/HTTP metrics ingest. ExportMetricsServiceRequest in protobuf or
      JSON. Metrics quota is plan-dependent (see apis.yml Features).
    servers:
      - otlp-http-us
      - otlp-http-eu
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: publishOtlpMetrics
      summary: Export OpenTelemetry metrics to Honeycomb.
      message:
        $ref: '#/components/messages/OtlpMetrics'

  v1/logs:
    description: |
      OTLP/HTTP logs ingest. ExportLogsServiceRequest in protobuf or JSON.
    servers:
      - otlp-http-us
      - otlp-http-eu
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    publish:
      operationId: publishOtlpLogs
      summary: Export OpenTelemetry log records to Honeycomb.
      message:
        $ref: '#/components/messages/OtlpLogs'

  opentelemetry.proto.collector.trace.v1.TraceService/Export:
    description: |
      OTLP/gRPC traces ingest — unary Export RPC. Use OpenTelemetry SDK
      gRPC exporters; no server-streaming or client-streaming variants are
      offered by Honeycomb.
    servers:
      - otlp-grpc-us
      - otlp-grpc-eu
    publish:
      operationId: publishOtlpTracesGrpc
      summary: Export spans via OTLP/gRPC.
      message:
        $ref: '#/components/messages/OtlpTraces'

  opentelemetry.proto.collector.metrics.v1.MetricsService/Export:
    description: OTLP/gRPC metrics ingest — unary Export RPC.
    servers:
      - otlp-grpc-us
      - otlp-grpc-eu
    publish:
      operationId: publishOtlpMetricsGrpc
      summary: Export metrics via OTLP/gRPC.
      message:
        $ref: '#/components/messages/OtlpMetrics'

  opentelemetry.proto.collector.logs.v1.LogsService/Export:
    description: OTLP/gRPC logs ingest — unary Export RPC.
    servers:
      - otlp-grpc-us
      - otlp-grpc-eu
    publish:
      operationId: publishOtlpLogsGrpc
      summary: Export log records via OTLP/gRPC.
      message:
        $ref: '#/components/messages/OtlpLogs'

  trigger.fired:
    description: |
      Honeycomb POSTs to the configured webhook URL when a Trigger crosses
      its threshold (Status TRIGGERED) or returns to a healthy state
      (Status OK). The default payload is a JSON object built from the
      documented template variables; payload can be customised per
      recipient.
    servers:
      - trigger-webhook
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    subscribe:
      operationId: receiveTriggerWebhook
      summary: Receive a Honeycomb Trigger notification.
      message:
        $ref: '#/components/messages/TriggerAlert'

  slo.burn_alert.budget_rate:
    description: |
      Webhook delivery for an SLO Budget-Rate burn alert (consumption over
      a rolling window).
    servers:
      - trigger-webhook
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    subscribe:
      operationId: receiveBudgetRateBurnAlert
      summary: Receive an SLO Budget-Rate burn alert webhook.
      message:
        $ref: '#/components/messages/BudgetRateBurnAlert'

  slo.burn_alert.exhaustion_time:
    description: |
      Webhook delivery for an SLO Exhaustion-Time burn alert (projected
      time until budget is exhausted).
    servers:
      - trigger-webhook
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: '0.3.0'
    subscribe:
      operationId: receiveExhaustionTimeBurnAlert
      summary: Receive an SLO Exhaustion-Time burn alert webhook.
      message:
        $ref: '#/components/messages/ExhaustionTimeBurnAlert'

components:
  messages:
    OtlpTraces:
      name: OtlpTraces
      title: OTLP ExportTraceServiceRequest
      summary: OpenTelemetry trace export payload.
      contentType: application/x-protobuf
      headers:
        $ref: '#/components/schemas/OtlpRequestHeaders'
      payload:
        $ref: '#/components/schemas/OtlpExportTraceServiceRequest'

    OtlpMetrics:
      name: OtlpMetrics
      title: OTLP ExportMetricsServiceRequest
      summary: OpenTelemetry metrics export payload.
      contentType: application/x-protobuf
      headers:
        $ref: '#/components/schemas/OtlpRequestHeaders'
      payload:
        $ref: '#/components/schemas/OtlpExportMetricsServiceRequest'

    OtlpLogs:
      name: OtlpLogs
      title: OTLP ExportLogsServiceRequest
      summary: OpenTelemetry logs export payload.
      contentType: application/x-protobuf
      headers:
        $ref: '#/components/schemas/OtlpRequestHeaders'
      payload:
        $ref: '#/components/schemas/OtlpExportLogsServiceRequest'

    TriggerAlert:
      name: TriggerAlert
      title: Honeycomb Trigger Webhook
      summary: Payload Honeycomb POSTs when a Trigger fires or recovers.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/TriggerAlertPayload'

    BudgetRateBurnAlert:
      name: BudgetRateBurnAlert
      title: SLO Budget-Rate Burn Alert Webhook
      summary: Payload for an SLO Budget-Rate burn alert.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/BudgetRateBurnAlertPayload'

    ExhaustionTimeBurnAlert:
      name: ExhaustionTimeBurnAlert
      title: SLO Exhaustion-Time Burn Alert Webhook
      summary: Payload for an SLO Exhaustion-Time burn alert.
      contentType: application/json
      headers:
        $ref: '#/components/schemas/WebhookHeaders'
      payload:
        $ref: '#/components/schemas/ExhaustionTimeBurnAlertPayload'

  schemas:
    OtlpRequestHeaders:
      type: object
      required:
        - x-honeycomb-team
      properties:
        x-honeycomb-team:
          type: string
          description: |
            Honeycomb ingest API key for the environment receiving the data.
        x-honeycomb-dataset:
          type: string
          description: |
            Required only for Honeycomb Classic. For Environments &
            Services tenants this header is ignored; dataset routing is
            derived from OTLP resource attributes (service.name).
        content-type:
          type: string
          enum:
            - application/x-protobuf
            - application/json
          description: OTLP/HTTP encoding selector.
        content-encoding:
          type: string
          enum:
            - gzip
          description: Optional gzip compression of the request body.

    OtlpExportTraceServiceRequest:
      type: object
      description: |
        OpenTelemetry ExportTraceServiceRequest. Full schema is defined by
        opentelemetry-proto; only the top-level shape is shown here.
      properties:
        resourceSpans:
          type: array
          items:
            type: object

    OtlpExportMetricsServiceRequest:
      type: object
      description: |
        OpenTelemetry ExportMetricsServiceRequest. See opentelemetry-proto
        for the full message definition.
      properties:
        resourceMetrics:
          type: array
          items:
            type: object

    OtlpExportLogsServiceRequest:
      type: object
      description: |
        OpenTelemetry ExportLogsServiceRequest. See opentelemetry-proto for
        the full message definition.
      properties:
        resourceLogs:
          type: array
          items:
            type: object

    WebhookHeaders:
      type: object
      required:
        - Content-Type
        - User-Agent
      properties:
        Content-Type:
          type: string
          enum:
            - application/json
        User-Agent:
          type: string
          enum:
            - Honeycomb Triggers
        X-Honeycomb-Webhook-Token:
          type: string
          description: |
            Shared secret value configured on the Recipient. Receivers
            should compare this against their stored secret to authenticate
            the request. Honeycomb does not currently document an HMAC
            signature scheme for these webhooks.
        X-Honeycomb-Webhook-Delivery-ID:
          type: string
          description: |
            Unique delivery identifier suitable for at-least-once
            deduplication on the receiver.

    Alert:
      type: object
      description: Common Alert envelope shared by Trigger and Burn Alert payloads.
      properties:
        InstanceID:
          type: string
          description: Unique identifier for this firing instance.
        Description:
          type: string
        Status:
          type: string
          enum:
            - TRIGGERED
            - OK
        Summary:
          type: string
        IsTest:
          type: boolean
        Timestamp:
          type: string
          format: date-time
        Type:
          type: string
          description: For Triggers — "on_change" or "on_true".
          enum:
            - on_change
            - on_true
        BudgetDecrease:
          type: number
          format: float
          description: Present on SLO burn-alert payloads.

    Recipient:
      type: object
      properties:
        Name:
          type: string
        Secret:
          type: string
          description: |
            Same shared secret echoed in the X-Honeycomb-Webhook-Token
            header.

    ResultGroup:
      type: object
      properties:
        Group:
          type: object
          properties:
            Key:
              type: string
            Value: {}
        Result:
          type: number
          format: float

    TriggerResult:
      type: object
      properties:
        URL:
          type: string
          format: uri
        Groups:
          type: array
          items:
            $ref: '#/components/schemas/ResultGroup'
        GroupsTriggered:
          type: array
          items:
            $ref: '#/components/schemas/ResultGroup'

    TriggerQuery:
      type: object
      properties:
        TimeRange:
          type: integer
          description: Query duration in seconds.

    TriggerAlertPayload:
      type: object
      description: |
        Default Trigger webhook body. Customers may override this via the
        Recipient's Payload template; the fields below correspond to the
        documented template variables.
      properties:
        Name:
          type: string
        ID:
          type: string
        Description:
          type: string
        URL:
          type: string
          format: uri
        Environment:
          type: string
        Datasets:
          type: array
          items:
            type: string
        Operator:
          type: string
        Threshold:
          type: number
          format: float
        Frequency:
          type: integer
          description: Evaluation frequency in minutes.
        Query:
          $ref: '#/components/schemas/TriggerQuery'
        Result:
          $ref: '#/components/schemas/TriggerResult'
        Alert:
          $ref: '#/components/schemas/Alert'
        Recipient:
          $ref: '#/components/schemas/Recipient'

    SLORef:
      type: object
      properties:
        URL:
          type: string
          format: uri
        ID:
          type: string

    SLIRef:
      type: object
      properties:
        URL:
          type: string
          format: uri

    BudgetRateBurnAlertPayload:
      type: object
      description: |
        SLO Budget-Rate burn alert webhook body. Field set per Honeycomb's
        documented webhook template variables.
      properties:
        Name:
          type: string
        ID:
          type: string
        Description:
          type: string
        URL:
          type: string
          format: uri
        Environment:
          type: string
        Datasets:
          type: array
          items:
            type: string
        BudgetRateWindowMinutes:
          type: integer
        BudgetDecreaseThreshold:
          type: number
          format: float
        SLO:
          $ref: '#/components/schemas/SLORef'
        SLI:
          $ref: '#/components/schemas/SLIRef'
        Alert:
          $ref: '#/components/schemas/Alert'
        Recipient:
          $ref: '#/components/schemas/Recipient'

    ExhaustionTimeBurnAlertPayload:
      type: object
      description: SLO Exhaustion-Time burn alert webhook body.
      properties:
        Name:
          type: string
        ID:
          type: string
        Description:
          type: string
        URL:
          type: string
          format: uri
        Environment:
          type: string
        Datasets:
          type: array
          items:
            type: string
        ExhaustionMinutes:
          type: integer
        SLO:
          $ref: '#/components/schemas/SLORef'
        SLI:
          $ref: '#/components/schemas/SLIRef'
        Alert:
          $ref: '#/components/schemas/Alert'
        Recipient:
          $ref: '#/components/schemas/Recipient'