SMART Scheduling Links
1.0.0-ballot - STU 1 Ballot International flag

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
Standards status: Trial-use Active as of 2026-04-01 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:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description Differentials, Snapshots, and other representations.

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. 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
... 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

doco 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()

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. 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

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. 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
... 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

doco 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

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. 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
... 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

doco 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

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. 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

doco Documentation for this format

Snapshot ViewView

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. 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
... 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

doco 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