If usage only exists inside a product UI, it does not exist for finance. Finance needs a file they can keep.
CSV is not a joke
A dated CSV with book_id, meter, quantity, occurred_at is a complete feed. Many houses already export it for their data team. Scrip will take that file without asking for a new pipeline.
Warehouse tables
If you have usage_events in the warehouse, point the book at a query. The query is part of the spec. Changing the query is a versioned change, not a silent tweak.
APIs
An events API is fine if it is append-only for a closed period. Mutating last month's events after close is how you mint disputes. Closed periods are read-only. Corrections are new stubs.