<10ms
Create and update latency
Haste Health normalizes Epic, Cerner, HL7v2, and any FHIR-compatible system into one API, giving you a headless layer to power your apps and AI agents.
$ haste-health api search-type Patient "name=chen&_count=1"
{
"resourceType": "Bundle",
"type": "searchset",
"total": 1,
"entry": [{
"resource": {
"resourceType": "Patient",
"id": "xufn84vpa69b_998c1",
"name": [{ "family": "Chen", "given": ["Maya"] }]
}
}]
}Point EHRs, HL7v2 interfaces, and other FHIR servers at Haste Health. What comes out is one normalized FHIR R4 API that powers patient and provider apps, analytics, partner integrations, and AI agents alike.
The plumbing most healthcare startups end up writing from scratch, shipped as part of the platform.
Apache-2.0 licensed. docker compose up runs the full stack locally, with pre-built binaries and container images for production. Own your infrastructure and your data from day one.
14 tools generated live from your server's CapabilityStatement give agents structured search, read, write, and schema-discovery over FHIR data.
Custom operations run as sandboxed TypeScript in an embedded Deno runtime, stored and versioned as FHIR OperationDefinition resources. Extend the platform, not a private fork of it.
SQL-on-FHIR ViewDefinitions flatten resources into CSV, JSON, or NDJSON on demand, with a visual editor in the Admin App. Point a BI tool at clinical data without building an ETL pipeline.
Attribute-based policies scope agents and users down to compartments and conditions. Every request can emit a real FHIR AuditEvent, and resource history is immutable at the storage layer.
Tenant and Project scoping reach all the way down. Every query is filtered by tenant and project at the storage and search layers, so one deployment can serve every customer without re-architecting later.
An agent asks a plain-English question. Haste Health answers over MCP or the same auto-generated OpenAPI spec, with spec-conformant FHIR data and clear, actionable errors in the event of failure.
Agent asks
"Find this patient's blood pressure readings from the last 30 days."
{
"tool": "fhir_r4_search",
"arguments": {
"resourceType": "Observation",
"code": "85354-9",
"date": "ge2026-07-19",
"patient": "xufn84vpa69bโฆ998c1"
}
}Haste Health responds
{
"resourceType": "Bundle",
"type": "searchset",
"total": 1,
"entry": [{
"resource": {
"resourceType": "Observation",
"id": "bp-8f2a1c",
"meta": { "profile": [
"http://hl7.org/fhir/us/core/StructureDefinition/us-core-blood-pressure"
] },
"status": "final",
"category": [{ "coding": [
{ "system": ".../observation-category", "code": "vital-signs" }
] }],
"code": { "coding": [
{ "system": "http://loinc.org", "code": "85354-9" }
] },
"subject": { "reference": "Patient/xufn84vpa69bโฆ998c1" },
"effectiveDateTime": "2026-08-12T09:14:00Z",
"component": [
{
"code": { "coding": [
{ "system": "http://loinc.org", "code": "8480-6" }
] },
"valueQuantity": {
"value": 128, "unit": "mmHg",
"system": "http://unitsofmeasure.org", "code": "mm[Hg]"
}
}
// + 1 more item: diastolic (LOINC 8462-4), same shape
]
}
}]
}A Rust core built to keep latency low and throughput high without oversized infrastructure.
<10ms
Create and update latency
>25k/s
Writes per second, 10 threads
<50ms
Typical search response
<100MB
Memory footprint per instance
Benchmarked on a single machine with Postgres 18 and a Synthea-generated dataset, 10 threads.
Skip months of FHIR plumbing and compliance scaffolding. Self-host under Apache-2.0 and spend your runway on your product, not your data layer.
Normalize Epic, Cerner, and HL7v2 feeds into one API for patient timelines, care coordination, and clinical workflows.
Support eligibility, prior authorization, and claims-adjacent workflows on FHIR-first APIs instead of brittle X12 glue code.
A headless data layer means agents get first-class, structured access โ not a scraped UI or a bolted-on integration.
TOTP-based MFA, argon2 password hashing, and CSRF-protected auth flows. Scoped OAuth clients for every agent. Attribute-based access policies. Immutable, versioned resource history. The controls a HIPAA review actually asks for, not a checkbox.