The billing.* family (2 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.
Getbilling.profile.get
| Property | Value |
|---|---|
| Capability | matter.read |
| Risk class | Read - autonomy L0 |
| Min. permission | Member |
| Availability | Core - always on (MCP tier 1) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
| Render schema | Yes - drives an inline chat artefact and a GUI panel |
Read the matter fee arrangement. { matterId }. A matter
with no profile is FIXED_FEE by default (the absence IS the default; the panel always renders).
Input
| Field | Type | Required | Description |
|---|---|---|---|
matterId | string | yes |
Call POST /v/billing.profile.get with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool billing.profile.get.
Setbilling.profile.set
| Property | Value |
|---|---|
| Capability | matter.write |
| Risk class | Write - autonomy L1 |
| Min. permission | Admin |
| Availability | Vertical (MCP tier 3) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
Author/replace the matter fee arrangement.
{ matterId, billingMode(FIXED_FEE|TIME|RETAINER), currency?, rateCardTableId?, rateCardRowId?, rateMinor?, billingIncrementMins?(=6), retainerAmountMinor?, retainerIncludedMins?, overageRateMinor?, retainerPeriod?(MONTHLY), retainerBillMode?(ALWAYS|ON_ACTIVITY) }.
The STANDARD rate lives in the product library; rateCardTableId/rateCardRowId pin that row as frozen
provenance, rateMinor is the per-matter OVERRIDE (subject to contract). TIME/RETAINER require a usable
rate (override here, or a pinned rate-card resolved at roll-up); RETAINER requires the block terms.
Input
| Field | Type | Required | Description |
|---|---|---|---|
matterId | string | yes | |
billingMode | string | yes | |
currency | string | no | |
rateCardTableId | string | no | PRODUCTS data_table id |
rateCardRowId | string | no | rate-card data_row id |
rateMinor | integer | no | per-matter override, minor-units/hour |
rateUnit | string | no | unit the rate is quoted in (default HOUR) |
workdayMins | integer | no | minutes in a billable day for DAY rates (default 480) |
billingIncrementMins | integer | no | default 6 (legal tenth-hour) |
retainerAmountMinor | integer | no | |
retainerIncludedMins | integer | no | |
overageRateMinor | integer | no | |
retainerPeriod | string | no | |
retainerBillMode | string | no |
Call POST /v/billing.profile.set with a JSON body; returns JSON (or { error, code }). Also exposed as the MCP tool billing.profile.set.