SMART Scheduling Links
1.0.0-ballot - STU 1 Ballot

SMART Scheduling Links, published by HL7 International / Patient Administration. This guide is not an authorized publication; it is the continuous build for version 1.0.0-ballot built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/smart-scheduling-links/ and changes regularly. See the Directory of published versions

## Resource Profile: Schedule

Official URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/smart-scheduling-schedule | Version: 1.0.0-ballot | Highlight text changes?
Standards status: Trial-use Active as of 2026-04-22 | Maturity Level: 2 | Computable Name: SmartSchedulingSchedule

Each line of the Schedule File is a minified JSON object that conveys information about a Schedule to which slots are attached. The Schedule represents a particular healthcare service (e.g., primary care appointments, specialist consultations, or procedures) offered at a specific location or by a specific practitioner role.

Example Usage Scenarios

Schedules can reference multiple actors in the actor array to provide more specific context about the healthcare service. Common patterns include:

- Location-only schedules: Reference only a Location resource, indicating that appointments are available at that location but not tied to a specific practitioner role.
- PractitionerRole-only schedules: Reference only a PractitionerRole resource, indicating appointments with that specific practitioner role regardless of location.
- Location and PractitionerRole schedules: Reference both Location and PractitionerRole resources, indicating appointments for a specific practitioner role at a specific location. This is useful for:
  - Multi-location practices where practitioner roles work at different sites
  - Specialty clinics where specific practitioner roles provide services at designated locations
  - Healthcare systems where practitioner role schedules vary by location

### Mandatory and Must Support Data Elements

The following data elements must always be present or must be supported if the data is present in the sending system. They are presented below in a simple human-readable explanation. Profile specific guidance and examples are provided as well. The Formal Views below provides the formal summary, definitions, and terminology requirements.

Each Schedule Must Have:

- a serviceType
- at least one actor

Each Schedule Must Support:

- a display for the actor

Usages:

- Examples for this Profile: Schedule/ExampleSchedule

You can also check for usages in the FHIR IG Statistics

### Formal Views of Profile Content

Description Differentials, Snapshots, and other representations.

- Key Elements Table
- Differential Table
- Snapshot Table
- Statistics/References
- All

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
active | ?!Σ | 0..1 | boolean | Whether this schedule is in active use
serviceType | S Σ | 1..* | CodeableConcept | Specific service Binding: ServiceType (example)
actor | S Σ | 1..* | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location) | Resource(s) that availability information is being provided for
reference | S Σ C | 1..1 | string | Literal reference, Relative, internal or absolute URL
display | S Σ | 0..1 | string | Text alternative for the resource
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Schedule.serviceType | Base | example | Service type | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Schedule | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Schedule | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Schedule | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments
serviceType | S | 1..* | CodeableConcept | Specific service
actor | S | 1..* | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location) | Resource(s) that availability information is being provided for
reference | S | 1..1 | string | Literal reference, Relative, internal or absolute URL
display | S | 0..1 | string | Text alternative for the resource
Documentation for this format

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
language |  | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
text |  | 0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements
contained |  | 0..* | Resource | Contained, inline Resources
extension |  | 0..* | Extension | Additional content defined by implementations
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
identifier | Σ | 0..* | Identifier | External Ids for this item
active | ?!Σ | 0..1 | boolean | Whether this schedule is in active use
serviceCategory | Σ | 0..* | CodeableConcept | High-level category Binding: ServiceCategory (example)
serviceType | S Σ | 1..* | CodeableConcept | Specific service Binding: ServiceType (example)
specialty | Σ | 0..* | CodeableConcept | Type of specialty needed Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
actor | S Σ | 1..* | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location) | Resource(s) that availability information is being provided for
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url
reference | S Σ C | 1..1 | string | Literal reference, Relative, internal or absolute URL
type | Σ | 0..1 | uri | Type the reference refers to (e.g. "Patient") Binding: ResourceType (extensible): Aa resource (or, for logical models, the URI of the logical model).
identifier | Σ | 0..1 | Identifier | Logical reference, when literal reference is not known
display | S Σ | 0..1 | string | Text alternative for the resource
planningHorizon | Σ | 0..1 | Period | Period of time covered by schedule
comment |  | 0..1 | string | Comments on availability
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Schedule.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Schedule.serviceCategory | Base | example | Service category | 📍4.0.1 | FHIR Std.
Schedule.serviceType | Base | example | Service type | 📍4.0.1 | FHIR Std.
Schedule.specialty | Base | preferred | Practice Setting Code Value Set | 📍4.0.1 | FHIR Std.
Schedule.actor.type | Base | extensible | ResourceType | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Schedule | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Schedule | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Schedule | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

Summary

Mandatory: 2 elements
Must-Support: 4 elements

Maturity: 2

Key Elements View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
active | ?!Σ | 0..1 | boolean | Whether this schedule is in active use
serviceType | S Σ | 1..* | CodeableConcept | Specific service Binding: ServiceType (example)
actor | S Σ | 1..* | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location) | Resource(s) that availability information is being provided for
reference | S Σ C | 1..1 | string | Literal reference, Relative, internal or absolute URL
display | S Σ | 0..1 | string | Text alternative for the resource
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Schedule.serviceType | Base | example | Service type | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Schedule | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Schedule | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Schedule | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

Differential View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments
serviceType | S | 1..* | CodeableConcept | Specific service
actor | S | 1..* | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location) | Resource(s) that availability information is being provided for
reference | S | 1..1 | string | Literal reference, Relative, internal or absolute URL
display | S | 0..1 | string | Text alternative for the resource
Documentation for this format

Snapshot ViewView

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
language |  | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
text |  | 0..1 | Narrative | Text summary of the resource, for human interpretation This profile does not constrain the narrative in regard to content, language, or traceability to data elements
contained |  | 0..* | Resource | Contained, inline Resources
extension |  | 0..* | Extension | Additional content defined by implementations
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
identifier | Σ | 0..* | Identifier | External Ids for this item
active | ?!Σ | 0..1 | boolean | Whether this schedule is in active use
serviceCategory | Σ | 0..* | CodeableConcept | High-level category Binding: ServiceCategory (example)
serviceType | S Σ | 1..* | CodeableConcept | Specific service Binding: ServiceType (example)
specialty | Σ | 0..* | CodeableConcept | Type of specialty needed Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
actor | S Σ | 1..* | Reference(Patient | Practitioner | PractitionerRole | RelatedPerson | Device | HealthcareService | Location) | Resource(s) that availability information is being provided for
id |  | 0..1 | string | Unique id for inter-element referencing
extension |  | 0..* | Extension | Additional content defined by implementations Slice: Unordered, Open by value:url
reference | S Σ C | 1..1 | string | Literal reference, Relative, internal or absolute URL
type | Σ | 0..1 | uri | Type the reference refers to (e.g. "Patient") Binding: ResourceType (extensible): Aa resource (or, for logical models, the URI of the logical model).
identifier | Σ | 0..1 | Identifier | Logical reference, when literal reference is not known
display | S Σ | 0..1 | string | Text alternative for the resource
planningHorizon | Σ | 0..1 | Period | Period of time covered by schedule
comment |  | 0..1 | string | Comments on availability
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Schedule.language | Base | preferred | Common Languages | 📍4.0.1 | FHIR Std.
Schedule.serviceCategory | Base | example | Service category | 📍4.0.1 | FHIR Std.
Schedule.serviceType | Base | example | Service type | 📍4.0.1 | FHIR Std.
Schedule.specialty | Base | preferred | Practice Setting Code Value Set | 📍4.0.1 | FHIR Std.
Schedule.actor.type | Base | extensible | ResourceType | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
dom-2 | error | Schedule | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | Schedule | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource | `contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()`
dom-4 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated | `contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()`
dom-5 | error | Schedule | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | Schedule | A resource should have narrative for robust management | `text.`div`.exists()`
ele-1 | error | **ALL** elements | All FHIR elements must have a @value or children | `hasValue() or (children().count() > id.count())`
ext-1 | error | **ALL** extensions | Must have either extensions or value[x], not both | `extension.exists() != value.exists()`

Summary

Mandatory: 2 elements
Must-Support: 4 elements

Maturity: 2

Other representations of profile: CSV, Excel, Schematron