POST /api/ingest
Ingest one or many SDK events with project API-key auth.
Headers
x-api-key: rs_your_project_key
content-type: application/jsonRequest body
Single event
{
"message": "attempt to index nil",
"level": "error",
"stack_trace": "...",
"user_id": 123,
"player_name": "Builderman",
"trace_id": "uuid",
"job_id": "...",
"place_id": 123456,
"game_version": "42",
"environment": "production",
"context": {},
"tags": ["combat"],
"timestamp": "2026-02-19T00:00:00.000Z",
"count": 1
}count (optional) claims multiple occurrences for one event — the SDK sets it when it deduplicates repeats client-side. Clamped to 1..1000; occurrences beyond the first only increment the group counter.
Batch
{
"errors": [
{ "message": "error one" },
{ "message": "error two" }
]
}Batch limit is 100 events per request.
Responses
200:{ "success": true, "count": <number>, "throttled": <number> }400: invalid payload or batch too large401: missing or invalid API key500: storage failure
Storage throttling
Per project and fingerprint, at most 30 raw events are stored per rolling 60-second window. Overflow events are not stored as rows; they still increment the error group's counter and last_seen, and are reported in the throttled response field. Events with a trace_id are exempt.
Side effects
- Creates/updates
error_groups - Inserts raw
errors - Upserts
traceswhentrace_idis present - Best-effort dispatch trigger for alert notifications
Health check
GET /api/ingest returns:
{ "status": "ok" }