Data Contracts Built In

Your Schema,
Your Rules.

Choose how strictly your data is validated. From schemaless prototyping to strict data contracts — with automatic drift detection and nothing ever lost.

Three Modes

Pick Your Enforcement Level.

Flex

Accept Everything

Missing fields
null
Extra fields
Dropped
Type mismatch
Coerced
New columns
Ignored

Best For

PrototypingSchemaless SourcesGetting Started
Recommended

Evolve

Accept + Alert

Missing fields
null + Alert
Extra fields
Auto-added
Type mismatch
Coerced + Alert
New columns
Accepted

Best For

SaaS APIsERP ExportsML Pipelines

Strict

Reject Mismatch

Missing fields
Rejected → DLQ
Extra fields
Rejected → DLQ
Type mismatch
Rejected → DLQ
New columns
Not accepted

Best For

Financial DataComplianceData Contracts

# Set mode when creating a stream

curl -X POST https://enrich.sh/streams \

-H "Authorization: Bearer $KEY" \

-d '{"stream_id":"orders","schema_mode":"evolve","fields":{"order_id":{"type":"string"},"amount":{"type":"float64"}}}'

Schema Drift Detection

Know When Your
Data Changes.

When evolve mode detects a schema change, it logs the event in real time. New fields, missing fields, type changes — all surfaced automatically so you never miss upstream changes.

New Field DetectedField 'discount_code' (string) appeared in 127 events
Missing FieldField 'currency' stopped appearing in 45 events
Type Change'amount' changed from int64 → string in 3 events
Schema Events
Last 24h
14:32erp_orders
+ newdiscount_code
14:28erp_orders
⟳ typeamount
13:15clicks
− missingreferrer
12:01erp_orders
+ newtax_rate
11:44events
⟳ typeuser_id
5 schema events todayView All →

Dead Letter Queue

Nothing Is Lost.

When strict mode rejects an event, it goes to the Dead Letter Queue — stored as Parquet, queryable, ready to fix and re-ingest.

Incoming Event
{ "order_id": "abc", "extra_field": 42 }
Strict Mode Validation
✗ extra_field not in schema
DLQStored as Parquet
Fix & Re-ingestNothing lost
StorageParquetDate-partitioned in R2
MetadataFullReason, field, timestamp
BillingFreeDoesn't count toward quota

Data Contracts,
Without the Overhead.

Start with flex, evolve to strict. No code changes needed.

© 2026 AUTONOMOUS STRUCTURES LIMITED · ENRICH.SHNODE V1.0.0