Request patient documents

Last updated: Apr 30, 2026
HEALTH TECH VENDOR
IMPLEMENTATION
Who can use this how-to
  • Existing customers using Network Onramps to connect to the Carequality Interoperability Framework.
  • Existing customers with a direct connection to the Carequality Interoperability Framework (i.e., without Redox).

After you successfully search and locate patient records at a given organization, you can request patient documents. There are two options for this step.

The flowchart outlines 2 possible routes: 1) Use Redox to find the latest clinical summary, or 2) Run your own document query and pick documents from the returned list.
Possible workflows for requesting patient documents
  1. Use Redox to request the latest patient summary: Typically, the simplest option is to request a generic patient summary directly via Redox. 
  2. Pick your own docs: If you can select documents of interest within your own UI, you can retrieve a full list of available documents and select the specific documents that are of interest.

The returned documents from either option follow a standard format (Consolidated-Clinical Document Architecture, or C-CDA) and include several sections of information related to the patient’s demographics, encounters, medications, diagnoses, allergies, and more. Check out required C-CDA elements.

Different organization, different data

Different organizations may include varying amounts of information or specificity, or they may use different code sets to represent the data. We simply pass the data as we receive it from the responding organization.

FHIR option

Did you know you can also do this workflow with Redox FHIR®? Learn how to request patient documents with FHIR®.

Use curl for technical validation

You can copy our code examples and send the test requests with curl (learn more about curl) instead of Postman. If you do, remember to:

  • Replace any variables with your specific data (e.g., your organization's OID) before sending the request.
    • $VARIABLE: An environment variable you can set in your terminal before running the command.
    • {{variable here}}: A placeholder for your specific data.
  • Add the source-id if you have multiple sources. We don’t include {{source-id}} in the code examples, so you’ll have to add them yourself. Learn about including source details.
  • Make sure you have a full request for your own use since some of the code examples are abbreviated.

Check out these troubleshooting guides if you run into errors:

Option 1: Use Redox to request latest patient summary

Choose this option if you only want CDA documents, and you want to automatically get the most recent CDA for a patient. You receive the data back in a nice Redox-parsed view.

Step 1: ClinicalSummary.PatientQuery

Using Postman or curl, send a ClinicalSummary.PatientQuery request with the relevant metadata:

  • For production queries, set the Test value to false.
  • The destination ID changes based on environment type:
    • Development destination ID: ec745338-8849-43ad-a7ce-4bc5bf1d8b89
    • Production destination ID: 628cbf79-1156-4923-b9d0-285906160ed6
  • The FacilityCode represents the OID of the Carequality participant to query.
  • Use the Patient.Identifiers.ID and Patient.Identifiers.IDType from the PatientSearch.Query response (from whichever patient search option you used).
Example: Request a patient summary
bash
1
curl \
2
-X POST https://api.redoxengine.com/endpoint \
3
-H "Content-Type: application/json" \
4
-H "Authorization: Bearer $API_TOKEN" \
5
-d '{
6
"Meta": {
7
"Extensions": {
8
"sender-organization-id": {
9
"url": "https://api.redoxengine.com/extensions/sender-organization-id",
10
"string": "{{YOUR-ORGANIZATION-OID}}"
11
},
12
"user-id": {
13
"url": "https://api.redoxengine.com/extensions/user-id",
14
"string": "{{SENDING-USER-NAME}}"
15
},
16
"user-role": {
17
"url": "https://api.redoxengine.com/extensions/user-role",
18
"coding": {
19
"code": "{{SNOMED-USER-ROLE}}",
20
"display": "{{HUMAN-READABLE-NAME-FOR-CODE}}"
21
}
22
},
23
"purpose-of-use": {
24
"url": "https://api.redoxengine.com/extensions/purpose-of-use",
25
"coding": {
26
"code": "TREATMENT",
27
"display": "Treatment"
28
}
29
}
30
},
31
"DataModel": "Clinical Summary",
32
"EventType": "PatientQuery",
33
"Test": true,
34
"Destinations": [
35
{
36
"ID": "ec745338-8849-43ad-a7ce-4bc5bf1d8b89"
37
}
38
],
39
"FacilityCode": "2.16.840.1.113883.3.6147.458.2"
40
},
41
"Patient": {
42
"Identifiers": [
43
{
44
"ID": "{{PATIENT-ID-FROM-PATIENT-SEARCH-QUERY-RESPONSE}}",
45
"IDType": "{{PATIENT-ID-TYPE-FROM-PATIENT-SEARCH-QUERY-RESPONSE}}"
46
}
47
]
48
}
49
}
API reference

Review the Clinical Summary data model schema for more technical details.

Step 2: ClinicalSummary.PatientQueryResponse

If the request is successful, you receive a synchronous ClinicalSummary.PatientQueryResponse with the latest patient summary document (i.e., a snapshot of the patient’s current chart).

Example: Successful response for a patient summary
json
1
{
2
"InsurancesText": "",
3
"Insurances": [],
4
"Header": {
5
"Document": {
6
"Visit": {
7
"Location": null,
8
"VisitNumber": "",
9
"EndDateTime": "",
10
"StartDateTime": ""
11
},
12
"Author": {
13
"Location": {
14
"Facility": "MADISON ANESTHESIOLOGY CONSULTANTS, LLP"
15
}
16
},
17
"ID": "2.16.840.1.113883.19.5^92cce54a-3a9f-634a-4d20-7e566ecc32ab",
18
"TypeCode": {
19
"AltCodes": [],
20
"CodeSystemName": "LOINC",
21
"CodeSystem": "2.16.840.1.113883.6.1",
22
"Name": "Summarization of episode note",
23
"Code": "34133-9"
24
},
25
"Type": "Summarization of episode note",
26
"DateTime": "2020-12-10T17:09:50.000Z",
27
"Title": "C-CDA R2.1 Patient Record: Adolfo Kessler",
28
"Locale": "US"
29
},
30
"Patient": {
31
"Demographics": {
32
"MaritalStatus": "",
33
"Religion": "",
34
"Ethnicity": "Not hispanic or latino",
35
"Race": "White",
36
"Address": {
37
"County": "",
38
"ZIP": "53711",
39
"Country": "",
40
"State": "Wisconsin",
41
"City": "Madison",
42
"StreetAddress": "602 Schiller Junction Suite 68"
43
},
44
"Sex": "Male",
45
"SSN": "",
46
"DOB": "2002-10-31T17:09:50.000Z",
47
"EmailAddresses": [],
48
"PhoneNumber": {
49
"Mobile": "",
50
"Office": "",
51
"Home": ""
52
},
53
"LastName": "Kessler",
54
"FirstName": "Adolfo"
55
},
56
"Identifiers": [
57
{
58
"IDType": "2.16.840.1.113883.19.5",
59
"ID": "j8p2NtTbAL7rTWRRhe7kSK"
60
}
61
]
62
}
63
}

Option 2: Pick your own docs

Choose this option if you want to receive a full list of documents related to the patient. Then, query for any document from the list. You receive the document in both raw XML—which is useful if you have your own document renderer—and in a Redox-parsed view for any data that we can parse.

For this option, use the DocumentQuery and DocumentGet event types of ClinicalSummary. The response returns PDFs or any other documents that are attached to the patient record.

Step 1: ClinicalSummary.DocumentQuery

Using Postman or curl, send the ClinicalSummary.DocumentQuery request with the relevant metadata:

  • The destination ID changes based on environment type:
    • Development destination ID: ec745338-8849-43ad-a7ce-4bc5bf1d8b89
    • Production destination ID: 628cbf79-1156-4923-b9d0-285906160ed6
  • The FacilityCode represents the OID of the Carequality participant to query.
  • Use the Patient.Identifiers.ID and Patient.Identifiers.IDType from the PatientSearch.Query response (from whichever patient search option you used).
Getting documents of value

It’s possible to get lots of documents that may or may not be useful to you. We recommend requesting the patient’s most recent CCD (i.e., LOINC 34133-9) and progress notes (LOINC 11506-3) from the last three months.

Be aware that responders may have different names for progress notes, like “telephone,” “office visit,” or “emergency.” You can find the document’s LOINC value in the Documents[].Type.Code for each document returned in the ClinicalSummary.documentQueryResponse.

Example: Search for a document list from Carequality
bash
1
curl \
2
-X POST https://api.redoxengine.com/endpoint \
3
-H "Content-Type: application/json" \
4
-H "Authorization: Bearer $API_TOKEN" \
5
-d '{
6
"Meta": {
7
"Extensions": {
8
"sender-organization-id": {
9
"url": "https://api.redoxengine.com/extensions/sender-organization-id",
10
"string": "{{YOUR-ORGANIZATION-OID}}"
11
},
12
"user-id": {
13
"url": "https://api.redoxengine.com/extensions/user-id",
14
"string": "{{SENDING-USER-NAME}}"
15
},
16
"user-role": {
17
"url": "https://api.redoxengine.com/extensions/user-role",
18
"coding": {
19
"code": "112247003",
20
"display": "Medical Doctor"
21
}
22
},
23
"purpose-of-use": {
24
"url": "https://api.redoxengine.com/extensions/purpose-of-use",
25
"coding": {
26
"code": "TREATMENT",
27
"display": "Treatment"
28
}
29
}
30
},
31
"DataModel": "Clinical Summary",
32
"EventType": "DocumentQuery",
33
"Test": true,
34
"Destinations": [
35
{
36
"ID": "ec745338-8849-43ad-a7ce-4bc5bf1d8b89"
37
}
38
],
39
"FacilityCode": "2.16.840.1.113883.3.6147.458.2"
40
},
41
"Patient": {
42
"Identifiers": [
43
{
44
"ID": "{{PATIENT-ID-FROM-PATIENT-SEARCH-QUERY-RESPONSE}}",
45
"IDType": "{{PATIENT-ID-TYPE-FROM-PATIENT-SEARCH-QUERY-RESPONSE}}"
46
}
47
]
48
}
49
}
API reference

Review the Clinical Summary data model schema for more technical details.

Step 2: ClinicalSummary.DocumentQueryResponse

If the request is successful, you receive a synchronous ClinicalSummary.DocumentQueryResponse with a document list with an identifier, type, and date for each document so that you can identify the most relevant documents.

Example: Successful response for a document list from Carequality
json
1
{
2
"Documents": [
3
{
4
"Author": {
5
"Location": {
6
"Type": "General Medicine",
7
"Department": "Health Encounter Site",
8
"Facility": "Cool.io"
9
},
10
"Type": "",
11
"Credentials": [],
12
"FirstName": null,
13
"LastName": null,
14
"IDType": null,
15
"ID": null
16
},
17
"Location": {
18
"Department": "Health Encounter Site"
19
},
20
"Visit": {
21
"Type": "Summarization of episode note",
22
"EndDateTime": "2020-12-10T17:09:50.000Z",
23
"StartDateTime": "2020-12-10T17:09:50.000Z"
24
},
25
"Type": {
26
"Name": "Summarization of episode note",
27
"Codeset": "2.16.840.1.113883.6.1",
28
"Code": "34133-9"
29
},
30
"FileType": "text/xml",
31
"HCID": "urn:oid:2.16.840.1.113883.3.6147.458.8080.2.2.1",
32
"RepositoryUniqueId": "2.16.840.1.113883.3.6147.458.8080.2.2.1",
33
"DateTime": null,
34
"Locale": "en-US",
35
"Title": "Summarization of episode note",
36
"ID": "Mi4xNi44NDAuMS4xMTM4ODMuMTkuNV45MmNjZTU0YS0zYTlmLTYzNGEtNGQyMC03ZTU2NmVjYzMyYWI=^Mi4xNi44NDAuMS4xMTM4ODMuMy42MTQ3LjQ1OC44MDgwLjIuMi4x^dXJuOm9pZDoyLjE2Ljg0MC4xLjExMzg4My4zLjYxNDcuNDU4LjgwODAuMi4yLjE="
37
}
38
],
39
"Patient": {
40
"Identifiers": [
41
{
42
"ID": "45e5fadd-0496-4e48-be26-a06d78f8e950",
43
"IDType": "2.16.840.1.113883.3.6147.458.2"
44
}
45
]
46
},
47
"Meta": {
48
"DataModel": "Clinical Summary",
49
"EventType": "DocumentQuery",
50
"Message": {
51
"ID": 12720346889
52
},
53
"Source": {
54
"ID": "d9c19117-7778-47fd-9f55-b3bccc4055f8"
55
},
56
"Destinations": [
57
{
58
"ID": "ec745338-8849-43ad-a7ce-4bc5bf1d8b89",
59
"Name": "Carequality Sandbox - XCA"
60
}
61
],
62
"Logs": [
63
{
64
"ID": "f30fbf24-5e3f-4503-b899-1fc247f0f996",
65
"AttemptID": "2a215fde-a385-4f5a-bfb1-28a14e7a9605"
66
}
67
]
68
}
69
}

Step 3: ClinicalSummary.DocumentGet

Using Postman or curl, send the ClinicalSummary.DocumentGet request with the relevant metadata:

  • The destination ID changes based on environment type:
    • Development destination ID: ec745338-8849-43ad-a7ce-4bc5bf1d8b89
    • Production destination ID: 628cbf79-1156-4923-b9d0-285906160ed6
  • The FacilityCode represents the OID of the Carequality participant to query.
  • Use a Document.ID from the step 2 response.
    Less is more

    Documents can only be retrieved one at a time. We recommend retrieving only the most relevant documents, not every document on the list.

Example: Retrieve a document from Carequality
bash
1
curl \
2
-X POST https://api.redoxengine.com/endpoint \
3
-H "Content-Type: application/json" \
4
-H "Authorization: Bearer $API_TOKEN" \
5
-d '{
6
"Meta": {
7
"Extensions": {
8
"sender-organization-id": {
9
"url": "https://api.redoxengine.com/extensions/sender-organization-id",
10
"string": "{{YOUR-ORGANIZATION-OID}}"
11
},
12
"user-id": {
13
"url": "https://api.redoxengine.com/extensions/user-id",
14
"string": "{{SENDING-USER-NAME}}"
15
},
16
"user-role": {
17
"url": "https://api.redoxengine.com/extensions/user-role",
18
"coding": {
19
"code": "112247003",
20
"display": "Medical Doctor"
21
}
22
},
23
"purpose-of-use": {
24
"url": "https://api.redoxengine.com/extensions/purpose-of-use",
25
"coding": {
26
"code": "TREATMENT",
27
"display": "Treatment"
28
}
29
}
30
},
31
"DataModel": "Clinical Summary",
32
"EventType": "DocumentGet",
33
"EventDateTime": "2019-08-02T20:09:22.089Z",
34
"Test": true,
35
"Destinations": [
36
{
37
"ID": "ec745338-8849-43ad-a7ce-4bc5bf1d8b89"
38
}
39
],
40
"FacilityCode": "2.16.840.1.113883.3.6147.458.2"
41
},
42
"Document": {
43
"ID": "{{DOCUMENT-ID-FROM-STEP-2}}"
44
}
45
}

Step 4: ClinicalSummary.DocumentGetResponse

If the request is successful, you receive a synchronous ClinicalSummary.DocumentGetResponse with the relevant document of interest.

The raw content is present in the Data field and the type of content in FileType field.

  • For CDA content, FileType is always text/xml, and Data is UTF-8 text content. In this case, we translate the JSON to match the ClinicalSummary.VisitQueryResponse data model (see the response format).
  • For non-CDA content, FileType is whatever the clinical network sends, and Data is always base64-encoded content. This is to support file types like application/pdf or XML content that isn’t CDA.
Example (abbreviated): Successful document retrieval from Carequality
json
1
{
2
"Meta": {
3
"DataModel": "Clinical Summary",
4
"EventType": "DocumentGet",
5
"Message": {
6
"ID": 12720346936
7
},
8
"Source": {
9
"ID": "d9c19117-7778-47fd-9f55-b3bccc4055f8"
10
},
11
"Destinations": [
12
{
13
"ID": "ec745338-8849-43ad-a7ce-4bc5bf1d8b89",
14
"Name": "Carequality Sandbox - XCA"
15
}
16
],
17
"Logs": [
18
{
19
"ID": "8ebf45b3-3c60-4d35-8f93-a1b754eded73",
20
"AttemptID": "62dc89d4-6d59-418b-95b1-131fae7a721d"
21
}
22
]
23
},
24
"Header": {
25
"Document": {
26
"Title": "C-CDA R2.1 Patient Record: Adolfo Kessler",
27
"Visit": {
28
"Location": null,
29
"VisitNumber": "",
30
"EndDateTime": "",
31
"StartDateTime": ""
32
},
33
"Author": {
34
"Location": {
35
"Facility": "MADISON ANESTHESIOLOGY CONSULTANTS, LLP"
36
}
37
},
38
"ID": "2.16.840.1.113883.19.5^92cce54a-3a9f-634a-4d20-7e566ecc32ab",
39
"TypeCode": {
40
"AltCodes": [],
41
"CodeSystemName": "LOINC",
42
"CodeSystem": "2.16.840.1.113883.6.1",
43
"Name": "Summarization of episode note",
44
"Code": "34133-9"
45
},
46
"Type": "Summarization of episode note",
47
"DateTime": "2020-12-10T17:09:50.000Z",
48
"Locale": "US"
49
},
50
"Patient": {
51
"Demographics": {
52
"MaritalStatus": "",
53
"Religion": "",
54
"Ethnicity": "Not hispanic or latino",
55
"Race": "White",
56
"Address": {
57
"County": "",
58
"ZIP": "53711",
59
"Country": "",
60
"State": "Wisconsin",
61
"City": "Madison",
62
"StreetAddress": "602 Schiller Junction Suite 68"
63
},
64
"Sex": "Male",
65
"SSN": "",
66
"DOB": "2002-10-31T17:09:50.000Z",
67
"EmailAddresses": [],
68
"PhoneNumber": {
69
"Mobile": "",
70
"Office": "",
71
"Home": ""
72
},
73
"LastName": "Kessler",
74
"FirstName": "Adolfo"
75
},
76
"Identifiers": [
77
{
78
"IDType": "2.16.840.1.113883.19.5",
79
"ID": "j8p2NtTbAL7rTWRRhe7kSK"
80
}
81
]
82
}
83
},
84
"Data": "",
85
"FileType": "text/xml",
86
...
87
}

Next steps

FHIR® is a registered trademark of Health Level Seven International (HL7) and is used with the permission of HL7. Use of this trademark does not constitute an endorsement of products/services by HL7®.