List metering reports
const url = 'http://localhost:8080/v1/metering/reports';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:8080/v1/metering/reportsReturns the most recent heartbeat attempts (delivered or not, with the outcome) and signed usage reports; exactly what left the bank and when. limit 1–200, default 50. Admin or manager.
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”OK
object
month for heartbeats (month-to-date), quarter for the air-gapped usage report.
object
What leaves the bank: install id, version, the period, two integers (closed loans, document pages), coarse health, and the license key for Bookend’s receiver to validate. Never loan data. The wire names are the documented snake_case ones on every surface (heartbeat, signed report, REST) so the payload viewer shows exactly what is sent.
object
month for heartbeats (month-to-date), quarter for the air-gapped usage report.
object
Coarse component status words (ok / degraded / unknown); no hostnames, no counts beyond the metered one.
object
Examplegenerated
[ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "deliveryMode": "example", "period": { "kind": "example", "start": "2026-04-15", "end": "2026-04-15" }, "closedLoanCount": 1, "documentPageCount": 1, "payload": { "install_id": "example", "version": "example", "period": { "kind": "example", "start": "2026-04-15", "end": "2026-04-15" }, "closed_loan_count": 1, "document_page_count": 1, "health": { "database": "example", "inference": "example", "core": "example", "evidence": "example" }, "license_key": "example", "generated_at": "2026-04-15T12:00:00Z" }, "signature": "example", "signatureKeyId": "example", "deliveredAt": "2026-04-15T12:00:00Z", "generatedAt": "2026-04-15T12:00:00Z" }]