Skip to main content

Custom Fields

Custom fields are the details your business keeps on each contact that Brilo does not hold by default: an insurance carrier, a date of birth, a recall date, a preferred clinic. You define a field once for the workspace, then every contact can have a value for it. Your agent can read them on calls as {{custom.<key>}}, campaign emails can insert them, and Search Contacts can filter on them. These endpoints do what Settings, then Custom fields does in the dashboard, so a script or an AI agent can set fields up for you. The same tools are on the Brilo MCP server. Errors share one shape, { "status", "error_code", "message", "details" }. Branch on error_code; the message says in plain words what to change.

Field types

List Custom Fields

status is active (default), archived or all. Fields come in display order.

Response

Get a Custom Field

Returns one field in the same shape. A field from another workspace returns 404 field_not_found.

Create a Custom Field

Example Request

A choice field your front desk fills in:
A number your agent remembers after each call:
The response is 201 with the new field, shaped as in List Custom Fields.

Keys are never reused

A key stays taken after its field is archived, because contacts keep their values. If you send a key that any field uses, archived or not, the request returns 409 key_collision rather than renaming it. If you leave key out, Brilo picks a free one by adding _2, _3 and so on.

Change a Custom Field

Send only what changes: label, options, option_colors, filled_by, description, visible_to_agent, memory, required or display_order. Renaming changes the label for everyone in the workspace. options replaces the whole list of choices; contacts keep values that are no longer a choice. When you rename a choice, send option_colors too so its colour moves with it; a colour for a choice that is gone is dropped. Send an empty description to clear it. memory changes only the settings you send; null puts them back to the defaults. Switching filled_by to agent needs accept_price_per_call, just like creating one. Switching it to person stops the charge for that field; anyone can do it. A field keeps its key and type for life: sending either returns 400 immutable_field. To change a type, archive the field and create a new one. An archived field cannot be changed (400 archived_key).

Memory columns

Set filled_by to agent and the field becomes a memory column: your agent remembers what the caller says in it, after each call. The description tells it what to listen for. A workspace can have up to 25 of these. Memory costs $0.01 for each call your agent remembers from, for all memory columns together, so a person approves the price every time a column starts remembering. Get price_per_call and estimated_monthly from Memory, show them to the person, and once they agree send the price as accept_price_per_call with filled_by agent. Without it, or with a different price, the request returns 409 price_not_accepted with the price and the estimate in details. Only any member of the workspace or an API key a person created (not a paired assistant’s key) can do this; anyone can change the other settings of a memory column, or switch it back to person. The field then shows the approval in memory, read-only:
If your plan’s price changes, the field pauses until someone accepts the new one: send accept_price_per_call on the field, or accept it for every paused column at once with POST /memory/accept-price. memory says when your agent may change a value: memory.agents says whose calls fill the field: "all" (the default, every agent, including ones you add later) or a list of agent ids from Memory, so only calls those agents answered fill it. An empty list is refused; send "all" instead. Agents you add must be in your workspace. If every listed agent is later deleted, the field pauses (agents_deleted) instead of switching to every agent. memory.source_action_ids links the field to post-call extractions your agents already run, so their answer fills it. Get them from Suggested Fields. Each value your agent remembers shows where it came from: the contact’s record has field_sources with the call and the caller’s own words, and its activity shows the same on each change. In HIPAA workspaces the words are never returned, only the call.

Suggested Fields

What your agents already pull out of calls, ready to become fields. Names a field already uses are left out.
Create one by sending name as the label, its type, options and description, with filled_by agent, memory.source_action_ids and accept_price_per_call.

Memory Status

Whether your agent is remembering a memory column, and how often. The numbers can be up to 5 minutes old.

Archive a Custom Field

Archiving hides the field everywhere. Nothing is deleted: contacts keep their values and the key stays taken. Archiving an archived field changes nothing.
value_count is how many contacts still hold a value for the field.