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

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

Each line of the Slot File is a minified JSON object that conveys information about an appointment slot. Publishers are encouraged to represent slots with fine-grained timing details (e.g. representing appointments at specific times of the day), but MAY represent slots with coarse grained timing (e.g., "between 9 a.m. and 5 p.m." or "between noon and five p.m.").

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:

- appointmentType
- booking deep link
- booking phone number

Profile Specific Implementation Guidance:

When publishing a Slot with `"status": "free"`, Publishers should ensure that the Slot is in fact available for booking, given current business rules. For example, if a provider requires certain prerequisites to be met before an appoinmtnet can be booked (such as referrals, prior authorization, or specific patient elgibility criteria), then the provider SHOULD NOT advertise the slot as available unless those requirements are satisfied.

Usages:

- Examples for this Profile: Slot/AcceptNewAndExistingPatients, Slot/AcceptOnlyExistingPatients and Slot/ExampleSlot

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
--- | --- | --- | --- | ---
Slot |  | 0..* | Slot | A slot of time on a schedule that may be available for booking appointments
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:bookingDeepLink |  | 0..1 | url | Booking Deep Link URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
extension:bookingPhone |  | 0..1 | string | Booking Phone URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
appointmentType | S Σ | 0..1 | CodeableConcept | The style of appointment or patient that may be booked in the slot (not service type) Binding: Appointment Type and Reasons (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
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Slot.appointmentType | Base | preferred | Appointment Type and Reasons | 📦1.0.0-ballot | This IG
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()`

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Slot |  | 0..* | Slot | A slot of time on a schedule that may be available for booking appointments
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:bookingDeepLink |  | 0..1 | url | Booking Deep Link URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
extension:bookingPhone |  | 0..1 | string | Booking Phone URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
appointmentType | S | 0..1 | CodeableConcept | The style of appointment or patient that may be booked in the slot (not service type) Binding: Appointment Type and Reasons (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
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
Documentation for this format

#### Terminology Bindings (Differential)

Path | Status | Usage | ValueSet | Version | Source
Slot.appointmentType | Base | preferred | Appointment Type and Reasons | 📦1.0.0-ballot | This IG

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Slot |  | 0..* | Slot | A slot of time on a schedule 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
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:bookingDeepLink |  | 0..1 | url | Booking Deep Link URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
extension:bookingPhone |  | 0..1 | string | Booking Phone URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
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 | S Σ | 0..1 | CodeableConcept | The style of appointment or patient that may be booked in the slot (not service type) Binding: Appointment Type and Reasons (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
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 | Appointment Type and Reasons | 📦1.0.0-ballot | This IG
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()`

Summary

Must-Support: 5 elements

Extensions

This structure refers to these extensions:

- http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
- http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone

Maturity: 2

Key Elements View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Slot |  | 0..* | Slot | A slot of time on a schedule that may be available for booking appointments
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:bookingDeepLink |  | 0..1 | url | Booking Deep Link URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
extension:bookingPhone |  | 0..1 | string | Booking Phone URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored
appointmentType | S Σ | 0..1 | CodeableConcept | The style of appointment or patient that may be booked in the slot (not service type) Binding: Appointment Type and Reasons (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
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
Slot.appointmentType | Base | preferred | Appointment Type and Reasons | 📦1.0.0-ballot | This IG
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

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Slot |  | 0..* | Slot | A slot of time on a schedule that may be available for booking appointments
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:bookingDeepLink |  | 0..1 | url | Booking Deep Link URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
extension:bookingPhone |  | 0..1 | string | Booking Phone URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
appointmentType | S | 0..1 | CodeableConcept | The style of appointment or patient that may be booked in the slot (not service type) Binding: Appointment Type and Reasons (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
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
Documentation for this format

#### Terminology Bindings (Differential)

Path | Status | Usage | ValueSet | Version | Source
Slot.appointmentType | Base | preferred | Appointment Type and Reasons | 📦1.0.0-ballot | This IG

Snapshot ViewView

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Slot |  | 0..* | Slot | A slot of time on a schedule 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
Slices for extension |  | 0..* | Extension | Extension Slice: Unordered, Open by value:url
extension:bookingDeepLink |  | 0..1 | url | Booking Deep Link URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
extension:bookingPhone |  | 0..1 | string | Booking Phone URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone
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 | S Σ | 0..1 | CodeableConcept | The style of appointment or patient that may be booked in the slot (not service type) Binding: Appointment Type and Reasons (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
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 | Appointment Type and Reasons | 📦1.0.0-ballot | This IG
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()`

Summary

Must-Support: 5 elements

Extensions

This structure refers to these extensions:

- http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-deep-link
- http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/booking-phone

Maturity: 2

Other representations of profile: CSV, Excel, Schematron