as_of and computed_at. All fifteen are available through the doors below.
This object is where your accounting system’s own structure meets Beacon’s. Your ledger already knows what its accounts are called and how they nest. What it does not know is which of them are the cost of serving a customer, which are the cost of winning one, and which are neither — and that is what the cost role, service layer and cost function on this object hold.
The names, types and availability below are fixed. No read interface or MCP tool serves them yet — this page publishes the shape ahead of the doors.
chart_of_accounts_category and the collection is GET /chart-of-accounts. The longer name is deliberate: account on this interface means a customer account, and a chart-of-accounts category is a different thing entirely. The two must not share a name, so this one is spelled out rather than shortened.
Example payload
Attributes
The cost role is the boundary the rest of the cost model rests on. Marketing spend, sales spend and the cost of serving a customer are three different things that a chart of accounts does not distinguish on its own, and every downstream figure — cost to serve, acquisition cost, contribution margin — depends on that line being drawn once, in one place, by you. This object is that place.
Your ledger’s own grouping is recorded but never used to classify. The reason is specific rather than cautious: the same account is grouped differently on different accounting platforms — a current account is filed one way on one system and another way on another. A classification that changes because of which software you bought is not a classification of anything economic, so it is kept as a record of what your ledger said and nothing more.
This object carries no money and no currency. Amounts live on ledger entries; a currency tag on a reference row would be a second place to state a fact the entry already carries, and two places to state one fact eventually disagree.
Availability
✓ available by default · ⊕ available after an opt-in that states who becomes able to see the value · — not available. Nothing on this object is served on any door today, and that is true of all fifteen rather than of some of them. The names, types, ceilings and marks below are fixed and will not change when the doors open. Read the table as what each value will reach, not as what is callable now.
The CRM door is closed on this object, and not by an opt-in. The CRM door writes a property onto a customer record. A chart-of-accounts category is not a fact about a customer — it is a row in your accounting system with its own identity — so there is no record for it to be written onto. That is a hard limit rather than a setting, which is why it reads
— and not ⊕.
Every value on this object sits at operational. That is derived rather than assumed: it comes from reading who, inside Beacon’s own model, is entitled to read this object at full scope. The role that owns it reads the whole model across every domain and sits below leadership level, so the ceiling is the lower one. There is one qualification, stated rather than hidden: Beacon’s own access rules gate money fields to finance and data-governance roles. This object carries no money, and the roles that gate would name are the same ones already reading it — so the ceiling does not move.
No one outside your company holds a standing read on the records behind this object. Your chart of accounts is read from your accounting system into Beacon and consolidated there. That is worth stating because it is not true of every object — the revenue figures on the company and period object are read from records your external auditor also reads.
What your accounting system changes
Beacon reads your chart of accounts through an accounting connector, and the two mainstream connectors do not deliver the same things. Which one your accounting system sits behind changes how two values on this object are produced. This is stated on the object rather than left to be discovered during setup, because it changes how much you have to check.
Where
is_postable is proposed rather than read, the proposal is only as good as your naming. Two categories with the same name in different parts of the tree will break it, and that is why it is put to you rather than applied silently. It is worth the check: this is the value that, wrong, double-counts every amount under a heading.
The suggestion Beacon can make for cost_role is also stronger on some systems than others. Some accounting models carry a cost-of-sales classification Beacon can read as evidence; others carry a shorter list with no such category at all, in which case more rows reach you as proposed and fewer arrive already sensible. Nothing is silently weaker — classification_state is exactly the value that tells you which rows have been looked at. The same holds for out_of_scope_treatment: no accounting system delivers it, and how good Beacon’s first suggestion is depends on how much your system says about each account’s type. You confirm every one either way.
Freshness
The values you set do not drift. A cost role stays as you left it until you change it. What moves underneath it is your chart of accounts itself — a new account appears, and it arrives as
proposed with nothing assigned, which is the state that tells you there is something to look at.
A period that has already been locked keeps the classification it was locked with. Changing a cost role today does not silently restate last quarter’s cost of service. The change applies from the point you make it.