Dead Letters

Dead Letter Management

When a change fails to apply after all retries, it can be captured in a dead letter store for later inspection and replay.

Enabling dead letters

error_handling {
  max_retries = 5
  on_persistent_failure = isolate
  dead_letter {
    enabled = true
    store = s3
    config {
      bucket = my-bucket
      prefix = "dead-letter/"
    }
  }
}

Inspecting dead letters

laredo dead-letters pg_main:public.audit_log:http-sync

Output:

PIPELINE: pg_main:public.audit_log:http-sync
PENDING: 47

TIMESTAMP                ACTION   POSITION        ERROR
2026-03-20 12:34:44      INSERT   0/1A2B3C4D      HTTP 503: Service Unavailable
2026-03-20 12:34:44      INSERT   0/1A2B3C50      HTTP 503: Service Unavailable
...

Replaying dead letters

After fixing the downstream issue, replay the dead letters:

laredo dead-letters replay pg_main:public.audit_log:http-sync
# Replaying 47 dead letters... 45 succeeded, 2 failed.

Failed replays remain in the dead letter store.

Purging dead letters

Remove dead letters that are no longer needed:

laredo dead-letters purge pg_main:public.audit_log:http-sync
# Purged 2 dead letters.

Monitoring

The laredo_pipeline_dead_letters_total counter tracks dead letter writes. Alert on this metric to detect persistent downstream failures.