Skip to main content
Rates use three separate capabilities. Holding one does not give you the others.

Why they are separate

Each answers a different question:
  • rate.manage – may you change what someone is charged at?
  • rate.viewBilling – may you see what a client is charged?
  • rate.viewCost – may you see what a colleague costs?
The third is the sensitive one. What someone costs is close to what they are paid, so it stays with the smallest possible group.

Cost is a firewall, not a hidden column

Cost figures are removed before the page is built. Someone without rate.viewCost does not receive a cost number at all. There is nothing hidden to inspect. The number never leaves the server.

Roles at a glance

Everything. Sets and removes billing and cost rates, sees both, on every surface.

The Finance surprise

Finance is the role people get wrong. Daniel Okafor owns the money surface – he sends invoices and records payments – but he holds none of rate.manage, rate.viewBilling or rate.viewCost. That works because pricing already happened. Every time entry carries the rate it was recorded at, so the invoice builder shows Daniel the billable value without ever showing him a rate table. If your finance person also needs to set rates, add rate.manage and rate.viewBilling to a custom role. See /concepts/roles-and-capabilities.

Capability is not scope

A capability says whether you may do something. It does not say for whom. rate.viewBilling lets Priya see billable rates. Which people appear on the Rates roster is a separate question, answered by her supervision scope. Both have to pass. Two other capabilities control cost visibility elsewhere: They are deliberately the same tier. Seeing every entry’s cost would reveal the rate anyway.

Plans and permissions are different questions

A Pro workspace still hides cost from a Project Manager. A Free workspace still shows cost to its Owner – it just cannot record a new cost rate. See /concepts/plans-and-features.

Deleting a rate needs more than managing one

Removing a rate row is gated exactly like writing one, plus two extras for cost: You cannot delete a figure you are not allowed to see.

Common questions

Yes, through a custom role that includes rate.viewCost. Think carefully first – it is close to sharing salary information.
Not on the Rates page, which needs rate.viewBilling. A Member or Contractor has no route to it.
Because the billable value is already stored on each time entry. The invoice builder shows money, not rates.
Yes. Margin is revenue minus cost, so a margin figure is a cost figure. It follows the same capability.
Some capabilities can be denied per person. Check the person’s record before assuming a role grants something.
That is workspace.updateSettings, not a rate capability. Owner and Admin hold it.

Troubleshooting

Roles and capabilities

The full permission model.

Cost rates

What the firewall protects.

Billable rates

The rate everyone with billing access sees.

Set a person rate

Where these capabilities apply.

Invoice permissions

Who can invoice and take payment.

Plans and features

Plan gates versus permission gates.