Skip to content

Observability

Monitor your data pipeline in real time. Every event, error, and schema change is tracked and surfaced in the dashboard and API.

Dashboard Overview

The Observability page in the dashboard provides:

  • Live histogram — minute-by-minute event volume for the last hour
  • Hourly trend — 24-hour view with per-hour aggregates
  • Stream filter — drill into a specific stream
  • Error breakdown — errors by type (validation, processing, rate limit, schema rejection)
  • Recent requests — individual request details with payloads

Navigate to Dashboard → Observability or click the chart icon next to any stream.


Real-Time Stats

Account-Level Stats

bash
curl https://enrich.sh/stats \
  -H "Authorization: Bearer sk_live_your_key"

Response:

json
{
  "status": "ok",
  "customer_id": "cust_abc123",
  "hour": "2026-02-07T09",
  "requests": 1523,
  "events": 45690,
  "errors": 2,
  "histogram": [
    { "minute": "2026-02-07T09:30", "events": 1200, "requests": 40, "errors": 0 }
  ],
  "hourly": [
    { "hour": "2026-02-07T08", "events": 52000, "requests": 1700, "errors": 5 }
  ]
}
FieldDescription
statusok when data is flowing, idle when quiet
histogramMinute-by-minute breakdown (last hour)
hourlyHour-by-hour aggregates (last 24 hours)

Per-Stream Stats

bash
curl https://enrich.sh/stats/events \
  -H "Authorization: Bearer sk_live_your_key"

Returns the same histogram/hourly structure scoped to one stream, plus recent errors for that stream.


Error Tracking

Every failed request is logged with the full error context — type, message, endpoint, and request payload.

API Errors

bash
curl "https://enrich.sh/errors?limit=20" \
  -H "Authorization: Bearer sk_live_your_key"

Response:

json
{
  "errors_24h": 12,
  "by_type": {
    "validation": 8,
    "schema_rejection": 2,
    "rate_limit": 1,
    "processing": 1
  },
  "recent": [
    {
      "type": "validation",
      "message": "stream_id is required",
      "request_path": "/ingest",
      "request_body": "{ ... }",
      "created_at": "2026-02-07T09:45:00.000Z"
    }
  ]
}

Error Types

TypeDescriptionCommon Cause
validationRequest failed validationMissing stream_id, empty data, bad format
schema_rejectionEvent didn't match strict schemaExtra/missing fields, type mismatch
rate_limitExceeded request or event quotaBurst traffic, plan limit reached
processingInternal processing failureRare — contact support if persistent
flushError writing Parquet to storageStorage issue — automatically retried

Schema Change Detection

When a stream uses evolve mode, Enrich.sh automatically detects and logs schema changes. This catches upstream data changes before they break your queries.

Schema Events API

bash
curl "https://enrich.sh/schema-events?stream_id=erp_events&limit=50" \
  -H "Authorization: Bearer sk_live_your_key"

Response:

json
{
  "events": [
    {
      "event_type": "new_field",
      "field_name": "discount_code",
      "new_value": "string",
      "created_at": "2026-02-15T10:30:00Z"
    },
    {
      "event_type": "type_change",
      "field_name": "amount",
      "old_value": "int64",
      "new_value": "string",
      "created_at": "2026-02-15T11:00:00Z"
    }
  ]
}

Change Types

EventDescriptionSeverity
new_fieldA field appeared that isn't in the schemaℹ️ Info
missing_fieldA previously-present field stopped appearing⚠️ Warning
type_changeA field's data type changed🔴 Error

TIP

Review schema events regularly when integrating SaaS APIs or ERP systems — these sources often change their payloads without notice.


Dead Letter Queue

When strict mode rejects an event, it's routed to the stream's Dead Letter Queue instead of being dropped. See the full DLQ documentation for details.

Quick check:

bash
curl "https://enrich.sh/streams/transactions/dlq?days=7" \
  -H "Authorization: Bearer sk_live_your_key"

DLQ events include the original payload plus rejection metadata (_rejected_at, _reason, _field), so you can fix and re-ingest them.


What to Monitor

SignalWhere to LookAction
Event volume dropStats → histogramCheck upstream source
Error spikeErrors → by_typeReview recent errors for pattern
Schema driftSchema EventsVerify upstream API change
DLQ growthDLQ countFix rejected events, adjust schema
Latency increaseStats → requests/events ratioCheck payload size, reduce batch volume

Serverless data ingestion for developers.