Observability Export API

Manage OpenTelemetry export configurations to send webhook delivery traces and metrics to external observability platforms.

Endpoints

MethodPathDescription
GET/api/observabilityList export configs
POST/api/observabilityCreate export config
GET/api/observability/{id}Get export config
PATCH/api/observability/{id}Update export config
DELETE/api/observability/{id}Delete export config
POST/api/observability/{id}/testTest endpoint connectivity
GET/api/observability/statusExport health summary

Export Config Object

{
  "id": "55fc3362-5e1c-451a-9802-bf7528c0d31d",
  "organizationId": "23dcbb0a-119b-4a84-8ebc-bea5183407a0",
  "name": "Grafana Cloud",
  "provider": "grafana",
  "endpoint": "https://otlp-gateway-prod-us-west-0.grafana.net/otlp/",
  "protocol": "http/json",
  "authHeaders": {
    "Authorization": "Basi****ials"
  },
  "exportTypes": {
    "traces": true,
    "metrics": true,
    "logs": false
  },
  "samplingRate": 1.0,
  "resourceFilter": null,
  "isActive": true,
  "lastExportAt": "2026-03-15T12:00:00Z",
  "lastError": null,
  "consecutiveErrors": 0,
  "createdAt": "2026-03-15T10:00:00Z",
  "updatedAt": "2026-03-15T12:00:00Z"
}

Auth header values are always masked in responses. Only header key names are visible.

Providers

Valid provider values: grafana, newrelic, honeycomb, axiom, otlp

Create Export Config

curl -X POST "https://api.hookbase.app/api/observability" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production Grafana",
    "provider": "grafana",
    "endpoint": "https://otlp-gateway-prod-us-west-0.grafana.net/otlp/",
    "authHeaders": {
      "Authorization": "Basic base64credentials"
    },
    "exportTypes": {
      "traces": true,
      "metrics": true,
      "logs": false
    },
    "samplingRate": 1.0,
    "resourceFilter": []
  }'

Parameters

FieldTypeRequiredDescription
namestringYesDisplay name (1-100 chars)
providerstringYesProvider identifier
endpointstringYesOTLP endpoint URL
protocolstringNohttp/json (default) or http/protobuf
authHeadersobjectNoKey-value pairs sent as HTTP headers
exportTypesobjectNoWhich telemetry types to export
samplingRatenumberNo0.01 to 1.0 (default: 1.0)
resourceFilterstring[]NoSource/route IDs to filter (Business only)

Plan Limits

PlanMax ConfigsTracesMetricsLogsResource Filter
Pro2YesYesNoNo
Business10YesYesYesYes

Update Export Config

curl -X PATCH "https://api.hookbase.app/api/observability/{id}" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "samplingRate": 0.5,
    "isActive": true
  }'

All fields from create are optional. Additionally accepts isActive (boolean) to enable/disable.

Test Connection

curl -X POST "https://api.hookbase.app/api/observability/{id}/test" \
  -H "Authorization: Bearer {token}"

Sends a test span to the configured endpoint and returns success or the error message. Resets consecutive errors on success.

Response

{
  "success": true,
  "message": "Test span sent successfully",
  "status": 200
}

Health Status

curl "https://api.hookbase.app/api/observability/status" \
  -H "Authorization: Bearer {token}"

Response

{
  "total": 3,
  "active": 2,
  "healthy": 1,
  "erroring": 1,
  "disabled": 1,
  "configs": [
    {
      "id": "...",
      "name": "Grafana Cloud",
      "provider": "grafana",
      "isActive": true,
      "lastExportAt": "2026-03-15T12:00:00Z",
      "lastError": null,
      "consecutiveErrors": 0,
      "status": "healthy"
    }
  ]
}

Status values: healthy, erroring, disabled, auto_disabled

Auto-Disable Behavior

After 10 consecutive export failures, the config is automatically set to isActive: false. The status changes to auto_disabled. Fix the endpoint issue and re-enable via PATCH with {"isActive": true}.