Lucent exposes two HTTP APIs:
| API | Base URL | Purpose | Auth |
|---|
| Ingest API | https://batch-jobs-lucent.onrender.com | Submit session replay events. | luc_pk_ public key |
| Data API | https://app.lucenthq.com | Read issues, signals, and insights; update issue status. | Authorization: Bearer ... |
The ingest API is what the @lucenthq/sdk package talks
to in production. You can also call it directly from your own instrumentation —
for example, a native mobile app that already speaks rrweb, or a server-side
relay.
The Data API exposes Lucent data over plain REST. Use it for scripts,
dashboards, or services that need Lucent data or need to update issue status
without using the dashboard.
Ingest base URL
https://batch-jobs-lucent.onrender.com
All endpoints are relative to this base URL. If you self‑host the ingest
service, point the SDK at your own base URL via the ingestBaseUrl option.
Endpoint
| Method | Path | Purpose |
|---|
POST | /api/sdk/replay | Submit a batch of rrweb events for a session. |
See the Replay endpoint for the full request
and response schema.
Data API endpoints
| Method | Path | Purpose |
|---|
GET | /api/v1/issues | List issues. |
GET | /api/v1/issues/{issueId} | Fetch one issue. |
PATCH | /api/v1/issues/{issueId} | Update issue status. |
GET | /api/v1/signals | List signals. |
GET | /api/v1/insights | List insights. |
See the Data API page for authentication, query
parameters, and response examples.
The current @lucenthq/sdk browser package uses hardcoded defaults
(flushIntervalMs: 10000, maxEventsPerBatch: 500, maxBatchBytes: 1 MiB)
and posts directly to /api/sdk/replay without an init handshake. If you’re
building a custom integration on top of the ingest API, do the same — the only
runtime endpoint you need is /api/sdk/replay.
Authentication
Ingest requests use luc_pk_ public keys. Data API requests use API keys or
OAuth bearer tokens with the read:lucent scope. See
Authentication for both formats.
Content encoding
Replay batches can be large. The /api/sdk/replay endpoint accepts either
plain JSON or gzip‑compressed JSON — set Content-Encoding: gzip on the
request and the server will decompress the body before parsing. The browser
SDK compresses by default.