SMART Scheduling Links
1.0.0 - STU 1 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 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: Slot

Official URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/smart-scheduling-slot Version: 1.0.0
Standards status: Trial-use Maturity Level: 2 Computable Name: SmartSchedulingSlot
Other Identifiers: OID:2.16.840.1.113883.4.642.40.91.42.10

Each line of the Slot File is a minified JSON object that conveys information about an appointment slot. Slots may carry fine-grained timing details (e.g. representing appointments at specific times of the day) or coarse-grained timing (e.g., "between 9 a.m. and 5 p.m." or "between noon and five p.m."). See Quick Start Guide in the specification for the normative expectations on timing granularity.

Example Usage Scenarios

The following are example usage scenarios for the SMART Scheduling Links Slot profile:

  • Find course-grained (e.g. 9a - 6p) slots for a given schedule
  • Find fine-grained slots for a given schedule
  • Filter available slots for whether they accept new and/or existing patients

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 Slot Must Have:

  • id
  • schedule
  • status
  • start
  • end

Each Slot Must Support:

  • booking deep link
  • booking phone number
  • patient type

Profile Specific Implementation Guidance:

A Slot published with "status": "free" is expected to be available for booking under the publisher's current business rules. Where a provider requires prerequisites to be met before an appointment can be booked — such as referrals, prior authorization, or specific patient eligibility criteria — a slot that does not satisfy those requirements is not a good candidate for publication as available. See Graceful Handling of Slot Invalidity in the specification for the normative expectations placed on Slot Publishers and Provider Booking Portals.

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
.. Slot 0..* Slot A slot of time on a schedule that may be available for booking appointments
... id SΣ 1..1 id Logical id of this artifact
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:bookingDeepLink S 0..1 url Booking Deep Link
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
.... extension:bookingPhone S 0..1 ContactPoint Booking Phone
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
.... extension:patientType S 1..1 Coding Patient Type
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/patient-type
... schedule SΣ 1..1 Reference(Schedule) The schedule resource that this slot defines an interval of status information
... status SΣ 1..1 code busy | free | busy-unavailable | busy-tentative | entered-in-error
Binding: SlotStatus (required): The free/busy status of the slot.
... start SΣ 1..1 instant Date/Time that the slot is to begin
... end SΣ 1..1 instant Date/Time that the slot is to conclude

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Slot.status Base required SlotStatus 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Slot If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Slot 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 Slot 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 Slot If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Slot 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
.. Slot 0..* Slot A slot of time on a schedule that may be available for booking appointments
... id S 1..1 id Logical id of this artifact
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:bookingDeepLink S 0..1 url Booking Deep Link
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
.... extension:bookingPhone S 0..1 ContactPoint Booking Phone
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
.... extension:patientType S 1..1 Coding Patient Type
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/patient-type
... schedule S 1..1 Reference(Schedule) The schedule resource that this slot defines an interval of status information
... start S 1..1 instant Date/Time that the slot is to begin
... end S 1..1 instant Date/Time that the slot is to conclude

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Slot 0..* Slot A slot of time on a schedule that may be available for booking appointments
... id SΣ 1..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
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:bookingDeepLink S 0..1 url Booking Deep Link
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
.... extension:bookingPhone S 0..1 ContactPoint Booking Phone
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
.... extension:patientType S 1..1 Coding Patient Type
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/patient-type
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier External Ids for this item
... serviceCategory Σ 0..* CodeableConcept A broad categorization of the service that is to be performed during this appointment
Binding: ServiceCategory (example)
... serviceType Σ 0..* CodeableConcept The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource
Binding: ServiceType (example)
... specialty Σ 0..* CodeableConcept The specialty of a practitioner that would be required to perform the service requested in this appointment
Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
... appointmentType Σ 0..1 CodeableConcept The style of appointment or patient that may be booked in the slot (not service type)
Binding: hl7VS-appointmentReasonCodes (preferred)
... schedule SΣ 1..1 Reference(Schedule) The schedule resource that this slot defines an interval of status information
... status SΣ 1..1 code busy | free | busy-unavailable | busy-tentative | entered-in-error
Binding: SlotStatus (required): The free/busy status of the slot.
... start SΣ 1..1 instant Date/Time that the slot is to begin
... end SΣ 1..1 instant Date/Time that the slot is to conclude
... overbooked 0..1 boolean This slot has already been overbooked, appointments are unlikely to be accepted for this time
... comment 0..1 string Comments on the slot to describe any extended information. Such as custom constraints on the slot

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Slot.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Slot.serviceCategory Base example Service category 📍4.0.1 FHIR Std.
Slot.serviceType Base example Service type 📍4.0.1 FHIR Std.
Slot.specialty Base preferred Practice Setting Code Value Set 📍4.0.1 FHIR Std.
Slot.appointmentType Base preferred hl7VS-appointmentReasonCodes 📦3.0.0 THO v7.4
Slot.status Base required SlotStatus 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Slot If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Slot 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 Slot 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 Slot If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Slot 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()

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Slot 0..* Slot A slot of time on a schedule that may be available for booking appointments
... id SΣ 1..1 id Logical id of this artifact
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:bookingDeepLink S 0..1 url Booking Deep Link
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
.... extension:bookingPhone S 0..1 ContactPoint Booking Phone
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
.... extension:patientType S 1..1 Coding Patient Type
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/patient-type
... schedule SΣ 1..1 Reference(Schedule) The schedule resource that this slot defines an interval of status information
... status SΣ 1..1 code busy | free | busy-unavailable | busy-tentative | entered-in-error
Binding: SlotStatus (required): The free/busy status of the slot.
... start SΣ 1..1 instant Date/Time that the slot is to begin
... end SΣ 1..1 instant Date/Time that the slot is to conclude

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Slot.status Base required SlotStatus 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Slot If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Slot 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 Slot 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 Slot If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Slot 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
.. Slot 0..* Slot A slot of time on a schedule that may be available for booking appointments
... id S 1..1 id Logical id of this artifact
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:bookingDeepLink S 0..1 url Booking Deep Link
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
.... extension:bookingPhone S 0..1 ContactPoint Booking Phone
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
.... extension:patientType S 1..1 Coding Patient Type
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/patient-type
... schedule S 1..1 Reference(Schedule) The schedule resource that this slot defines an interval of status information
... start S 1..1 instant Date/Time that the slot is to begin
... end S 1..1 instant Date/Time that the slot is to conclude

doco Documentation for this format

Snapshot ViewView

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Slot 0..* Slot A slot of time on a schedule that may be available for booking appointments
... id SΣ 1..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
... Slices for extension 1..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:bookingDeepLink S 0..1 url Booking Deep Link
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
.... extension:bookingPhone S 0..1 ContactPoint Booking Phone
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
.... extension:patientType S 1..1 Coding Patient Type
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/patient-type
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier External Ids for this item
... serviceCategory Σ 0..* CodeableConcept A broad categorization of the service that is to be performed during this appointment
Binding: ServiceCategory (example)
... serviceType Σ 0..* CodeableConcept The type of appointments that can be booked into this slot (ideally this would be an identifiable service - which is at a location, rather than the location itself). If provided then this overrides the value provided on the availability resource
Binding: ServiceType (example)
... specialty Σ 0..* CodeableConcept The specialty of a practitioner that would be required to perform the service requested in this appointment
Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
... appointmentType Σ 0..1 CodeableConcept The style of appointment or patient that may be booked in the slot (not service type)
Binding: hl7VS-appointmentReasonCodes (preferred)
... schedule SΣ 1..1 Reference(Schedule) The schedule resource that this slot defines an interval of status information
... status SΣ 1..1 code busy | free | busy-unavailable | busy-tentative | entered-in-error
Binding: SlotStatus (required): The free/busy status of the slot.
... start SΣ 1..1 instant Date/Time that the slot is to begin
... end SΣ 1..1 instant Date/Time that the slot is to conclude
... overbooked 0..1 boolean This slot has already been overbooked, appointments are unlikely to be accepted for this time
... comment 0..1 string Comments on the slot to describe any extended information. Such as custom constraints on the slot

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Slot.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Slot.serviceCategory Base example Service category 📍4.0.1 FHIR Std.
Slot.serviceType Base example Service type 📍4.0.1 FHIR Std.
Slot.specialty Base preferred Practice Setting Code Value Set 📍4.0.1 FHIR Std.
Slot.appointmentType Base preferred hl7VS-appointmentReasonCodes 📦3.0.0 THO v7.4
Slot.status Base required SlotStatus 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Slot If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Slot 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 Slot 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 Slot If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Slot 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()

 

Other representations of profile: CSV, Excel, Schematron

Notes:

Discussed extensively in February 2026 as captured in these confluence notes, but also during the 2026 CMS Connectathon in July. General options included:

  • being very opionated about modeling patient type in a new extension that is required
  • using an extension that is inspired by the 'characteristic' data element in R6/continuous build. This would function like a patient badge of sorts. We'd then slice on characteristic to model patient type.

In all scenarios discussed, the group agreed that slot.appointmentType was not ideal given the 0..1 cardinality and the fact that patient type is orothogonal to appointmentType as it could represent a variety of other things.

After discussions on 8/3/2026, we decided to use the simple extension for patient type. Opinions weren't overtly strong either way, but the fact that "patient type" was a concept used in a lot of places, we decided to keep our simple extension.