RoboLedger and RoboInvestor: a general ledger and a portfolio, both hanging off a graph, both reachable over one HTTP surface. Everything here is scoped by graph_id in the URL, and authorization is checked before any handler runs.
Reads and writes are deliberately different shapes. A read is a GraphQL query against one endpoint, and it can never change anything. A write is a named operation with its own route, request model and receipt — there is no general-purpose mutation, so nothing changes by accident and every change has a name you can audit. The platform API — graphs, billing, auth, connections — is documented separately in the API reference.
One GraphQL endpoint, scoped by the URL. Read-only by construction.
/extensions/{graph_id}/graphql66 queries across 5 domains, each with its arguments, return type and an example call.
58 named operations. Each takes a typed request, returns an operation envelope, and accepts an Idempotency-Key so a retry is safe.
Initialize a ledger, seed its chart of accounts, and edit the reporting entity
4 operations
Curate taxonomy blocks and map the chart of accounts to their elements
7 operations
Author the units a report is built from, and compute rules, metrics and forecasts over them
8 operations
Agents, business events, the handlers that post them to the GL, and journal entry corrections
12 operations
Close and reopen periods, and drive the schedules that feed the close
7 operations
Build, rebuild, and file a financial report
5 operations
Share reports, manage publish lists, and block unwanted senders
9 operations
Named commands for portfolio management writes and analytical views
6 operations
Read-only operations that query the materialized graph rather than the operational database — pivots over the XBRL hypercube, statement analysis, and the disclosures a report holds.
Working through it by hand? The GraphQL Reads guide covers auth, pagination limits, the error vocabulary and the MCP tools that give an agent the same surface.