Skip to content
Docs menu

Intake forms

PHI-aware patient-facing forms that gate visits. Submitted answers encrypt at rest and audit on read.

Field types: text, longtext, number, date, boolean, select, multiselect, signature. Mark a field phi: true to opt into the encryption + audit guarantees.

POST/api/intake-formsBearer token

Create an intake form

ADMIN/MANAGER only. Forms are immediately usable once isActive is true.

Required scopes:users.manage

Request body

NameTypeDescription
namerequiredstringForm name.
fieldsrequiredField[]≥ 1 field with key/label/type/required.
requireBeforeApptbooleanBlock visits until the patient submits.
expirationDaysintegerRe-require after this many days. 1–3650.
isActivebooleanActive flag.

Request body

JSON
{ "name": "Annual physical intake", "fields": [{ "key": "primary_concern", "label": "Primary concern", "type": "longtext", "required": true }] }

Responses

  • 201 CreatedCreated.
    example
    {
      "id": "if_3k9w2x…",
      "name": "Annual physical intake",
      "fields": [
        { "key": "primary_concern", "label": "Primary concern", "type": "longtext", "required": true, "phi": true }
      ],
      "requireBeforeAppt": true,
      "expirationDays": 365,
      "isActive": true,
      "createdAt": "2026-05-18T14:00:00Z"
    }

Code samples

Shell
curl -X POST https://app.contactfollowup.com/api/intake-forms \
  -H "Authorization: Bearer $HEARTHNOTE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Annual physical intake", "fields": [{ "key": "primary_concern", "label": "Primary concern", "type": "longtext", "required": true }] }'
GET/api/intake-formsBearer token

List intake forms

Active and inactive intake forms.

Required scopes:contacts.read

Query parameters

NameTypeDescription
activebooleanRestrict to active forms.

Responses

  • 200 OKForms.
    example
    { "intakeForms": [{
      "id": "if_3k9w2x…",
      "name": "Annual physical intake",
      "fields": [
        { "key": "primary_concern", "label": "Primary concern", "type": "longtext", "required": true, "phi": true }
      ],
      "requireBeforeAppt": true,
      "expirationDays": 365,
      "isActive": true,
      "createdAt": "2026-05-18T14:00:00Z"
    }] }

Code samples

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