---
title: "Dead-lettered records per table for the tenant engine"
method: GET
path: "/v1/projects/{project_id}/dlq"
tags: ["projects"]
---

# Dead-lettered records per table for the tenant engine

`GET /v1/projects/{project_id}/dlq`

## Request

- Base URL: `https://api.wavehouse.cloud`
- URL: `https://api.wavehouse.cloud/v1/projects/{project_id}/dlq`
- Auth: one of:
  - API key in cookie `whc_session`
  - HTTP bearer
  - API key in header `X-API-Key`

Records this project's engine ACCEPTED (ingest answered 200) and then could not insert — a type ClickHouse refused, an unparseable timestamp, an unreadable envelope. They are parked per table and are not in any table, so no query finds them and no ingest response reported them. Read live from the engine's admin-only GET /v1/ops/dlq/stats with the operator key the API injects server-side; the count is the depth NOW, and `tables` omits the tables holding none. Read-only; any org member. Nothing here replays or discards a record: the engine exposes no route that can, so the repair is to fix the value and ingest it again.

## Path parameters

- `project_id` string, required

## Response `200`

OK

- ProjectDLQView
  - `observed_at` string, date-time, required: when the engine answered
  - `tables` TableDLQView[], required: per-table depth, sorted by table; a table holding none is absent
    - `messages` integer, required
    - `table` string, required
  - `total` integer, required: parked records across every table

## Other responses

- `429`: Rate limited, per client IP, API key or org; a client IP is also refused on every route for a while after repeated authentication failures. A limited operation carries RateLimit-Policy and RateLimit on every response; wait Retry-After seconds before retrying.
- `default`: Error

---

[API](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api.md) · [All operations](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wavehouse/apis/wavehouse-cloud-api/revisions/adea029bf505?raw)
