Skip to content

Review queue

Everything ingestion parked for a person to decide on. A held row is a write a strict policy would not apply until its name is classified; a violation row is a name a permissive policy accepted and flagged. Both are keyed by kind and name and carry a first and a last sighting, so they list together under one cursor, ordered by last seen. The verbs differ by row: allow or deny a held name on the Catalog page, resolve or dismiss a violation on the Violations page.

List the review queue

Auth: Clerk session token.

Query parameters

{
"cursor": "string",
"limit": 50,
"direction": "asc",
"type": "all",
"kind": "all",
"status": "all"
}
Field Type Required Constraints
cursor string no
limit integer no default 50; 1 ≤ x ≤ 100
direction “asc” | “desc” no default "asc"
type “held” | “violation” | “all” no default "all"
kind “event” | “trait” | “all” no default "all"
status “held” | “open” | “resolved” | “dismissed” | “all” no default "all"

Response 200

{
"data": [
{
"id": "string",
"kind": "event",
"name": "string",
"firstSeenAt": "2026-01-15T09:30:00.000Z",
"lastSeenAt": "2026-01-15T09:30:00.000Z",
"type": "held",
"status": "held",
"payload": {
"properties": {
"key": {}
},
"messageId": "string",
"idempotencyKey": "string"
},
"heldCount": 1
}
],
"meta": {
"requestId": "string",
"nextCursor": "string",
"hasMore": true
}
}
Field Type Required Constraints
data array of variants yes
data[] one of yes
data[]〈held〉 object yes
data[]〈held〉.id string yes
data[]〈held〉.kind “event” | “trait” yes
data[]〈held〉.name string yes
data[]〈held〉.firstSeenAt string (date-time) yes
data[]〈held〉.lastSeenAt string (date-time) yes
data[]〈held〉.type “held” yes
data[]〈held〉.status “held” yes
data[]〈held〉.payload object | object yes
data[]〈held〉.heldCount integer yes 1 ≤ x ≤ ∞
data[]〈violation〉 object yes
data[]〈violation〉.id string yes
data[]〈violation〉.kind “event” | “trait” yes
data[]〈violation〉.name string yes
data[]〈violation〉.firstSeenAt string (date-time) yes
data[]〈violation〉.lastSeenAt string (date-time) yes
data[]〈violation〉.type “violation” yes
data[]〈violation〉.status “open” | “resolved” | “dismissed” yes
data[]〈violation〉.payload object | object yes
meta object no
meta.requestId string no
meta.nextCursor string | null no
meta.hasMore boolean no

Errors follow the shared envelope and code table.