Developers

REST. FHIR. Webhooks. MCP.

Everything a person can do in HealthTable goes through the same APIs you get. Build your product on it, sync it with your systems or give your assistants safe read access.

Create a record
curl https://api.healthtable.example/api/v1/tables/$TABLE_ID/records \
  -H "Authorization: Bearer $HT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "data": {
      "fld_reason": "Medication question",
      "fld_due_at": "2026-11-02T16:00:00Z",
      "fld_patient": ["rec_pt482"]
    }
  }'

REST API

Records in, records out.

A public REST surface for listing, reading, creating, updating and deleting records, with the same validation and permissions as the app. The spec is published as OpenAPI 3.1, so you can generate a client in your language.

  • Scoped API keys per application, limited to the tables and actions they need
  • Field validation from the table definition, not a separate schema
  • Every API write lands in the event log with the key that made it

GET/api/v1/tables/{tableId}/records

GET/api/v1/tables/{tableId}/records/{recordId}

POST/api/v1/tables/{tableId}/records

PATCH/api/v1/tables/{tableId}/records/{recordId}

DELETE/api/v1/tables/{tableId}/records/{recordId}

GET/v1/openapi.json

FHIR R4 API

A standard endpoint for every clinical app.

Each FHIR app serves its own base URL. The CapabilityStatement reflects the packs installed, and every resource version comes from the event log.

  • metadata, read, vread, search, create, update, delete, history
  • Transaction and batch bundles
  • ValueSet expansion and code validation, CodeSystem lookup, resource $validate
  • Bulk Data $export and SMART configuration discovery

Webhooks

Know when something changes.

Subscribe an endpoint to record events. Each delivery carries an HMAC SHA256 signature with a timestamp, so you can verify it came from HealthTable and reject replays.

  • Signed with a per webhook secret
  • Retries with backoff when your endpoint is down
  • Incoming webhooks can trigger automations too
Verify a delivery (Node)
import { createHmac, timingSafeEqual } from "node:crypto";

// X-HT-Signature: t=<unix seconds>,v1=<hex hmac>
export function verify(rawBody: string, header: string, secret: string) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
  const signed = `${parts.t}.${rawBody}`;
  const expected = createHmac("sha256", secret).update(signed).digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
  return fresh && timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}
Connect an assistant (read only)
{
  "mcpServers": {
    "triage-app": {
      "url": "https://api.healthtable.example/mcp/v1",
      "headers": { "Authorization": "Bearer $HT_API_KEY" }
    }
  }
}

// tools: describe_schema, query_records, get_record, aggregate

MCP server

Let your assistants read the app, safely.

Every application exposes a Model Context Protocol server. Assistants can describe the schema, query and aggregate records, scoped by an API key and logged like any other client.

  • Tools: describe_schema, query_records, get_record, aggregate
  • Read only today
  • The same permissions and audit as every other API

Also available

More ways to connect.

Zapier

Connect HealthTable to thousands of apps without writing code.

Sandboxed scripts

Run your own script as an automation step, isolated from the platform.

Exchange formats Roadmap

HL7 v2, Consolidated CDA and X12 eligibility and claims are planned.

Want to build on HealthTable?

Tell us what you are building. We will set up a sandbox application and walk your team through the APIs.