FHIR Bundle Builder

Assemble FHIR bundles from individual resources. Supports transaction, batch, collection, and document bundle types.

  • Assemble transaction, batch, collection, and document Bundles from individual resources.

How to build a Bundle

  1. Choose the Bundle type: collection, transaction, batch, document, message, searchset or history. FHIR Bundle Types Explained covers what each one means.
  2. Add entries: pick a Patient, Observation or Condition template, or paste or drop your own resource JSON.
  3. Each entry gets a generated fullUrl (urn:uuid:...). For transaction and batch Bundles, a request is added automatically: PUT ResourceType/id when the resource has an id, otherwise POST ResourceType.
  4. Optionally set a Bundle id. Then copy or download the generated Bundle, or open it in another tool.

Everything is assembled in your browser.

Worked example: a transaction

Add a Patient template and an Observation, set the type to transaction, and the builder produces entries like:

{
  "fullUrl": "urn:uuid:4b2e7c1a-9d3f-4e8b-a6c5-1f0d2e3b4a59",
  "resource": { "resourceType": "Patient", "name": [{ "family": "Shaw", "given": ["Amy"] }] },
  "request": { "method": "POST", "url": "Patient" }
}

To link them, edit the Observation's subject to reference the Patient's fullUrl:

"subject": { "reference": "urn:uuid:4b2e7c1a-9d3f-4e8b-a6c5-1f0d2e3b4a59" }

POST the Bundle to the server's base URL (not to /Bundle). The server creates both resources in one atomic operation and rewrites the urn:uuid reference to the new Patient/{id}.

Choosing the type

You want to…Use
Create or update related resources together, all-or-nothingtransaction
Run several independent requests in one round tripbatch
Share a set of resources (export, examples, test data)collection
Package a signed clinical documentdocument (first entry must be a Composition)

searchset, history and the response types are produced by servers. Build them here only to create test fixtures.

Before you send it

  • Transactions: references between entries must use the entries' fullUrl values. Run the Bundle through the Reference Resolver to catch typos.
  • Batches: entries must not depend on each other. A urn:uuid reference to another batch entry won't be resolved.
  • Documents: the first entry must be a Composition, and the Bundle needs an identifier and a timestamp. The builder doesn't add these for you.
  • Validate: the FHIR Validator checks request and response elements, total and search usage, and duplicate fullUrls.

Limitations

  • Templates cover Patient, Observation and Condition. Paste any other resource type as JSON.
  • Conditional operations (ifNoneExist, ifMatch) aren't set by the form. Add them to the generated JSON if you need idempotent loads.
  • Request methods default as described above. Edit the JSON for DELETE, PATCH or conditional URLs.

FAQ

Why does every entry get a new UUID?

fullUrl must be unique within a Bundle, and urn:uuid values are the standard way to identify resources that don't have server ids yet. They're random, so they reveal nothing about the patient.

Can I load the Bundle into a server from here?

No. The builder produces the JSON; send it with your own client, curl, or Postman.

Which FHIR versions does it support?

The Bundle structure (type, entry, fullUrl, request) is the same in R4, R4B and R5, so the output works in all three. R5 adds the subscription-notification type, which servers produce, not clients.

Is anything sent to a server?

No. The Bundle is assembled in this page; you download or copy it and send it with your own client.

FHIR Toolbox is a free collection of HL7 FHIR tools by Omindra Labs. The tools process your data in your browser; it is not uploaded for normal tool operations.