NEW!

FHIR Resource Validator

Validate FHIR R4 JSON resources in your browser. Check required fields, data types, and value sets for Patient, Observation, Bundle, and more. 100% private.

Local Processing β€” No PHI Transmitted

Your medical data never leaves your device. Local processing helps support HIPAA-conscious workflows.

HIPAA-Conscious Design No PHI Transmission Local Processing
πŸ”’ Your FHIR resource is validated entirely in your browser. No payload is ever uploaded.

Examples

Supported resource types

Migrating from HL7 v2? Use the HL7 v2 to FHIR Mapper.

Keywords

fhir validatorfhir r4 resource validatorvalidate fhir jsonfhir online validatorfhir bundle validation

Need something else?

How to use

1

Paste your FHIR R4 JSON resource into the input box, or upload a .json file. You can also drop a file directly onto the text area.

2

Click Validate. The tool parses the JSON and checks it against the R4 structure for that resource type β€” required fields, cardinality, data-type formats, and required value sets.

3

Review the issues table, which lists each error and warning with its element path (for example Patient.birthDate) and, where possible, a suggested fix.

4

For Bundles, every contained resource is validated and issues are reported with their full path inside the Bundle. Use the example buttons to see common error patterns.

Features

Structural R4 Validation

Checks the most common FHIR R4 resource types for required fields, single-versus-repeating cardinality, and correct primitive data types, catching the structural mistakes that break interoperability before you send a resource to a server.

Required Value-Set Binding Checks

Coded fields such as Observation.status and Bundle.type are checked against their required value sets, so an invalid status like "done" instead of "final" is flagged with the list of allowed codes.

Path-Level Error Reporting

Every issue points to the exact element where it occurs, using a familiar FHIRPath-style path like MedicationRequest.intent, so you can jump straight to the problem instead of hunting through nested JSON.

Recursive Bundle Validation

Drop in a Bundle and each entry's resource is validated independently, with issues reported at their full path inside the Bundle, which is essential when debugging transaction and collection payloads.

100% Client-Side

Unlike the official validator, which needs a Java runtime and server setup, this runs entirely in your browser. No FHIR payload, which frequently contains protected health information, is ever uploaded.

Why Choose This Tool?

PHI Never Leaves Your Browser

FHIR resources routinely carry patient names, identifiers, and clinical data. Server-based validators upload that payload, which is a compliance risk. This validator runs entirely client-side, so protected health information stays on your device while you debug a resource.

Instant, No Setup

The reference validator from HL7 is powerful but requires installing Java and configuring packages. For the common case of "is this resource structurally valid?", a browser tool that returns an answer in milliseconds removes all that friction, which matters when you are iterating on an integration.

Built for the Migration Wave

Healthcare is moving from HL7 v2 to FHIR, and engineers doing that work need quick feedback on the resources they produce. This validator pairs with the HL7 v2 to FHIR Mapper so you can convert and then immediately check the result, all in one private workflow.

Clear, Actionable Output

Instead of a wall of schema jargon, issues are presented as a readable table with severity, element path, and a plain-language message plus a fix suggestion where one applies, so even developers new to FHIR can act on the results.

What Is FHIR, and What Does Validating a Resource Actually Check?

FHIR in One Paragraph

FHIR β€” Fast Healthcare Interoperability Resources β€” is the modern standard for exchanging healthcare data, developed by HL7 to replace the cryptic pipe-delimited messages of HL7 v2 with clean, web-friendly JSON (or XML). In FHIR, every piece of clinical information is a resource: a Patient, an Observation, a MedicationRequest, a DiagnosticReport, and so on. Resources reference each other and can be bundled together, and they are exchanged over ordinary RESTful APIs. R4 is the most widely deployed version and the one most integrations target today, which is exactly why this validator checks your resources against R4 structural rules.

Why Validation Matters

A FHIR server will reject a resource that does not conform to the standard, and subtle structural mistakes are easy to make by hand or when transforming data from another format. Validating before you send saves a frustrating round-trip and surfaces problems while the context is fresh. Validation answers a precise question: does this JSON match the rules FHIR defines for its resource type?

What This Validator Checks

  • Resource type. Every resource must declare a resourceType. Without it, nothing else can be checked.
  • Required fields. Each resource type defines fields that must be present. An Observation, for instance, requires both status and code; a Bundle requires type. Missing a required field is a hard error.
  • Cardinality. Some fields appear once (0..1), others repeat (0..*). Supplying an array where a single value is expected, or vice versa, is flagged.
  • Data types. FHIR primitives have strict formats. A date must look like YYYY, YYYY-MM, or YYYY-MM-DD; an instant needs a full timestamp with a timezone. A number where a date string is expected is caught immediately.
  • Required value sets. Certain coded fields may only contain specific codes. An Observation status of "done" is invalid because the allowed set is registered, preliminary, final, and so on.

Errors vs Warnings

Not every issue is fatal. The validator separates hard errors β€” a missing required field, a wrong data type, a code outside a required value set β€” from warnings, which flag things that are suspicious but technically allowed, such as a CodeableConcept with neither a coding nor text. Treat errors as blockers and warnings as prompts to double-check intent.

Bundles and Nested Resources

A Bundle is a container that carries other resources, used for transactions, search results, documents, and message payloads. Validating a Bundle means validating each contained resource too. This tool recurses into every entry and reports issues with their full path, so a missing Observation status inside the third entry of a Bundle is pinpointed precisely rather than hidden in the nesting. Because real-world FHIR traffic is so often wrapped in Bundles, this recursive behavior is what makes the validator useful beyond toy examples.

Common Mistakes the Validator Catches

A few errors come up again and again, especially when resources are built by hand or transformed from another format. Dates are a frequent offender: writing a birthDate as "12/05/1990" instead of "1990-05-12" fails because FHIR dates must be ISO-8601. Status codes are another: typing "done" or "complete" where the value set expects "final" is invalid, and the validator lists the allowed codes so you can correct it. Cardinality slips happen when a field that should be a single value is supplied as an array, or a repeating field is given as a bare object. And the simplest mistake of all β€” forgetting the resourceType property β€” stops validation before anything else can be checked. Seeing these flagged with the exact element path turns a vague "the server rejected it" into a precise, fixable problem.

The Limits of a Lightweight Validator

This validator is pragmatic, not exhaustive. It covers the common resource types and the structural rules that catch most real-world mistakes, but it does not implement the full FHIR specification, every profile, terminology server lookups, or custom implementation-guide constraints. For formal conformance testing against a specific implementation guide, use the official HL7 validator. For the everyday question of "is this resource structurally sound before I send it?", a fast browser check is exactly the right tool, and it keeps your data private while doing so.

Frequently Asked Questions

Is my FHIR data uploaded to a server?

No. The resource is parsed and validated entirely in your browser. FHIR resources often contain protected health information such as patient names and clinical details, so keeping everything client-side avoids a compliance risk. You can confirm no upload occurs by watching your browser's network tab while validating.

Which FHIR version does it validate against?

It validates against FHIR R4, the most widely deployed version and the target of most current integrations. The checks cover required fields, cardinality, primitive data-type formats, and required value-set bindings for the supported resource types.

Which resource types are supported?

The validator supports the most common types including Patient, Observation, DiagnosticReport, Bundle, Encounter, Condition, MedicationRequest, and Practitioner. Other resource types are accepted but receive only a basic resourceType check, with a note that the deeper validation does not apply.

What is the difference between an error and a warning?

An error means the resource violates a rule and a FHIR server would likely reject it β€” a missing required field, a wrong data type, or a code outside a required value set. A warning flags something suspicious but technically allowed, such as a CodeableConcept with neither coding nor text. Errors are blockers; warnings are prompts to review.

Can it validate a Bundle?

Yes. When you validate a Bundle, every resource contained in its entries is validated too. Issues are reported with their full path inside the Bundle, for example Bundle.entry[2].resource.Observation.status, so you can locate a problem in a large payload precisely.

How is this different from the official HL7 validator?

The official HL7 validator is the authoritative tool for formal conformance testing, but it requires a Java runtime and configuration. This tool is a fast, browser-based structural check for the common case, with no setup and full privacy. Use this for quick iteration and the official validator for formal certification against an implementation guide.

I am converting from HL7 v2 β€” how does this help?

After converting an HL7 v2 message to FHIR, you can paste the resulting resource here to confirm it is structurally valid before sending it to a server. The tool links to the HL7 v2 to FHIR Mapper so you can move between conversion and validation in one private workflow.

Is the FHIR validator free?

Yes, completely free with no registration, no upload limits, and no ads. Structural validation, value-set checks, path-level error reporting, and recursive Bundle validation are all available at no cost, with every operation running privately in your browser.

Learn more