Skip to content

Reports

LiMon Intelligence reports turn monitored license data into live web views, PDF artifacts, and scheduled report runs. They are meant for estate review, application ownership, site comparisons, savings analysis, audit preparation, and finance-oriented allocation workflows.

Reports use the same DB-backed model configured in the Admin UI: servers, applications, feature mappings, sites, AD/LDAP enrichment, privacy settings, and cost data. When those inputs are incomplete, reports still run, but sections that depend on business context may show gaps or unallocated rows.

Every report needs an active subscription. During an evaluation, reports cover data from the evaluation's start date onward, even if you imported older logs.

LiMon Intelligence overview with report cards for savings, audit, estate, application, site, and chargeback analysis
The Intelligence overview groups the available report families and their live/PDF entry points.

Report Types

Report Sub Web view PDF Useful for
Estate Yes Yes Estate-wide application usage across all applications defined in LiMon.
Application Yes Yes A selected application, including related features, users, utilization, and demand.
Site Yes Yes A selected site/location, with rollups based on site assignments.
Savings (money) Yes Yes Underused capacity, unused features, renewal exposure, vendor summary, and cost-savings opportunities. Requires useful application/feature cost data for best results.
Audit Defense Yes Yes Compliance posture over a selected period, including capacity, denials, overdraft signals, expiring licenses, and audit-risk indicators.
Chargeback Pro Yes CSV Department allocation and finance export. Requires advanced analytics, cost data, and department context from AD/LDAP or maintained mappings.

PDF-capable report types are estate, app, site, money, and audit. Chargeback is intentionally a live view plus JSON/CSV export rather than part of the shared PDF artifact path.

Sample PDFs of all five, with a walkthrough of what each one contains, are at limonops.com/resources/sample-reports/.

Live Web Views

Live report views are the interactive version of each report. They are lighter than PDF generation and are the best place to inspect current report data before producing or regenerating a PDF.

The examples below show partial contents of the Audit Defense live view: the top-level compliance posture, denial pressure, application compliance portfolio, and priority actions that help prepare evidence for audit conversations.

Partial Audit Defense live view showing period controls, compliance posture summary, risk counters, compliance breakdown, and denial pressure chart
Audit Defense live view excerpt showing the compliance posture summary and top denial pressure.
Partial Audit Defense live view showing application compliance portfolio rows and priority action findings
Audit Defense live view excerpt showing application-level compliance status and priority actions.

Open a live report from the Intelligence overview, choose the report family, and select the relevant application, site, period, or privacy option when the report needs one. The Intelligence overview shows whether a PDF of each report already exists and offers it for download, so check there before generating another.

Audit Defense also interprets Compliance Ledger evidence when available: integrity, monitoring coverage, recorded amendments, key trust, and external receipts. Use the dedicated ledger guide for sealing setup, verification, export, and key handling.

PDF Generation

PDF generation is asynchronous. When a user clicks Generate PDF or Regenerate, LiMon queues a durable job and a report worker renders the PDF outside the web request. Repeated requests for the same exact report attach to the same live job, and the newest successful exact-match artifact is surfaced by default.

A few safeguards keep generation predictable:

  • At most five on-demand reports can be queued or running at once. Beyond that, LiMon asks you to wait for one to finish. Joining a report that is already being generated, and scheduled reports, don't count. Administrators can change the limit with reports.jobs.max_inflight_ad_hoc_jobs.
  • A report that runs longer than 30 minutes is stopped and marked failed (reports.jobs.job_timeout_minutes).
  • Each PDF is checked before it is published, so a failed render never replaces the last good copy.

Generated PDFs include bookmarks for each section, so you can jump around them from your PDF viewer's outline.

Savings, Audit Defense, and Estate report cards offering Open Live View, Download existing, and Regenerate
Once an artifact exists, a report card offers the live view, the existing PDF with its age, and a regenerate action. Cards with no artifact yet show Generate PDF instead.

If an exact matching PDF already exists, the report page can offer Download existing instead of forcing a new generation. Use Regenerate when the underlying data or settings have changed and a fresh artifact is needed.

Scheduling

Schedules use the same durable queue as manual PDF generation. The scheduler checks due schedules every hour, queues the matching report, and emails it when SMTP and recipients are configured.

LiMon report schedules page showing configured report schedules and scheduling controls
Report schedules define recurring PDF generation, optional email delivery, and quick run-now actions.

Use schedules for recurring review packs such as monthly estate reviews, quarterly audit preparation, or yearly savings analysis. Valid cadences are monthly, quarterly, and yearly. A schedule keeps its original day and time: a late or missed run doesn't shift the ones after it.

Under Email Recipients, type email addresses, or use Add account and Send to me to add LiMon accounts. Account recipients follow their current email address and their own notification mutes. Email delivery needs SMTP configured under Admin → Settings → Notifications; see Notifications.

Settings And Storage

Report settings are managed from the Admin UI/API, with defaults.yml providing shipped defaults. The most visible operational settings are:

Setting Default Notes
reports.output.directory /opt/limon/reports/intelligence Source of truth for generated PDF artifacts. Use an absolute path.
reports.retention_days 90 Old PDF files and superseded artifact rows are cleaned up after the retention window.
reports.money.default_period_months 12 Default Savings analysis window.
reports.money.currency EUR Single configured currency used by money-oriented report output.
reports.audit.default_period_months 12 Default Audit Defense analysis window.
reports.jobs.max_inflight_ad_hoc_jobs 5 On-demand PDF reports queued or running at once. Scheduled reports are exempt.
reports.jobs.job_timeout_minutes 30 A report running longer than this is stopped and marked failed.
privacy.mask_usernames_default false Default privacy mode for reports and related API payloads.

API For Automation

Most users generate and schedule reports from the frontend. Use the API when you need automation, scripting, integration with another portal, or external report retrieval.

Scripts should authenticate with the admin API key, which works in every access mode:

X-API-KEY: <api-key>

When sign-in is enabled, browser sessions need these permissions:

Calls Permission
Live views and the Chargeback export data.read (Viewer)
Status, artifact lookup, list and download reports.read (Viewer)
Generate a PDF reports.generate (Operator)
Schedules reports.schedule (Operator)

Live-view endpoints:

Endpoint Notes
GET /api/v1/reports/view/estate Optional mask_usernames=true.
GET /api/v1/reports/view/app?application_id=<id> Select the application by application_id. app_name also works when exactly one deployed application has that name. Optional mask_usernames=true.
GET /api/v1/reports/view/site?site_name=<name> site_name is required. Optional mask_usernames=true.
GET /api/v1/reports/view/money?period_months=12&safety_margin=0.10 period_months and safety_margin are optional; configured defaults apply when omitted.
GET /api/v1/reports/view/audit?period_months=12 period_months is optional; configured defaults apply when omitted.
GET /api/v1/reports/view/chargeback?period=quarter Also accepts period_months=1, 3, 6, or 12.
GET /api/v1/reports/chargeback?format=csv&period=quarter Finance-oriented CSV export. Use format=json for API consumers.

Generate a PDF:

curl -X POST "http://your-limon-host/api/v1/reports/generate" \
  -H "X-API-KEY: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "money",
    "params": {
      "period_months": 12,
      "safety_margin": 0.10
    }
  }'

If five on-demand reports are already queued or running, LiMon answers 429; retry after one finishes. Otherwise, poll the queued job:

curl "http://your-limon-host/api/v1/reports/status/<command_id>" \
  -H "X-API-KEY: <api-key>"

Resolve an existing exact-match artifact before generating another one:

curl "http://your-limon-host/api/v1/reports/artifact?type=money&period_months=12&safety_margin=0.10" \
  -H "X-API-KEY: <api-key>"

Download the returned PDF artifact:

curl -o report.pdf "http://your-limon-host/api/v1/reports/download/<filename>" \
  -H "X-API-KEY: <api-key>"

Useful params values:

Report type Params
estate {} for PDF generation. Live views also accept mask_usernames=true as a query parameter.
app {"application_id": 7}, or {"app_name": "MATLAB"} when the name is unique. Live views also accept mask_usernames=true as a query parameter.
site {"site_name": "US-NYC"}. Live views also accept mask_usernames=true as a query parameter.
money Optional period_months, safety_margin.
audit Optional period_months.

Create a monthly Estate PDF schedule:

curl -X POST "http://your-limon-host/api/v1/reports/schedules" \
  -H "X-API-KEY: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Monthly Estate Review",
    "report_type": "estate",
    "report_params": {},
    "cadence": "monthly",
    "run_time": "06:30",
    "day_of_month": 1,
    "enabled": true,
    "email_enabled": true,
    "email_recipients": "licenses@example.com"
  }'

email_recipients is a comma-separated list. Each entry is an email address, or account:<id> for a LiMon account.

Schedule endpoints:

Method Endpoint Purpose
GET /api/v1/reports/schedules List schedules and SMTP readiness.
POST /api/v1/reports/schedules Create a schedule.
PUT /api/v1/reports/schedules/<id> Update a schedule.
DELETE /api/v1/reports/schedules/<id> Delete a schedule.
POST /api/v1/reports/schedules/<id>/run-now Queue the schedule immediately.

For a broader endpoint inventory, see the API Reference.