Reporting Manager API
Reports over sales, stock and purchasing, and the home dashboard's figures.
The reporting engine's service shell. Owns no commands and no journal of its own: its database holds local mirrors of the inventory, purchasing, fulfillment, and crm journal tables, fed by Postgres logical replication, so heavy analytical reads (and direct BI joins) land here and never on the operational primaries. The mirror tables carry row-level security keyed on tenant_id, so a direct BI connection is organization-scoped by the database itself. Behind the mirrors an incremental fold builds the reporting star schema — dimension rows, fact rows with drill-through event ids, and daily balance snapshots — reusing the shared costing fold so ledger figures reconcile with accounting to the cent. On top of the star sits the public reporting surface: a report library of saved definitions (journalled as reporting.report-saved), execution by the reference interpreter with job-gated field visibility, and drill-through from any leaf cell back to the journal facts behind it. The home dashboard reads its analytics strip from the same star and keeps each person's dismissed cards as reporting.widget-dismissed facts. The operational readout (replica and fold health) rides alongside.
- Base URL
https://reporting.getmanifold.io- Auth
- A bearer token on every call. See the quickstart.
- OpenAPI
- reporting-manager.openapi.json
model
Introspection: what can be reported on, filtered to the caller's jobs.
reports
The organization's report library: definitions saved as journalled documents.
- GET
/reportsList the organization's saved reports whose every referenced field the caller's jobs may… - POST
/reportsSave a report into the organization's library under a client-minted rpt_ id - PUT
/reports/{reportId}Replace a saved report's name and definition wholesale
runs
Report execution: run a definition, and drill a cell back to its facts.
- POST
/report-runsExecute a report — a saved one by reportId - GET
/report-runs/drillThe facts behind one leaf cell of a saved report
dashboard
The home dashboard: each person's own choice of the cards they see.
- GET
/dashboardThe caller's own home dashboard as they left it - PUT
/dashboard/dismissals/{widget}Dismiss one card from the caller's own dashboard - DELETE
/dashboard/dismissalsBring back every card the caller dismissed from their own dashboard
analytics
Store analytics: sales, orders and units over a window, against the one before.
- GET
/analytics/summaryThe dashboard's analytics strip over the last 7 - GET
/analytics/slow-moversThe stock sitting still - GET
/analytics/marginThe margin over the last 7
commissions
A rep's own commission, earned and clawed back.
events
The reporting append-only event log.
- GET
/eventsReplay committed reporting events at-or-after since - GET
/events/headThe journal's position at a moment
replica
Operational visibility into the logical-replication read replica.