Validation - $validate

Firely Server can validate a resource against a profile as defined in the $validate operation.

You can call validate on three levels:

  1. Validate on the system level

  2. Validate on the ResourceType level

  3. Validate an instance from the database

Besides that you can configure Firely Server to validate every incoming resource and even filter on specific profiles. See the section on Validating incoming resources. In all cases, the Precondition is that Firely Server must have access to all relevant StructureDefinitions.

Validation has some Limitations.


The very first validation call will take a considerable amount of time, typically around 5 seconds. This is because Firely Server maintains a cache of validation information, and on the first call that cache is still empty. Subsequent calls are much faster.

Validate on the system level

POST <firely_server_endpoint>/$validate[?profile=<canonical-url-of-structuredefinition>]

There are two ways of calling $validate:

  1. With a Resource or a Bundle of resources as body, and optionally, a profile parameter on the url.

  2. With a Parameters resource as body, having

    • a parameter element with the Resource to validate in the resource parameter;

    • (optionally) the profile to validate against in the profile parameter

In both cases the request must have a Content-Type header matching the format of the body (application/fhir+json or application/fhir+xml).

If you do not specify a profile parameter, Firely Server will validate the Resource against any profiles mentioned in meta.profile as well as the base profile from the FHIR Specification.

If you call $validate on the system level, Firely Server will make no assumptions about the ResourceType of the Resource to validate.

Validate on the ResourceType level

POST <firely_server_endpoint>/<resourcetype>/$validate[?profile=<canonical-url-of-structuredefinition>]

You can call $validate in the same two ways as with Validate on the system level.

If you call $validate on the ResourceType level, Firely Server will check whether the Resource to validate is of the same <resourcetype> as provided in the url.

Validate an instance from the database

GET <firely_server_endpoint>/<resourcetype>/<id>/$validate[?profile=<canonical-url-of-structuredefinition>]

This time you can only use the (optional) profile parameter on the url to specify a StructureDefinition to validate against.


Firely Server must be aware of all the StructureDefinitions referenced directly via parameter or indirectly by a profile in meta.profile. Refer to the Managing Conformance Resources for more information.


  1. The mode parameter is not yet supported.

  2. Implicit ValueSets (ones that use the .filter property) are not supported - create explicit ones instead (without the .filter property).