Skip to main content

Claim Types

Every claim carries a type describing what kind of care it covers. It serializes as a nested object:

{
"type": {
"name": "medical",
"type_id": 1
}
}

The set is closed. There are five values, they are fixed in the application rather than stored in a configurable table, and they are not tenant-configurable — you will not see a different set for a different employer.

nametype_idSuggested label
medical1Medical
dental2Dental
rx3Rx
vision4Vision
facility5Facility

A static five-entry map is enough to render these. You don't need to handle carrier-specific codes: carriers send us a wide range of proprietary type codes, and we normalize all of them onto these five before they reach the API.

type can be null

When the carrier doesn't tell us what kind of claim it is, the whole type object is null — not an object with an empty name:

{
"type": null
}

This is uncommon but not rare, so handle it explicitly rather than assuming type is always present. Displaying it as "Unknown" is the convention we use in the TPA Stream web app. The claim webhook example payload shows a claim in this state.

name values are identifiers, not labels

The name strings are stable machine identifiers. They are always lowercase, so you get rx — never Rx or RX.

Don't render them to end users as-is. If you're generating labels programmatically, title-casing gets you four of the five and you'll want to special-case the fifth:

const CLAIM_TYPE_LABELS = {
medical: 'Medical',
dental: 'Dental',
rx: 'Rx',
vision: 'Vision',
facility: 'Facility',
};

const claimTypeLabel = (type) =>
CLAIM_TYPE_LABELS[type?.name] ?? 'Unknown';

Match on name rather than type_id if you want your code to stay readable; the two are equivalent and always travel together.

What facility means

Four of the five names are self-explanatory. facility is the one worth a note: it means facility-billed care — typically an inpatient hospital stay — as opposed to a professional claim billed by an individual provider.

It's the rarest of the five by a wide margin. Whether you surface it as its own category, relabel it something like "Hospital", or fold it into Medical for member-facing copy is a presentation decision on your side. We'd just recommend not showing the bare word facility to a member without context.

Field naming

The REST API emits type_id in snake_case, matching the rest of the API. If you're seeing typeId, something in your own stack is converting keys to camelCase — worth confirming before you key a lookup table off the field name.

Prescription type

Claim lines carry a separate and unrelated prescription_type_id / prescription_type_str pair, which describes whether a prescription is generic or brand:

prescription_type_strprescription_type_id
generic1
brand2

Like claim type, it's nullable, and it appears on the claim line rather than the claim.