Skip to main content

API: applications and modules

Applications isolate log data (each has its own database and folders); modules group issues within one application. Both are queried with the api query parameter. See API conventions for authentication and base URL.

Applications

?api=applications is global - it is not scoped to any application.

MethodActionSuccess
GETList all applications200 { "data": [...] }
POSTCreate an application201

Each application returns:

{
"id": "billing",
"name": "Billing",
"database": "applications/billing/log-lens.sqlite",
"logs": "applications/billing/logs",
"processed": "applications/billing/processed",
"sources": "applications/billing/sources",
"created_at": "2026-07-25 09:12:00"
}

POST body

FieldRequiredNotes
nameYes1-100 characters
idNoSlugified to [a-z0-9-], 1-64 chars; derived from name if omitted

The id default is reserved, and a duplicate id is rejected. Creating an application also creates its logs, processed, and sources directories.

Modules

?api=modules is scoped to one application - add &app=<id> (omit app to use the first application; an unknown id returns 422).

MethodActionSuccess
GETList modules with issue_count200 { "data": [...] }
POSTCreate a module201

GET returns every module ordered by name (case-insensitive), with issue_count counting the issues assigned to it.

POST body

FieldRequiredDefaultNotes
nameYes-1-100 characters
slugNoderived from name1-64 URL-safe chars
colorNo#6366f1Six-digit hex, e.g. #22c55e

A duplicate name or slug is rejected.

Errors

Both endpoints return 422 with { "error": "..." } for invalid input, 405 for an unsupported method, and 500 for an unexpected failure.