Azure API for FHIR will be retired on September 30, 2026. Follow the migration strategies to transition to Azure Health Data Services FHIR service by that date. Due to the retirement of Azure API for FHIR, new deployments won't be allowed beginning April 1, 2025.
Azure Health Data Services FHIR service is the evolved version of Azure API for FHIR that enables customers to manage FHIR, DICOM, and MedTech services with integrations into other Azure services.
Azure API for FHIR provides a fully managed deployment of the Microsoft FHIR Server for Azure. The server is an implementation of the FHIR standard. This document provides details about the features and enhancements made to Azure API for FHIR.
Concurrent execution of queries with conditional interactions
Conditional interactions can be complex and performance-intensive. To enhance the latency of queries involving conditional interactions, you have the option to utilize the request header x-conditionalquery-processing-logic. For more information, see Performance considerations for conditional API interactions.
Additional capabilities added to the Export operation
$export operation now supports exporting versioned resources and soft deleted resources. For more information, see Export query parameters.
Bulk delete capability now available
`$bulk-delete' allows you to delete resources from FHIR server asynchronously. Bulk delete operation can be executed at system level or for individual resource type. For more information, see bulk-delete operation.
Bulk delete operation is currently in public preview. Review disclaimer for details. [!INCLUDE public preview disclaimer]
Bug Fix: FHIR queries using pagination and revinclude resulted in an error on using next link
Issue is now addressed and FHIR queries using continuation token with include/ revinclude, no longer report an exception. For details on fix, visit #3525.
Feature enhancement: Change to the exported file name format
FHIR service enables customers to export data with $export operation. Export can be conducted across various levels, such as System, Patient and Group of patients. There are name changes with exported file and default storage account name.
Exported file names will follow the format <FHIR Resource Name>-<Number>- <Number>.ndjson. The order of the files is not guaranteed to correspond to any ordering of the resources in the database.
Default storage account name is updated to Export-<Number>.
There is no change to number of resources added in individual exported files.
Bug Fix: Metadata endpoint URL in capability statement is relative URL
Per FHIR specification, metadata endpoint URL in capability statement needs to be an absolute URL.
For details on FHIR specification, visit Capability Statement. This fanix addresses the issue, for details visit 3265.
SMART on FHIR : Fixed clinical scope mapping for applications
This bug fix addresses issue with clinical scope not interpreted correctly for backend applications.
For more details, visit #3250
Fixed transient issues associated with loading custom search parameters
This bug fix address the issue, where the FHIR service would not load the latest SearchParameter status in event of failure.
For more details, visit #3222
Fixed the Error generated when resource is updated using if-match header and PATCH
Bug is now fixed and Resource will be updated if matches the Etag header. For details , see #2877|
Azure API for FHIR does not create a new version of the resource if the resource content has not changed.
If a user updates an existing resource and only meta.versionId or meta.lastUpdated have changed then we return OK with existing resource information without updating VersionId and lastUpdated. For more information, see #2519.
FHIRPath Patch was added as a feature to both the Azure API for FHIR. This implements FHIRPath Patch as defined on the HL7 website.
Move Bundle notification to Core
With the introduction of the Resource.Bundle namespace to Core, the Resource references to the string resources file had to be made more explicit. For more information, see PR #2478.
Handles invalid header on versioned update
When the versioning policy is set to "versioned-update", we required that the most recent version of the resource is provided in the request's if-match header on an update. The specified version must be in ETag format. Previously, a 500 would be returned if the version was invalid or in an incorrect format. This update now returns a 400 Bad Request. For more information, see PR #2467.
Adds core to resource path
Part of the path to a string resource was accidentally removed in the versioning policy. This fix adds it back in. For more information, see PR #2470.
SQL timeout is returning a 500 error
Fixed a bug when a SQL request hits a timeout and the request returns a 500. In the logs, this is a timeout from SQL compared to getting a 429 error from front end. For more information, see PR #2497.
Fixed issue where a single resource can be returned twice in a search that has _include. For more information, see PR #2448.
PUT creates on versioned update
Fixed issue where creates with PUT resulted in an error when the versioning policy is configured to versioned-update. For more information, see PR #2457.
Invalid header handling on versioned update
Fixed issue where invalid if-match header would result in an HTTP 500 error. Now an HTTP Bad Request is returned instead. For more information, see PR #2467.
Features and enhancements
Added 429 retry and logging in BundleHandler
We sometimes encounter 429 errors when processing a bundle. If the FHIR service receives a 429 at the BundleHandler layer, we abort processing of the bundle and skip the remaining resources. We've added another retry (in addition to the retry present in the data store layer) that will execute one time per resource that encounters a 429. For more about this feature enhancement, see PR #2400.
Billing for $convert-data and $de-id
Azure API for FHIR's data conversion and de-identified export features are now Generally Available. Billing for $convert-data and $de-id operations in Azure API for FHIR has been enabled. Billing meters were turned on March 1, 2022.
Update compartment search index
There was a corner case where the compartment search index wasn't being set on resources. Now we use the same index as the main search for compartment search to ensure all data is being returned. For more about the code fix, see PR #2430.
Features and enhancements
Added Publisher to CapabiilityStatement.name
You can now find the publisher in the capability statement at CapabilityStatement.name. #2319
Log FhirOperation linked to anonymous calls to Request metrics
We weren’t logging operations that didn’t require authentication. We extended the ability to get FhirOperation type in RequestMetrics for anonymous calls. #2295
Fixed 500 error when SearchParameter Code is null
Fixed an issue with SearchParameter if it had a null value for Code, the result would be a 500. Now it will result in an InvalidResourceException like the other values do. #2343
Returned BadRequestException with valid message when input JSON body is invalid
For invalid JSON body requests, the FHIR server was returning a 500 error. Now we'll return a BadRequestException with a valid message instead of 500. #2239
_sort can cause ChainedSearch to return incorrect results
Previously, the sort options from the chained search's SearchOption object wasn't cleared, causing the sorting options to be passed through to the chained subsearch, which aren't valid. This could result in no results when there should be results. This bug is now fixed #2347. It addressed GitHub bug #2344.
Added software name and version to capability statement
In the capability statement, the software name now distinguishes if you're using Azure API for FHIR or Azure Health Data Services. The software version will now specify which open-source release package is live in the managed service #2294. Addresses: #1778 and #2241
In certain instances, the continuation token was too long to be able to follow the next link in searches and would result in a 404. To resolve this, we compressed the continuation token to ensure it stays below the size limit #2279. Addresses issue #2250.
Resolved 500 error when the date was passed with a time zone.
This fixes a 500 error when a date with a time zone was passed into a datetime field #2270.
Resolved issue when posting a bundle with incorrect Media Type returned a 500 error.
Previously when posting a search with a key that contains certain characters, a 500 error was returned. This fixes this issue #2264, and it addresses #2148.
FHIR® is a registered trademark of HL7 and is used with the permission of HL7.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.