Query/Retrieve levelswhich keys go where, and how they match

C-FIND, C-MOVE and C-GET all work on a four-level hierarchy: patient, study, series, image. The level you name decides which keys the request must carry, what matches and what comes back. This page puts the rules in tables.

The two information models

Each model has its own SOP Classes for FIND, MOVE and GET. The older Patient/Study Only model is retired. Study Root is common in practice.

Information modelTop levelLevels and their (0008,0052) valueFINDMOVEGET
Patient RootPatientPATIENT, STUDY, SERIES, IMAGE1.2.840.10008.5.1.4.1.2.1.11.2.840.10008.5.1.4.1.2.1.21.2.840.10008.5.1.4.1.2.1.3
Study RootStudySTUDY, SERIES, IMAGE1.2.840.10008.5.1.4.1.2.2.11.2.840.10008.5.1.4.1.2.2.21.2.840.10008.5.1.4.1.2.2.3

In Study Root the patient attributes are treated as attributes of the study, so Patient's Name and Patient ID are required keys at the study level. The word IMAGE is historical: the level covers any composite object instance, not only images.

Levels, unique keys and required keys

One unique key identifies a single entity at its level. Required keys are keys every C-FIND SCP must be able to match on. All other attributes of the level are optional keys.

LevelModelUnique keyRequired keys
PATIENTPatient Root onlyPatient ID (0010,0020)Patient's Name (0010,0010)
STUDYPatient RootStudy Instance UID (0020,000D)Study Date (0008,0020), Study Time (0008,0030), Accession Number (0008,0050), Study ID (0020,0010)
STUDYStudy RootStudy Instance UID (0020,000D)Study Date, Study Time, Accession Number, Study ID, plus Patient's Name (0010,0010) and Patient ID (0010,0020)
SERIESBothSeries Instance UID (0020,000E)Modality (0008,0060), Series Number (0020,0011)
IMAGEBothSOP Instance UID (0008,0018)Instance Number (0020,0013)

Patient ID may not be unique worldwide, but the Study Instance UID is, so no two studies can be mixed up. The scope of a Patient ID can be given with the Issuer of Patient ID (0010,0021), an optional key.

What the identifier must and must not contain

The rules for the baseline behaviour, which every SCU and SCP supports. "Above" means the levels higher in the hierarchy than the level named in (0008,0052).

RequestUnique keysOther keysNot allowed
C-FIND, baseline (hierarchical search)A single value for the unique key of every level above the query level. At the query level, the unique key may be a single value, empty (universal) or a list of UIDs.Required and optional keys of the query level. An SCU may not assume the SCP supports optional keys.Required or optional keys of the levels above the query level.
C-FIND, relational (extended negotiation)The unique key of the query level: single value, wildcard, universal or a list of UIDs.Any combination of keys at any level. The SCP matches on all of them.Nothing is excluded: the restriction that levels above must be pinned by their unique key is lifted.
C-MOVE and C-GET, baselineA single value for the unique key of every level above the retrieve level. At the retrieve level one UID, or a list of UIDs when retrieving at STUDY, SERIES or IMAGE level.C-MOVE also needs the Move Destination AE title (0000,0600).Required keys and optional keys. A retrieve carries the unique keys and nothing else to select with.

An SCP answers a C-FIND by searching from the top level down: at each level above the query level it needs an entity with the given unique key, and at the query level it returns one response per match. No match at any step is a normal success with no identifier.

Worked examples

Study Root unless stated. Values after the equals sign are examples; an empty value on the right means "return this".

I want toRequestIdentifier
Find a patient's studies in January 2026C-FIND, level STUDY(0008,0052)=STUDY, (0010,0020)=12345678, (0008,0020)=20260101-20260131, (0020,000D)= (empty), (0008,0050)= (empty)
Find the studies of a patient in Patient RootC-FIND, level STUDY(0008,0052)=STUDY, (0010,0020)=12345678 (the single unique key of the patient level above), study-level keys to return
List the series of one studyC-FIND, level SERIES(0008,0052)=SERIES, (0020,000D)=1.2.840... (single value), (0008,0060)= (empty), (0020,000E)= (empty)
List the images of one seriesC-FIND, level IMAGE(0008,0052)=IMAGE, (0020,000D)= single value, (0020,000E)= single value, (0008,0018)= (empty), (0020,0013)= (empty)
Retrieve a whole studyC-MOVE or C-GET, level STUDY(0008,0052)=STUDY, (0020,000D)=1.2.840...; for C-MOVE also (0000,0600)=VIEWER_AE
Retrieve two seriesC-MOVE or C-GET, level SERIES(0008,0052)=SERIES, (0020,000D)= single value, (0020,000E)=uid1\uid2 (list of UIDs)
Retrieve one imageC-MOVE or C-GET, level IMAGE(0008,0052)=IMAGE, study UID and series UID as single values, (0008,0018)= the SOP Instance UID

What a C-MOVE or C-GET transfers at each level

A retrieve can be at any level, but the transfer itself always takes place at the instance level, as C-STORE sub-operations.

LevelWhat is transferred
PATIENTAll composite object instances related to the patient (Patient Root only).
STUDYAll composite object instances related to the study.
SERIESAll composite object instances related to the series.
IMAGEThe selected individual composite object instances.

With list-of-UID matching, the baseline behaviour lets one request retrieve more than one study, series or image.

Matching types

How a value in a request key is interpreted. They apply in a C-FIND; in a retrieve, unique keys use single values or lists of UIDs.

TypeHow to write itApplies toNotes
Single valueThe exact value.All attributes.Dates and times are matched by meaning, not as text, so 223000 matches 2230. A hyphen in a date or time value means a range.
List of UIDsUIDs separated by a backslash: uid1\uid2.UI attributes.Each UID in the list may produce a match.
UniversalA zero-length value.All attributes.Everything matches, and the attribute is returned in the responses. This is how you ask for a return key. A lone * has the same effect.
Wild card* matches any sequence of characters including none, ? matches any single character.AE, CS, LO, LT, PN, SH, ST, UC, UR and UT.Case sensitive, except for PN (person names), where it is implementation dependent and stated in the Conformance Statement. There is no way to match a literal * or ?.
Range20260101-20260131 between, -20260131 up to and including, 20260101- from and later.Dates and times (DA, TM, DT).Not defined for other types of attribute. Combined date and time ranges need extended negotiation.
SequenceA sequence with a single item that holds the item keys.SQ attributes.Matches if all item keys match at least one item. An empty item returns the whole sequence.
Empty valueExactly two quotation marks: "".AE, CS, DA, DT, LO, LT, PN, SH, ST, TM, UC, UR and UT.Needs extended negotiation. Matches a zero-length value or an attribute that is not present.

Matching of DS and IS values (numbers written as text) is implementation dependent, so `+7` and `007` may or may not match `7`. The SCP states its behaviour in its Conformance Statement.

Key types and what an SCP must support

Key typeMeaningSCP obligationIn a C-FINDIn a C-MOVE or C-GET
UniqueOne value identifies exactly one entity at its level.Supports existence and matching of all unique keys. Every entity has a non-zero length unique key value.May be present.Must be present.
RequiredA value does not have to identify a single entity.Supports existence and matching. A zero-length value in the SCP means "unknown" and always matches.May be present.Must not be present.
OptionalEverything else at the level.Free to support or not. If existence is not supported the attribute is never returned. If matching is not supported it is treated like a zero-length required key and matches everything. The SCP's Conformance Statement must list the optional keys it supports.May be present.Must not be present.

Because an SCP may ignore optional keys, an SCU has to be ready to filter the responses itself. To see which optional keys a PACS supports, read the Query/Retrieve section of its Conformance Statement.

Glossary

Information model
The hierarchy an archive exposes to queries: Patient Root (patient, study, series, image) or Study Root (study, series, image).
Query/Retrieve level
The level a request works at, given in (0008,0052): PATIENT, STUDY, SERIES or IMAGE.
Unique key
The one attribute per level that identifies a single entity: Patient ID, Study Instance UID, Series Instance UID or SOP Instance UID.
Required key
A key that every C-FIND SCP has to be able to match on, such as Study Date or Modality.
Optional key
Any other attribute of the level. An SCP may or may not support it.
Hierarchical search
The baseline C-FIND method. The request pins every level above the query level with its unique key.
Relational query
An extended C-FIND method, agreed in negotiation, that allows keys at any level in any combination.
Universal matching
A zero-length key value. Everything matches and the attribute is returned.

Summary

  • There are four levels: PATIENT, STUDY, SERIES and IMAGE. Patient Root has all four, Study Root starts at STUDY.
  • The unique keys are Patient ID, Study Instance UID, Series Instance UID and SOP Instance UID. They identify one entity at their level.
  • A baseline C-FIND pins every level above the query level with a single unique key value and does not carry keys of those levels. Relational queries lift that rule when both sides negotiate them.
  • A C-MOVE or C-GET carries the unique keys down to its level and no required keys. A list of UIDs at the retrieve level retrieves several entities at once.
  • Optional keys can be silently ignored by the SCP, so filter the responses yourself. Wild cards are case sensitive except for person names.

Common questions

What is the difference between Patient Root and Study Root?

Patient Root is a four-level hierarchy that starts at the patient: patient, study, series, image. Study Root starts at the study and treats the patient attributes as attributes of the study, so Patient's Name and Patient ID become required keys at the study level. Study Root is common in practice. A device that supports one model does not necessarily support the other.

Why does my series-level query return nothing without a Study Instance UID?

In the baseline behaviour a query below the top level has to pin every level above it with a single unique key value. A SERIES query therefore needs the Study Instance UID, and in Patient Root also the Patient ID. Some SCPs accept relational queries, which allow keys at any level, but only if both sides negotiate them.

What is the difference between a unique key and a required key?

A unique key identifies exactly one entity at its level: no two studies share a Study Instance UID. A required key, such as Study Date or Modality, only has to be matchable by the SCP, and many entities can share a value. A retrieve must carry the unique keys and must not carry required keys.

Why do I get more results than my optional key should allow?

An SCP is free not to support an optional key. If it supports the key but not matching on it, the key behaves like an empty required key and matches everything. If it does not support the key at all, it is not returned. Treat optional keys as an optimisation to save network traffic, and filter the responses on the client.

How do I search for a date range or a name prefix?

A date range is written with a hyphen: 20260101-20260131, or -20260131 for "up to" and 20260101- for "from". A name prefix uses a wild card: SMITH* matches every name that starts with SMITH. Wild cards are case sensitive except for person names, where the SCP decides and states it in its Conformance Statement.

Can one C-MOVE retrieve several studies?

Yes. In the baseline behaviour the unique key at the retrieve level can be a list of UIDs separated by backslashes when the level is STUDY, SERIES or IMAGE. The PACS then sends all the instances of all of them. The transfer itself always takes place per instance, as C-STORE sub-operations.

Try it yourself

← All lessons