Event payload

Send a JSON body to POST /api/ingest. The minimum is a message, or an exception with a type or value. Everything else is optional context, captured verbatim.

FieldTypeNotes
levelstringfatal | error | warning | info | debug. Default error. Aliases (warn, err, critical, log) are accepted.
messagestringFree-text message for log-style events.
exception.typestringException class, e.g. TypeError.
exception.valuestringThe error message.
exception.stacktracestring | frame[]Raw stack string (Node/V8 and Python tracebacks are parsed automatically) or an array of structured frames.
environmentstringe.g. production, staging. Default production.
releasestringRelease identifier, e.g. web@1.4.2.
platformstringe.g. node, python, javascript.
server_namestringHost / instance identifier (serverName also accepted).
transactionstringLogical operation name; shown as the issue culprit when present.
request.urlstringRequest URL associated with the error (top-level url also accepted).
userobject{ id, email, username, ip_address }. Drives the distinct users-affected count.
tagsobjectSearchable key/value labels.
extraobjectArbitrary additional context, stored verbatim.
timestampstring | numberISO 8601 string or epoch (seconds or ms). Default: now.

Stack frame shape

When you send structured frames (an array under exception.stacktrace or exception.frames), each frame accepts:

FieldTypeNotes
filenamestringSource file path. file / abs_path also accepted.
functionstringFunction name. func / method also accepted.
linenonumberLine number. line also accepted.
colnonumberColumn number. col also accepted.
in_appbooleanYour code vs. a dependency. inApp also accepted; auto-guessed from the path when omitted.
contextstringOptional source/context text shown alongside the frame.

You can also pass a raw stack string — Node/V8 (at fn (file:line:col)) and Python (File "…", line N, in fn) traces are parsed into frames automatically. Anything unparseable is preserved as-is so nothing is lost.

{
  "filename": "/app/checkout.ts",
  "function": "createOrder",
  "lineno": 42,
  "colno": 18,
  "in_app": true
}