Slot (FHIR R4)
FHIR You're viewing the FHIR R4 reference.
FHIR R4 Slot resource.
This reference is generated from the canonical Huli Public API OpenAPI specification and the server's FHIR R4 CapabilityStatement — do not edit it directly.
FHIR R4 Specification
Official spec: Slot — HL7 FHIR R4
Supported Interactions
- search-type — Search resources with query parameters (
GET /fhir/R4/{Resource}?...)
Scopes
Scopes are shared across FHIR releases — the same system/Slot.* scope grants Slot access on both /fhir/R4 and /fhir/R5.
- system/Appointment.rs — see scope reference
Search Parameters
| Parameter | Type | Notes |
|---|---|---|
schedule | reference | Resource reference — supply the UUID of the referenced resource. |
actor | reference | Resource reference — supply the UUID of the referenced resource. |
start | date | Supports FHIR date prefixes: eq, ne, gt, ge, lt, le. Format: [prefix]YYYY-MM-DD. |
end | date | Supports FHIR date prefixes: eq, ne, gt, ge, lt, le. Format: [prefix]YYYY-MM-DD. |
_count | number | Integer. For _count: default 20, max 100. |
_offset | number | Integer. For _count: default 20, max 100. |
Endpoints
Search Slot
Search Slot resources (available appointment slots). Results are returned as a FHIR searchset Bundle. This is a read-only discovery resource, gated by system/Appointment.rs because it supports appointment booking. Either schedule OR actor is required. The start/end window is expressed as date / RFC 3339 timestamps and is capped at a 31-day span.
GET
/fhir/R4/SlotRequired scope: system/Appointment.rs
Query Parameters
| name | type | required | description |
|---|---|---|---|
| schedule | string | optional | Filter by Schedule reference (UUID or `Schedule/<uuid>`). Either `schedule` or `actor` is required. |
| actor | string | optional | Filter by the actor (PractitionerRole/resource id; UUID or typed reference). Either `schedule` or `actor` is required. |
| start | string | optional | Start of the search window (date or RFC 3339 timestamp). |
| end | string | optional | End of the search window (date or RFC 3339 timestamp). The window between `start` and `end` is capped at 31 days. |
| _count | integer | optional | Number of results per page (default: 20, max: 100). |
| _offset | integer | optional | Number of results to skip (offset-based pagination). |
Response — 200
{
"resourceType": "Bundle",
"type": "searchset",
"total": 1,
"entry": [
{
"fullUrl": "Slot/220e8400-e29b-41d4-a716-446655440110",
"resource": {
"resourceType": "Slot",
"id": "220e8400-e29b-41d4-a716-446655440110",
"schedule": {
"reference": "Schedule/110e8400-e29b-41d4-a716-446655440100"
},
"status": "free",
"start": "2026-06-15T10:00:00Z",
"end": "2026-06-15T10:30:00Z"
},
"search": {
"mode": "match"
}
}
]
}
Code Samples
TOKEN=$(curl -s -X POST https://api.huli.ai/auth/token \
-d "grant_type=client_credentials" \
-d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" \
-d "client_assertion=${CLIENT_ASSERTION}" \
-d "scope=system/Appointment.rs" \
| jq -r .access_token)
curl -X GET https://api.huli.ai/fhir/R4/Slot \
-H "Authorization: Bearer ${TOKEN}"
const token = process.env.HULI_ACCESS_TOKEN ?? "";
const response = await fetch(
`https://api.huli.ai/fhir/R4/Slot`,
{
method: "GET",
headers: {
"Authorization": `Bearer ${token}`,
},
}
);
if (!response.ok) throw new Error(`HTTP ${String(response.status)}`);
const data: unknown = await response.json();
import os
import requests
token = os.environ["HULI_ACCESS_TOKEN"]
headers = {"Authorization": f"Bearer {token}"}
resp = requests.get(
f"https://api.huli.ai/fhir/R4/Slot",
headers=headers,
)
resp.raise_for_status()
print(resp.json())
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class searchSlotExample {
public static void main(String[] args) throws Exception {
String token = System.getenv("HULI_ACCESS_TOKEN");
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.huli.ai/fhir/R4/Slot"))
.header("Authorization", "Bearer " + token)
.header("Accept", "application/fhir+json")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response =
client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("status: " + response.statusCode());
System.out.println(response.body());
}
}
import (
"fmt"
"net/http"
"os"
)
func searchSlotExample() {
token := os.Getenv("HULI_ACCESS_TOKEN")
req, _ := http.NewRequest("GET", "https://api.huli.ai/fhir/R4/Slot", nil)
req.Header.Set("Authorization", "Bearer "+token)
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Println("error:", err)
return
}
defer resp.Body.Close()
fmt.Println("status:", resp.Status)
}
Errors
| Code | Status | Description |
|---|---|---|
| HPB-00106 | 401 | Authentication failed |
| HPB-00104 | 403 | Insufficient scope |
| HPB-00105 | 429 | Rate limit exceeded |