Skip to content

Service Types API

All endpoints require authentication and service-types tool permissions.

Overview — what Service Types are used for

Section titled “Overview — what Service Types are used for”

Service Types are an admin-managed taxonomy of standardised service categories (name, default_rate, unit, category), maintained in Settings ▸ Service Types (with drag-to-reorder). They are managed in Nucleus — not synced from Productive — and underpin pricing, invoicing and resourcing consistency. Consumers:

  • Budget line items — selecting a service type auto-fills unit_price from default_rate.
  • Invoice line items — auto-fills description + unit price, and maps to Xero account codes via invoice_mapping_rules for accounting export.
  • Proposal pricing items — pricing sections reference a service type.
  • Resourcing allocations — an allocation can carry a service_type_id.
  • Client service heatmapclient_service_cells map company × service and are auto-populated by fuzzy-matching project type labels (worker/lib/heatmap-auto.ts), validating is_active.

It is a core configuration feature, not an orphaned table.

GET /api/service-types

Permission: service-types:view

Query parameters:

ParamTypeDescription
include_inactivestringSet to true to include inactive service types (default: active only)
categorystringFilter by category

Results are ordered by position, then name.

Response: { service_types }

POST /api/service-types

Permission: service-types:manage

Body:

FieldTypeRequiredDescription
namestringYesService type name
descriptionstringNoDescription
default_ratenumberNoDefault hourly/unit rate
unitstringNoUnit of measure (default: hour)
categorystringNoCategory grouping

Response: { service_type } (201)

PUT /api/service-types/reorder

Permission: service-types:manage

Body:

FieldTypeRequiredDescription
idsstring[]YesOrdered array of service type IDs

Response: { ok: true }

PUT /api/service-types/:id

Permission: service-types:manage

Body: Any of: name, description, default_rate, unit, category, is_active.

Response: { service_type }

DELETE /api/service-types/:id

Permission: service-types:manage

Response: { ok: true }