Skip to main content
Intakes capture patient intake forms as FHIR R4 QuestionnaireResponse resources — structured question-and-answer pairs that can be queried, versioned, and linked to encounters. Each item in an intake response corresponds to a question, and answers can be text, numbers, dates, booleans, coded values, or measurements.

Submit an intake form

const { data: intake } = await clinik.intakes.submit({
  patientId: 'pt_abc123',
  encounterId: 'enc_xyz789',
  questionnaire: 'https://forms.clinikapi.com/new-patient-intake',
  status: 'completed',
  items: [
    {
      linkId: 'chief-complaint',
      text: 'Primary reason for visit',
      answer: [{ valueString: 'Persistent headaches for 2 weeks' }],
    },
    {
      linkId: 'allergies',
      text: 'Known allergies',
      answer: [
        { valueString: 'Penicillin' },
        { valueString: 'Sulfa drugs' },
      ],
    },
    {
      linkId: 'current-medications',
      text: 'Current medications',
      answer: [
        { valueString: 'Lisinopril 10mg daily' },
        { valueString: 'Metformin 500mg twice daily' },
      ],
    },
    {
      linkId: 'pain-level',
      text: 'Current pain level (0-10)',
      answer: [{ valueInteger: 6 }],
    },
    {
      linkId: 'smoking-status',
      text: 'Smoking status',
      answer: [{
        valueCoding: {
          system: 'http://snomed.info/sct',
          code: '8517006',
          display: 'Former smoker',
        },
      }],
    },
  ],
});

Answer types

Each answer uses a typed value field:
TypeFieldExample
TextvalueString"Persistent headaches"
Yes/NovalueBooleantrue
NumbervalueInteger6
DecimalvalueDecimal98.6
DatevalueDate"2024-06-15"
Date-timevalueDateTime"2025-01-15T10:00:00Z"
CodedvalueCoding{ code: "8517006", display: "Former smoker" }
MeasurementvalueQuantity{ value: 165, unit: "lbs" }

Nested questions

Group related questions using nested items. This is useful for section headers like “Family Medical History” that contain sub-questions:
{
  linkId: 'family-history',
  text: 'Family Medical History',
  items: [
    {
      linkId: 'fh-diabetes',
      text: 'Family history of diabetes?',
      answer: [{ valueBoolean: true }],
    },
    {
      linkId: 'fh-heart-disease',
      text: 'Family history of heart disease?',
      answer: [{ valueBoolean: false }],
    },
  ],
}

Read an intake

const { data: intake } = await clinik.intakes.read('intake_abc123');

Amend an intake

To update answers after submission, set status: 'amended' and provide the revised items:
await clinik.intakes.update('intake_abc123', {
  status: 'amended',
  items: [
    {
      linkId: 'allergies',
      text: 'Known allergies',
      answer: [
        { valueString: 'Penicillin' },
        { valueString: 'Sulfa drugs' },
        { valueString: 'Latex' }, // newly reported
      ],
    },
  ],
});

Delete an intake

await clinik.intakes.delete('intake_abc123');

Status lifecycle

in-progress → completed → amended / stopped

Search intakes

const { data } = await clinik.intakes.search({
  patientId: 'pt_abc123',
  status: 'completed',
  sort: '-date',
});