RoSentry Docs

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/json

Request 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 large
  • 401: missing or invalid API key
  • 500: 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 traces when trace_id is present
  • Best-effort dispatch trigger for alert notifications

Health check

GET /api/ingest returns:

{ "status": "ok" }

On this page