REST API
Base URL
All endpoints are served from https://api.observerkit.com.
Authentication
Send your API key as a bearer token. Create one in your project API Access settings; the full key is shown once at creation. Keys are scoped to a single project, so a key only ever sees that project's errors.
curl -s "https://api.observerkit.com/v1/errors/groups?status=active" \
-H "Authorization: Bearer YOUR_API_KEY"Rate limits
Requests are limited to 120 requests per minute per key by default. Every response carries the current limit, remaining budget, and reset time as headers.
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118
X-RateLimit-Reset: 1753104000Over the limit, the API responds with 429 and the body { "error": "Rate limit exceeded" }.
Error responses
Domain errors return a tagged JSON body with an HTTP status: 401 for a missing or invalid key, and 404 for a group the key cannot see.
{ "_tag": "ErrorGroupNotFound", "code": 4001, "message": "Error group not found" }Invalid query parameters (400) and rate-limit rejections (429) use a simpler { "error": "..." } body instead of the tagged shape.
Endpoints
/v1/errors/groupsList error groups for the key's project, newest activity first.
statusoptionalFilter by status: active, ignored, or resolved.sinceoptionalOnly groups active since this time. ISO 8601, or shorthand 30m, 2h, 7d (units m, h, d).limitoptionalMaximum groups to return. Defaults to 50.offsetoptionalNumber of groups to skip for pagination. Defaults to 0.{
"groups": [ {
"id": "3f1c...",
"projectId": "9a2b...",
"fingerprint": "handleClick:TypeError",
"message": "Cannot read properties of undefined (reading 'profile')",
"errorType": "TypeError",
"status": "active",
"eventCount": 12,
"firstSeenAt": "2026-07-01T09:12:00.000Z",
"lastSeenAt": "2026-07-01T14:47:00.000Z"
} ],
"total": 1,
"limit": 50,
"offset": 0
}/v1/errors/groups/:groupIdFetch one group with its latest event, including symbolicated stack frames.
{
"group": {
"id": "3f1c...",
"projectId": "9a2b...",
"fingerprint": "handleClick:TypeError",
"message": "Cannot read properties of undefined (reading 'profile')",
"errorType": "TypeError",
"status": "active",
"eventCount": 12,
"firstSeenAt": "2026-07-01T09:12:00.000Z",
"lastSeenAt": "2026-07-01T14:47:00.000Z"
},
"latestEvent": {
"id": "c4d5...",
"resolvedFrames": [
{
"file": "src/components/Button.tsx",
"line": 42,
"functionName": "handleClick",
"resolved": true
}
]
}
}/v1/errors/groups/:groupId/eventsList individual events belonging to a group, newest first.
limitoptionalMaximum events to return. Defaults to 20.{
"events": [
{
"id": "c4d5...",
"timestamp": "2026-07-01T14:47:00.000Z",
"origin": "https://example.com"
}
]
}/v1/errors/groups/:groupId/resolveMark a group resolved. Reopens automatically if the error recurs.
{ "group": {
"id": "3f1c...",
"projectId": "9a2b...",
"fingerprint": "handleClick:TypeError",
"message": "Cannot read properties of undefined (reading 'profile')",
"errorType": "TypeError",
"status": "active",
"eventCount": 12,
"firstSeenAt": "2026-07-01T09:12:00.000Z",
"lastSeenAt": "2026-07-01T14:47:00.000Z"
} }/v1/errors/groups/:groupId/unresolveReopen a resolved group. REST only; not exposed as an MCP tool.
{ "group": {
"id": "3f1c...",
"projectId": "9a2b...",
"fingerprint": "handleClick:TypeError",
"message": "Cannot read properties of undefined (reading 'profile')",
"errorType": "TypeError",
"status": "active",
"eventCount": 12,
"firstSeenAt": "2026-07-01T09:12:00.000Z",
"lastSeenAt": "2026-07-01T14:47:00.000Z"
} }/v1/errors/groups/:groupId/ignoreIgnore a group so it stops triggering notifications.
{ "group": {
"id": "3f1c...",
"projectId": "9a2b...",
"fingerprint": "handleClick:TypeError",
"message": "Cannot read properties of undefined (reading 'profile')",
"errorType": "TypeError",
"status": "active",
"eventCount": 12,
"firstSeenAt": "2026-07-01T09:12:00.000Z",
"lastSeenAt": "2026-07-01T14:47:00.000Z"
} }