Creating and managing FHIR resources

This page explains how to create, update, patch, view, list, retrieve, and delete FHIR resources.

A FHIR resource can contain data about a patient, a device, an observation, and more. For a full list of FHIR resources, see the FHIR Resource Index ( DSTU2 , STU3 , R4 , or R5 ).

The REST samples on this page work with an R4 FHIR store, and are not guaranteed to work if you're using a DSTU2 or STU3 FHIR store. If you're using a DSTU2 or STU3 FHIR store, see the official FHIR documentation for information on how to convert the samples to the FHIR version you're using.

The Go, Java, Node.js, and Python samples work with an STU3 FHIR store.

Creating a FHIR resource

Before you can create FHIR resources, you need to create a FHIR store .

The REST and Python samples show how to create the following FHIR resources:

  1. A Patient ( DSTU2 , STU3 , R4 , and R5 ) resource
  2. An Encounter ( DSTU2 , STU3 , R4 , and R5 ) resource for the Patient
  3. An Observation ( DSTU2 , STU3 , R4 , and R5 ) resource for the Encounter

The samples for all other languages show how to create a generic FHIR resource.

For more information, see projects.locations.datasets.fhirStores.fhir.create .

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

REST

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID

Request JSON body:

{
  "name": [
    {
      "use": "official",
      "family": "Smith",
      "given": [
        "Darcy"
      ]
    }
  ],
  "gender": "female",
  "birthDate": "1970-01-01",
  "resourceType": "Patient"
}

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
{
  "name": [
    {
      "use": "official",
      "family": "Smith",
      "given": [
        "Darcy"
      ]
    }
  ],
  "gender": "female",
  "birthDate": "1970-01-01",
  "resourceType": "Patient"
}
EOF

Then execute the following command to send your REST request:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Patient"

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
  "name": [
    {
      "use": "official",
      "family": "Smith",
      "given": [
        "Darcy"
      ]
    }
  ],
  "gender": "female",
  "birthDate": "1970-01-01",
  "resourceType": "Patient"
}
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Patient" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

Go

  import 
  
 ( 
  
 "bytes" 
  
 "context" 
  
 "encoding/json" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // createFHIRResource creates an FHIR resource. 
 func 
  
 createFHIRResource 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 payload 
  
 := 
  
 map 
 [ 
 string 
 ] 
 interface 
 {}{ 
  
 "resourceType" 
 : 
  
 resourceType 
 , 
  
 "language" 
 : 
  
 "FR" 
 , 
  
 } 
  
 jsonPayload 
 , 
  
 err 
  
 := 
  
 json 
 . 
 Marshal 
 ( 
 payload 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "json.Encode: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 parent 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 ) 
  
 call 
  
 := 
  
 fhirService 
 . 
 Create 
 ( 
 parent 
 , 
  
 resourceType 
 , 
  
 bytes 
 . 
 NewReader 
 ( 
 jsonPayload 
 )) 
  
 call 
 . 
 Header 
 (). 
 Set 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json;charset=utf-8" 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 call 
 . 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Create: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Create: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.entity.StringEntity 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceCreate 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceCreate 
 ( 
 String 
  
 fhirStoreName 
 , 
  
 String 
  
 resourceType 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String fhirStoreName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-fhir-id"); 
  
 // String resourceType = "Patient"; 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s/fhir/%s" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 fhirStoreName 
 , 
  
 resourceType 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 StringEntity 
  
 requestEntity 
  
 = 
  
 new 
  
 StringEntity 
 ( 
 "{\"resourceType\": \"" 
  
 + 
  
 resourceType 
  
 + 
  
 "\", \"language\": \"en\"}" 
 ); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 post 
 () 
  
 . 
 setUri 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 setEntity 
 ( 
 requestEntity 
 ) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_CREATED 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 print 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Exception creating FHIR resource: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ())); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 (); 
  
 } 
  
 System 
 . 
 out 
 . 
 print 
 ( 
 "FHIR resource created: " 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
  
 headers 
 : 
  
 { 
 'Content-Type' 
 : 
  
 'application/fhir+json' 
 }, 
 }); 
 async 
  
 function 
  
 createFhirResource 
 () 
  
 { 
  
 // Replace the following body with the data for the resource you want to 
  
 // create. 
  
 const 
  
 body 
  
 = 
  
 { 
  
 name 
 : 
  
 [{ 
 use 
 : 
  
 'official' 
 , 
  
 family 
 : 
  
 'Smith' 
 , 
  
 given 
 : 
  
 [ 
 'Darcy' 
 ]}], 
  
 gender 
 : 
  
 'female' 
 , 
  
 birthDate 
 : 
  
 '1970-01-01' 
 , 
  
 resourceType 
 : 
  
 'Patient' 
 , 
  
 }; 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 const 
  
 parent 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 parent 
 , 
  
 type 
 : 
  
 resourceType 
 , 
  
 requestBody 
 : 
  
 body 
 }; 
  
 const 
  
 resource 
  
 = 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 create 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 `Created FHIR resource with ID 
 ${ 
 resource 
 . 
 data 
 . 
 id 
 } 
 ` 
 ); 
  
 console 
 . 
 log 
 ( 
 resource 
 . 
 data 
 ); 
 } 
 createFhirResource 
 (); 
 

Python

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 create_patient 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Creates a new Patient resource in a FHIR store. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#create 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store that holds the Patient resource. 
 Returns: 
 A dict representing the created Patient resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_store_name 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 " 
 patient_body 
 = 
 { 
 "name" 
 : 
 [{ 
 "use" 
 : 
 "official" 
 , 
 "family" 
 : 
 "Smith" 
 , 
 "given" 
 : 
 [ 
 "Darcy" 
 ]}], 
 "gender" 
 : 
 "female" 
 , 
 "birthDate" 
 : 
 "1970-01-01" 
 , 
 "resourceType" 
 : 
 "Patient" 
 , 
 } 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 create 
 ( 
 parent 
 = 
 fhir_store_name 
 , 
 type 
 = 
 "Patient" 
 , 
 body 
 = 
 patient_body 
 ) 
 ) 
 # Sets required application/fhir+json header on the googleapiclient.http.HttpRequest. 
 request 
 . 
 headers 
 [ 
 "content-type" 
 ] 
 = 
 "application/fhir+json;charset=utf-8" 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Created Patient resource with ID 
 { 
 response 
 [ 
 'id' 
 ] 
 } 
 " 
 ) 
 return 
 response 
 

After creating the Patient resource, create an Encounter resource to describe an interaction between the patient and a practitioner.

In the PATIENT_ID field, substitute the ID from the response returned by the server when you created the Patient resource.

The following REST samples work with R4 FHIR stores. The Python sample works with STU3 FHIR stores.

REST

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • PATIENT_ID : the response returned by the server when you created the Patient resource

Request JSON body:

{
  "status": "finished",
  "class": {
    "system": "http://hl7.org/fhir/v3/ActCode",
    "code": "IMP",
    "display": "inpatient encounter"
  },
  "reasonCode": [
    {
      "text": "The patient had an abnormal heart rate. She was concerned about this."
    }
  ],
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "resourceType": "Encounter"
}

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
{
  "status": "finished",
  "class": {
    "system": "http://hl7.org/fhir/v3/ActCode",
    "code": "IMP",
    "display": "inpatient encounter"
  },
  "reasonCode": [
    {
      "text": "The patient had an abnormal heart rate. She was concerned about this."
    }
  ],
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "resourceType": "Encounter"
}
EOF

Then execute the following command to send your REST request:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Encounter"

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
  "status": "finished",
  "class": {
    "system": "http://hl7.org/fhir/v3/ActCode",
    "code": "IMP",
    "display": "inpatient encounter"
  },
  "reasonCode": [
    {
      "text": "The patient had an abnormal heart rate. She was concerned about this."
    }
  ],
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "resourceType": "Encounter"
}
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Encounter" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

Python

Before trying this sample, follow the Python setup instructions in the Cloud Healthcare API quickstart using client libraries . For more information, see the Cloud Healthcare API Python API reference documentation .

To authenticate to Cloud Healthcare API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 create_encounter 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 patient_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Creates a new Encounter resource in a FHIR store that references a Patient resource. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#create 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 patient_id: The "logical id" of the referenced Patient resource. The ID is 
 assigned by the server. 
 Returns: 
 A dict representing the created Encounter resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # patient_id = 'b682d-0e-4843-a4a9-78c9ac64'  # replace with the associated Patient resource's ID 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_store_name 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 " 
 encounter_body 
 = 
 { 
 "status" 
 : 
 "finished" 
 , 
 "class" 
 : 
 { 
 "system" 
 : 
 "http://hl7.org/fhir/v3/ActCode" 
 , 
 "code" 
 : 
 "IMP" 
 , 
 "display" 
 : 
 "inpatient encounter" 
 , 
 }, 
 "reason" 
 : 
 [ 
 { 
 "text" 
 : 
 ( 
 "The patient had an abnormal heart rate. She was" 
 " concerned about this." 
 ) 
 } 
 ], 
 "subject" 
 : 
 { 
 "reference" 
 : 
 f 
 "Patient/ 
 { 
 patient_id 
 } 
 " 
 }, 
 "resourceType" 
 : 
 "Encounter" 
 , 
 } 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 create 
 ( 
 parent 
 = 
 fhir_store_name 
 , 
 type 
 = 
 "Encounter" 
 , 
 body 
 = 
 encounter_body 
 ) 
 ) 
 # Sets required application/fhir+json header on the googleapiclient.http.HttpRequest. 
 request 
 . 
 headers 
 [ 
 "content-type" 
 ] 
 = 
 "application/fhir+json;charset=utf-8" 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Created Encounter resource with ID 
 { 
 response 
 [ 
 'id' 
 ] 
 } 
 " 
 ) 
 return 
 response 
 

After creating the Encounter resource, create an Observation resource associated with the Encounter resource. The Observation resource provides a measurement of the patient's heart rate in beats per minute (BPM) ( 80 in bpm ).

The following REST samples work with R4 FHIR stores. The Python sample works with STU3 FHIR stores.

REST

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • PATIENT_ID : the ID in the response returned by the server when you created the Patient resource
  • ENCOUNTER_ID : the ID in the response returned by the server when you created the Encounter resource

Request JSON body:

{
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": 80,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
{
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": 80,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}
EOF

Then execute the following command to send your REST request:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation"

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": 80,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

Python

Before trying this sample, follow the Python setup instructions in the Cloud Healthcare API quickstart using client libraries . For more information, see the Cloud Healthcare API Python API reference documentation .

To authenticate to Cloud Healthcare API, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 create_observation 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 patient_id 
 : 
 str 
 , 
 encounter_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Creates a new Observation resource in a FHIR store that references an Encounter and Patient resource. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#create 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 patient_id: The "logical id" of the referenced Patient resource. The ID is 
 assigned by the server. 
 encounter_id: The "logical id" of the referenced Encounter resource. The ID 
 is assigned by the server. 
 Returns: 
 A dict representing the created Observation resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # patient_id = 'b682d-0e-4843-a4a9-78c9ac64'  # replace with the associated Patient resource's ID 
 # encounter_id = 'a7602f-ffba-470a-a5c1-103f993c6  # replace with the associated Encounter resource's ID 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_observation_path 
 = 
 ( 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/Observation" 
 ) 
 observation_body 
 = 
 { 
 "resourceType" 
 : 
 "Observation" 
 , 
 "code" 
 : 
 { 
 "coding" 
 : 
 [ 
 { 
 "system" 
 : 
 "http://loinc.org" 
 , 
 "code" 
 : 
 "8867-4" 
 , 
 "display" 
 : 
 "Heart rate" 
 , 
 } 
 ] 
 }, 
 "status" 
 : 
 "final" 
 , 
 "subject" 
 : 
 { 
 "reference" 
 : 
 f 
 "Patient/ 
 { 
 patient_id 
 } 
 " 
 }, 
 "effectiveDateTime" 
 : 
 "2019-01-01T00:00:00+00:00" 
 , 
 "valueQuantity" 
 : 
 { 
 "value" 
 : 
 80 
 , 
 "unit" 
 : 
 "bpm" 
 }, 
 "context" 
 : 
 { 
 "reference" 
 : 
 f 
 "Encounter/ 
 { 
 encounter_id 
 } 
 " 
 }, 
 } 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 create 
 ( 
 parent 
 = 
 fhir_observation_path 
 , 
 type 
 = 
 "Observation" 
 , 
 body 
 = 
 observation_body 
 , 
 ) 
 ) 
 # Sets required application/fhir+json header on the googleapiclient.http.HttpRequest. 
 request 
 . 
 headers 
 [ 
 "content-type" 
 ] 
 = 
 "application/fhir+json;charset=utf-8" 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Created Observation resource with ID 
 { 
 response 
 [ 
 'id' 
 ] 
 } 
 " 
 ) 
 return 
 response 
 

Conditionally create a FHIR resource

The following curl sample shows how to use the projects.locations.datasets.fhirStores.fhir.create method to conditionally create a FHIR resource. The method implements the FHIR conditional create interaction ( DSTU2 , STU3 , R4 , R5 ).

You can use conditional create to avoid creating duplicate FHIR resources. For example, each Patient resource in a FHIR server typically has a unique identifier, such as a medical record number (MRN). To create a new Patient resource and ensure no Patient resource with the same MRN exists, conditionally create the new resource using a search query. The Cloud Healthcare API creates the new resource only if there are no matches for the search query.

The server's response depends on how many resources matched the search query:

Matches HTTP response code Behavior
Zero
201 CREATED Creates the new resource.
One
200 OK Doesn't create a new resource.
More than one
412 Precondition Failed Doesn't create a new resource and returns a "search criteria are not selective enough" error.

To use the conditional create interaction instead of the create interaction, specify an If-None-Exist HTTP header containing a FHIR search query in your request:

If-None-Exist: FHIR_SEARCH_QUERY 

In the Cloud Healthcare API v1, conditional operations exclusively use the identifier search parameter, if it exists for the FHIR resource type, to determine which FHIR resources match a conditional search query.

REST

The following sample shows how to create an Observation resource using an If-None-Exist: identifier=my-code-system|ABC-12345 HTTP header. The Cloud Healthcare API creates the resource if and only if no existing Observation resource matches the query identifier=my-code-system|ABC-12345 .

curl  
-X  
POST  
 \ 
  
-H  
 "Authorization: Bearer 
 $( 
gcloud  
auth  
print-access-token ) 
 " 
  
 \ 
  
-H  
 "Content-Type: application/fhir+json" 
  
 \ 
  
-H  
 "If-None-Exist: identifier=my-code-system|ABC-12345" 
  
 \ 
  
-d  
@request.json  
 \ 
  
 "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID 
/locations/ LOCATION 
/datasets/ DATASET_ID 
/fhirStores/ FHIR_STORE_ID 
/fhir/Observation" 

The following sample output intentionally shows a failedrequest. To view the response from a successful request, see Creating a FHIR resource .

If multiple Observation resources match the query, the Cloud Healthcare API returns the following response, and the conditional create request fails:

  { 
  
 "issue" 
 : 
  
 [ 
  
 { 
  
 "code" 
 : 
  
 "conflict" 
 , 
  
 "details" 
 : 
  
 { 
  
 "text" 
 : 
  
 "ambiguous_query" 
  
 }, 
  
 "diagnostics" 
 : 
  
 "search criteria are not selective enough" 
 , 
  
 "severity" 
 : 
  
 "error" 
  
 } 
  
 ], 
  
 "resourceType" 
 : 
  
 "OperationOutcome" 
 } 
 

Updating a FHIR resource

The following samples show how to use the projects.locations.datasets.fhirStores.fhir.update method to update a FHIR resource. The method implements the FHIR standard update interaction ( DSTU2 , STU3 , R4 , and R5 ).

When you update a resource, you update the entire contents of the resource. This is in contrast to patching a resource , which updates only part of a resource.

If the FHIR store has enableUpdateCreate set, the request is treated as an upsert (update or insert) that updates the resource if it exists or inserts it using the ID specified the request if it does not exist.

The request body must contain a JSON-encoded FHIR resource and the request headers must contain Content-Type: application/fhir+json . The resource must contain an id element having an identical value to the ID in the REST path of the request.

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

REST

The following samples show how to update the beats per minute (BPM) in an Observation resource.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • OBSERVATION_ID : the Observation resource ID
  • PATIENT_ID : the Patient resource ID
  • ENCOUNTER_ID : the Encounter resource ID
  • BPM_VALUE : the beats per minute (BPM) value in the updated Observation resource

Request JSON body:

{
  "resourceType": "Observation",
  "id": " OBSERVATION_ID 
",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": BPM_VALUE 
,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
{
  "resourceType": "Observation",
  "id": " OBSERVATION_ID 
",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": BPM_VALUE 
,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}
EOF

Then execute the following command to send your REST request:

curl -X PUT \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID "

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
  "resourceType": "Observation",
  "id": " OBSERVATION_ID 
",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": BPM_VALUE 
,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PUT `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID " | Select-Object -Expand Content

APIs Explorer

Copy the request body and open the method reference page . The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Paste the request body in this tool, complete any other required fields, and click Execute .

You should receive a JSON response similar to the following:

Go

  import 
  
 ( 
  
 "bytes" 
  
 "context" 
  
 "encoding/json" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // updateFHIRResource updates an FHIR resource to be active or not. 
 func 
  
 updateFHIRResource 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
  
 string 
 , 
  
 active 
  
 bool 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 // The following payload works with a Patient resource and is not 
  
 // intended to work with other types of FHIR resources. If necessary, 
  
 // supply a new payload with data that corresponds to the FHIR resource 
  
 // you are updating. 
  
 payload 
  
 := 
  
 map 
 [ 
 string 
 ] 
 interface 
 {}{ 
  
 "resourceType" 
 : 
  
 resourceType 
 , 
  
 "id" 
 : 
  
 fhirResourceID 
 , 
  
 "active" 
 : 
  
 active 
 , 
  
 } 
  
 jsonPayload 
 , 
  
 err 
  
 := 
  
 json 
 . 
 Marshal 
 ( 
 payload 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "json.Encode: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 ) 
  
 call 
  
 := 
  
 fhirService 
 . 
 Update 
 ( 
 name 
 , 
  
 bytes 
 . 
 NewReader 
 ( 
 jsonPayload 
 )) 
  
 call 
 . 
 Header 
 (). 
 Set 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json;charset=utf-8" 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 call 
 . 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Update: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Update: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
  
 headers 
 : 
  
 { 
 'Content-Type' 
 : 
  
 'application/fhir+json' 
 }, 
 }); 
 const 
  
 updateFhirResource 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '16e8a860-33b3-49be-9b03-de979feed14a'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 ` 
 ; 
  
 // The following body works with a Patient resource and is not intended 
  
 // to work with other types of FHIR resources. If necessary, supply a new 
  
 // body with data that corresponds to the FHIR resource you are updating. 
  
 const 
  
 body 
  
 = 
  
 { 
 resourceType 
 : 
  
 resourceType 
 , 
  
 id 
 : 
  
 resourceId 
 , 
  
 active 
 : 
  
 true 
 }; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 , 
  
 requestBody 
 : 
  
 body 
 }; 
  
 const 
  
 resource 
  
 = 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 update 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 `Updated 
 ${ 
 resourceType 
 } 
 resource:\n` 
 , 
  
 resource 
 . 
 data 
 ); 
 }; 
 updateFhirResource 
 (); 
 

Python

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 update_resource 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Updates the entire contents of a FHIR resource. 
 Creates a new current version if the resource already exists, or creates 
 a new resource with an initial version if no resource already exists with 
 the provided ID. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#update 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of the FHIR resource. 
 resource_id: The "logical id" of the resource. The ID is assigned by the 
 server. 
 Returns: 
 A dict representing the updated FHIR resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 " 
 # The following sample body works with a Patient resource and isn't guaranteed 
 # to work with other types of FHIR resources. If necessary, 
 # supply a new body with data that corresponds to the resource you 
 # are updating. 
 patient_body 
 = 
 { 
 "resourceType" 
 : 
 resource_type 
 , 
 "active" 
 : 
 True 
 , 
 "id" 
 : 
 resource_id 
 , 
 } 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 update 
 ( 
 name 
 = 
 fhir_resource_path 
 , 
 body 
 = 
 patient_body 
 ) 
 ) 
 # Sets required application/fhir+json header on the googleapiclient.http.HttpRequest. 
 request 
 . 
 headers 
 [ 
 "content-type" 
 ] 
 = 
 "application/fhir+json;charset=utf-8" 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Updated 
 { 
 resource_type 
 } 
 resource with ID 
 { 
 resource_id 
 } 
 : 
 \n 
 " 
 f 
 " 
 { 
 json 
 . 
 dumps 
 ( 
 response 
 , 
  
 indent 
 = 
 2 
 ) 
 } 
 " 
 ) 
 return 
 response 
 

Conditionally updating a FHIR resource

The following samples show how to call the projects.locations.datasets.fhirStores.fhir.conditionalUpdate method to update a FHIR resource that matches a search query, rather than identifying the resource by its ID. The method implements the FHIR standard conditional update interaction ( DSTU2 , STU3 , R4 , and R5 ).

A conditional update can only be applied to one FHIR resource at a time.

The response returned from the server depends on how many matches occur based on the search criteria:

  • One match: The resource is successfully updated or an error is returned.
  • More than one match: The request returns a 412 Precondition Failed error.
  • Zero matches with an id : If the search criteria identify zero matches, the supplied request body contains an id , and the FHIR store has enableUpdateCreate set to true , the FHIR resource is created with the id in the request body.
  • Zero matches without an id : If the search criteria identify zero matches and the supplied request body doesn't contain an id , the FHIR resource is created with a server-assigned ID as if the resource was created using projects.locations.datasets.fhirStores.fhir.create .

The request body must contain a JSON-encoded FHIR resource and the request headers must contain Content-Type: application/fhir+json .

In the Cloud Healthcare API v1, conditional operations exclusively use the identifier search parameter, if it exists for the FHIR resource type, to determine which FHIR resources match a conditional search query.

REST

The following sample shows how to send a PUT request using curl and PowerShell to edit an Observation resource using the Observation's identifier ( ABC-12345 in my-code-system ). The Observation provides a measurement of a patient's heartbeats per minute (BPM).

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • PATIENT_ID : the Patient resource ID
  • ENCOUNTER_ID : the Encounter resource ID
  • BPM_VALUE : the beats per minute (BPM) value in the Observation resource

Request JSON body:

{
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": BPM_VALUE 
,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
{
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": BPM_VALUE 
,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}
EOF

Then execute the following command to send your REST request:

curl -X PUT \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation?identifier=my-code-system|ABC-12345"

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "identifier": [
    {
      "system": "my-code-system",
      "value": "ABC-12345"
    }
  ],
  "code": {
    "coding": [
      {
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }
    ]
  },
  "valueQuantity": {
    "value": BPM_VALUE 
,
    "unit": "bpm"
  },
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PUT `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation?identifier=my-code-system|ABC-12345" | Select-Object -Expand Content

APIs Explorer

Copy the request body and open the method reference page . The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Paste the request body in this tool, complete any other required fields, and click Execute .

You should receive a JSON response similar to the following:

Patching a FHIR resource

The following samples show how to call the projects.locations.datasets.fhirStores.fhir.patch method to patch a FHIR resource. The method implements the FHIR standard patch interaction ( DSTU2 , STU3 , R4 , and R5 ).

When you patch a resource, you update part of the resource by applying the operations specified in a JSON Patch document.

The request must contain a JSON patch document, and the request headers must contain Content-Type: application/json-patch+json .

The following samples show how to patch an Observation resource. The Observation of a patient's heartbeats per minute (BPM) is updated using the replace patch operation.

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

REST

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • OBSERVATION_ID : the Observation resource ID
  • BPM_VALUE : the beats per minute (BPM) value in the patched Observation resource

Request JSON body:

[
  {
    "op": "replace",
    "path": "/valueQuantity/value",
    "value": BPM_VALUE 
}
]

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
[
  {
    "op": "replace",
    "path": "/valueQuantity/value",
    "value": BPM_VALUE 
}
]
EOF

Then execute the following command to send your REST request:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json-patch+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID "

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
[
  {
    "op": "replace",
    "path": "/valueQuantity/value",
    "value": BPM_VALUE 
}
]
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json-patch+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID " | Select-Object -Expand Content

You should receive a JSON response similar to the following:

Go

  import 
  
 ( 
  
 "bytes" 
  
 "context" 
  
 "encoding/json" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // patchFHIRResource patches an FHIR resource to be active or not. 
 func 
  
 patchFHIRResource 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
  
 string 
 , 
  
 active 
  
 bool 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 // The following payload works with a Patient resource and is not intended to work with 
  
 // other types of FHIR resources. If necessary, supply a new payload with data that 
  
 // corresponds to the FHIR resource you are patching. 
  
 payload 
  
 := 
  
 [] 
 map 
 [ 
 string 
 ] 
 interface 
 {}{ 
  
 { 
  
 "op" 
 : 
  
 "replace" 
 , 
  
 "path" 
 : 
  
 "/active" 
 , 
  
 "value" 
 : 
  
 active 
 , 
  
 }, 
  
 } 
  
 jsonPayload 
 , 
  
 err 
  
 := 
  
 json 
 . 
 Marshal 
 ( 
 payload 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "json.Encode: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 ) 
  
 call 
  
 := 
  
 fhirService 
 . 
 Patch 
 ( 
 name 
 , 
  
 bytes 
 . 
 NewReader 
 ( 
 jsonPayload 
 )) 
  
 call 
 . 
 Header 
 (). 
 Set 
 ( 
 "Content-Type" 
 , 
  
 "application/json-patch+json" 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 call 
 . 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Patch: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Patch: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.entity.StringEntity 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourcePatch 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourcePatch 
 ( 
 String 
  
 resourceName 
 , 
  
 String 
  
 data 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "resource-type", 
  
 // "resource-id"); 
  
 // The following data works with a Patient resource and is not intended to work with 
  
 // other types of FHIR resources. If necessary, supply new values for data that 
  
 // correspond to the FHIR resource you are patching. 
  
 // String data = "[{\"op\": \"replace\", \"path\": \"/active\", \"value\": false}]"; 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 StringEntity 
  
 requestEntity 
  
 = 
  
 new 
  
 StringEntity 
 ( 
 data 
 ); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 patch 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 setEntity 
 ( 
 requestEntity 
 ) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/json-patch+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 print 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Exception patching FHIR resource: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ())); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 (); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "FHIR resource patched: " 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
  
 headers 
 : 
  
 { 
 'Content-Type' 
 : 
  
 'application/json-patch+json' 
 }, 
 }); 
 async 
  
 function 
  
 patchFhirResource 
 () 
  
 { 
  
 // TODO(developer): replace patchOptions with your desired JSON patch body 
  
 const 
  
 patchOptions 
  
 = 
  
 [{ 
 op 
 : 
  
 'replace' 
 , 
  
 path 
 : 
  
 '/active' 
 , 
  
 value 
 : 
  
 false 
 }]; 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '16e8a860-33b3-49be-9b03-de979feed14a'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
  
 name 
 , 
  
 requestBody 
 : 
  
 patchOptions 
 , 
  
 }; 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 patch 
 ( 
 request 
 ); 
  
 console 
 . 
 log 
 ( 
 `Patched 
 ${ 
 resourceType 
 } 
 resource` 
 ); 
 } 
 patchFhirResource 
 (); 
 

Python

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 patch_resource 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Updates part of an existing FHIR resource by applying the operations specified in a [JSON Patch](http://jsonpatch.com/) document. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#patch 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of the FHIR resource. 
 resource_id: The "logical id" of the resource. The ID is assigned by the 
 server. 
 Returns: 
 A dict representing the patched FHIR resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 " 
 # The following sample body works with a Patient resource and isn't guaranteed 
 # to work with other types of FHIR resources. If necessary, 
 # supply a new body with data that corresponds to the resource you 
 # are updating. 
 patient_body 
 = 
 [{ 
 "op" 
 : 
 "replace" 
 , 
 "path" 
 : 
 "/active" 
 , 
 "value" 
 : 
 False 
 }] 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 patch 
 ( 
 name 
 = 
 fhir_resource_path 
 , 
 body 
 = 
 patient_body 
 ) 
 ) 
 # Sets required application/json-patch+json header. 
 # See https://tools.ietf.org/html/rfc6902 for more information. 
 request 
 . 
 headers 
 [ 
 "content-type" 
 ] 
 = 
 "application/json-patch+json" 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Patched 
 { 
 resource_type 
 } 
 resource with ID 
 { 
 resource_id 
 } 
 : 
 \n 
 " 
 f 
 " 
 { 
 json 
 . 
 dumps 
 ( 
 response 
 , 
  
 indent 
 = 
 2 
 ) 
 } 
 " 
 ) 
 return 
 response 
 

Executing a PATCH request in a FHIR bundle

You can a specify a PATCH request in a FHIR bundle (FHIR R4 only). Executing PATCH request in a FHIR bundle lets you patch many FHIR resources at once, rather than having to make individual patch requests for each FHIR resource.

To make a PATCH request in a bundle, specify the following information in a resource object in the request:

  • A resourceType field set to Binary
  • A contentType field set to application/json-patch+json
  • The patch body encoded in base64

Ensure that the resource object looks like the following:

  "resource" 
 : 
  
 { 
  
 "resourceType" 
 : 
  
 "Binary" 
 , 
  
 "contentType" 
 : 
  
 "application/json-patch+json" 
 , 
  
 "data" 
 : 
  
 "WyB7ICJvcCI6ICJyZXBsYWNlIiwgInBhdGgiOiAiL2JpcnRoRGF0ZSIsICJ2YWx1ZSI6ICIxOTkwLTAxLTAxIiB9IF0K" 
 } 
 

The following shows the patch body that was encoded to base64 in the data field:

  [ 
  
 { 
  
 "op" 
 : 
  
 "replace" 
 , 
  
 "path" 
 : 
  
 "/birthdate" 
 , 
  
 "value" 
 : 
  
 "1990-01-01" 
  
 } 
 ] 
 

The following samples show how to use a PATCH request in a bundle to patch the Patient resource you created in Creating a FHIR resource to have a birthDate value of 1990-01-01 :

Before using any of the request data, make the following replacements:

  • PROJECT_ID : your Google Cloud project ID
  • LOCATION : the location of the parent dataset
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • PATIENT_ID : the ID of an existing Patient resource

Request JSON body:

{
  "type": "transaction",
  "resourceType": "Bundle",
  "entry": [
    {
      "request": {
        "method": "PATCH",
        "url": "Patient/ PATIENT_ID 
"
      },
      "resource": {
        "resourceType": "Binary",
        "contentType": "application/json-patch+json",
        "data": "WyB7ICJvcCI6ICJyZXBsYWNlIiwgInBhdGgiOiAiL2JpcnRoRGF0ZSIsICJ2YWx1ZSI6ICIxOTkwLTAxLTAxIiB9IF0K"
      }
    }
  ]
}

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
{
  "type": "transaction",
  "resourceType": "Bundle",
  "entry": [
    {
      "request": {
        "method": "PATCH",
        "url": "Patient/ PATIENT_ID 
"
      },
      "resource": {
        "resourceType": "Binary",
        "contentType": "application/json-patch+json",
        "data": "WyB7ICJvcCI6ICJyZXBsYWNlIiwgInBhdGgiOiAiL2JpcnRoRGF0ZSIsICJ2YWx1ZSI6ICIxOTkwLTAxLTAxIiB9IF0K"
      }
    }
  ]
}
EOF

Then execute the following command to send your REST request:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/fhir+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1beta1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir"

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
{
  "type": "transaction",
  "resourceType": "Bundle",
  "entry": [
    {
      "request": {
        "method": "PATCH",
        "url": "Patient/ PATIENT_ID 
"
      },
      "resource": {
        "resourceType": "Binary",
        "contentType": "application/json-patch+json",
        "data": "WyB7ICJvcCI6ICJyZXBsYWNlIiwgInBhdGgiOiAiL2JpcnRoRGF0ZSIsICJ2YWx1ZSI6ICIxOTkwLTAxLTAxIiB9IF0K"
      }
    }
  ]
}
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/fhir+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1beta1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir" | Select-Object -Expand Content

You should receive a JSON response similar to the following:

Conditionally patching a FHIR resource

The following samples show how to call the projects.locations.datasets.fhirStores.fhir.conditionalPatch method to patch a FHIR resource that matches a search query, rather than identifying the resource by its ID. The method implements the FHIR standard conditional patch interaction ( DSTU2 , STU3 , R4 , and R4 ).

A conditional patch can be applied to only one resource at a time. If the search criteria identify more than one match, the request returns a 412 Precondition Failed error.

In the Cloud Healthcare API v1, conditional operations exclusively use the identifier search parameter, if it exists for the FHIR resource type, to determine which FHIR resources match a conditional search query.

REST

The following samples show how to send a PATCH request to edit an Observation resource if the Observation's identifier is ABC-12345 in my-code-system . The Observation of a patient's heartbeats per minute (BPM) is updated using the replace patch operation.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • BPM_VALUE : the beats per minute (BPM) value in the Observation resource

Request JSON body:

[
  {
    "op": "replace",
    "path": "/valueQuantity/value",
    "value": BPM_VALUE 
}
]

To send your request, choose one of these options:

curl

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

cat > request.json << 'EOF'
[
  {
    "op": "replace",
    "path": "/valueQuantity/value",
    "value": BPM_VALUE 
}
]
EOF

Then execute the following command to send your REST request:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json-patch+json" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation?identifier=my-code-system|ABC-12345"

PowerShell

Save the request body in a file named request.json . Run the following command in the terminal to create or overwrite this file in the current directory:

@'
[
  {
    "op": "replace",
    "path": "/valueQuantity/value",
    "value": BPM_VALUE 
}
]
'@  | Out-File -FilePath request.json -Encoding utf8

Then execute the following command to send your REST request:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json-patch+json" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation?identifier=my-code-system|ABC-12345" | Select-Object -Expand Content

APIs Explorer

Copy the request body and open the method reference page . The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Paste the request body in this tool, complete any other required fields, and click Execute .

You should receive a JSON response similar to the following:

Getting a FHIR resource

The following samples show how to get the contents of a FHIR resource.

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

Console

  1. In the Google Cloud console, go to the FHIR viewerpage.

    Go to the FHIR viewer

  2. In the FHIR Storedrop-down list, select a dataset, and then select a FHIR store in the dataset.

  3. To filter the list of resource types, search for the resource types that you want to display.

  4. Click the Resource Typefield.

  5. In the Propertiesdrop-down list that appears, select Resource Type.

  6. Enter a resource type.

  7. To search for another resource type, select ORfrom the Operatorsdrop-down list that appears, and then enter another resource type.

  8. In the list of resource types, select the resource type for the resource that you want to get the contents of.

  9. In the table of resources that appears, select or search for a resource.

REST

The following samples show how to use the projects.locations.datasets.fhirStores.fhir.read method to get the details of the Observation resource created in a previous section.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • OBSERVATION_ID : the Observation resource ID

To send your request, choose one of these options:

curl

Execute the following command:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID "

PowerShell

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID " | Select-Object -Expand Content

APIs Explorer

Open the method reference page . The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Complete any required fields and click Execute .

You should receive a JSON response similar to the following:

Go

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // getFHIRResource gets an FHIR resource. 
 func 
  
 getFHIRResource 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 ) 
  
 call 
  
 := 
  
 fhirService 
 . 
 Read 
 ( 
 name 
 ) 
  
 call 
 . 
 Header 
 (). 
 Set 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json;charset=utf-8" 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 call 
 . 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Read: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Read: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceGet 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceGet 
 ( 
 String 
  
 resourceName 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "resource-type", 
  
 //  "resource-id"); 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 get 
 (). 
 setUri 
 ( 
 uriBuilder 
 . 
 build 
 ()). 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 String 
  
 errorMessage 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "Exception retrieving FHIR resource: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ()); 
  
 System 
 . 
 err 
 . 
 print 
 ( 
 errorMessage 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 ( 
 errorMessage 
 ); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "FHIR resource retrieved: " 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
 }); 
 const 
  
 getFhirResource 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '16e8a860-33b3-49be-9b03-de979feed14a'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 }; 
  
 const 
  
 resource 
  
 = 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 read 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 `Got 
 ${ 
 resourceType 
 } 
 resource:\n` 
 , 
  
 resource 
 . 
 data 
 ); 
 }; 
 getFhirResource 
 (); 
 

Python

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 get_resource 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Gets the contents of a FHIR resource. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#read 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of FHIR resource. 
 resource_id: The "logical id" of the resource you want to get the contents 
 of. The ID is assigned by the server. 
 Returns: 
 A dict representing the FHIR resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 " 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 read 
 ( 
 name 
 = 
 fhir_resource_path 
 ) 
 ) 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Got contents of 
 { 
 resource_type 
 } 
 resource with ID 
 { 
 resource_id 
 } 
 : 
 \n 
 " 
 , 
 json 
 . 
 dumps 
 ( 
 response 
 , 
 indent 
 = 
 2 
 ), 
 ) 
 return 
 response 
 

Get all Encounter resource details

The following samples show how to to view details about an Encounter resource and all resources related to the Encounter.

The method implements the FHIR extended operation Encounter-everything defined in the following FHIR versions:

REST

Use the projects.locations.datasets.fhirStores.fhir.Encounter-everything method.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the dataset ID
  • FHIR_STORE_ID : the FHIR store ID
  • ENCOUNTER_ID : the Encounter resource ID

To send your request, choose one of these options:

curl

Execute the following command:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Encounter/ ENCOUNTER_ID /\$everything"

PowerShell

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1beta1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Encounter/ ENCOUNTER_ID /\$everything" | Select-Object -Expand Content
The following sample response is returned when calling the method on an Encounter resource with the ID c427ce3e-7677-400e-bc06-33a8cecfdd77 , which is a synthetic resource in the gs://gcp-public-data--synthea-fhir-data-10-patients/fhir_r4_ndjson/ public Cloud Storage bucket.

Getting all patient compartment resources

The following samples show how to get all resources associated with a particular patient compartment ( DSTU2 , STU3 , R4 , and R5 ). For more information, see projects.locations.datasets.fhirStores.fhir.Patient-everything .

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

curl

To get the resources in a patient compartment, make a GET request and specify the following information:

  • The name of the parent dataset
  • The name of the FHIR store
  • The patient's ID
  • An access token

The following sample shows a GET request using curl :

curl  
-X  
GET  
 \ 
  
-H  
 "Authorization: Bearer 
 $( 
gcloud  
auth  
application-default  
print-access-token ) 
 " 
  
 \ 
  
 "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID 
/locations/ LOCATION 
/datasets/ DATASET_ID 
/fhirStores/ FHIR_STORE_ID 
/fhir/Patient/ PATIENT_ID 
/\$everything" 

If the request is successful, the server returns a response similar to the following sample in JSON format:

{
  "entry": [
    {
      "resource": {
        "birthDate": "1970-01-01",
        "gender": "female",
        "id": " PATIENT_ID 
",
        "name": [
          {
            "family": "Smith",
            "given": [
              "Darcy"
            ],
            "use": "official"
          }
        ],
        "resourceType": "Patient"
      }
    },
    {
      "resource": {
        "class": {
          "code": "IMP",
          "display": "inpatient encounter",
          "system": "http://hl7.org/fhir/v3/ActCode"
        },
        "id": " ENCOUNTER_ID 
",
        "reasonCode": [
          {
            "text": "The patient had an abnormal heart rate. She was concerned about this."
          }
        ],
        "resourceType": "Encounter",
        "status": "finished",
        "subject": {
          "reference": "Patient/ PATIENT_ID 
"
        }
      }
    },
    {
      "resource": {
        "encounter": {
          "reference": "Encounter/ ENCOUNTER_ID 
"
        },
        "effectiveDateTime": "2020-01-01T00:00:00+00:00",
        "id": " OBSERVATION_ID 
",
        "resourceType": "Observation",
        "status": "final",
        "subject": {
          "reference": "Patient/ PATIENT_ID 
"
        },
        "valueQuantity": {
          "unit": "bpm",
          "value": BPM_VALUE 
}
      }
    }
  ],
  "resourceType": "Bundle",
  "type": "searchset"
}

PowerShell

To get the resources in a patient compartment, make a GET request and specify the following information:

  • The name of the parent dataset
  • The name of the FHIR store
  • The patient's ID
  • An access token

The following sample shows a GET request using PowerShell:

 $cred 
  
 = 
  
gcloud  
auth  
application-default  
print-access-token $headers 
  
 = 
  
@ { 
  
 Authorization 
  
 = 
  
 "Bearer 
 $cred 
 " 
  
 } 
Invoke-RestMethod  
 ` 
  
-Method  
Get  
 ` 
  
-Headers  
 $headers 
  
 ` 
  
-Uri  
 'https://healthcare.googleapis.com/v1/projects/ PROJECT_ID 
/locations/ LOCATION 
/datasets/ DATASET_ID 
/fhirStores/ FHIR_STORE_ID 
/fhir/Patient/ RESOURCE_ID 
/$everything' 
  
 | 
  
ConvertTo-Json

If the request is successful, the server returns a response similar to the following sample in JSON format:

{
  "entry": [
    {
      "resource": {
        "birthDate": "1970-01-01",
        "gender": "female",
        "id": " PATIENT_ID 
",
        "name": [
          {
            "family": "Smith",
            "given": [
              "Darcy"
            ],
            "use": "official"
          }
        ],
        "resourceType": "Patient"
      }
    },
    {
      "resource": {
        "class": {
          "code": "IMP",
          "display": "inpatient encounter",
          "system": "http://hl7.org/fhir/v3/ActCode"
        },
        "id": " ENCOUNTER_ID 
",
        "reasonCode": [
          {
            "text": "The patient had an abnormal heart rate. She was concerned about this."
          }
        ],
        "resourceType": "Encounter",
        "status": "finished",
        "subject": {
          "reference": "Patient/ PATIENT_ID 
"
        }
      }
    },
    {
      "resource": {
        "encounter": {
          "reference": "Encounter/ ENCOUNTER_ID 
"
        },
        "effectiveDateTime": "2020-01-01T00:00:00+00:00",
        "id": " OBSERVATION_ID 
",
        "resourceType": "Observation",
        "status": "final",
        "subject": {
          "reference": "Patient/ PATIENT_ID 
"
        },
        "valueQuantity": {
          "unit": "bpm",
          "value": BPM_VALUE 
}
      }
    }
  ],
  "resourceType": "Bundle",
  "type": "searchset"
}

Go

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // fhirGetPatientEverything gets all resources associated with a particular 
 // patient compartment. 
 func 
  
 fhirGetPatientEverything 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 fhirResourceID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/Patient/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 fhirResourceID 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 fhirService 
 . 
 PatientEverything 
 ( 
 name 
 ). 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "PatientEverything: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "PatientEverything: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceGetPatientEverything 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/Patient/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceGetPatientEverything 
 ( 
 String 
  
 resourceName 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "patient-id"); 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s/$everything" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 get 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/json-patch+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 print 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Exception getting patient everythingresource: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ())); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 (); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Patient compartment results: " 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
 }); 
 const 
  
 getPatientEverything 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const patientId = '16e8a860-33b3-49be-9b03-de979feed14a'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/Patient/ 
 ${ 
 patientId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 }; 
  
 const 
  
 patientEverything 
  
 = 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 PatientEverything 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
  
 `Got all resources in patient 
 ${ 
 patientId 
 } 
 compartment:\n` 
 , 
  
 JSON 
 . 
 stringify 
 ( 
 patientEverything 
 ) 
  
 ); 
 }; 
 getPatientEverything 
 (); 
 

Python

  def 
  
 get_patient_everything 
 ( 
 project_id 
 , 
 location 
 , 
 dataset_id 
 , 
 fhir_store_id 
 , 
 resource_id 
 , 
 ): 
  
 """Gets all the resources in the patient compartment. 
 See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample.""" 
 # Imports Python's built-in "os" module 
 import 
  
 os 
 # Imports the google.auth.transport.requests transport 
 from 
  
 google.auth.transport 
  
 import 
 requests 
 # Imports a module to allow authentication using a service account 
 from 
  
 google.oauth2 
  
 import 
 service_account 
 # Gets credentials from the environment. 
 credentials 
 = 
 service_account 
 . 
 Credentials 
 . 
 from_service_account_file 
 ( 
 os 
 . 
 environ 
 [ 
 "GOOGLE_APPLICATION_CREDENTIALS" 
 ] 
 ) 
 scoped_credentials 
 = 
 credentials 
 . 
 with_scopes 
 ( 
 [ 
 "https://www.googleapis.com/auth/cloud-platform" 
 ] 
 ) 
 # Creates a requests Session object with the credentials. 
 session 
 = 
 requests 
 . 
 AuthorizedSession 
 ( 
 scoped_credentials 
 ) 
 # URL to the Cloud Healthcare API endpoint and version 
 base_url 
 = 
 "https://healthcare.googleapis.com/v1" 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project'  # replace with your GCP project ID 
 # location = 'us-central1'  # replace with the parent dataset's location 
 # dataset_id = 'my-dataset'  # replace with the parent dataset's ID 
 # fhir_store_id = 'my-fhir-store' # replace with the FHIR store ID 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64'  # replace with the Patient resource's ID 
 url 
 = 
 f 
 " 
 { 
 base_url 
 } 
 /projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 " 
 resource_path 
 = 
 " 
 {} 
 /datasets/ 
 {} 
 /fhirStores/ 
 {} 
 /fhir/ 
 {} 
 / 
 {} 
 " 
 . 
 format 
 ( 
 url 
 , 
 dataset_id 
 , 
 fhir_store_id 
 , 
 "Patient" 
 , 
 resource_id 
 ) 
 resource_path 
 += 
 "/$everything" 
 # Sets required application/fhir+json header on the request 
 headers 
 = 
 { 
 "Content-Type" 
 : 
 "application/fhir+json;charset=utf-8" 
 } 
 response 
 = 
 session 
 . 
 get 
 ( 
 resource_path 
 , 
 headers 
 = 
 headers 
 ) 
 response 
 . 
 raise_for_status 
 () 
 resource 
 = 
 response 
 . 
 json 
 () 
 print 
 ( 
 json 
 . 
 dumps 
 ( 
 resource 
 , 
 indent 
 = 
 2 
 )) 
 return 
 resource 
 

Getting patient compartment resources filtered by type or date

The following samples show how to get all resources associated with a particular patient compartment (R4) filtered by a list of types and since a specified date and time. For more information, see projects.locations.datasets.fhirStores.fhir.Patient-everything .

The following REST samples work with R4 FHIR stores.

curl

To get the resources in a patient compartment of a specified type and since a specified date, make a GET request and specify the following information:

  • The name of the parent dataset
  • The name of the FHIR store
  • The patient's ID
  • A query string containing a comma-separated resource type list and starting date
  • An access token

The following sample shows a GET request using curl :

curl  
-X  
GET  
 \ 
  
-H  
 "Authorization: Bearer 
 $( 
gcloud  
auth  
application-default  
print-access-token ) 
 " 
  
 \ 
  
 "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID 
/locations/ LOCATION 
/datasets/ DATASET_ID 
/fhirStores/ FHIR_STORE_ID 
/fhir/Patient/ PATIENT_ID 
/\$everything?_type= RESOURCE_TYPES 
&_since= DATE 
" 

If the request is successful, the server returns any resources that match the specified criteria in JSON format.

PowerShell

To get the resources in a patient compartment of a specified type and since a specified date, make a GET request and specify the following information:

  • The name of the parent dataset
  • The name of the FHIR store
  • The patient's ID
  • A query string containing a comma-separated resource type list and starting date
  • An access token

The following sample shows a GET request using PowerShell:

 $cred 
  
 = 
  
gcloud  
auth  
application-default  
print-access-token $headers 
  
 = 
  
@ { 
  
 Authorization 
  
 = 
  
 "Bearer 
 $cred 
 " 
  
 } 
Invoke-RestMethod  
 ` 
  
-Method  
Get  
 ` 
  
-Headers  
 $headers 
  
 ` 
  
-Uri  
 'https://healthcare.googleapis.com/v1/projects/ PROJECT_ID 
/locations/ LOCATION 
/datasets/ DATASET_ID 
/fhirStores/ FHIR_STORE_ID 
/fhir/Patient/ RESOURCE_ID 
/$everything?_type= RESOURCE_TYPES 
&_since= DATE 
' 
  
 | 
  
ConvertTo-Json

If the request is successful, the server returns any resources that match the specified criteria in JSON format.

Listing FHIR resource versions

You can list the historical versions of a FHIR resource, including the current version and any deleted versions. This lets you do the following:

  • Track changes to patient records, medications, or care plans.
  • If a FHIR resource contains incorrect data, you can view historical versions to determine when the incorrect data was entered and recover the correct information.
  • Ensure regulatory compliance by providing complete audit trails.

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

Console

  1. In the Google Cloud console, go to the FHIR viewerpage.

    Go to the FHIR viewer

  2. In the FHIR storemenu, select a dataset, and then select a FHIR store in the dataset.

  3. To filter the list of FHIR resource types, search for the resource types that you want to display.

  4. Click the Resource typefield.

  5. In the Propertiesdrop-down list that appears, select Resource Type.

  6. Enter a FHIR resource type.

  7. In the list of FHIR resource types, select a resource type.

  8. In the table of FHIR resources that appears, select or search for a resource.

  9. To view and compare historical versions of the FHIR resource, click the Overviewtab, and then do the following:

    1. To view historical versions of the FHIR resource, in the same row as Version ID, click View historical versions. In the Select a resource versionpane, select the version, and then click Confirm. The data in the version is populated in the Overview, Elements, and JSONtabs.
    2. To compare two versions of the FHIR resource, in the same row as Version ID, click Compare resource versions. In the Select resource versions to comparepane, select two resource versions, and then click Confirm. The two resource versions are displayed in a diff view, with the first version you selected on the left-hand side and the second version on the right-hand side.

REST

Use the projects.locations.datasets.fhirStores.fhir.history method.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • RESOURCE_TYPE : the FHIR resource type
  • RESOURCE_ID : the FHIR resource ID

To send your request, choose one of these options:

curl

The following samples show how to list all versions of an Observation resource. The Observation was updated once after its original creation to change the patient's heartbeats per minute (BPM).

Execute the following command:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/ RESOURCE_TYPE / RESOURCE_ID /_history"

PowerShell

The following samples show how to list all versions of an Observation resource. The Observation was updated once after its original creation to change the patient's heartbeats per minute (BPM).

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/ RESOURCE_TYPE / RESOURCE_ID /_history" | Select-Object -Expand Content
If the request is successful, the server returns the response in JSON format. In this example, it returns two versions of the Observation. In the first version, the patient's heart rate was 75 BPM. In the second version, the patient's heart rate was 85 BPM.
{
  "entry": [
    {
      "resource": {
        "effectiveDateTime": "2020-01-01T00:00:00+00:00",
        "id": " OBSERVATION_ID 
",
        "meta": {
          "lastUpdated": "2020-01-02T00:00:00+00:00",
          "versionId": "MTU0MTE5MDk5Mzk2ODcyODAwMA"
        },
        "resourceType": "Observation",
        "status": "final",
        "subject": {
          "reference": "Patient/ PATIENT_ID 
"
        },
        "valueQuantity": {
          "unit": "bpm",
          "value": 85
        }
      }
    },
    {
      "resource": {
        "encounter": {
          "reference": "Encounter/ ENCOUNTER_ID 
"
        },
        "effectiveDateTime": "2020-01-01T00:00:00+00:00",
        "id": " OBSERVATION_ID 
",
        "meta": {
          "lastUpdated": "2020-01-01T00:00:00+00:00",
          "versionId": "MTU0MTE5MDg4MTY0MzQ3MjAwMA"
        },
        "resourceType": "Observation",
        "status": "final",
        "subject": {
          "reference": "Patient/ PATIENT_ID 
"
        },
        "valueQuantity": {
          "unit": "bpm",
          "value": 75
        }
      }
    }
  ],
  "resourceType": "Bundle",
  "type": "history"
}

Go

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // listFHIRResourceHistory lists an FHIR resource's history. 
 func 
  
 listFHIRResourceHistory 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 fhirService 
 . 
 History 
 ( 
 name 
 ). 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "History: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "History: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceListHistory 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceListHistory 
 ( 
 String 
  
 resourceName 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "resource-type", 
  
 //  "resource-id"); 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s/_history" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 get 
 () 
  
 . 
 setUri 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 print 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Exception retrieving FHIR history: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ())); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 (); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "FHIR resource history retrieved: " 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
 }); 
 const 
  
 listFhirResourceHistory 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '16e8a860-33b3-49be-9b03-de979feed14a'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 /_history` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 }; 
  
 const 
  
 resource 
  
 = 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 read 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 JSON 
 . 
 stringify 
 ( 
 resource 
 . 
 data 
 , 
  
 null 
 , 
  
 2 
 )); 
 }; 
 listFhirResourceHistory 
 (); 
 

Python

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 list_resource_history 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Gets the history of a resource. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#history 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of FHIR resource. 
 resource_id: The "logical id" of the resource whose history you want to 
 list. The ID is assigned by the server. 
 Returns: 
 A dict representing the FHIR resource. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 " 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 history 
 ( 
 name 
 = 
 fhir_resource_path 
 ) 
 ) 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "History for 
 { 
 resource_type 
 } 
 resource with ID 
 { 
 resource_id 
 } 
 : 
 \n 
 " 
 f 
 " 
 { 
 json 
 . 
 dumps 
 ( 
 response 
 , 
  
 indent 
 = 
 2 
 ) 
 } 
 " 
 ) 
 return 
 response 
 

Retrieving a FHIR resource version

The following samples show how to retrieve a specific version of a FHIR resource. To find a specific version, you can list the versions of the FHIR resource and then view information for that version. The version ID is contained in the "versionId" field. For example, see the following JSON body where the version IDs for the Observation resource in Listing FHIR resource versions are highlighted:

{
  "entry": [
    {
      "resource": {
        "effectiveDateTime": "2020-01-01T00:00:00+00:00",
        "id": " OBSERVATION_ID 
",
        "meta": {
          "lastUpdated": "2020-01-02T00:00:00+00:00", "versionId": "MTU0MTE5MDk5Mzk2ODcyODAwMA"},
...
    {
      "resource": {
        "encounter": {
          "reference": "Encounter/ ENCOUNTER_ID 
"
        },
        "effectiveDateTime": "2020-01-01T00:00:00+00:00",
        "id": " OBSERVATION_ID 
",
        "meta": {
          "lastUpdated": "2020-01-01T00:00:00+00:00", "versionId": "MTU0MTE5MDg4MTY0MzQ3MjAwMA"},
...
}

The following samples use the resources created in Creating a FHIR resource and show how to view an Observation resource. The REST samples work with R4 FHIR stores. The Go, Node.js, and Python samples work with STU3 FHIR stores.

Console

  1. In the Google Cloud console, go to the FHIR viewerpage.

    Go to the FHIR viewer

  2. In the FHIR storemenu, select a dataset, and then select a FHIR store in the dataset.

  3. To filter the list of FHIR resource types, search for the resource types that you want to display.

  4. Click the Resource typefield.

  5. In the Propertiesdrop-down list that appears, select Resource Type.

  6. Enter a FHIR resource type.

  7. In the list of FHIR resource types, select a resource type.

  8. In the table of FHIR resources that appears, select or search for a resource.

  9. To view a specific version of the FHIR resource, do the following:

    1. Click the Overviewtab.
    2. In the same row as Version ID, click View historical versions.
    3. In the Select a resource versionpane, select the version, and then click Confirm. The data in the version is populated in the Overview, Elements, and JSONtabs.

REST

Use the projects.locations.datasets.fhirStores.fhir.vread method.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • RESOURCE_TYPE : the FHIR resource type
  • RESOURCE_ID : the FHIR resource ID
  • RESOURCE_VERSION : the FHIR resource version

To send your request, choose one of these options:

curl

The following samples show how to list all versions of an Observation resource. The Observation was updated once after its original creation to change the patient's heartbeats per minute (BPM).

Execute the following command:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/ RESOURCE_TYPE / RESOURCE_ID /_history/ RESOURCE_VERSION "

PowerShell

The following samples show how to list all versions of an Observation resource. The Observation was updated once after its original creation to change the patient's heartbeats per minute (BPM).

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/ RESOURCE_TYPE / RESOURCE_ID /_history/ RESOURCE_VERSION " | Select-Object -Expand Content
If the request is successful, the server returns the response in JSON format. In this example, the first version of the Observation, where the patient's heart rate was 75 BPM, is returned.
{
  "encounter": {
    "reference": "Encounter/ ENCOUNTER_ID 
"
  },
  "effectiveDateTime": "2020-01-01T00:00:00+00:00",
  "id": " OBSERVATION_ID 
",
  "meta": {
    "lastUpdated": "2020-01-01T00:00:00+00:00",
    "versionId": "MTU0MTE5MDg4MTY0MzQ3MjAwMA"
  },
  "resourceType": "Observation",
  "status": "final",
  "subject": {
    "reference": "Patient/ PATIENT_ID 
"
  },
  "valueQuantity": {
    "unit": "bpm",
    "value": 75
  }
}

Go

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // getFHIRResourceHistory gets an FHIR resource history. 
 func 
  
 getFHIRResourceHistory 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 , 
  
 versionID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s/_history/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 , 
  
 versionID 
 ) 
  
 resp 
 , 
  
 err 
  
 := 
  
 fhirService 
 . 
 Vread 
 ( 
 name 
 ). 
 Do 
 () 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Vread: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 defer 
  
 resp 
 . 
 Body 
 . 
 Close 
 () 
  
 respBytes 
 , 
  
 err 
  
 := 
  
 io 
 . 
 ReadAll 
 ( 
 resp 
 . 
 Body 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "could not read response: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 if 
  
 resp 
 . 
 StatusCode 
 > 
 299 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Vread: status %d %s: %s" 
 , 
  
 resp 
 . 
 StatusCode 
 , 
  
 resp 
 . 
 Status 
 , 
  
 respBytes 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "%s" 
 , 
  
 respBytes 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceGetHistory 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceGetHistory 
 ( 
 String 
  
 resourceName 
 , 
  
 String 
  
 versionId 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "resource-type", 
  
 // "resource-id"); 
  
 // String versionId = "version-uuid" 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s/_history/%s" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 , 
  
 versionId 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 get 
 () 
  
 . 
 setUri 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 System 
 . 
 err 
 . 
 print 
 ( 
  
 String 
 . 
 format 
 ( 
  
 "Exception retrieving FHIR history: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ())); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 (); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "FHIR resource retrieved from version: " 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
 }); 
 const 
  
 getFhirResourceHistory 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '16e8a860-33b3-49be-9b03-de979feed14a'; 
  
 // const versionId = 'MTU2NPg3NDgyNDAxMDc4OTAwMA'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 /_history/ 
 ${ 
 versionId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 }; 
  
 const 
  
 resource 
  
 = 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 vread 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 JSON 
 . 
 stringify 
 ( 
 resource 
 . 
 data 
 , 
  
 null 
 , 
  
 2 
 )); 
 }; 
 getFhirResourceHistory 
 (); 
 

Python

  # Imports the types Dict and Any for runtime type hints. 
 from 
  
 typing 
  
 import 
 Any 
 , 
 Dict 
 # noqa: E402 
 def 
  
 get_resource_history 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 version_id 
 : 
 str 
 , 
 ) 
 - 
> Dict 
 [ 
 str 
 , 
 Any 
 ]: 
  
 """Gets the contents of a version (current or historical) of a FHIR resource by version ID. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#vread 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of FHIR resource. 
 resource_id: The "logical id" of the resource whose details you want to view 
 at a particular version. The ID is assigned by the server. 
 version_id: The ID of the version. Changes whenever the FHIR resource is 
 modified. 
 Returns: 
 A dict representing the FHIR resource at the specified version. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 # version_id = 'MTY4NDQ1MDc3MDU2ODgyNzAwMA' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 /_history/ 
 { 
 version_id 
 } 
 " 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 vread 
 ( 
 name 
 = 
 fhir_resource_path 
 ) 
 ) 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Got contents of 
 { 
 resource_type 
 } 
 resource with ID 
 { 
 resource_id 
 } 
 at" 
 f 
 " version 
 { 
 version_id 
 } 
 : 
 \n 
  
 { 
 json 
 . 
 dumps 
 ( 
 response 
 , 
  
 indent 
 = 
 2 
 ) 
 } 
 " 
 ) 
 return 
 response 
 

Deleting a FHIR resource

The following samples show how to call the projects.locations.datasets.fhirStores.fhir.delete method to delete an Observation FHIR resource.

Regardless of whether the operation succeeds or fails, the server returns a 200 OK HTTP status code. To check that the resource was successfully deleted, search for or get the resource and see if it exists.

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

REST

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • OBSERVATION_ID : the Observation resource ID

To send your request, choose one of these options:

curl

Execute the following command:

curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID "

PowerShell

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation/ OBSERVATION_ID " | Select-Object -Expand Content

APIs Explorer

Open the method reference page . The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Complete any required fields and click Execute .

You should receive a JSON response similar to the following:

Go

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // deleteFHIRResource deletes an FHIR resource. 
 // Regardless of whether the operation succeeds or 
 // fails, the server returns a 200 OK HTTP status code. To check that the 
 // resource was successfully deleted, search for or get the resource and 
 // see if it exists. 
 func 
  
 deleteFHIRResource 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 ) 
  
 if 
  
 _ 
 , 
  
 err 
  
 := 
  
 fhirService 
 . 
 Delete 
 ( 
 name 
 ). 
 Do 
 (); 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "Delete: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Deleted %q" 
 , 
  
 name 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceDelete 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceDelete 
 ( 
 String 
  
 resourceName 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "resource-type", 
  
 // "resource-id"); 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 delete 
 () 
  
 . 
 setUri 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 // Regardless of whether the operation succeeds or 
  
 // fails, the server returns a 200 OK HTTP status code. To check that the 
  
 // resource was successfully deleted, search for or get the resource and 
  
 // see if it exists. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 String 
  
 errorMessage 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "Exception deleting FHIR resource: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ()); 
  
 System 
 . 
 err 
 . 
 print 
 ( 
 errorMessage 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 ( 
 errorMessage 
 ); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "FHIR resource deleted." 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
 }); 
 const 
  
 deleteFhirResource 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '9a664e07-79a4-4c2e-04ed-e996c75484e1'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 }; 
  
 // Regardless of whether the operation succeeds or 
  
 // fails, the server returns a 200 OK HTTP status code. To check that the 
  
 // resource was successfully deleted, search for or get the resource and 
  
 // see if it exists. 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 delete 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 'Deleted FHIR resource' 
 ); 
 }; 
 deleteFhirResource 
 (); 
 

Python

  def 
  
 delete_resource 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 ) 
 - 
> dict 
 : 
  
 """Deletes a FHIR resource. 
 Regardless of whether the operation succeeds or 
 fails, the server returns a 200 OK HTTP status code. To check that the 
 resource was successfully deleted, search for or get the resource and 
 see if it exists. 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#delete 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of the FHIR resource. 
 resource_id: The "logical id" of the FHIR resource you want to delete. The 
 ID is assigned by the server. 
 Returns: 
 An empty dict. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 " 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 delete 
 ( 
 name 
 = 
 fhir_resource_path 
 ) 
 ) 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Deleted 
 { 
 resource_type 
 } 
 resource with ID 
 { 
 resource_id 
 } 
 ." 
 ) 
 return 
 response 
 

Conditionally delete a FHIR resource

In the Cloud Healthcare API v1, conditional operations exclusively use the identifier search parameter, if it exists for the FHIR resource type, to determine which FHIR resources match a conditional search query.

A FHIR resource matches the query ?identifier=my-code-system|ABC-12345 if and only if the resource's identifier.system is my-code-system and its identifier.value is ABC-12345 . If a FHIR resource matches the query, the Cloud Healthcare API deletes the resource.

If the query uses the identifier search parameter and matches multiple FHIR resources, the Cloud Healthcare API returns a "412 - Condition not selective enough" error. To individually delete the resources, follow these steps:

  1. Search for each resource to get its unique server-assigned ID.
  2. Individually delete each resource using the ID.

The following samples show how to conditionally delete a FHIR resource that matches a search query, rather than identifying the FHIR resource by its ID. The search query matches and deletes an Observation resource using the Observation's identifier ( ABC-12345 in my-code-system ).

REST

Use the projects.locations.datasets.fhirStores.fhir.conditionalDelete method.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID

To send your request, choose one of these options:

curl

Execute the following command:

curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation?identifier=my-code-system|ABC-12345"

PowerShell

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/Observation?identifier=my-code-system|ABC-12345" | Select-Object -Expand Content

APIs Explorer

Open the method reference page . The APIs Explorer panel opens on the right side of the page. You can interact with this tool to send requests. Complete any required fields and click Execute .

You should receive a successful status code (2xx) and an empty response.

Delete historical versions of a FHIR resource

The following samples show how to delete all historical versions of a FHIR resource using the projects.locations.datasets.fhirStores.fhir.Resource-purge method.

Calling the projects.locations.datasets.fhirStores.fhir.Resource-purge method is limited to users (callers) with the roles/healthcare.fhirStoreAdmin role; users with the roles/healthcare.fhirResourceEditor role cannot call the method. To permit a caller to delete historical versions of a FHIR resource, either:

The samples use the resources created in Creating a FHIR resource and show how to delete the historical versions of an Observation resource.

The following REST samples work with R4 FHIR stores. The Go, Java, Node.js, and Python samples work with STU3 FHIR stores.

REST

Use the projects.locations.datasets.fhirStores.fhir.Resource-purge method.

Before using any of the request data, make the following replacements:

  • PROJECT_ID : the ID of your Google Cloud project
  • LOCATION : the dataset location
  • DATASET_ID : the FHIR store's parent dataset
  • FHIR_STORE_ID : the FHIR store ID
  • RESOURCE_TYPE : the FHIR resource type
  • RESOURCE_ID : the FHIR resource ID

To send your request, choose one of these options:

curl

Execute the following command:

curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/ RESOURCE_TYPE / RESOURCE_ID /$purge"

PowerShell

Execute the following command:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/ PROJECT_ID /locations/ LOCATION /datasets/ DATASET_ID /fhirStores/ FHIR_STORE_ID /fhir/ RESOURCE_TYPE / RESOURCE_ID /$purge" | Select-Object -Expand Content

You should receive a successful status code (2xx) and an empty response.

Go

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 healthcare 
  
 "google.golang.org/api/healthcare/v1" 
 ) 
 // purgeFHIRResource purges an FHIR resources. 
 func 
  
 purgeFHIRResource 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
  
 string 
 ) 
  
 error 
  
 { 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 healthcareService 
 , 
  
 err 
  
 := 
  
 healthcare 
 . 
 NewService 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "healthcare.NewService: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fhirService 
  
 := 
  
 healthcareService 
 . 
 Projects 
 . 
 Locations 
 . 
 Datasets 
 . 
 FhirStores 
 . 
 Fhir 
  
 name 
  
 := 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 , 
  
 projectID 
 , 
  
 location 
 , 
  
 datasetID 
 , 
  
 fhirStoreID 
 , 
  
 resourceType 
 , 
  
 fhirResourceID 
 ) 
  
 if 
  
 _ 
 , 
  
 err 
  
 := 
  
 fhirService 
 . 
 ResourcePurge 
 ( 
 name 
 ). 
 Do 
 (); 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 fmt 
 . 
 Errorf 
 ( 
 "ResourcePurge: %w" 
 , 
  
 err 
 ) 
  
 } 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Resource Purged: %q" 
 , 
  
 name 
 ) 
  
 return 
  
 nil 
 } 
 

Java

  import 
  
 com.google.api.client.http. HttpRequestInitializer 
 
 ; 
 import 
  
 com.google.api.client.http.javanet. NetHttpTransport 
 
 ; 
 import 
  
 com.google.api.client.json. JsonFactory 
 
 ; 
 import 
  
 com.google.api.client.json.gson. GsonFactory 
 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcare 
 ; 
 import 
  
 com.google.api.services.healthcare.v1.CloudHealthcareScopes 
 ; 
 import 
  
 com.google.auth.http. HttpCredentialsAdapter 
 
 ; 
 import 
  
 com.google.auth.oauth2. GoogleCredentials 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.net.URISyntaxException 
 ; 
 import 
  
 java.util.Collections 
 ; 
 import 
  
 org.apache.http.HttpEntity 
 ; 
 import 
  
 org.apache.http. HttpResponse 
 
 ; 
 import 
  
 org.apache.http.HttpStatus 
 ; 
 import 
  
 org.apache.http.client.HttpClient 
 ; 
 import 
  
 org.apache.http.client.methods.HttpUriRequest 
 ; 
 import 
  
 org.apache.http.client.methods.RequestBuilder 
 ; 
 import 
  
 org.apache.http.client.utils.URIBuilder 
 ; 
 import 
  
 org.apache.http.impl.client.HttpClients 
 ; 
 public 
  
 class 
 FhirResourceDeletePurge 
  
 { 
  
 private 
  
 static 
  
 final 
  
 String 
  
 FHIR_NAME 
  
 = 
  
 "projects/%s/locations/%s/datasets/%s/fhirStores/%s/fhir/%s/%s" 
 ; 
  
 private 
  
 static 
  
 final 
  
 JsonFactory 
  
 JSON_FACTORY 
  
 = 
  
 new 
  
 GsonFactory 
 (); 
  
 private 
  
 static 
  
 final 
  
 NetHttpTransport 
  
 HTTP_TRANSPORT 
  
 = 
  
 new 
  
 NetHttpTransport 
 (); 
  
 public 
  
 static 
  
 void 
  
 fhirResourceDeletePurge 
 ( 
 String 
  
 resourceName 
 ) 
  
 throws 
  
 IOException 
 , 
  
 URISyntaxException 
  
 { 
  
 // String resourceName = 
  
 //    String.format( 
  
 //        FHIR_NAME, "project-id", "region-id", "dataset-id", "store-id", "resource-type", 
  
 // "resource-id"); 
  
 // Initialize the client, which will be used to interact with the service. 
  
 CloudHealthcare 
  
 client 
  
 = 
  
 createClient 
 (); 
  
 HttpClient 
  
 httpClient 
  
 = 
  
 HttpClients 
 . 
 createDefault 
 (); 
  
 String 
  
 uri 
  
 = 
  
 String 
 . 
 format 
 ( 
 "%sv1/%s/$purge" 
 , 
  
 client 
 . 
 getRootUrl 
 (), 
  
 resourceName 
 ); 
  
 URIBuilder 
  
 uriBuilder 
  
 = 
  
 new 
  
 URIBuilder 
 ( 
 uri 
 ). 
 setParameter 
 ( 
 "access_token" 
 , 
  
 getAccessToken 
 ()); 
  
 HttpUriRequest 
  
 request 
  
 = 
  
 RequestBuilder 
 . 
 delete 
 () 
  
 . 
 setUri 
 ( 
 uriBuilder 
 . 
 build 
 ()) 
  
 . 
 addHeader 
 ( 
 "Content-Type" 
 , 
  
 "application/fhir+json" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept-Charset" 
 , 
  
 "utf-8" 
 ) 
  
 . 
 addHeader 
 ( 
 "Accept" 
 , 
  
 "application/fhir+json; charset=utf-8" 
 ) 
  
 . 
 build 
 (); 
  
 // Execute the request and process the results. 
  
 HttpResponse 
  
 response 
  
 = 
  
 httpClient 
 . 
 execute 
 ( 
 request 
 ); 
  
 HttpEntity 
  
 responseEntity 
  
 = 
  
 response 
 . 
 getEntity 
 (); 
  
 if 
  
 ( 
 response 
 . 
 getStatusLine 
 (). 
 getStatusCode 
 () 
  
 != 
  
 HttpStatus 
 . 
 SC_OK 
 ) 
  
 { 
  
 String 
  
 errorMessage 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "Exception purging FHIR resource: %s\n" 
 , 
  
 response 
 . 
 getStatusLine 
 (). 
 toString 
 ()); 
  
 System 
 . 
 err 
 . 
 print 
 ( 
 errorMessage 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 err 
 ); 
  
 throw 
  
 new 
  
 RuntimeException 
 ( 
 errorMessage 
 ); 
  
 } 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "FHIR resource history purged (excluding current version)." 
 ); 
  
 responseEntity 
 . 
 writeTo 
 ( 
 System 
 . 
 out 
 ); 
  
 } 
  
 private 
  
 static 
  
 CloudHealthcare 
  
 createClient 
 () 
  
 throws 
  
 IOException 
  
 { 
  
 // Use Application Default Credentials (ADC) to authenticate the requests 
  
 // For more information see https://cloud.google.com/docs/authentication/production 
  
 GoogleCredentials 
  
 credential 
  
 = 
  
 GoogleCredentials 
 . 
 getApplicationDefault 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests. 
  
 HttpRequestInitializer 
  
 requestInitializer 
  
 = 
  
 request 
  
 - 
>  
 { 
  
 new 
  
 HttpCredentialsAdapter 
 ( 
 credential 
 ). 
 initialize 
 ( 
 request 
 ); 
  
 request 
 . 
 setConnectTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute connect timeout 
  
 request 
 . 
 setReadTimeout 
 ( 
 60000 
 ); 
  
 // 1 minute read timeout 
  
 }; 
  
 // Build the client for interacting with the service. 
  
 return 
  
 new 
  
 CloudHealthcare 
 . 
 Builder 
 ( 
 HTTP_TRANSPORT 
 , 
  
 JSON_FACTORY 
 , 
  
 requestInitializer 
 ) 
  
 . 
 setApplicationName 
 ( 
 "your-application-name" 
 ) 
  
 . 
 build 
 (); 
  
 } 
  
 private 
  
 static 
  
 String 
  
 getAccessToken 
 () 
  
 throws 
  
 IOException 
  
 { 
  
  GoogleCredentials 
 
  
 credential 
  
 = 
  
  GoogleCredentials 
 
 . 
  getApplicationDefault 
 
 () 
  
 . 
 createScoped 
 ( 
 Collections 
 . 
 singleton 
 ( 
 CloudHealthcareScopes 
 . 
 CLOUD_PLATFORM 
 )); 
  
 return 
  
 credential 
 . 
 refreshAccessToken 
 (). 
 getTokenValue 
 (); 
  
 } 
 } 
 

Node.js

  const 
  
 google 
  
 = 
  
 require 
 ( 
 '@googleapis/healthcare' 
 ); 
 const 
  
 healthcare 
  
 = 
  
 google 
 . 
 healthcare 
 ({ 
  
 version 
 : 
  
 'v1' 
 , 
  
 auth 
 : 
  
 new 
  
 google 
 . 
 auth 
 . 
 GoogleAuth 
 ({ 
  
 scopes 
 : 
  
 [ 
 'https://www.googleapis.com/auth/cloud-platform' 
 ], 
  
 }), 
 }); 
 const 
  
 deleteFhirResourcePurge 
  
 = 
  
 async 
  
 () 
  
 = 
>  
 { 
  
 // TODO(developer): uncomment these lines before running the sample 
  
 // const cloudRegion = 'us-central1'; 
  
 // const projectId = 'adjective-noun-123'; 
  
 // const datasetId = 'my-dataset'; 
  
 // const fhirStoreId = 'my-fhir-store'; 
  
 // const resourceType = 'Patient'; 
  
 // const resourceId = '9a664e07-79a4-4c2e-04ed-e996c75484e1'; 
  
 const 
  
 name 
  
 = 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/ 
 ${ 
 cloudRegion 
 } 
 /datasets/ 
 ${ 
 datasetId 
 } 
 /fhirStores/ 
 ${ 
 fhirStoreId 
 } 
 /fhir/ 
 ${ 
 resourceType 
 } 
 / 
 ${ 
 resourceId 
 } 
 ` 
 ; 
  
 const 
  
 request 
  
 = 
  
 { 
 name 
 }; 
  
 await 
  
 healthcare 
 . 
 projects 
 . 
 locations 
 . 
 datasets 
 . 
 fhirStores 
 . 
 fhir 
 . 
 ResourcePurge 
 ( 
  
 request 
  
 ); 
  
 console 
 . 
 log 
 ( 
 'Deleted all historical versions of resource' 
 ); 
 }; 
 deleteFhirResourcePurge 
 (); 
 

Python

  def 
  
 delete_resource_purge 
 ( 
 project_id 
 : 
 str 
 , 
 location 
 : 
 str 
 , 
 dataset_id 
 : 
 str 
 , 
 fhir_store_id 
 : 
 str 
 , 
 resource_type 
 : 
 str 
 , 
 resource_id 
 : 
 str 
 , 
 ) 
 - 
> dict 
 : 
  
 """Deletes all versions of a FHIR resource (excluding the current version). 
 See 
 https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/fhir 
 before running the sample. 
 See 
 https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.fhirStores.fhir.html#Resource_purge 
 for the Python API reference. 
 Args: 
 project_id: The project ID or project number of the Cloud project you want 
 to use. 
 location: The name of the parent dataset's location. 
 dataset_id: The name of the parent dataset. 
 fhir_store_id: The name of the FHIR store. 
 resource_type: The type of the FHIR resource. 
 resource_id: The "logical id" of the resource. The ID is assigned by the 
 server. 
 Returns: 
 An empty dict. 
 """ 
 # Imports the Google API Discovery Service. 
 from 
  
 googleapiclient 
  
 import 
 discovery 
 api_version 
 = 
 "v1" 
 service_name 
 = 
 "healthcare" 
 # Returns an authorized API client by discovering the Healthcare API 
 # and using GOOGLE_APPLICATION_CREDENTIALS environment variable. 
 client 
 = 
 discovery 
 . 
 build 
 ( 
 service_name 
 , 
 api_version 
 ) 
 # TODO(developer): Uncomment these lines and replace with your values. 
 # project_id = 'my-project' 
 # location = 'us-central1' 
 # dataset_id = 'my-dataset' 
 # fhir_store_id = 'my-fhir-store' 
 # resource_type = 'Patient' 
 # resource_id = 'b682d-0e-4843-a4a9-78c9ac64' 
 fhir_store_parent 
 = 
 ( 
 f 
 "projects/ 
 { 
 project_id 
 } 
 /locations/ 
 { 
 location 
 } 
 /datasets/ 
 { 
 dataset_id 
 } 
 " 
 ) 
 fhir_resource_path 
 = 
 f 
 " 
 { 
 fhir_store_parent 
 } 
 /fhirStores/ 
 { 
 fhir_store_id 
 } 
 /fhir/ 
 { 
 resource_type 
 } 
 / 
 { 
 resource_id 
 } 
 " 
 request 
 = 
 ( 
 client 
 . 
 projects 
 () 
 . 
 locations 
 () 
 . 
 datasets 
 () 
 . 
 fhirStores 
 () 
 . 
 fhir 
 () 
 . 
 Resource_purge 
 ( 
 name 
 = 
 fhir_resource_path 
 ) 
 ) 
 response 
 = 
 request 
 . 
 execute 
 () 
 print 
 ( 
 f 
 "Deleted all versions of 
 { 
 resource_type 
 } 
 resource with ID" 
 f 
 " 
 { 
 resource_id 
 } 
 (excluding current version)." 
 ) 
 return 
 response 
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: