Skip to content

Dead Letter Queue (DLQ)

When strict mode rejects an event (or evolve mode encounters an uncoercible value), the event is routed to the stream's Dead Letter Queue instead of being dropped.

DLQ events are stored as Parquet at:

{customer_id}/{stream_id}/_dlq/{year}/{month}/{day}/*.parquet

Viewing DLQ Events

Dashboard: Observability → Stream → Dead Letters tab

API:

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

DuckDB:

sql
SELECT *
FROM read_parquet('s3://bucket/customer/transactions/_dlq/2026/02/**/*.parquet');

DLQ Event Schema

Each DLQ event includes the original payload plus rejection metadata:

FieldDescription
_rejected_atTimestamp of rejection
_reasonWhy it was rejected (missing_field, extra_field, type_mismatch)
_fieldWhich field caused the rejection
_originalFull original event payload (JSON)

INFO

DLQ data counts toward your storage usage but not your event quota. Nothing is lost — you can always replay or fix-and-reingest DLQ events.

Serverless data ingestion for developers.