Skip to main content
Run Ferrum locally in minutes.

Docker

Requires Docker and Docker Compose.
curl -fsSL https://get.ferrum.thalamiq.io | sh
This creates a ferrum directory and starts the stack. Two containers run:

Working with FHIR Resources

Create

Create a Patient with PUT:
curl -X PUT http://localhost:8080/fhir/Patient/example-patient \
  -H "Content-Type: application/fhir+json" \
  -d '{
    "resourceType": "Patient",
    "id": "example-patient",
    "name": [{"family": "Smith", "given": ["John"]}],
    "gender": "male",
    "birthDate": "1974-12-25"
  }'
Response includes meta.versionId and meta.lastUpdated:
{
  "resourceType": "Patient",
  "id": "example-patient",
  "name": [{ "family": "Smith", "given": ["John"] }],
  "gender": "male",
  "birthDate": "1974-12-25",
  "meta": {
    "versionId": "1",
    "lastUpdated": "2026-01-11T18:15:25.865119+00:00"
  }
}

Read

curl http://localhost:8080/fhir/Patient/example-patient
curl http://localhost:8080/fhir/Patient
Returns a FHIR Bundle. Example search parameters:
# Search by family name
curl http://localhost:8080/fhir/Patient?family=Smith

# Search by birthdate
curl http://localhost:8080/fhir/Patient?birthdate=1974-12-25

Update

curl -X PUT http://localhost:8080/fhir/Patient/example-patient \
  -H "Content-Type: application/fhir+json" \
  -d '{
    "resourceType": "Patient",
    "id": "example-patient",
    "name": [{"family": "Smith", "given": ["John", "William"]}],
    "gender": "male",
    "birthDate": "1974-12-25",
    "telecom": [{
      "system": "email",
      "value": "john.smith@example.com"
    }]
  }'
Response includes versionId: "2".

Delete

curl -X DELETE http://localhost:8080/fhir/Patient/example-patient
Returns 204 No Content.

Configuration

Edit config.yaml in the ferrum directory. See Configuration for details.