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.