settings:view, writes settings:configure. Everything lives under
/v1/settings/.
Every list is the whole configuration (these are small, bounded sets), every
name is unique within its list (case-insensitive,
409 ALREADY_EXISTS), and
every write records an auditlog row naming the API key.
Statuses
A status carriesname, description, order_position, is_active, color
and the two pre-condition settings the GUI edits: pre_condition_fields (fields
that must be filled before a record may enter the status) and
pre_condition_rules (conditional rules, evaluated the same way
POST /v1/deals/{id}/stage enforces them). The shape is the one custom objects
use for their statuses, so a client learns it once.
On create, order_position defaults to the end of the pipeline and color to
grey. Deleting a status that records still sit in is refused (409 CONFLICT,
details.reason: in_use, details.references) — move them first. The GUI does
not have this guard; the API does, on purpose.
The AI assistant’s list_statuses tool reads these same tables, so a status
created here is usable by set_status immediately.
Tags
A lead tag is its conditions:fields holds at least one
{ "field", "operator", "value" } condition, and a lead matching them gets the
tag. A customer tag reads fields (field names), matches on conditions
joined by condition_logic (AND/OR). priority orders competing tags
(lower wins). Colours are #RRGGBB.
Sources
name, description, is_enabled. Deleting a source that leads or deals still
reference is refused with counts; disable it instead.
Duplicate check
GET /v1/objects/{object}/schema). Enabling with an empty
list is refused. Customers have no duplicate check today.
SLA policies
A policy names theentity_type (lead, customer, deal), a priority,
three clocks in minutes (first_response_time, every_response_time,
resolution_time), and whether they run 24/7 or in business_hours
(business_hours_start/end as HH:MM, business_days as weekday numbers).
reminders (first_response / every_response / resolution, minutes before
the deadline, recipient user ids) and escalations (level, minutes after,
recipients, message template) are saved with the policy; sending either array on
PATCH replaces that set wholesale, exactly as the GUI form does.