Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.lucenthq.com/llms.txt

Use this file to discover all available pages before exploring further.

The Lucent Data API is a REST surface for reading Lucent data and updating issue status from scripts, dashboards, and services.

Base URL

https://app.lucenthq.com
All endpoints below are relative to this base URL.

Authentication

Send a bearer token in the Authorization header:
curl -sS https://app.lucenthq.com/api/v1/issues?limit=10 \
  -H "Authorization: Bearer luc_api_..."
The Data API accepts API keys and OAuth access tokens:
  • API keys that start with luc_api_
  • OAuth access tokens that start with luc_oat_
Legacy static keys with the luc_mcp_ prefix continue to work. Read endpoints require read:lucent. Updating issue status requires write:issues. Create API keys in Organization settings → MCP. Choose Allow issue status updates when the key needs to call PATCH /api/v1/issues/{issueId}. OAuth clients should follow the OAuth reference and request only the scopes they need.
Browser dashboard sessions do not authenticate the Data API. These endpoints are for bearer-token clients and return JSON errors when the token is missing or invalid.

Endpoints

MethodPathScopeQuery paramsDescription
GET/api/v1/issuesread:lucentlimit, status, cursorList issues for the token’s organization.
GET/api/v1/issues/{issueId}read:lucentFetch a single issue by UUID.
PATCH/api/v1/issues/{issueId}write:issuesUpdate an issue’s status.
GET/api/v1/signalsread:lucentlimit, cursorList configured signals and match counts.
GET/api/v1/insightsread:lucentlimit, cursorList recent AI-generated insights.
Every request is scoped to the organization that owns the token. There is no orgId query parameter.

Limits

EndpointDefault limitMax limit
/api/v1/issues25200
/api/v1/signals50200
/api/v1/insights25100
limit must be an integer within the endpoint’s range. List endpoints are ordered by createdAt descending, then id descending.

Pagination

List responses include nextCursor:
{
  "issues": [],
  "nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTAyLTI0VDEwOjMyOjE5LjA2NloiLCJpZCI6Ijg3YjNhNmI2LTVhZjUtNDM4Yi1hMzljLWVmZjE0OGE2OGNjYiJ9"
}
If nextCursor is not null, pass it back as the cursor query parameter to fetch the next page:
GET /api/v1/issues?limit=25&cursor=eyJjcmVhdGVkQXQiOiIyMDI2...
Authorization: Bearer luc_api_...
The cursor is opaque. Do not parse or construct it yourself.

Rate limits

Request typeLimit
Reads300 requests per minute per token or OAuth client
Writes60 requests per minute per token or OAuth client
Rate-limited responses return 429 and include Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers.

Errors

All error responses are JSON and include Cache-Control: no-store.
StatusExample bodyMeaning
400{"error":"limit must be an integer between 1 and 200"}Invalid query parameter.
400{"error":"Request body must be valid JSON"}Invalid JSON body for a write request.
400{"error":"status must be one of: unresolved, ticket_created, transient, resolved"}Invalid issue status.
401{"error":"Missing or invalid bearer token"}Missing, malformed, revoked, or unknown bearer token.
403{"error":"Missing required scope: write:issues"}The token is valid but lacks the required scope.
404{"error":"Issue not found"}The requested issue was not found in the token’s organization.
429{"error":"Rate limit exceeded"}The token or OAuth client exceeded its per-minute limit.
401 responses include:
WWW-Authenticate: Bearer scope="read:lucent"
For write endpoints, the challenge scope is write:issues.