Get FHIR Push Transaction Status
Poll the ingestion status for a FHIR bundle upload transaction (Step 3)
curl --request GET \
--url https://sdp.suki.ai/api/v1/fhir-push/status/<transaction_id> \
--header 'Authorization: Bearer <sdp_suki_token>'import requests
url = "https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}"
headers = {"sdp_suki_token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {sdp_suki_token: '<api-key>'}};
fetch('https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"sdp_suki_token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("sdp_suki_token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}")
.header("sdp_suki_token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["sdp_suki_token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"transaction_id": "dea454fe-fecb-4cf0-aaa7-fa84d19c28f8",
"organization_id": "FHIR Push Medent Org 1",
"correlation_id": "encounter-12345-upload-1",
"status": "COMPLETED",
"created_at": "2026-05-18T06:40:42Z",
"updated_at": "2026-05-18T06:41:05Z",
"completed_at": "2026-05-18T06:41:05Z",
"error": null
}{
"code": 401,
"message": "invalid token"
}{
"code": 403,
"message": "forbidden"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}transaction_id returned by the Request upload URL API to retrieve the current status of the ingestion job.
Ingestion status values
An ingestion job progresses through the following status values:| Status | Terminal | Description |
|---|---|---|
CREATED | No | The ingestion job has been created and is waiting for the FHIR bundle upload. |
READY | No | The FHIR bundle has been uploaded and is queued for processing. |
RUNNING | No | The FHIR bundle is being processed. |
COMPLETED | Yes | The FHIR bundle was successfully ingested into the Clinical Knowledge Graph (CKG). |
FAILED | Yes | The ingestion failed. See the error field for details. |
ARCHIVED | Yes | The upload URL expired before the FHIR bundle was uploaded. |
- Poll this endpoint every 5 seconds.
- Stop polling when the status is
COMPLETED,FAILED, orARCHIVED. - Ingestion status is available for 7 days after the last status update.
COMPLETED, the FHIR data is available in the Clinical Knowledge Graph (CKG). You can then generate a Patient Summary for the encounters in the uploaded FHIR bundle.COMPLETED, generate Patient Summaries for the encounters by using the following endpoints:
Authorizations
Suki access token (suki_token) from Login or Register. Expires after one hour.
Path Parameters
Transaction identifier returned by GET /api/v1/fhir-push/upload-url.
Response
Transaction status returned successfully.
Unique identifier for this ingestion transaction.
Current transaction status: CREATED | READY | RUNNING | COMPLETED | FAILED | ARCHIVED
RFC 3339 timestamp when the transaction was created.
Your partner organization ID for this organization. It can be a UUID or non-UUID string. But not a Suki UUID.
Client-supplied or server-generated correlation ID for tracing.
RFC 3339 timestamp of the last status update.
RFC 3339 timestamp when processing completed (present for terminal statuses).
Error details when the transaction status is FAILED; otherwise null.
Was this page helpful?
curl --request GET \
--url https://sdp.suki.ai/api/v1/fhir-push/status/<transaction_id> \
--header 'Authorization: Bearer <sdp_suki_token>'import requests
url = "https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}"
headers = {"sdp_suki_token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {sdp_suki_token: '<api-key>'}};
fetch('https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"sdp_suki_token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("sdp_suki_token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}")
.header("sdp_suki_token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/fhir-push/status/{transaction_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["sdp_suki_token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"transaction_id": "dea454fe-fecb-4cf0-aaa7-fa84d19c28f8",
"organization_id": "FHIR Push Medent Org 1",
"correlation_id": "encounter-12345-upload-1",
"status": "COMPLETED",
"created_at": "2026-05-18T06:40:42Z",
"updated_at": "2026-05-18T06:41:05Z",
"completed_at": "2026-05-18T06:41:05Z",
"error": null
}{
"code": 401,
"message": "invalid token"
}{
"code": 403,
"message": "forbidden"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}