Xeonr Developer Docs

Report a renderer crash

POST
/uplim.api.v1.IntegrationsService/ReportRendererCrash

Records that the renderer for an integration archive failed (render error, unhandled exception, or unhandled rejection). Best-effort telemetry used for diagnosing broken renderers in production.

Authorization

OAuth2 upl:bucket:read
AuthorizationBearer <token>

OAuth 2.0 authorization

In: header

Scope: upl:bucket:read

Header Parameters

Connect-Protocol-Version*number

Define the version of the Connect protocol

Value in1
Connect-Timeout-Ms?number

Define the timeout, in ms

Request Body

application/json

archiveUploadId?string

The renderer archive that crashed. UUID of the upload whose renderer config the host is serving.

Formatuuid
kind?string

What kind of failure the renderer SDK observed. These map 1:1 to the SDK's three crash paths (React ErrorBoundary, window.onerror, window.onunhandledrejection) so we can slice telemetry by failure mode — render-time crashes vs async failures usually have very different root causes.

Value in"RENDERER_CRASH_KIND_UNSPECIFIED" | "RENDERER_CRASH_KIND_RENDER" | "RENDERER_CRASH_KIND_ERROR" | "RENDERER_CRASH_KIND_UNHANDLED_REJECTION"
name?string

Error.name from the SDK (e.g. "TypeError"). Bounded so we can index by it without blowing log lines up.

Lengthlength <= 256
message?string

Error.message — the user-facing failure description.

Lengthlength <= 4096
stack?string

Full stack trace, when the browser gives us one. Renderers in production builds may have minified stacks; we don't try to source-map server-side.

Lengthlength <= 32768
rendererLocation?string|null

Where the renderer thinks it was when it crashed — the iframe's window.location.href at the time the boundary fired. Useful for narrowing down which entry / hash-route was active.

Lengthlength <= 2048
reportedAtMs?integer|string

Iframe-side timestamp (Unix millis). The server records its own received_at — this lets us see how long crashes sat in the host before being forwarded, which matters when the host buffers.

Formatint64
integrationId?string|null

Optional opaque integration ID, if the host knows which integration owns the renderer that crashed. Helps grouping when one archive is shared by several integrations.

Formatuuid
contentTypeId?string|null

The content type whose renderer config drove the iframe load. Optional because bucket / folder renderers aren't matched via a content type (their config attaches to a bucket type instead). Lets integration devs filter their crash list by content type.

Formatuuid
userAgent?string|null

navigator.userAgent at crash time, clamped. Most useful field for narrowing "only happens in Safari"-style bugs. Bounded so a goofy UA string can't blow the row up.

Lengthlength <= 512
viewportWidth?integer

window.innerWidth / window.innerHeight at crash time. 0 means the iframe never measured (extremely rare; serves as a "missing" marker rather than a real value).

viewportHeight?integer
buildHash?string|null

Optional build hash from the renderer's config.json. Lets us group crashes per renderer build even when several builds share an archive_upload_id — e.g. when a developer iterates inside a single session. Populated by renderer-plugin-vite when present; empty when the build pipeline doesn't stamp one.

Lengthlength <= 64
[key: string]?never

Response Body

application/json

application/json

curl -X POST "https://uploads-api.xeonr.io/uplim.api.v1.IntegrationsService/ReportRendererCrash" \  -H "Connect-Protocol-Version: 1" \  -H "Content-Type: application/json" \  -d '{}'
{}
{
  "code": "not_found",
  "message": "string",
  "details": [
    {
      "type": "string",
      "value": "string",
      "debug": {}
    }
  ]
}