Violations
In permissive mode an unknown event or trait name is accepted and flagged here, so a typo never silently drops data. Resolving a violation registers the name into the catalog pre-filled from the observed payload; dismissing silences noise from a misbehaving integration. Both are admin actions.
GET /v1/violations/{id}
Section titled “GET /v1/violations/{id}”Fetch one violation
Auth: Clerk session token.
Response 200
{ "data": { "id": "string", "orgId": "string", "environment": "development", "kind": "event", "name": "string", "payload": { "properties": { "key": "string" } }, "status": "open", "createdAt": "2026-01-15T09:30:00.000Z", "lastSeenAt": "2026-01-15T09:30:00.000Z", "resolvedAt": "2026-01-15T09:30:00.000Z", "dismissedAt": "2026-01-15T09:30:00.000Z" }, "meta": { "requestId": "string", "nextCursor": "string", "hasMore": true }}| Field | Type | Required | Constraints |
|---|---|---|---|
data |
object | yes | |
data.id |
string | yes | |
data.orgId |
string | yes | |
data.environment |
“development” | “production” | yes | |
data.kind |
“event” | “trait” | yes | |
data.name |
string | yes | |
data.payload |
object | object | yes | |
data.status |
“open” | “resolved” | “dismissed” | yes | |
data.createdAt |
string (date-time) | yes | |
data.lastSeenAt |
string (date-time) | yes | |
data.resolvedAt |
string (date-time) | null | yes | |
data.dismissedAt |
string (date-time) | null | 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.
POST /v1/violations/{id}/resolve
Section titled “POST /v1/violations/{id}/resolve”Resolve a violation into the catalog
Auth: Clerk session token.
Request body
{ "data": { "properties": { "key": "string" }, "type": "string" }}| Field | Type | Required | Constraints |
|---|---|---|---|
data |
object | yes | |
data.properties |
record<string, “string” | “number” | “boolean” | “object” | “array<any>” | “array<string>” | “array<number>” | “array<boolean>” | “array<object>”> | no | |
data.type |
“string” | “number” | “boolean” | “object” | “array<any>” | “array<string>” | “array<number>” | “array<boolean>” | “array<object>” | no |
Response 200
{ "data": { "id": "string", "orgId": "string", "environment": "development", "kind": "event", "name": "string", "payload": { "properties": { "key": "string" } }, "status": "open", "createdAt": "2026-01-15T09:30:00.000Z", "lastSeenAt": "2026-01-15T09:30:00.000Z", "resolvedAt": "2026-01-15T09:30:00.000Z", "dismissedAt": "2026-01-15T09:30:00.000Z" }, "meta": { "requestId": "string", "nextCursor": "string", "hasMore": true }}| Field | Type | Required | Constraints |
|---|---|---|---|
data |
object | yes | |
data.id |
string | yes | |
data.orgId |
string | yes | |
data.environment |
“development” | “production” | yes | |
data.kind |
“event” | “trait” | yes | |
data.name |
string | yes | |
data.payload |
object | object | yes | |
data.status |
“open” | “resolved” | “dismissed” | yes | |
data.createdAt |
string (date-time) | yes | |
data.lastSeenAt |
string (date-time) | yes | |
data.resolvedAt |
string (date-time) | null | yes | |
data.dismissedAt |
string (date-time) | null | 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.
POST /v1/violations/{id}/dismiss
Section titled “POST /v1/violations/{id}/dismiss”Dismiss a violation
Auth: Clerk session token.
Response 200
{ "data": { "id": "string", "orgId": "string", "environment": "development", "kind": "event", "name": "string", "payload": { "properties": { "key": "string" } }, "status": "open", "createdAt": "2026-01-15T09:30:00.000Z", "lastSeenAt": "2026-01-15T09:30:00.000Z", "resolvedAt": "2026-01-15T09:30:00.000Z", "dismissedAt": "2026-01-15T09:30:00.000Z" }, "meta": { "requestId": "string", "nextCursor": "string", "hasMore": true }}| Field | Type | Required | Constraints |
|---|---|---|---|
data |
object | yes | |
data.id |
string | yes | |
data.orgId |
string | yes | |
data.environment |
“development” | “production” | yes | |
data.kind |
“event” | “trait” | yes | |
data.name |
string | yes | |
data.payload |
object | object | yes | |
data.status |
“open” | “resolved” | “dismissed” | yes | |
data.createdAt |
string (date-time) | yes | |
data.lastSeenAt |
string (date-time) | yes | |
data.resolvedAt |
string (date-time) | null | yes | |
data.dismissedAt |
string (date-time) | null | 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.