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.
| Field | Type | Notes |
|---|---|---|
level | string | fatal | error | warning | info | debug. Default error. Aliases (warn, err, critical, log) are accepted. |
message | string | Free-text message for log-style events. |
exception.type | string | Exception class, e.g. TypeError. |
exception.value | string | The error message. |
exception.stacktrace | string | frame[] | Raw stack string (Node/V8 and Python tracebacks are parsed automatically) or an array of structured frames. |
environment | string | e.g. production, staging. Default production. |
release | string | Release identifier, e.g. web@1.4.2. |
platform | string | e.g. node, python, javascript. |
server_name | string | Host / instance identifier (serverName also accepted). |
transaction | string | Logical operation name; shown as the issue culprit when present. |
request.url | string | Request URL associated with the error (top-level url also accepted). |
user | object | { id, email, username, ip_address }. Drives the distinct users-affected count. |
tags | object | Searchable key/value labels. |
extra | object | Arbitrary additional context, stored verbatim. |
timestamp | string | number | ISO 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:
| Field | Type | Notes |
|---|---|---|
filename | string | Source file path. file / abs_path also accepted. |
function | string | Function name. func / method also accepted. |
lineno | number | Line number. line also accepted. |
colno | number | Column number. col also accepted. |
in_app | boolean | Your code vs. a dependency. inApp also accepted; auto-guessed from the path when omitted. |
context | string | Optional 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
}