Custom fields
Add your own fields to contacts — in the dashboard or through the API — and fill them in.
Every workspace can add up to 50 custom fields to its contacts: a plan, a seat count, a renewal date, a region. Once a field exists, every contact can hold a value for it: you fill it in on the contact in the dashboard, or set it through the API.
A field has a label (what people see, e.g. Pricing plan), a type, and a key made from the label when it's created (e.g. pricing_plan). The key is what the API uses. The key and the type never change; you can rename a field and edit a dropdown's options at any time.
Field types
| Type | Shown as | Holds | Example value |
|---|---|---|---|
TEXT | Text | Up to 500 characters | "Berlin office" |
LONG_TEXT | Long text | Up to 5,000 characters | "Evaluating us against…" |
NUMBER | Number | Any number | 25 |
DATE | Date | A calendar date, YYYY-MM-DD | "2026-11-30" |
SELECT | Dropdown | One of the field's options | "Pro" |
CHECKBOX | Checkbox | true or false | true |
URL | Link | A web address; https:// is added if missing | "https://northwind.io/pricing" |
Creating a field
Managers and the owner can add fields:
Open the fields
Go to Contacts and click Fields at the top of the page. The Contact fields panel lists the fields you have.
Add a field
Under the list, enter the field's name, e.g. Plan, and choose its type. For a Dropdown, enter its options one per line, e.g. Free, Pro, Enterprise. Click Add field.
Fill it in
The field now appears on every contact. Open a contact to fill in their value. Its key for the API is made from the name — here plan — and you can see every key by listing fields.
To rename a field or change a dropdown's options, click its pencil in the same panel. Deleting a field removes its value from every contact. Members can see fields but only managers and the owner can change them.
Values on contacts
Set values in a contact's customFields, keyed by field key, when you create or update it:
{
"email": "jane@northwind.io",
"customFields": { "plan": "Pro", "seats": 25, "renewal_date": "2026-11-30", "champion": true }
}- Each value is checked against its field's type, and a wrong one is refused with
400naming the field, e.g. Plan: must be one of Free, Pro, Enterprise. - An unknown key is refused too, so a typo never goes unnoticed.
- On update, only the keys you send change. Send
null(or"") to clear one. - Contacts are returned with every value they have; fields with no value are left out.