Skip to content
Docs menu

Properties

Custom fields per object type. Drives custom inputs in the UI and adds keys to API payloads.

Property types: TEXT, RICH_TEXT, NUMBER, DATE, DATETIME, BOOL, DROPDOWN, MULTI_SELECT, CURRENCY, URL, EMAIL, PHONE, CALCULATED, FILE. Mark sensitive fields isPhi: true — ContactFollowUp will encrypt them at rest and audit reads.

POST/api/propertiesBearer token (ADMIN/MANAGER)

Create a property

Add a new custom field. ADMIN or MANAGER only.

Required scopes:users.manage

Request body

NameTypeDescription
objectTyperequiredstringCONTACT | COMPANY | DEAL | TICKET | ACTIVITY.
keyrequiredstringProgrammatic key. 1–64 chars.
labelrequiredstringHuman label.
typerequiredstringProperty type — see list above.
requiredbooleanWhether the UI enforces a value.
defaultValuestringDefault value.
optionsOption[]For DROPDOWN / MULTI_SELECT — [{ value, label }].
formulaobjectFor CALCULATED only.
groupNamestringUI group label.
displayOrderintegerSort order. 0–999.
isPhibooleanEncrypt at rest and audit reads.

Request body

JSON
{ "objectType": "CONTACT", "key": "preferred_pronoun", "label": "Preferred pronoun", "type": "DROPDOWN" }

Responses

  • 201 CreatedCreated.
    example
    {
      "id": "pr_8q4w2k…",
      "objectType": "CONTACT",
      "key": "preferred_pronoun",
      "label": "Preferred pronoun",
      "type": "DROPDOWN",
      "required": false,
      "options": [
        { "value": "she", "label": "she/her" },
        { "value": "he", "label": "he/him" },
        { "value": "they", "label": "they/them" }
      ],
      "groupName": "Demographics",
      "displayOrder": 10,
      "isPhi": false,
      "createdAt": "2026-05-18T14:00:00Z"
    }

Code samples

Shell
curl -X POST https://app.contactfollowup.com/api/properties \
  -H "Authorization: Bearer $HEARTHNOTE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "objectType": "CONTACT", "key": "preferred_pronoun", "label": "Preferred pronoun", "type": "DROPDOWN" }'
GET/api/propertiesBearer token

List property definitions

Definitions for one or all object types.

Required scopes:contacts.read

Query parameters

NameTypeDescription
objectTypestringRestrict to one object type.

Responses

  • 200 OKDefinitions.
    example
    { "properties": [{
      "id": "pr_8q4w2k…",
      "objectType": "CONTACT",
      "key": "preferred_pronoun",
      "label": "Preferred pronoun",
      "type": "DROPDOWN",
      "required": false,
      "options": [
        { "value": "she", "label": "she/her" },
        { "value": "he", "label": "he/him" },
        { "value": "they", "label": "they/them" }
      ],
      "groupName": "Demographics",
      "displayOrder": 10,
      "isPhi": false,
      "createdAt": "2026-05-18T14:00:00Z"
    }] }

Code samples

Shell
curl -X GET https://app.contactfollowup.com/api/properties \
  -H "Authorization: Bearer $HEARTHNOTE_TOKEN" \
  -H "Content-Type: application/json"