NHS Digital Slots API
The Slots API from NHS Digital — 1 operation(s) for slots.
The Slots API from NHS Digital — 1 operation(s) for slots.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/nhs-digital:nhs-digital-slots-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
description: This API forms part of the Booking and Referral Standard (BaRS).
version: 1.0.0
title: Booking and Referral Slots API
termsOfService: https://developer.nhs.uk/apis/uec-appointments
contact:
email: uec.appointmentbooking@nhs.net
url: https://developer.nhs.uk/apis/uec-appointments
name: NHS Digital
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://sandbox.api.service.nhs.uk/booking-and-referral/FHIR/R4
description: Sandbox Server
- url: https://int.api.service.nhs.uk/booking-and-referral/FHIR/R4
description: Production
- url: https://api.service.nhs.uk/booking-and-referral/FHIR/R4
description: Integration Server
security:
- OAuth_Token: []
tags:
- name: Slots
paths:
/Slot:
parameters:
- $ref: '#/components/parameters/RequestId_HParam'
- $ref: '#/components/parameters/CorrelationId_HParam'
- $ref: '#/components/parameters/TargetIdentifier_HParam'
- $ref: '#/components/parameters/RequestingOrganisation_HParam'
- $ref: '#/components/parameters/RequestingPractitioner_HParam'
- $ref: '#/components/parameters/RequestingDevice_HParam'
- $ref: '#/components/parameters/Accept_HParam'
get:
tags:
- Slots
summary: Get slots
description: '### Get available slots
A call to Slots is for querying a target endpoint for suitable slots to book a new Appointment into for a patient.
A request for slots support various filter parameters but requires the service identifier, slot status(es) and a timeframe to limit the search.
As documented in the NHS Booking Standard, a receiver assigns the service identifier to groups of slots, under a schedule, which ties schedules together for a particular service.'
operationId: getSlots
parameters:
- name: status
in: query
description: "Status values that need to be considered for filter. \n\nIf attempting to filter by multiple status' they must be separated with commas as opposed to defining the query parameter twice as defined in [FHIR Guidance](https://hl7.org/fhir/search.html#combining)\n\nFor example \"GET [base]/Slot?status=free,busy\". \n"
required: true
explode: true
schema:
type: array
items:
type: string
enum:
- free
- busy
default: free
- name: start
in: query
required: true
description: "Slot start date/time (yyyy-mm-ddThh:mm:ss+00:00).\nTo search for time windows within which Slots must start, use \"greater than\" and \"less than\" searching.\n\nFor example \"GET [base]/Slot?start=ge2022-03-01T12:00:00+00:00&start=le2022-03-01T13:30:00+00:00\". \nThe definition of the time window within which Slots are requested is provided by using this parameter twice.\nThe values must include an offset indicating UTC in the [FHIR dateTime format](https://www.hl7.org/fhir/datatypes.html#primitive). This is the case for all dateTimes in the BaRS standard.\n"
schema:
format: datetime
type: string
example: '2022-03-01T12:00:00+00:00'
- name: Schedule.actor:HealthcareService
in: query
required: false
description: 'A single service ID can be provided to indicate the service for which appointment slots are returned for.
'
schema:
type: string
example: '2000099999'
- name: _include
in: query
description: "Inclusions that drive the rescusive depth of the search. There is a minimum of the following _include parameters required for current Applications.\n* Slot:schedule\n* Schedule:actor:HealthcareService \n\n**Note**: Both _include and _revinclude share the same syntax - up to three components, separated by colon characters (:). \nUnlike search queries, this is not a FHIRPath expression\nThe full list of applicable _includes are shown below. If any cannot be honored the Receiver will respond, ignoring the unsupported _include(s), with the url reflecting this omission in the responses Bundle.link.url. \n\n|Expression | Inclusion |Description|\n|------- |-------- |-------- |\n| Slot:schedule | Schedule | Include Schedule Resources referenced within the Slot Resources|\n| Schedule:actor:Practitioner | Practitioner | Include Practitioner Resources referenced within the Schedule Resources|\n| Schedule:actor:PractitionerRole | PractitionerRole | Include Practitioner Role Resources referenced within the Schedule Resources |\n| Schedule:actor:HealthcareService | HealthcareService | Include HealthcareService Resources referenced within the Schedule Resources|\n| HealthcareService:providedBy | ProvidedBy | Include Organization Resources referenced within the HealthcareService Resources|\n| HealthcareService:location | Location | Include Location Resources referenced within the HealthcareService Resources|\n"
required: true
explode: true
schema:
type: array
items:
type: string
enum:
- Slot:schedule
- Schedule:actor:Practitioner
- Schedule:actor:PractitionerRole
- Schedule:actor:HealthcareService
- HealthcareService:providedBy
- HealthcareService:location
- Slot:*
responses:
'200':
description: Success. A full example of a Slot Searchset response can be found [here]( https://simplifier.net/NHSBookingandReferrals/777a156c-af3c-4748-a8a3-7e95e4b0df9a-duplicate-2).
content:
application/fhir+json:
schema:
$ref: '#/components/schemas/SearchBundleSlot'
example:
$ref: examples/slots/GET-success.json
application/fhir+xml:
schema:
$ref: '#/components/schemas/SearchBundleSlot'
headers:
X-Correlation-Id:
description: The X-Correlation-Id from the request header, if supplied, mirrored back.
schema:
type: string
format: uuid
example: 9562466f-c982-4bd5-bb0e-255e9f5e6689
X-Request-Id:
description: The X-Request-Id from the request header, if supplied, mirrored back.
schema:
type: string
format: uuid
example: c1ab3fba-6bae-4ba4-b257-5a87c44d4a91
4XX:
$ref: '#/components/responses/4XX-BARS'
5XX:
$ref: '#/components/responses/5XX-BARS'
components:
parameters:
RequestId_HParam:
name: X-Request-Id
description: The X-Request-Id for the request header, when supplied, mirrored back by the receiver.
required: true
in: header
schema:
type: string
format: uuid
example: c1ab3fba-6bae-4ba4-b257-5a87c44d4a91
Accept_HParam:
name: Accept
description: The Accept Header must also contain the version of the API required.
in: header
required: true
schema:
type: string
example: "'application/fhir+json; version=1.0.0' \n"
RequestingOrganisation_HParam:
name: NHSD-End-User-Organisation
description: "Requesting Organization described in an object based on a FHIR 'Organization' resource (Standard Base64 encoded JSON).\nDifferent BaRS Applications may have different standards and requirements for the Access Control which these headers are used for. \nIn the example given an ODS code and the Organisation name is provided. Other identifiers are permitted if required. \n"
required: true
in: header
schema:
$ref: '#/components/schemas/RequestingOrganisationToken'
CorrelationId_HParam:
name: X-Correlation-Id
description: The X-Correlation-Id for the request header, when supplied, mirrored back by the receiver.
required: true
in: header
schema:
type: string
format: uuid
example: 9562466f-c982-4bd5-bb0e-255e9f5e6689
RequestingDevice_HParam:
name: NHSD-Requesting-Software
description: "Requesting Software described in an object based on a FHIR 'Device' resource (Standard Base64 encoded JSON).\nDifferent BaRS Applications may have different standards and requirements for the Access Control which these headers are used for. \n\nThe identifier used, though arbitrary, should be consistent across instances of a product, the name and version of the product should also be accurate and consistent.\n"
required: true
in: header
schema:
$ref: '#/components/schemas/RequestingSoftwareToken'
TargetIdentifier_HParam:
name: NHSD-Target-Identifier
description: The identifier of the Target system. A Base64 encoded object containing value and system properties.
required: true
in: header
schema:
$ref: '#/components/schemas/TargetIdentifier'
RequestingPractitioner_HParam:
name: NHSD-Requesting-Practitioner
description: 'Requesting Practitioner described in an object based on a FHIR ''PractitionerRole'' resource (Standard Base64 encoded JSON).
This item is not mandatory, however if the information is available it must be included in the request. Only in the event that it is not available, should it be omitted.
The example given shows a General Practitioner and their SDS Role profile Id.
'
required: false
in: header
schema:
$ref: '#/components/schemas/RequestingPractitionerToken'
schemas:
RequestingPractitionerToken:
$ref: schemas/RequestingPractitioner.yaml
RequestingSoftwareToken:
$ref: schemas/RequestingSoftware.yaml
OperationalOutcome:
$ref: schemas/OperationalOutcome.yaml
TargetIdentifier:
$ref: schemas/TargetIdentifier.yaml
RequestingOrganisationToken:
$ref: schemas/RequestingOrganisation.yaml
SearchBundleSlot:
$ref: schemas/SearchBundleSlot.yaml
responses:
5XX-BARS:
description: "Below are examples of potential HTTP status codes and their associated error codes, which could be returned in the event of a fault. \nGuidance on error handling within BaRS can be found [here](https://simplifier.net/guide/nhsbookingandreferralstandard/Home/Design/Design--Core#Error-handling).\n\n| HTTP status | Error code | Description |\n| ----------- | -------------------------- | --------------------------------------------- |\n| 500 | REC_SERVER_ERROR | The receiver server has encountered an Error processing the request. |\n| 500 | PROXY_SERVER_ERROR | Proxy Error. |\n| 501 | SEND_NOT_IMPLEMENTED | The Request was not recognized. |\n| 501 | REC_NOT_IMPLEMENTED | The Receiver did not recognize the request. |\n| 501 | PROXY_NOT_IMPLEMENTED | The Proxy did not recognize the request. |\n| 503 | REC_UNAVAILABLE | The Receiver was unavailable to service the request.|\n| 503 | PROXY_UNAVAILABLE | The Proxy was unavailable to service the request. |\n"
content:
application/fhir+json:
schema:
$ref: '#/components/schemas/OperationalOutcome'
example:
$ref: examples/500-REC.json
headers:
X-Correlation-Id:
description: The X-Correlation-Id from the request header, if supplied, mirrored back.
schema:
type: string
format: uuid
example: 9562466f-c982-4bd5-bb0e-255e9f5e6689
X-Request-Id:
description: The X-Request-Id from the request header, if supplied, mirrored back.
schema:
type: string
format: uuid
example: c1ab3fba-6bae-4ba4-b257-5a87c44d4a91
4XX-BARS:
description: "Below are examples of potential HTTP status codes and their associated error codes, which could be returned in the event of a fault. \nGuidance on error handling within BaRS can be found [here](https://simplifier.net/guide/nhsbookingandreferralstandard/Home/Design/Design--Core#Error-handling).\n\n| HTTP status | Error code | Description |\n| ----------- | -------------------------- | --------------------------------------------- |\n| 400 | SEND_BAD_REQUEST | The API was unable to process the request. |\n| 400 | REC_BAD_REQUEST | The Receiver has responded stating the message was malformed. |\n| 401 | SEND_UNAUTHORIZED | The API deemed you unauthorized to make this request. |\n| 401 | REC_UNAUTHORIZED | The receiver deemed you unauthorized to make request. |\n| 403 | SEND_FORBIDDEN | Missing or Expired Token. |\n| 404 | PROXY_NOT_FOUND | No related people exist for given NHS number. |\n| 404 | REC_NOT_FOUND | Patient record for given NHS number has been invalidated and not superseded by another NHS number. |\n| 405 | SEND_METHOD_NOT_ALLOWED | HTTP Verb is not correct for this scenario.|\n| 405 | REC_METHOD_NOT_ALLOWED | Receiver does not allow this.|\n| 405 | PROXY_METHOD_NOT_ALLOWED | Proxy does not allow this.|\n| 406 | SEND_NOT_ACCEPTABLE | Senders message had an incorrect content type defined for a response.|\n| 408 | REC_TIMEOUT | The downstream domain processing has not completed within the configured timeout period. |\n| 409 | SEND_CONFLICT | |\n| 409 | REC_CONFLICT | |\n| 409 | PROXY_CONFLICT | |\n| 422 | SEND_UNPROCESSABLE_ENTITY | Message was not malformed but deemed unprocessable. |\n| 422 | REC_UNPROCESSABLE_ENTITY | Message was not malformed but deemed unprocessable. | \n| 422 | PROXY_UNPROCESSABLE_ENTITY | Message was not malformed but deemed unprocessable. | \n| 429 | SEND_TOO_MANY_REQUESTS | The user has sent too many requests in a given amount of time|\n| 429 | REC_TOO_MANY_REQUESTS | The user has sent too many requests in a given amount of time|\n"
content:
application/fhir+json:
schema:
$ref: '#/components/schemas/OperationalOutcome'
example:
$ref: examples/400-SEND.json
headers:
X-Correlation-Id:
description: The X-Correlation-Id from the request header, if supplied, mirrored back.
schema:
type: string
format: uuid
example: 9562466f-c982-4bd5-bb0e-255e9f5e6689
X-Request-Id:
description: The X-Request-Id from the request header, if supplied, mirrored back.
schema:
type: string
format: uuid
example: c1ab3fba-6bae-4ba4-b257-5a87c44d4a91
securitySchemes:
OAuth_Token:
type: http
scheme: bearer