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
- Choose the Bundle type: collection, transaction, batch, document, message, searchset or history. FHIR Bundle Types Explained covers what each one means.
- Add entries: pick a Patient, Observation or Condition template, or paste or drop your own resource JSON.
- Each entry gets a generated
fullUrl(urn:uuid:...). For transaction and batch Bundles, arequestis added automatically:PUT ResourceType/idwhen the resource has anid, otherwisePOST ResourceType. - 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-nothing | transaction |
| Run several independent requests in one round trip | batch |
| Share a set of resources (export, examples, test data) | collection |
| Package a signed clinical document | document (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'
fullUrlvalues. Run the Bundle through the Reference Resolver to catch typos. - Batches: entries must not depend on each other. A
urn:uuidreference to another batch entry won't be resolved. - Documents: the first entry must be a Composition, and the Bundle needs an
identifierand atimestamp. The builder doesn't add these for you. - Validate: the FHIR Validator checks request and response elements,
totalandsearchusage, and duplicatefullUrls.
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,PATCHor 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.