Skip to main content

clinik.practitionerRoles

PractitionerRole defines the role a practitioner plays at a specific organization or location — their specialty, availability, and contact info in that context. A single practitioner can have multiple roles (e.g. cardiologist at Hospital A, consultant at Clinic B).

create

const { data, meta } = await clinik.practitionerRoles.create(request: PractitionerRoleCreateRequest): Promise<ApiResponse<PractitionerRole>>
FieldTypeRequiredDescription
practitionerIdstringYesReference to the Practitioner
organizationNamestringNoOrganization name
rolestringYesRole code (e.g. “doctor”, “nurse”, “admin”)
specialtystring[]NoSpecialties in this role
locationNamestringNoLocation/facility name
phonestringNoContact phone for this role
emailstringNoContact email for this role
periodobjectNoPeriod during which the role is valid ({ start, end })
availableTimeArrayNoMultiple availability schedules (see below)
notAvailableArrayNoPeriods when the practitioner is not available
availabilityExceptionsstringNoFree-text description of availability exceptions
availableDaysstring[]NoLegacy: days available (mon-sun). Use availableTime instead.
availableStartTimestringNoLegacy: start time (HH:mm:ss). Use availableTime instead.
availableEndTimestringNoLegacy: end time (HH:mm:ss). Use availableTime instead.

Available Time

Each entry in availableTime supports:
FieldTypeDescription
daysOfWeekstring[]Days: mon, tue, wed, thu, fri, sat, sun
allDaybooleanWhether available all day (24h)
availableStartTimestringStart time (HH:mm:ss)
availableEndTimestringEnd time (HH:mm:ss)

Not Available

Each entry in notAvailable supports:
FieldTypeRequiredDescription
descriptionstringYesReason (e.g. “On vacation”, “Conference”)
duringobjectNoPeriod: { start, end }

Example

const { data } = await clinik.practitionerRoles.create({
  practitionerId: 'prac_abc123',
  organizationName: 'Austin Heart Clinic',
  role: 'doctor',
  specialty: ['Cardiology', 'Interventional Cardiology'],
  locationName: 'Main Campus - Building A',
  phone: '+1-555-0100',
  email: '[email protected]',
  period: { start: '2024-01-01' },
  availableTime: [
    {
      daysOfWeek: ['mon', 'tue', 'wed', 'thu', 'fri'],
      availableStartTime: '08:00:00',
      availableEndTime: '17:00:00',
    },
    {
      daysOfWeek: ['sat'],
      availableStartTime: '09:00:00',
      availableEndTime: '12:00:00',
    },
  ],
  notAvailable: [
    {
      description: 'Annual medical conference',
      during: { start: '2025-03-10', end: '2025-03-14' },
    },
  ],
  availabilityExceptions: 'Closed on public holidays',
});

read

const { data, meta } = await clinik.practitionerRoles.read(id: string): Promise<ApiResponse<PractitionerRole>>

update

const { data, meta } = await clinik.practitionerRoles.update(id: string, request: PractitionerRoleUpdateRequest): Promise<ApiResponse<PractitionerRole>>
await clinik.practitionerRoles.update('role_xyz789', {
  availableDays: ['mon', 'wed', 'fri'],
  availableStartTime: '09:00',
  availableEndTime: '16:00',
  active: false, // deactivate this role
});

delete

const { data, meta } = await clinik.practitionerRoles.delete(id: string): Promise<ApiResponse<void>>
const { data, meta } = await clinik.practitionerRoles.search(params?: ResourceSearchParams): Promise<ApiResponse<PaginatedResponse<PractitionerRole>>>
ParameterTypeDescription
patientIdstringNot applicable — use other filters
statusstringFilter by active status
countnumberResults per page (max: 100)
cursorstringPagination cursor